diff --git a/Jenkinsfile b/Jenkinsfile index 1ab8edc5cc6893467c0899840c921efe0f1e550e..8377babe503d988ed3b9a0176e984a541601821e 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -78,11 +78,11 @@ pipeline { } } } -// post { -// always{ -// junit testResults: 'alfa-client/test-report.xml', skipPublishingChecks: true -// } -// } + post { + always{ + junit testResults: 'alfa-client/test-report.xml', skipPublishingChecks: true + } + } } stage('Build and push client container') { @@ -144,11 +144,6 @@ pipeline { sh 'mvn --no-transfer-progress -s $MAVEN_SETTINGS sonar:sonar' } } - dir('alfa-xdomea'){ - withSonarQubeEnv('sonarqube-ozg-sh'){ - sh 'mvn --no-transfer-progress -s $MAVEN_SETTINGS sonar:sonar' - } - } } catch (Exception e) { unstable("SonarQube failed") @@ -197,7 +192,7 @@ pipeline { } } - stage('Test, build and deploy Helm Chart') { + stage('Test, build and deploy Alfa Helm Chart') { steps { script { FAILED_STAGE=env.STAGE_NAME @@ -209,7 +204,27 @@ pipeline { sh "helm package --version=${HELM_CHART_VERSION} ." - deployHelmChart(HELM_CHART_VERSION) + deployHelmChart(HELM_CHART_VERSION, "alfa") + } + } + } + } + + stage('Test, build and deploy Alfa-Client Helm Chart') { + steps { + script { + dir('alfa-client') { + FAILED_STAGE=env.STAGE_NAME + HELM_CHART_VERSION = generateHelmChartVersion() + + sh "./run_helm_test.sh" + + dir('src/main/helm') { + + sh "helm package --version=${HELM_CHART_VERSION} ." + + deployHelmChart(HELM_CHART_VERSION, "alfa-client") + } } } } @@ -297,13 +312,13 @@ pipeline { } } -Void deployHelmChart(String helmChartVersion) { +Void deployHelmChart(String helmChartVersion, String app ) { withCredentials([usernamePassword(credentialsId: 'jenkins-nexus-login', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]){ if (isReleaseBranch()) { - result = sh script: '''curl -u $USERNAME:$PASSWORD https://nexus.ozg-sh.de/service/rest/v1/components?repository=ozg-base-apps -F file=@alfa-'''+helmChartVersion+'''.tgz''', returnStdout: true + result = sh script: '''curl -u $USERNAME:$PASSWORD https://nexus.ozg-sh.de/service/rest/v1/components?repository=ozg-base-apps -F file=@'''+app+'''-'''+helmChartVersion+'''.tgz''', returnStdout: true } else { - result = sh script: '''curl -u $USERNAME:$PASSWORD https://nexus.ozg-sh.de/service/rest/v1/components?repository=ozg-base-apps-snapshot -F file=@alfa-'''+helmChartVersion+'''.tgz''', returnStdout: true + result = sh script: '''curl -u $USERNAME:$PASSWORD https://nexus.ozg-sh.de/service/rest/v1/components?repository=ozg-base-apps-snapshot -F file=@'''+app+'''-'''+helmChartVersion+'''.tgz''', returnStdout: true } if (result != '') { @@ -403,6 +418,7 @@ String getElementAccessToken() { Void setNewDevVersion() { setNewGitopsVersion("dev") + } Void setNewTestVersion() { @@ -412,16 +428,20 @@ Void setNewTestVersion() { Void setNewGitopsVersion(String environment) { def envFile = "${environment}/application/values/alfa-values.yaml" def commitMessage = "jenkins rollout ${environment} alfa version ${IMAGE_TAG}"; - setNewGitopsVersion(envFile, commitMessage); + setNewAlfaGitopsVersion(envFile, commitMessage); + + envFile = "${environment}/application/values/alfa-client-values.yaml" + commitMessage = "jenkins rollout ${environment} alfa-client version ${IMAGE_TAG}"; + setNewAlfaClientGitopsVersion(envFile, commitMessage); } Void setNewBarrierefreiheitVersion() { def envFile = "dev/namespace/namespaces/by-barrierefreiheit-dev.yaml" def commitMessage = "jenkins rollout ${IMAGE_TAG} for Barrierefreiheit Dev" - setNewGitopsVersion(envFile, commitMessage); + setNewAlfaGitopsVersion(envFile, commitMessage); } -Void setNewGitopsVersion(String envFile, String commitMessage) { +Void setNewAlfaGitopsVersion(String envFile, String commitMessage) { dir("gitops") { def envVersions = readYaml file: envFile @@ -437,6 +457,22 @@ Void setNewGitopsVersion(String envFile, String commitMessage) { } } +Void setNewAlfaClientGitopsVersion(String envFile, String commitMessage) { + dir("gitops") { + def envVersions = readYaml file: envFile + + envVersions.alfa_client.image.tag = IMAGE_TAG + envVersions.alfa_client.helm.version = HELM_CHART_VERSION + + writeYaml file: envFile, data: envVersions, overwrite: true + + if (hasValuesFileChanged(envFile)) { + sh "git add ${envFile}" + sh "git commit -m '${commitMessage}'" + } + } +} + String getCommitHash() { return "-${env.GIT_COMMIT.take(7)}"; } diff --git a/alfa-client/.prettierignore b/alfa-client/.prettierignore index d84b2ec3f78f92fcf813b45bce1a9b5c5c6c3f56..ee7824bd9c6d18d685c77479a451c9554c111e9d 100644 --- a/alfa-client/.prettierignore +++ b/alfa-client/.prettierignore @@ -5,3 +5,5 @@ node_modules packages/workspace/src/generators/**/files/**/*.json /.nx/cache .angular + +/.nx/workspace-data \ No newline at end of file diff --git a/alfa-client/.prettierrc b/alfa-client/.prettierrc index cccd5bd3954bdb6013e495c14d963cf6dd7b1e74..a938a8601da77934caa995a32d3fb5916f7c473e 100644 --- a/alfa-client/.prettierrc +++ b/alfa-client/.prettierrc @@ -12,7 +12,7 @@ "htmlWhitespaceSensitivity": "css", "vueIndentScriptAndStyle": false, "proseWrap": "preserve", - "printWidth": 100, + "printWidth": 130, "insertPragma": false, "requirePragma": false, "tabWidth": 2, diff --git a/alfa-client/apps/admin-e2e/src/components/benutzer/benutzer.e2e.component.ts b/alfa-client/apps/admin-e2e/src/components/benutzer/benutzer.e2e.component.ts index 8ebcdfe95dd85b0788e1848725b2ac353450099d..474b719fef02f95377505bb0d34c85df693b46ae 100644 --- a/alfa-client/apps/admin-e2e/src/components/benutzer/benutzer.e2e.component.ts +++ b/alfa-client/apps/admin-e2e/src/components/benutzer/benutzer.e2e.component.ts @@ -1,10 +1,8 @@ -export class PostfachE2EComponent { - private readonly benutzerTabelle: string = ''; - private readonly benutzerHinzufuegenButton: string = ''; +import { exist } from '../../support/cypress.util'; - public getUserTable(): any { - return cy.getTestElement(this.benutzerTabelle); - } +export class BenutzerE2EComponent { + private readonly benutzerHinzufuegenButton: string = 'add-user-button'; + private readonly userEntry: string = 'user-entry-'; public getHinzufuegenButton(): Cypress.Chainable<Element> { return cy.getTestElement(this.benutzerHinzufuegenButton); @@ -14,5 +12,14 @@ export class PostfachE2EComponent { this.getHinzufuegenButton().click(); } - public tableContains(compare: string): void {} + public getUserEntry(user: string): Cypress.Chainable<Element> { + user = this.userEntry + user; + return cy.getTestElement(user); + } + + public stringExistsInUserEntry(phrase: string, user: string): void { + this.getUserEntry(user).within(() => { + exist(cy.contains(phrase)); + }); + } } diff --git a/alfa-client/apps/admin-e2e/src/components/buildinfo/buildinfo.e2e.component.ts b/alfa-client/apps/admin-e2e/src/components/buildinfo/buildinfo.e2e.component.ts index 5bede900428396575e45c322fe1357c7ac9d3a3a..e6521431d3c69f85ff9dfc9aa060605a0f38e349 100644 --- a/alfa-client/apps/admin-e2e/src/components/buildinfo/buildinfo.e2e.component.ts +++ b/alfa-client/apps/admin-e2e/src/components/buildinfo/buildinfo.e2e.component.ts @@ -1,9 +1,9 @@ export class BuildInfoE2EComponent { - private readonly locatorVersion: string = 'build-version'; + private readonly locatorBuildInfo: string = 'build-info'; private readonly locatorBuildTime: string = 'build-time'; - public getVersion() { - return cy.getTestElement(this.locatorVersion); + public getBuildInfo() { + return cy.getTestElement(this.locatorBuildInfo); } public getBuildTime() { diff --git a/alfa-client/apps/admin-e2e/src/components/postfach/postfach.e2e.component.ts b/alfa-client/apps/admin-e2e/src/components/postfach/postfach.e2e.component.ts index ee1c8dfa6b0f77f723d0ce4a5dacd699e816fff8..c0b20783ba77f5247d66f50e4c1b21cab2c4271e 100644 --- a/alfa-client/apps/admin-e2e/src/components/postfach/postfach.e2e.component.ts +++ b/alfa-client/apps/admin-e2e/src/components/postfach/postfach.e2e.component.ts @@ -24,7 +24,7 @@ export class PostfachE2EComponent { this.getSaveButton().click(); } - public signatureContains(compare: string): void { + public signatureIs(compare: string): void { haveValue(this.getSignaturText(), compare); } diff --git a/alfa-client/apps/admin-e2e/src/components/user-profile/current-user-profile.component.e2e.ts b/alfa-client/apps/admin-e2e/src/components/user-profile/current-user-profile.component.e2e.ts index cec3ba5cd2928c558706cab247d47efcebff6e4b..8456a21b82e3976f16f597e35080c00910d8f7b0 100644 --- a/alfa-client/apps/admin-e2e/src/components/user-profile/current-user-profile.component.e2e.ts +++ b/alfa-client/apps/admin-e2e/src/components/user-profile/current-user-profile.component.e2e.ts @@ -1,7 +1,7 @@ import { UserProfileE2EComponent } from './user-profile.component.e2e'; export class CurrentUserProfileE2EComponent { - private readonly locatorUserIconButton: string = 'popup-button'; + private readonly locatorUserIconButton: string = 'popup-button-content'; private readonly locatorLogoutButton: string = 'popup-logout-button'; private readonly locatorRoot: string = 'current-user'; diff --git a/alfa-client/apps/admin-e2e/src/e2e/main-tests/app/buildinfo.cy.ts b/alfa-client/apps/admin-e2e/src/e2e/main-tests/app/buildinfo.cy.ts index 3fb3a30c19fe045b240c58324ed467b57c2c0831..aa93008afd7b2a61765af4cfc88fc712fe691dec 100644 --- a/alfa-client/apps/admin-e2e/src/e2e/main-tests/app/buildinfo.cy.ts +++ b/alfa-client/apps/admin-e2e/src/e2e/main-tests/app/buildinfo.cy.ts @@ -14,8 +14,8 @@ describe('Buildinfo', () => { }); describe('get buildinfo', () => { - it('should show version', () => { - exist(buildInfo.getVersion()); + it('should show build info', () => { + exist(buildInfo.getBuildInfo()); header.getCurrentUserProfile().logout(); }); }); diff --git a/alfa-client/apps/admin-e2e/src/e2e/main-tests/benutzer_rollen/benutzer_rollen.cy.ts b/alfa-client/apps/admin-e2e/src/e2e/main-tests/benutzer_rollen/benutzer_rollen.cy.ts index 6121e86446152b79b321b7052f42046e602f2d88..d1c52395edf3286ee593f72c2f5cc5c752a7de4b 100644 --- a/alfa-client/apps/admin-e2e/src/e2e/main-tests/benutzer_rollen/benutzer_rollen.cy.ts +++ b/alfa-client/apps/admin-e2e/src/e2e/main-tests/benutzer_rollen/benutzer_rollen.cy.ts @@ -1,30 +1,40 @@ -import { HeaderE2EComponent } from '../../../page-objects/header.po'; -import { MainPage } from '../../../page-objects/main.po'; -import { exist } from '../../../support/cypress.util'; -import { loginAsAriane } from '../../../support/user-util'; +import { MainPage } from 'apps/admin-e2e/src/page-objects/main.po'; +import { exist } from 'apps/admin-e2e/src/support/cypress.util'; +import { loginAsAriane } from 'apps/admin-e2e/src/support/user-util'; +import { BenutzerE2EComponent } from 'apps/admin-e2e/src/components/benutzer/benutzer.e2e.component'; const mainPage: MainPage = new MainPage(); -const header: HeaderE2EComponent = mainPage.getHeader(); +const benutzerPage: BenutzerE2EComponent = new BenutzerE2EComponent(); +const role1: string = 'VERWALTUNG_USER'; +const role2: string = 'VERWALTUNG_LOESCHEN'; +const role3: string = 'VERWALTUNG_POSTSTELLE'; +const orga1: string = 'Ordnungsamt'; +const orga2: string = 'Landesamt für Denkmalpflege'; +const orga3: string = 'Wirtschaftsförderung'; +const orga_none: string = 'keine zuständige Stelle zugewiesen'; +const mail1: string = 'peter.von.der.post@ozg-sh.de'; describe('Benutzer und Rollen', () => { before(() => { loginAsAriane(); }); - it('should display logo', () => { - // waitForSpinnerToDisappear(); + it('should open Benutzer tab and show Hinzufuegen button', () => { + mainPage.clickBenutzerTab(); - exist(header.getLogo()); + exist(benutzerPage.getHinzufuegenButton()); }); - it('should show Benutzer tab', () => { - // waitForSpinnerToDisappear(); - //klick auf Benutzer tab - //Benutzer hinzufügen Button ist sichtbar - //Tabelle ist sichtbar - }); - - it('should show existing users in table', () => { - //Inhalt der Tabelle kontrollieren + it('should show users and attributes in table', () => { + exist(benutzerPage.getUserEntry('ariane')); + benutzerPage.stringExistsInUserEntry(role1, 'dorothea'); + benutzerPage.stringExistsInUserEntry(orga1, 'ludwig'); + benutzerPage.stringExistsInUserEntry(role1, 'zelda'); + benutzerPage.stringExistsInUserEntry(role2, 'zelda'); + benutzerPage.stringExistsInUserEntry(orga2, 'zelda'); + benutzerPage.stringExistsInUserEntry(orga3, 'zelda'); + benutzerPage.stringExistsInUserEntry(orga_none, 'adelheit'); + benutzerPage.stringExistsInUserEntry(mail1, 'peter'); + benutzerPage.stringExistsInUserEntry(role3, 'peter'); }); }); diff --git a/alfa-client/apps/admin-e2e/src/e2e/main-tests/postfach/signatur.cy.ts b/alfa-client/apps/admin-e2e/src/e2e/main-tests/postfach/signatur.cy.ts index 6a40a4349bbc5f2dc0c3eaf6f9724536f74150f5..884093ac7af1a52e3485bd8133a431515fa3f095 100644 --- a/alfa-client/apps/admin-e2e/src/e2e/main-tests/postfach/signatur.cy.ts +++ b/alfa-client/apps/admin-e2e/src/e2e/main-tests/postfach/signatur.cy.ts @@ -15,18 +15,21 @@ describe('Signatur', () => { loginAsAriane(); }); - it('should show Signatur input', () => { + it('should clear current signature0', () => { waitForSpinnerToDisappear(); - exist(postfachTab.getSignaturText()); postfachTab.clearSignatur(); + postfachTab.signatureIs(''); + + postfachTab.saveSignatur(); + }); + + it('should show Signatur input', () => { postfachTab.setSignatur(signaturText); postfachTab.saveSignatur(); - postfachTab.signatureContains(signaturText); + postfachTab.signatureIs(signaturText); postfachTab.scrollbarIsPresent(); - - header.getCurrentUserProfile().logout(); }); }); diff --git a/alfa-client/apps/admin-e2e/src/page-objects/main.po.ts b/alfa-client/apps/admin-e2e/src/page-objects/main.po.ts index 8a32afeb1969570dd1dd3fce5a954aa61797f9ad..14c867e8b121a71674c1ef602bf52b8a5234ed31 100644 --- a/alfa-client/apps/admin-e2e/src/page-objects/main.po.ts +++ b/alfa-client/apps/admin-e2e/src/page-objects/main.po.ts @@ -4,6 +4,8 @@ import { HeaderE2EComponent } from './header.po'; export class MainPage { private readonly buildInfo: BuildInfoE2EComponent = new BuildInfoE2EComponent(); private readonly header: HeaderE2EComponent = new HeaderE2EComponent(); + private readonly benutzerTab: string = 'nav-item-Benutzer__Rollen'; + private readonly postfachTab: string = 'nav-item-Postfach'; public getBuildInfo(): BuildInfoE2EComponent { return this.buildInfo; @@ -12,6 +14,14 @@ export class MainPage { public getHeader(): HeaderE2EComponent { return this.header; } + + public getBenutzerTab(): Cypress.Chainable<Element> { + return cy.getTestElement(this.benutzerTab); + } + + public clickBenutzerTab(): void { + this.getBenutzerTab().click(); + } } export function waitForSpinnerToDisappear(): boolean { diff --git a/alfa-client/apps/admin-e2e/src/support/angular.util.ts b/alfa-client/apps/admin-e2e/src/support/angular.util.ts index 6a6efc19a4f2a233521c5d4fb4ae664f38567508..5d899809fc318f75be42b28b7df125b2d9507d5f 100644 --- a/alfa-client/apps/admin-e2e/src/support/angular.util.ts +++ b/alfa-client/apps/admin-e2e/src/support/angular.util.ts @@ -4,7 +4,7 @@ export const TOGGLE_ELEMENT: string = 'mat-slide-toggle'; enum AngularClassesE2E { MAT_CHECKED = 'mat-mdc-slide-toggle-checked', - MAT_BUTTONG_TOGGLE_CHECKED = 'mat-button-toggle-checked', + ODS_BUTTON_TOGGLE_CHECKED = 'ods-button-toggle-checked', MAT_FOCUSED = 'mat-focused', CDK_KEYBOARD_FOCUSED = 'cdk-keyboard-focused', MAT_BADGE_HIDDEN = 'mat-badge-hidden', @@ -28,12 +28,12 @@ export function isNotChecked(element: any) { notContainClass(element, AngularClassesE2E.MAT_CHECKED); } -export function isButtonToggleChecked(element: any) { - containClass(element, AngularClassesE2E.MAT_BUTTONG_TOGGLE_CHECKED); +export function isOdsButtonToggleChecked(element: any) { + containClass(element, AngularClassesE2E.ODS_BUTTON_TOGGLE_CHECKED); } -export function isButtonToggleNotChecked(element: any) { - notContainClass(element, AngularClassesE2E.MAT_BUTTONG_TOGGLE_CHECKED); +export function isOdsButtonToggleNotChecked(element: any) { + notContainClass(element, AngularClassesE2E.ODS_BUTTON_TOGGLE_CHECKED); } export function getFormField(element: any) { diff --git a/alfa-client/apps/admin/project.json b/alfa-client/apps/admin/project.json index e113da51b11ba0f7afa5d2a0e194ba9aea7a1e82..a823b06f67d3c4bea4fa758699ea1583d1a00c68 100644 --- a/alfa-client/apps/admin/project.json +++ b/alfa-client/apps/admin/project.json @@ -8,24 +8,22 @@ "targets": { "build": { "executor": "@angular-devkit/build-angular:browser", - "outputs": [ - "{options.outputPath}" - ], + "outputs": ["{options.outputPath}"], "options": { "outputPath": "dist/apps/admin", "index": "apps/admin/src/index.html", "main": "apps/admin/src/main.ts", - "polyfills": [ - "zone.js" - ], + "polyfills": ["zone.js"], "tsConfig": "apps/admin/tsconfig.app.json", "assets": [ - "apps/admin/src/favicon.ico", - "apps/admin/src/assets" - ], - "styles": [ - "apps/admin/src/styles.scss" + "apps/admin/src/assets", + { + "input": "apps/admin/src/favicon", + "glob": "**/*", + "output": "" + } ], + "styles": ["apps/admin/src/styles.scss"], "scripts": [], "stylePreprocessorOptions": { "includePaths": [ @@ -87,15 +85,11 @@ }, "lint": { "executor": "@nx/eslint:lint", - "outputs": [ - "{options.outputFile}" - ] + "outputs": ["{options.outputFile}"] }, "test": { "executor": "@nx/jest:jest", - "outputs": [ - "{workspaceRoot}/coverage/{projectRoot}" - ], + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], "options": { "jestConfig": "apps/admin/jest.config.ts" } @@ -108,22 +102,16 @@ }, "container": { "executor": "@nx-tools/nx-container:build", - "dependsOn": [ - "build" - ], + "dependsOn": ["build"], "options": { "engine": "docker", "push": false, "metadata": { - "images": [ - "docker.ozg-sh.de/admin-client" - ], + "images": ["docker.ozg-sh.de/admin-client"], "load": true, - "tags": [ - "build-latest" - ] + "tags": ["build-latest"] } } } } -} \ No newline at end of file +} diff --git a/alfa-client/apps/admin/src/app/app.component.html b/alfa-client/apps/admin/src/app/app.component.html index aec8d53fbb5c0848c05817014a197e6fbec5ccdf..8fef349aa6bea31dfb841c6a07597871affb55cc 100644 --- a/alfa-client/apps/admin/src/app/app.component.html +++ b/alfa-client/apps/admin/src/app/app.component.html @@ -11,33 +11,32 @@ > <ods-admin-logo-icon /> </a> - <user-profile-button-container - data-test-id="user-profile-button" - ></user-profile-button-container> + <user-profile-button-container data-test-id="user-profile-button"></user-profile-button-container> </header> <div class="flex h-screen w-full justify-center overflow-y-auto"> <ods-navbar data-test-id="navigation"> <ng-container *ngIf="apiRoot | hasLink: ApiRootLinkRel.CONFIGURATION"> - <!-- <ods-nav-item caption="Organisationseinheiten" to="/organisationseinheiten">--> - <!-- <ods-orga-unit-icon icon />--> - <!-- </ods-nav-item>--> - <ods-nav-item caption="Postfach" to="/postfach"> + <ods-nav-item caption="Benutzer & Rollen" path="/benutzer_und_rollen"> + <ods-users-icon class="stroke-text" icon /> + </ods-nav-item> + <hr /> + <ods-nav-item caption="Postfach" path="/postfach"> <ods-mailbox-icon icon /> </ods-nav-item> + <ods-nav-item caption="Organisationseinheiten" path="/organisationseinheiten"> + <ods-orga-unit-icon icon /> + </ods-nav-item> </ng-container> </ods-navbar> <main class="flex-1 overflow-y-auto bg-white px-6 py-4"> <router-outlet - *ngIf=" - apiRoot | hasLink: ApiRootLinkRel.CONFIGURATION; - else configurationResourceLinkNotAvailable - " + *ngIf="apiRoot | hasLink: ApiRootLinkRel.CONFIGURATION; else configurationResourceLinkNotAvailable" data-test-id="router-outlet" ></router-outlet> <ng-template #configurationResourceLinkNotAvailable> <unavailable-page></unavailable-page> </ng-template> </main> + <alfa-build-info *ngIf="apiRoot" [apiRoot]="apiRoot" data-test-id="build-info" /> </div> - <footer data-test-id="build-version">Version: {{ apiRoot.version }}</footer> </ng-container> diff --git a/alfa-client/apps/admin/src/app/app.component.spec.ts b/alfa-client/apps/admin/src/app/app.component.spec.ts index d10cfd74e6f7e55e727bf6779c494f0f5311f8b7..818658ddd7ad7ec20ab2e1e48086d50628123f3e 100644 --- a/alfa-client/apps/admin/src/app/app.component.spec.ts +++ b/alfa-client/apps/admin/src/app/app.component.spec.ts @@ -1,9 +1,6 @@ import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared'; -import { - HasLinkPipe, - createEmptyStateResource, - createStateResource, -} from '@alfa-client/tech-shared'; +import { BuildInfoComponent } from '@alfa-client/common-lib'; +import { HasLinkPipe, createEmptyStateResource, createStateResource } from '@alfa-client/tech-shared'; import { Mock, dispatchEventFromFixture, @@ -20,9 +17,9 @@ import { NavItemComponent, NavbarComponent, OrgaUnitIconComponent, + UsersIconComponent, } from '@ods/system'; import { AuthenticationService } from 'authentication'; -import { NavigationComponent } from 'libs/admin/settings/src/lib/navigation/navigation.component'; import { createApiRootResource } from 'libs/api-root-shared/test/api-root'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { MockComponent, MockDirective } from 'ng-mocks'; @@ -36,7 +33,7 @@ describe('AppComponent', () => { let fixture: ComponentFixture<AppComponent>; const adminHeaderSelector: string = getDataTestIdOf('admin-header'); - const buildVersionSelector: string = getDataTestIdOf('build-version'); + const buildInfoSelector: string = getDataTestIdOf('build-info'); const userProfileButtonSelector: string = getDataTestIdOf('user-profile-button'); const navigationSelector: string = getDataTestIdOf('navigation'); const logoLink: string = getDataTestIdOf('logo-link'); @@ -54,14 +51,15 @@ describe('AppComponent', () => { await TestBed.configureTestingModule({ declarations: [ AppComponent, - MockComponent(NavigationComponent), MockComponent(AdminLogoIconComponent), MockComponent(OrgaUnitIconComponent), + MockComponent(UsersIconComponent), MockComponent(MailboxIconComponent), MockComponent(UserProfileButtonContainerComponent), MockComponent(UnavailablePageComponent), MockComponent(NavbarComponent), MockComponent(NavItemComponent), + MockComponent(BuildInfoComponent), HasLinkPipe, MockDirective(RouterOutlet), ], @@ -160,9 +158,7 @@ describe('AppComponent', () => { describe('navigation', () => { beforeEach(() => {}); it('should show links if configuration link exists', () => { - component.apiRootStateResource$ = of( - createStateResource(createApiRootResource([ApiRootLinkRel.CONFIGURATION])), - ); + component.apiRootStateResource$ = of(createStateResource(createApiRootResource([ApiRootLinkRel.CONFIGURATION]))); fixture.detectChanges(); const navbarElement: HTMLElement = getElementFromFixture(fixture, navigationSelector); @@ -181,17 +177,15 @@ describe('AppComponent', () => { }); describe('build version', () => { - const apiResource: ApiRootResource = createApiRootResource(); - - beforeEach(() => { - component.apiRootStateResource$ = of(createStateResource(apiResource)); + it('should not be rendered if api root not loaded', () => { + notExistsAsHtmlElement(fixture, buildInfoSelector); }); it('should show after apiRoot loaded', () => { + component.apiRootStateResource$ = of(createStateResource(createApiRootResource())); fixture.detectChanges(); - const buildVersionElement = getElementFromFixture(fixture, buildVersionSelector); - expect(buildVersionElement.textContent.trim()).toEqual(`Version: ${apiResource.version}`); + existsAsHtmlElement(fixture, buildInfoSelector); }); }); @@ -199,9 +193,7 @@ describe('AppComponent', () => { beforeEach(() => {}); it('should exist if configuration resource available', () => { - component.apiRootStateResource$ = of( - createStateResource(createApiRootResource([ApiRootLinkRel.CONFIGURATION])), - ); + component.apiRootStateResource$ = of(createStateResource(createApiRootResource([ApiRootLinkRel.CONFIGURATION]))); fixture.detectChanges(); diff --git a/alfa-client/apps/admin/src/app/app.module.ts b/alfa-client/apps/admin/src/app/app.module.ts index 0c4fd5127eaa8546579fdd4268244081b370da46..05eb114fe4b711dbcf2f993a4f7cddf41e0d2d11 100644 --- a/alfa-client/apps/admin/src/app/app.module.ts +++ b/alfa-client/apps/admin/src/app/app.module.ts @@ -1,9 +1,11 @@ import { AdminSettingsModule } from '@admin-client/admin-settings'; import { ApiRootModule } from '@alfa-client/api-root-shared'; +import { BuildInfoComponent } from '@alfa-client/common-lib'; import { EnvironmentModule } from '@alfa-client/environment-shared'; import { TechSharedModule } from '@alfa-client/tech-shared'; -import { CommonModule } from '@angular/common'; -import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http'; +import { CommonModule, registerLocaleData } from '@angular/common'; +import { HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'; +import localeDe from '@angular/common/locales/de'; import { NgModule } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { BrowserModule } from '@angular/platform-browser'; @@ -15,46 +17,53 @@ import { StoreModule } from '@ngrx/store'; import { StoreDevtoolsModule } from '@ngrx/store-devtools'; import { AdminLogoIconComponent, + DropdownMenuButtonComponent, + DropdownMenuComponent, LogoutIconComponent, MailboxIconComponent, NavItemComponent, NavbarComponent, OrgaUnitIconComponent, - PopupComponent, - PopupListItemComponent, + UsersIconComponent, } from '@ods/system'; import { OAuthModule } from 'angular-oauth2-oidc'; import { HttpUnauthorizedInterceptor } from 'libs/authentication/src/lib/http-unauthorized.interceptor'; import { UserProfileButtonContainerComponent } from '../common/user-profile-button-container/user-profile.button-container.component'; import { environment } from '../environments/environment'; -import { OrganisationseinheitPageComponent } from '../pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component'; +import { OrganisationsEinheitFormPageComponent } from '../pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component'; +import { OrganisationsEinheitPageComponent } from '../pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component'; import { PostfachPageComponent } from '../pages/postfach/postfach-page/postfach-page.component'; import { UnavailablePageComponent } from '../pages/unavailable/unavailable-page/unavailable-page.component'; +import { UserRolesPageComponent } from '../pages/users-roles/user-roles-page/user-roles-page.component'; import { AppComponent } from './app.component'; import { appRoutes } from './app.routes'; +registerLocaleData(localeDe); + @NgModule({ declarations: [ AppComponent, PostfachPageComponent, - OrganisationseinheitPageComponent, + UserRolesPageComponent, + OrganisationsEinheitPageComponent, + OrganisationsEinheitFormPageComponent, UserProfileButtonContainerComponent, UnavailablePageComponent, ], imports: [ CommonModule, AdminLogoIconComponent, - PopupComponent, - PopupListItemComponent, + DropdownMenuComponent, + DropdownMenuButtonComponent, NavItemComponent, NavbarComponent, OrgaUnitIconComponent, LogoutIconComponent, + UsersIconComponent, MailboxIconComponent, RouterModule.forRoot(appRoutes), BrowserModule, BrowserAnimationsModule, - HttpClientModule, ApiRootModule, EnvironmentModule, environment.production ? [] : StoreDevtoolsModule.instrument({ connectInZone: true }), @@ -70,6 +79,7 @@ import { appRoutes } from './app.routes'; }, }), TechSharedModule, + BuildInfoComponent, ], providers: [ { @@ -77,6 +87,7 @@ import { appRoutes } from './app.routes'; useClass: HttpUnauthorizedInterceptor, multi: true, }, + provideHttpClient(withInterceptorsFromDi()), ], bootstrap: [AppComponent], }) diff --git a/alfa-client/apps/admin/src/app/app.routes.ts b/alfa-client/apps/admin/src/app/app.routes.ts index fdff512b76c4e15d4026c8c250cce90357cf98be..4225458cdaeb73330edbafa34f76c46209ebfc27 100644 --- a/alfa-client/apps/admin/src/app/app.routes.ts +++ b/alfa-client/apps/admin/src/app/app.routes.ts @@ -1,5 +1,8 @@ import { Route } from '@angular/router'; +import { OrganisationsEinheitFormPageComponent } from '../pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component'; +import { OrganisationsEinheitPageComponent } from '../pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component'; import { PostfachPageComponent } from '../pages/postfach/postfach-page/postfach-page.component'; +import { UserRolesPageComponent } from '../pages/users-roles/user-roles-page/user-roles-page.component'; export const appRoutes: Route[] = [ { @@ -12,9 +15,19 @@ export const appRoutes: Route[] = [ component: PostfachPageComponent, title: 'Admin | Postfach', }, - // { - // path: 'organisationseinheiten', - // component: OrganisationseinheitPageComponent, - // title: 'Admin | Organisationseinheiten', - // }, + { + path: 'benutzer_und_rollen', + component: UserRolesPageComponent, + title: 'Admin | Benutzer & Rollen', + }, + { + path: 'organisationseinheiten', + component: OrganisationsEinheitPageComponent, + title: 'Admin | Organisationseinheiten', + }, + { + path: 'organisationseinheiten/:organisationsEinheitUrl', + component: OrganisationsEinheitFormPageComponent, + title: 'Admin | Organisationseinheit', + }, ]; diff --git a/alfa-client/apps/admin/src/common/user-profile-button-container/user-profile-button-container.component.html b/alfa-client/apps/admin/src/common/user-profile-button-container/user-profile-button-container.component.html index 436ac2a76728c0b0b9b9da7d5e67d8bc0765a98d..7e40d215fa180350f111fabda9499e174119cab1 100644 --- a/alfa-client/apps/admin/src/common/user-profile-button-container/user-profile-button-container.component.html +++ b/alfa-client/apps/admin/src/common/user-profile-button-container/user-profile-button-container.component.html @@ -1,4 +1,4 @@ -<ods-popup buttonClass="rounded-full"> +<ods-dropdown-menu buttonClass="rounded-full"> <div button-content role="img" @@ -8,11 +8,11 @@ {{ currentUserInitials }} </p> </div> - <ods-popup-list-item + <ods-dropdown-menu-button caption="Abmelden" (itemClicked)="authenticationService.logout()" data-test-id="popup-logout-button" > <ods-logout-icon icon /> - </ods-popup-list-item> -</ods-popup> + </ods-dropdown-menu-button> +</ods-dropdown-menu> diff --git a/alfa-client/apps/admin/src/common/user-profile-button-container/user-profile-button-container.component.spec.ts b/alfa-client/apps/admin/src/common/user-profile-button-container/user-profile-button-container.component.spec.ts index 70c324948070f3e79d92bf51dca0f8f8f577d821..cc8b3f4838a8628642837db808ba47fbde89053b 100644 --- a/alfa-client/apps/admin/src/common/user-profile-button-container/user-profile-button-container.component.spec.ts +++ b/alfa-client/apps/admin/src/common/user-profile-button-container/user-profile-button-container.component.spec.ts @@ -6,7 +6,11 @@ import { } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; -import { LogoutIconComponent, PopupComponent, PopupListItemComponent } from '@ods/system'; +import { + DropdownMenuButtonComponent, + DropdownMenuComponent, + LogoutIconComponent, +} from '@ods/system'; import { AuthenticationService } from 'authentication'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { MockComponent } from 'ng-mocks'; @@ -26,8 +30,8 @@ describe('UserProfileButtonContainerComponent', () => { declarations: [UserProfileButtonContainerComponent], imports: [ RouterTestingModule, - MockComponent(PopupComponent), - MockComponent(PopupListItemComponent), + MockComponent(DropdownMenuComponent), + MockComponent(DropdownMenuButtonComponent), MockComponent(LogoutIconComponent), ], providers: [ diff --git a/alfa-client/apps/admin/src/favicon/apple-touch-icon.png b/alfa-client/apps/admin/src/favicon/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d1e03d655a5aa8d259aacdf45f1fcf28a09251be Binary files /dev/null and b/alfa-client/apps/admin/src/favicon/apple-touch-icon.png differ diff --git a/alfa-client/apps/admin/src/favicon/favicon.svg b/alfa-client/apps/admin/src/favicon/favicon.svg new file mode 100644 index 0000000000000000000000000000000000000000..f610ada33f00495a5ce2e6e6f8f1936de57dec4c --- /dev/null +++ b/alfa-client/apps/admin/src/favicon/favicon.svg @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg id="Ebene_1" data-name="Ebene 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 250.45 291.68"> + <defs> + <style> + .cls-1 { + clip-path: url(#clippath-4); + } + + .cls-2 { + fill: none; + } + + .cls-3 { + clip-path: url(#clippath-1); + } + + .cls-4 { + clip-path: url(#clippath-5); + } + + .cls-5 { + clip-path: url(#clippath-3); + } + + .cls-6 { + fill: url(#Unbenannter_Verlauf_11); + } + + .cls-7 { + clip-path: url(#clippath-2); + } + + .cls-8 { + clip-path: url(#clippath); + } + + .cls-9 { + fill: #003064; + } + </style> + <linearGradient id="Unbenannter_Verlauf_11" data-name="Unbenannter Verlauf 11" x1="149.23" y1="174.09" x2="250.45" y2="174.09" gradientUnits="userSpaceOnUse"> + <stop offset="0" stop-color="#003064"/> + <stop offset="1" stop-color="#d4004b"/> + </linearGradient> + <clipPath id="clippath"> + <path class="cls-2" d="M182.48,248.08c0,21.25-17.11,38.59-38.15,38.59s-36.9-15.93-38.04-36.14c0-31.09-21.39-57.24-50.08-64.28,12.79-4.17,22.94-14.36,27.02-27.3,6.96,29.06,32.78,50.65,63.36,50.65,20.1,1.15,35.88,18.03,35.88,38.48Z"/> + </clipPath> + <clipPath id="clippath-1"> + <rect class="cls-2" x="51.21" y="153.95" width="136.27" height="137.73"/> + </clipPath> + <clipPath id="clippath-2"> + <rect class="cls-2" x="51.21" y="153.95" width="136.27" height="137.73"/> + </clipPath> + <clipPath id="clippath-3"> + <path class="cls-2" d="M182.48,43.59c0,20.45-15.75,37.33-35.73,38.48-35.43,0-64.42,28.83-65.33,64.51-.04.61-.04,1.19-.04,1.8-1.1,19.72-17.03,35.26-36.56,36.1h-.15c-.49.04-1.02.04-1.51.04-2.08,0-4.12-.15-6.13-.54-.61-.11-1.21-.23-1.82-.34-1.78-.34-3.48-.84-5.15-1.45-2.12-.8-4.13-1.76-6.06-2.91-.61-.34-1.17-.69-1.7-1.07-.15-.08-.3-.19-.45-.31-.76-.5-1.48-1.03-2.16-1.57-.11-.08-.23-.15-.34-.31-.87-.69-1.7-1.42-2.5-2.18-.49-.5-.98-1-1.48-1.53-1.67-1.72-3.1-3.6-4.35-5.63-.3-.5-.61-1.03-.91-1.53-.91-1.53-1.7-3.18-2.35-4.86-.68-1.68-1.25-3.45-1.67-5.25-.15-.61-.3-1.19-.38-1.8-.11-.61-.23-1.23-.3-1.84-.19-1.23-.3-2.49-.38-3.75-.04-.57-.04-1.15-.04-1.72,0-.8.04-1.57.08-2.34.08-1.11.19-2.22.34-3.33.11-.88.27-1.76.45-2.64.04-.08.04-.15.08-.19.15-.88.38-1.76.64-2.6.15-.54.34-1.11.53-1.65.19-.57.42-1.19.64-1.76.38-.96.8-1.91,1.25-2.83.34-.73.72-1.42,1.1-2.07.64-1.15,1.36-2.26,2.12-3.33.61-.88,1.25-1.72,1.93-2.53.04-.04.08-.08.11-.11.42-.5.83-.96,1.29-1.42.34-.38.68-.73,1.02-1.07.53-.54,1.06-1.03,1.63-1.49.49-.46.98-.88,1.51-1.26,1.21-1,2.5-1.88,3.82-2.68.83-.5,1.67-.96,2.54-1.38.49-.31,1.02-.54,1.55-.77.38-.19.76-.34,1.17-.5.38-.19.79-.34,1.21-.46,3.33-1.26,6.89-2.03,10.6-2.22h.49c1.14,0,2.27-.04,3.37-.11h.11c34.37-2.07,61.69-30.9,61.69-65.89,1.13-20.33,17.83-36.3,38.04-36.3s38.15,17.34,38.15,38.59Z"/> + </clipPath> + <clipPath id="clippath-4"> + <rect class="cls-2" y="0" width="187.48" height="189.53"/> + </clipPath> + <clipPath id="clippath-5"> + <rect class="cls-2" y="0" width="187.48" height="189.53"/> + </clipPath> + </defs> + <g> + <path class="cls-9" d="M207.42,137.73h-67.63c-8.36,0-15.14-6.86-15.14-15.31s6.78-15.31,15.14-15.31h67.63c8.36,0,15.14,6.86,15.14,15.31s-6.78,15.31-15.14,15.31Z"/> + <path class="cls-6" d="M235.31,189.41h-70.94c-8.36,0-15.14-6.86-15.14-15.31s6.78-15.31,15.14-15.31h70.94c8.36,0,15.14,6.86,15.14,15.31s-6.78,15.31-15.14,15.31Z"/> + </g> + <g class="cls-8"> + <g class="cls-3"> + <g class="cls-7"> + <image width="285" height="288" transform="translate(50.88 153.49) scale(.48)" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARwAAAEgCAYAAABmTMw2AAAACXBIWXMAABcRAAAXEQHKJvM/AAAgAElEQVR4nO19a7RlVXXmXOdWxkj/6ZiXiFEkPih8QAGhqAdInQsGH0AB2hqDVqIC8qYATXqkNbn3RkpMjEEFQRNJJzFt9/ABihp8JffULXC0xUuj6YBoom33r/6XTrozukfX7h9nr73nmmvO9dh7n8c+Z35jnHv3es219j5nfeebc629jymKogCFQqGYArbNegCzwGjrKBze+iaMto7CaOubXvnw3F0wPPcsWHv3jTMYnUKxuDDLpnA2brsT1m+7M7n+5lf/AobnnjXBESkUy4OlIpzVCw6wiiaG9XffqGpHoegAS0M4TcnGYnjuLtj86ic6HJFCsXwYzHoA08DGbXe2IhsAgFEZ81EoFM2xFArH/ORJndhRlaNQtMPCK5yNjABxDKOtb3ZqT6FYNiw84XTtBqlbpVA0x0K7VKOto7B6wZs7tmqg+JenOrapUCwHFlrhHG4ZKPZhAEBVjkLRFAtNODkb/HJwWAlHoWiEhSWc7oO7pjqaFJEpFIuOhSUcdXsUivnDQhKOdFNmcxgvZ+O2uzq0r1AsBxaScLoPFvvoltAUiuXAQi6Ld7WzuLQmlujyuEKRh4VTONPcCaxxIoUiDwtHON2uIMnqBkCXxxWKXCwU4XSqbowZ803gpcvjCkUeFiqG00nsxoRVDakMm1/5c30ioEKRiIVROJ2om0yyAQA4fETdKoUiFQuhcEZbR2H1lQcAmp5KFtFUjaqj4n8/2axfhWLJsBAKZ+NQqW6MkV8cQmVBuG02DukmQIUiBb0nnPGu4gS3JpWE4obYMSgUijh671KZf7V92j2yuRo8Viji6LXCmb4rI6siDR4rFHH0VuFUgeKpIe6CafBYoQijtwqnChRPBWnxHo3lKBRh9JJwNg7dNb3Jze04DoxLoVDI6J1LNVVXKmclq7yK6lYpFDJ6pXDmlmxsfWNg49BHJjMehWIB0CuFs/rKA9NxpRrc4oBR/K+/624sCsUCoTcKZypkk7whMBzQUZWjUPDohcLZOHRX5FEQKSQROc0o0eS5WKpyFAofc69wRltHS7IJPZwmBYE2HZMNgKochYLDXCscN0jc9N6nBARNNwgelyj++b80Go5CsaiYW4UztRWprsiGif9svFdVjkKBMZcKhyebjhVO1FxCfwkBZlU5CkWNuVM4U1E2UyIbAFU5CgXGXCmcONl0oHLakk32c3QMFP/8t5ltFIrFxNwonH4om3yyAQOw8d67M9spFIuJuVA46WTTUOEkNUsgm+TujWdy88E/heHLd6YaUCgWEjNXOHnKpgE3TpVsAruPNZajUMyWcFZfeaBbN6rRnsBQpdJIEzskOTryCIyOPJJiSKFYWMzEpRptHYWNQ3c2vDfKsIfNIRlJ6Uf6NQg5s/in76YNS6FYQExd4VgXqtWNmDl3NEQNRfJzySZSVwPIimXGVBVOJ3d8N/55F89QPD+gVNLMCr/w8OC/1wCyYikxFYXTiaoBmDDZxGRTkxtFeajKUSwrJk44G4fumiOykYiAyUtQKnybeF0NICuWFRNzqdoFhhm0JpyYeuGSOTdvptavV72K//mddPsKxQKgc4Vj3adOn9A3TbKp8hrsKo6Wu0vsq695W2YfCkW/0SnhdOY+YUyUbDrqL/UBXt7enEdh4/Z78vtTKHqKTlyq+CNAG2LiZMO5UpnPwEmxH1nt2nzwT2B4zpnp/SoUPUUrhbNx251gfnJ7T8mGVO2MbMg259jSugFVOYqlQSOFs3HbnbB+G/mVyS6fj9WYbBpsxmsUIE7YwyOa5Pb5GBi+/EzY/NK96WNQKHqIZMIZbR2FjdsCq06tCKeL2xWaPToiu71ENrkPYmeIbvMv71XXSrHQCBLOaOsoHN76JnGZcu4fErttVdyict1mKmQTulZ8WfGP304bi0LRQ7CEM3aZuLhMYGImz/uEil3a4tp4zVLG1BHZVEX8cvzYtfp4fDwKRQ/hEE7tNn1Tqh6wlNxlB1Va7JFpdH/U5JUNJsLhOUo6isVERTijraOwesGbY9VbFSdXEqvk3MuUmj0lshHb8MHrMen8cXhsCkXPMABIJZuu0HTbTw/JplohN0wbbum8rjN6+FEYPfRYeHwKRc8wABjHbOYKDifl3GaQU68B2bDEUdozxt2CIy63k74NlzdOr150lZKOYqGwYrb97PqffuK+xOpdrS6lulUN9tUEixKJRiIbyXiWC8iRDbbltvmzT34RhuecCSee8GypE4WiNxh0et9TF6g4oUuySVRJTVwo0VWLkU1sTHX56sVvD9RTKPqDgbwiRdFkCVoCE8cJuiEhxOq23GOTsKqUXF/syyB7vMu1evHVgl2Foj/o9vEUufFgL96Ri0CA2AZrk8xMgFSkfK8KDhzToHN9cUYPPaako+g9ZvczMa0FE5nETchLDAIT+1y+oXmSC0WCyTRmE+2vxujhx2F1/zXRegrFvCKdcOikbjrJkzqKVaGTuEk3IULhSEUaWyDu441PIJikIDVSOko6ip6iO4WTM/k7exh6sBO575T+Q2QTizWFNvilZHNkg/ocPfQ4rO6/lrenUMwx0ghnKgQB0GolKcl82qrQ5MkmELfh0kyfY/dKSUfRL8z8t8WzkEw2TPA1SjYgqLREtRLbTcz1FSQXqe86e0w61/F1FIo5xGB47q5wja7VzdTUEiS6eSFVQ4mLrZjnQolFAtlQdUPGMHr4cVi9RElH0Q8M1t5946zHUCLCDLnqJqk6F9gVGktkkxO1NsYnEC8flUXIxo5/TDrXp49DoZgRBsNzz4J1iXSmqUa6QnBliORLSkM0nGJDkFWGEIVoNsH18/o2SjqKXqB6PMXqBQf85+BMgnA6e6xDar1UFygwBvGGzabtA4rFOwyrG7eOgeHZZ8Dab1wBw7NP58eiUMwQzgO4HNJRsqnzJWJJCvCGCCVERDQdIRunLwObn7tLSUcxd3BWqTa/+gnY/OpfTKgr0/xROFHTbUgJYP7IhrplCceIbAAAVi+9ATbe/yf8uBSKGUF8iPpo6ygcPnK0o9+cCsUsxMw0Isn6yZacoO+EyMYr4/riiIT2L5MNrjM8+3TYvH/OnnekWFok/0zMxqG7YLT1zcyf8eVcmoQ6VVFHhBNSFKG2UcKJkU0C0XiHTclGrjOO67wVhnvVxVLMFs1+CC+JfKTJmFpvFmQjKbEIMbDjaUk2nD0mSBwsJ/mb998Jw72n+eNWKKaE1r8t7rteEaJIcUcAwoST9ZvefSCbBBerJdnYg837P6yko5gZWhMOxmjraKl+Im5XskuSWYZtShMwPKCA2hATZFwRleKZaUA2nF3PlkRCMI7r3PchegYKxcTRKeFgbBy6y//98arX6o9Q3pJwRELj2iaQQBOyCakatlxo05pspLYGNu/7oKodxVQxMcKxqF0uRD4hwokRSuwmTJEcEsgnSDax8bYhGzpumtcB2Tj16nbDvafB5mfvoJ0rFBPBxAkHw7pboyOPBEbUlfIJpRPJJpTv9JnjRgnjipIEYzeFkDw7TJ4xsPnZO2C4ZwcoFJPEVAnHYnTkKGwc+ogf62msbkLKJiGd/WsNtCwy4UNlnLKp/nVNNritIW0MDPfugM3P/CEdkELRGWZCOBYe8TRSN4I7wh4z6bkhG0MOp0k2btnmZz6gakcxEcyUcCwq4pFcrdh+m2R105JsgsvbTcmGEk3EbmuywXX8mI7NH+7ZAWu3HlDiUXSKuSAci9GRR0riSXW1WrhSWYop0lfj2xgCqkayG1M/rK0MsiFl67cegLVbD4BC0QXminAsHOLp2pXiJjtbntiuM2UzC7LB5QwRIXvrtx6AtVveDApFG8wl4ViMjjwCq69+C1OS60qVaZY0JKLhyqZENpya8tpyREJtxVywiPKh52EMbH7q92G4+1RQKJpgrgnHYvXVb0HxnQZkIxJDRNU4hwmuUqi/TskGGGLgxplKOEJaKBvuORXWbnmTEo8iG70gHIDSzXrv3WPiCZINycuKr9C2MXsxmzkKqSznzk10pULklUNUCerGIycYB5ZveRMMd58CCkUKekM4FhvvvRvWb78b5QgEIKmH6jBU1qCNV96BsmHrprhSeCyJZJOoblxb4/zh7lNhuPsUWLv5clAoQugd4QCUauf2u2F05FFS0iXZ5LhQtH6IbARV1RnZpPTN2clQN4Hl9PWbL4e1g79KT1ChAICeEo7F6MgjsPqat5UpYdLS4+xHRcTaxAikIzeqS7Lx2hLbSeqGlJG89YOXw9rBN4JCgdFrwrFYfc3bYPQQVjsS2QhlEjkATJBsKNHQ8UTIhrPnFAfqifbbqRsuf7j7FFg7+EYY7noZKBQLQTgAAKOHHnXVTgWJAOgE9RL8hGbLOHsJtlhy4PJMIA/Vj/YdIhuunFNVEcKxsR1vjAbWD74R9u16GQx3vRQUy4mFIRyAMels3H4Piu0EJmHQBYNMZRNSUUL9rsmG6ztr82COurHHqarHL1u/6Y2wb9dLlXyWDAtFOBarF14Bo4ceQzkdkQ1HJp0qm4AyaTK2XFeK9pla5uRz45GUk4FhSTprN74BFIuPhSQcAICN930U1m//aJmSXAhaBvlkIyooaouSTcR2VJ1kkpU3TmbsHcZuxDriuZXK58Y3ABiAtRteD4rFw8ISDkAZ17nwqjqjyT6a6nBCyoYbV87jL1i1JBGsoFaqf23VDZfP9RUhIDTe9RvHxLN2w78BRf+x0IRjsXrhVTB6+DGSm6NIQsqGKZ8q2UTaNyEbmift35FIRVI6AddKHC8qH571kirms3b960DRPywF4QAArF709sDSOXRDNq1WrlLH0IJsOFsxsnHspqobro7QXwbhSLbWr39dVWXtuteCYn6xNIQDALDxvo/B+vs+Bklk4+WXZfNKNtHJKo03RAhMvcaEk0A2yWNO63O488Uw3Plix/y+M18Mw50ng2I2WCrCAQAYPfQYrF709jojKUhMyYMk2pJNkhrB9eaRbBgbUn12DKH+yTHbV6Aut0EzEM9bv/ZSL88m1665xLelSMbSEQ4AIp3kFakJKpsksgnZTGgvTsaQYsggoyjJkPpJ6cA5hEjOq8uk2bxImrExPPNkGO7cXqWVjOJYSsIBKEnn4qtRTuKHGyO4qpVYP0vZ0LJZkw0+DhCPaD9R3XCEn0w4tG0gL5TmSIuFgeGZ22G482RYu2Z/YpvlwdISDgAmna7JJvaNykwgsW0G2dB+ks4lol7ouFKVhrQrmbXfQt0Ex0frR/KktPSesvDrrV97Cew7czsMz9zO1F8uLDXhAFjSuWacoN/KXp4tyiGbELkE0l7bTLJx0hl2sl0poW1ysJjUFceAy7m00JZ0xedxGaH3RUK8jlU/y0pAS084FqsXXwOjhx9HOSmTug3Z0LaJ/TQhG7ZPbmKmkk2snIyx8SZAaZy038A5OFW5a+4l4m1ZpCogt8n6NZcsleulhIOwuv/a8h6sjEnK1Yt+s0aIKmfzn2dDUgQpdgI22HLBZohUGqsbYVxJRMqdC5PnQPiyENGMcGy74ZnbYe2a/QuvepRwEEYPPw6rF18bn2xecRtl05Js6Nii6ieVTGLlifazNv4ljDV2DZN3ZDN5tEIy4TQlG7/tsHS1FlX1KOEQjB5+HFb3Xwvhb2EAclCnpQ9pZ2SDxxHqP6YYYpM8sTzHzaL126obrw1jo/oXqscgumwey0+tLrdfv2b/whGPEg6DMelcN07EJpRXhtLOYYRAUtuyk0giwhSF0IJsnPKY/Yi6abKKl3Vd54Bw2Krx9ovkbinhCBg9/DisXnJ9mQp8U8akd3QTmvTNLfTllaVOQKFtMiEx5W3IqO3KVLBNpJ3XlkES4bQlmzw7wzO3w+bHfyO9zznEYNYDmFcMzz4DNj//EQiSjYmQjYdJko0hbbokm9C4qC0BQbKRbAUmffJGvAZIVjep9to1txg9+hSY066EjY8+0I3BGUAJJ4Dh2WfA+m9ewUw0w6gHjoxC39oS2XDEYVAXzGTlxmLQsWdXmtSp6gGXx9onkJFHtlxxyEgu0XeBRJsT6Hr9ow/0lnjUpUrA6qU3wOjhJ8aJ2LcfR05OVqqLEKorqa4UwkhRM6S+1zZim20fapuhujwbtB09L6Y9ayNi368kt8+oklnRQ9/iO0o4iVi99EYYfeMJkhv7YIcmQg7R4EREnbRauZLqS2NPLc8tS7EtjZnWJ2nRhlTWQllNgXAs+rKipYSTgdXLbqyVThbZRD7wqZvVssgmhdykSR0qS1U3TPucALTTbQ45J5BLZ4QTKM/mkPak0we1o4STgdE3noDVS2+qMyS57rkKNjuRlKJtuUmfQDZJ6iXQvtGql1CWTWTM2LxxMOUTJxyuz4Qm7RoEMc9qRwknE6NvPAGrl1nSCX34OySbqLKR8hPsiCqDphPIKkgqgbLka5NJNmwbIU/MnzThdEs2FvOqdpRwGmD1sptg9I1voZxMF8CQtFiX1m9KNsL4klUGLkskG2qvkTs1AXUj5YuqJ5UQ6Fgy2kwQmx//jbkiHV0Wb4DN+z8Mw72nl6lUsjHgT0rUlv327ohsDPh2csgm+g0uqZ9Qe0ndcPa5zAR1w5qZ1CQvpsEf2Vi98v1ztXyuCqchRt/4FqxedpCfWDnSPyTjo9/qMbLB6QxipOeUTFaCzUYrU4H+POVDy6ndSP6CqhuMedmlrAqnIYZ7T4PN+z9UprBaaUM2RPV4kwyrlRyyoV2nkI2gsEKTn0VAHQXVTUIfc6FumticvhQaPfoUrF75fhg9+tTU+8ZQhdMSq6+9uY7nNL55MOBy4PKg4onYT1YpXBucjtgV+2b6bXLDZqhftv9AXig/iRQCZJraZgaYZVxHFU5LbN73QRjuPY0hkEUhGwPiJMlSTKRflswYe1ynXc3ZxooncE2i7WaPWSodJZwOsPbOt6AUnVB0AhqUTyaqdAMmS0IpZMOMI5ts8CHXjtaJ2OEr8+BINtYsd9+N3HFe2XxwSTJmRTpKOB1guPc0WH/nW8Cf1AnuB4AwIUJkI7RLJh8JiWTDujFcG3QgNs90pYJpBp26Um1YZf4YaRakozGcDmGOP4+fnMlE06I8+XaJXHeLphvYDdkQb8cI2WTqe7Yy8ySb0fyU4vkjG4xpxnRU4XSIzfvugPgksUUtyKZyv4S2qW5ZSIWwbZg+kshGGmqGe9KEbLInekOy6TmmqXSUcDrEcM8OGO7dUabohA6okSiZhBQB0w+rqFLJJkBkKS5ayA6rnlLG0SVySMUI+V30N19YvWI6pKMu1QRgnv0KfuLEvoVjRETz2T4SbcbqxYLJ0fPLcaUC4wrVTbJF8mNKKZqfW32OCYeZ+Zv3Tta9UoUzAay/89cgTdWYuixL1eDiCZAN5wfFFFAO2Uh+Fkc2sXTy3d05Ltcck0QXKIAlG4Cx0pkklHAmgLVbfw2Ge0rXKotMAMITik5MaifienF95NxcmkRYzGSl9kT7oYZt3JtZkc0cEVcBQaLBmCTpKOFMCGvvONCATMgkTl4RSiCplDJReWA1RuqljpFFqH/JLcJVUtUNLe6YbOaIV7rA6NGnJkY6SjgTwnDPjlrlpJIJLnczUD61Q+pFNxbiulwfTFtuLNKxN/RI/Wg9KR0j81RbsfwIxGb9ZqFJkY4SzgSxdusBiBNNYnlUxRh5kgXdK1TfUyakbdItEzidon5oOlV1herYvFmRzWJg9OhTna9cKeFMEMM9p8L6rQfaEY0tx2XJQeRAXZYsUlVHiEgCZMOigdKL5WXdyqBkE0LXy+W6LD4FmOe+yh6RgoQJ1PSO6pxgMG2fsrrltQnZkMYZIMvoeGl9aeyh/EmRzRyyUYtZPjxzO2ze282zdFThTAHrt74ZwsoDwFMHwZgLrgsQts25WzlEkaJycFpQVcntrQ2pjBuXzc5xmVTZpKLLeI4qnCnBPPfVcRchehMnaZOyWU9sG+s/Q2nRO8ejYw2NI6R6qJ2EfI+8GJupSGo2p4zUwSzvYlOgKpwpYaxyLKjK4BQPgDv5mDa4XhuyCa2apSqtGFGI4JRKetVqjMkNuiYbQ16Liy7iOapwpghzwoUokThJUmIxkvuRooqC7UMkJrl0JO3ZaToWxi5rgxurYDMVQfeuJ+holreN56jCmSLWb3nT+EBUM7GJyqiL6ASdINmwaEo2gtmQcMhSNqH8AKq9T4uvYFLQdqlcFc6UYZ53Ec1hKiVOdo4skmMfDciGKwvdkJlFNh2oHVyvrbLJWlrvCTqc6cW3P96onSqcKWP9lstB/MYMbvwD8CcdSXCqxtoFUp8qpVBdqazxLRQUiWqnyg8UskJEyaZrNP2tKyWcKWPf7lPqhIGaZKITnSObACE5bQW7KS6cVJayP4hDVMkE6gR5gLETGws3NiWbJKzf80Aj10oJZ8oY7j4FhntO8UkEADzlYwmJVnEPBLIJqSXaN1cXJ0NqpSNXLVQnRmbePWWBumy1JSGajk9x4558laOEMwMMscoBAF9NAE9InMskko3XsDzMrJtyGwVHgin9ek0yXCvRbmpDWB6imRBGjzyZrXI0aDwjmBP3g+wmcQ2YMi8vogY6W6WidWPpRLJJca1ouomyWWaS6Wq2l7Qx3LkdNu/9zeRmqnBmhPWbLyceFKdoDPoW7pJsDKlPVdMMyMaDks1E0MXpI40yeuSpLNdKFc4MYX7xUiYz0RVwM1oom4S6TrVAfVaFJdrjxi+eUypphcaxxGgz4wW6KP7m3qTmqnBmiOHul9WJWDxBWs3yAqaJEz6nbi45NbUn1mHqpfKHxmm6Q0CbpKocVTgzxOg/fxdWL//tcKUYCbkZgfKIEgnZSyIchviCqoWOJ3GMOepGicZH09meQBMpKkcVzgzhKBwHgppxqjQkGzbN1c8kmyAylE3QppJNK0yQbADSVI4SzoyxfvCNKFVOdHGu2PKEgKpUFrornR7nzFlR3aQQYwbZOGklm2RMmGwAANbv+Xy0jhLOjLFv98uAVxQWBhwi8r7dmYkYJCwmL6o8WqqnLETIRnS1bLmSjYcpkI1FbF+OEs6MMdz10jrhBUqlOIf07S7ETdgyptwrSonzCENhC2JqK8VlUrLJwhTJBgDg8CNKOHOP9YO/glwLaZIHXAjWFYvFWPDkTnFhpH4T20TJIIFslE+mgxbrSDG3SglnDrAvFjwWIQV3GbJJJqNAn0F1k+H2RG1J7VXdZKERbxTh77YEhILHSjhzAMetojEbB4a8uDKax9mwh6kKhSOhGBHiZKIrFULWip2ik1sYGhLP6NEnxTIlnDnBcJcNHpdIitmU5bGVp0pxJJBNMM5D7HB2s5HiSinZTAcCS2Ve4lEgjqOEMycY7i5VjoGEmA3U5aIKQsmo8gnFhlLq4Sq56oaazYjbKNl0iIgkyvxekdwq3Wk8RzAvfH2oNJKVGnfhYj70MEVhMGSXRC4kfhQlm4x4kqJG9qzOaJBYldt5rApnjuDGciwSlQ6X3+ZepiqZSDbZ6oezkWhOySaMSZJNBrg9OUo4c4SacBJcKnaHLmorEUJQxaS4Xh2pnRBhhQhRyaY32GCWyLfNYBwKAft2vRTauRCSamgySVPiN1KgOdd20zqK9shUNxnVueCxEs4cYbjrJXUi65s8NPGbxGhiakjsDJLUjjTGaDUloW4x/fCtulTzhuBd4kZ4AZmsTFljsmHG14psMpRT0I6CRRaHZF7TBvxEV6uUcOYM6zfRlaqUeI6YSFvJouU5bTCRdcIJSjbTxXSvrRLOXCJCMozAqQu4pGAr+IsMIXucfW6cTdSNohUaXdKERg29L3pvle7DmUOYF6Fn5CR9gDgyiTTOfi4yyaNkk+tKceNjx9yVcloitJrRQuMWNvF+HFU48wrn1xpiL9oW+HxsmzbIIRupnmifrZRuT5GHVpeRadxSkuA4jhLOHMKP4yTCQCSoCzzZhNIiL3BqJzSwJnWUgBqja9LhqkS+9zgo4SwKYqoGjEw24gqWkB8km5QPa1MCUkwPhEVSyEUox3EcJZxFQEzVsHGQ1BhLguIJDy63gaIrdLVq2MSO8JFUwplDrN34Or4A/zaV9DtVbgMIko3EU5JaSlFRAA18fl29mhhmfSnLz5iN4+hO43lF670nwupRkhsV0syR/mJ5TR6+pWgHAy0Dv20MuJ83VTgLBeJEd0k2WQ9PD42vizqKbLS+rE39KhdKOHOKdcmtqhBYJmBdpRRl0fRTqStMvcDUSMf/ANobOdWl6g0S3+wY0YjxmYD9bPeuKQEpSc0/Yu4V/x7aZ+Mo4cw9MiahuIyNszPJpmlfwTYN2iq6Ab7kjeM6HOmkvZd6a8Mcw5z8ppRaGQYF5RGMBWeSFxs/isSUkvpSTAxNf04GAHLenOLbH1eF0080USS5bk6T/Rcay+kl7FuU+2iLBu2UcHqDLgO6oeKcwKBioRAikJQdERHi2fjoA0o484+WAVuxeddqJGJP4zf9QRffbQL5KOHMNWLvfK56CRVk9DVN8lBe6icE8tF9OHOM4VkvFkrYjTaJxRxxhDb1MXt8JHtJ+YqlA/oIKeHMMXzCiRANxIoTySa1L7Ebpp0jsZWMlhNGXar5R+qGvy7366QuTzfZ06Nks3yo33MlnHmGSVma7nj1Kpm4OtpA2EVbxRzDfV/Vpeo1mu4QbkA23Ea+1LYWusV0yeC78Kpweomul6+hnbJJ7lpVzNJAeLqAEk6v0HLCirGZWCC6Zblitpij90cJpzeYENm0bTdHH2YFwRy+N0o4c48JEUVKvS7JZg4//AuLaV9rqbvCr6NB4znGvp3Sxj8Gyc85Jm2alKWUK6aPlPfeTOCV0lcJVThzjOFZJ4crTGoZWsmmX0h5Pyb9ltExCE+9UcLpIya532USZKMENhnMgmhi2yOqIp6AlHD6hElvrNOJ3x+kuE7JtrI7l5OMsBlv/TK6LN4bTGMH77wSUgF6NwRF8gbNFnWkRrli1Z+X+EsAAB0zSURBVL5/JREp4cw7+k42qpqmg0newhZ5D40xYsym6ld3Gi8w5mW5Wsmme9BrmqRoMt8H/44EoRxX5GoWzr/hL21Xwlk4dKlqmtRtUl/RMWKMkVAG0tvIEJ54j5x1w8YV9v3SSboPZ96xfv1l8Upd7r9pU7dJfUU6RHXDbIzh9sgk7p9xP0rYJyK2aZH4qjtThdNnTJoMJkFgislCeis48mEC8gYfca5T43GNbSjh9A2T2AfTpk3jYLJ3oAghqG4gfBk5smHyTfK+Hqme/PyRtSsvBgAlnP5gWkST0671XhAlm4mCu7zCJWfJJvtLwdaTNuPovVRzj7XrL23mCs2SbCIxgrqSIglN1E0gzxhTvwbj//I9UkzcJiVmI8SLVOEsEtrGUroim3Dj1NEomqLiCONebu/YlhcTiMPxakcVTg8w3JlwE2cbRdPZHebRxqmjatVkIcEpD6okjate/AUm477fVXlYxTiKyHlBwmtcd+3KiwBACacXCN41nrvE3eQxFrG+UlwoSbZLbZPcsiUAJQZMFhUh1BPbd234NphMwEDlWnGvsOsk2BegLlVfMc3dxKb6I5R10DdW4Eo0PjDxABY65GI5rlKZRtfUCQ7jvOB1RwqoAKA7iJlR1a4aAOw746QqWxVOD7B23aV1Isv9gRauFnpNmmxybM4rBg0UYxaKcagFym7w58BTHVArHzCOehFVih0/+wKXwJw21J5ve3jG9uosVOH0Ccn7JJyDRNvJmR0SDZY1PQae+PacpJsZm3fifgEYtwhnVJffGRcgtUPy6bHXs/8+FajUhX/e+05/UXWsCqcnkH9nHGHSZBPxz8d1cskm1fCcYmDGs8iLY0zhfGq5UysarEAcZVImGFUiB4WpKqo7qbI9YUdlDsC+09Wl6h2CK1XOfA2oEuklGxOzfPupLgWdmLSjHmFglQI6H2dCp16TALjm6L12FpyqPsEfQ0UuiGAgFhQOvQx4BMS81q64yL1k7a6GYlpYu+4SP9MjGoEokj/zDYgGIG1SOTOD6bbqqydqB5GNt/DXldohro+hiUq9cH2WBXRs2DUbgDvGpBfwr4FQTqAxnD7CeyOZdzb7M+5+uNOaJFbOWlFDB53HQTpCpWJq0sEYpwoo7OqP3VhXwOTOCZNPqXzcfMPUZb5gAqYBAAqSCtcG+J23XuikVeH0COvX2dscAl8j2QKBfDMlNTEyiXCyuymkb9lZgpANO5yy3DjXAZx2eQi8P5UqLKuZBmRjcFtOseE6+GVdsvTPkBJOj7BPiuMEJCxfn3xIUsFNeJb7slmPtyWd1zTIh866gandKOvceGRiX6YKJNcEgCdlFwRqvMtdxWMGULs4A5I3sMvkAGYA4+Py5ZBphltFCciUdqi6AVCXqlcY7tzuZ6Z8Xpt8qI13EOk7sY/qy9gQQS49E9eM3RDOPF3iDXkrIVeGUwBOefkHV8OTmzQq6QiKakAGjCnKIRgYPwGvHDA+BzxEMl5jx1kSAia7eiyl4gAo+zbuW0/PA7/HlkAK3KAQrqlBGwXRJkBTN5MedWGKYl4dZQWH1bf9PoweeTI+vxvFTaKZTDZTT2wqT+zYUyrdCsxEsJMp5eMs7arlCNS4h96ENUa+1EU5nAJNSjRBcdI9p5KMynMyJZnU/WGCAZd4LAEa1C8JPuO8qr0zaOF8AKBwzsU/X2zj//71XV4VVTg9w3Dndhg9+lS4UpLqSSxIqRfpzwDzgad1YgQUU1MVCTBqgVqm3/QcASEl5iuCui/jBSXc62KKAorCuJO/sGUw/lMAVIY4ZcmpGrQqhAkIj9XAoJz746C1IWYdl7q6FuS6uAfOeylrFQO/8+uv4UtU4fQP5tQrhIJYw0hhkiiKk0dVMxRY9owUkXLrJoBPJpEhcZ/wEMFx9xvR2VpVGQQM4QEUbhKg4PvBCatSsEKxJOeQzVjZeHeIOweW5cj5GOFdcOWXf16S0ikJ7ut/cBPs2/EioNCgcQ+xfq2wJ4fLwy+uIDl4jOoFlQraoSqNZVyRjA+NpRobHWq9WQ1vWPNXS9xXFRh1gpp2opo6kDqoA55jxQB1Hbt6MwBnwkevuQGnHxgYMNsMmG0DgJUBwLbytYJfBmCbAbNiqrTZZsCsDMZ5aMx2p3PlTg2MGzAeAMqHSh2Zkriqyx0KKKNrWO3dqfog5zoAGJ52Eks2AOpS9RL7dm4HuKdMSJPfy5e+TWPtI5UNktnRMdj8iCRJ7jpixwCRLpz9yNgrXiEEE2qL6hgwvstGyV8iLvuvDCxX5IDIuCIaTMKh83HymOtnXT7brzMIAGNdrgKgMEXtgqHrfO6OFwqDAHWp+orVK35fjuWkTKRgfnwijf/lEIdAeOWkHH8IBV+JZhUMiwiT1qseqOsPmcuk9sl5oUksErFkM0Zopf1qWLZO5U7RsVBTiBmKchXNjpMOtXSNxu8NcZ+KqkIdI0Ll/+fBD4mnqwqnpxjuPNknHEmVSNxD8ovEtuwH1Nb1ArABe2hSYhUR/QYMEAHXtYkpHY606Lc+oDmL8s2AKBisQKAWDLVSoR3UQewCDVJ8qLmpDTvEg4PK3Phxv0W5ZO5UQjGeAhERlKqmqoVkT1m3KjcAv335q/xx46GowukvzA4UPJY+oFw78YvXJRJfGDBEI5Gc1H+qOhLypdXwpP4Dq1GuMrFejKTK0IqPXZoufDv0etotReL4AtfCuV5VwNjvA/drSP0Kx+R9TXT3Qf3fVzmOsilP7Gu33wDnniK7VKpweoz1ay+B9Xs+n0w28VUjPtubfE6bCHEwbYIP967yeIPRbkKTuBIHZMxeGsZL1h6ZYCOAlqmNexk4Iij78dRW9Hzw6p0lktI2VjaczMNxH9RvQceFRYtlxZKci2rTpXGJx9TKxy67QwFBsgFQwuk19p25PV3ZZCggt5xEImgioGL8bIloBDsJNtkxMUlPiFFSqCYz+HnGQFEwy9gDq3QsARikjpANgFpdOR2kMI8Zx2hKy4UTQK4H7Lhu+Nzs+LG7dkzqvySQMjYD9pwrIVMTC25vPyHv/tVXxs9GXap+Y/XK97uxHG9iookk1uHyA8pFUDtskJQSjLdiw3wzhxAhKdFdRKTgxCgwATHKh4uLGFzfURGmaleFRGz+sQKNobQfjCv546r0RFHnU8Kz+3ZofGfctHaB3G02eFMiCgbj/UOYJqw7RVaz/uX+DwgnUUMVTs+xds1+GF35/nFCIIwg2bAfdG4yM3mYK+TAkNuObpQTxyTKJHeShYDIySMFSjYA/rIyUhH+krO7Ac+f/OAsZxcDFPehxMZ95dsycr1qvqqJx2DCoe+7LStcfjEFtWptmopwDF6Fsn6Y7dOSXvn/XW+4gDkJ5rRU4fQfq1dhlcN8GzsHCN5ET5QMMaIJ2WXIJXt5HSmQWDvX9QD325+29QjHJSpH7QDUMR7U1pn8iHQ8VUXPRSIdQorjQ0QQ9DydtuTCIFlTHHNP2+5+tmRTEc0xALqrmN5Pde5Lng9f2biWOQEfqnAWAGtX74fRo39QZ6SomCZkQxVDrA9swxEWAgFVEoBbTgJ3olrTnBpiVIpTl05iSnqYpQ0hLZNAMlx/aOnYuX5OHRwgtifon5dBGZh6qr04Vvrg+wiKus04HkVMF2MVU9jLb5e7VxA5laRkkNopoIB3/Uqauin7UYWzCNj42Bdg/aMPkG9CcNJuATpgv/EDhgxfTSYopIREojL8WHE9HMvgvtFpA7t1H6sKY/zrQonIjhe1cYjHVifPNKbEU6sZO4tJP7iOHQdeEZPcVPZSWbVDyAyLEexTWSVj+YnEawqkdKBUOn7cpoBzX/wC+PLvXM2Pkxu6Es7iwJxxVX1c/aGVApNUJCLj/5OIwn7Iq7lIbBlSiSE7+72NvpRRn3iCcrZRv54SqY+583bGittwhDUYx3DGMVpCNLTvapWJuw5uXugRHtyYvbQgDh2XrShcAirJpiBpq3QKgLFrRQingAK+8u6r4eUvfn5goC7UpVogrF+9H9Y/9gDzxShPMu/Yq0u++d0//GQfMJPGa0NJzB+jw3fcCpJ3Hn4dj2jKRji+6rS148fjNm7A16yY2nbVnCEdgDHZDAYyIZAvAEtm0RXzEBkNoCKLiiMM1IxiTBX0LYp6QMbY+qauX5R1V8BVPaaAc09+QRbZAIAqnEWDOeMqEHfIimlBcXAkwNlGzMAGZENxnBDx2X+UZKp8biyICByiIStVZOziTl7qQlnFYm0gcmDdMHsXthNEBpl4DJSPxjGlqmAgkQ3OLwoojrlL2U6ZPT4WXgavSMYmbD0A+PJvXQUvPzmPcFThLBjWr9kPGx/7wjgRJRsy2wNk47gWnj0aBCX2KdEINrh8nuCwXYPqgk8meHXJ0LwynzxzhnXH7CMqBjTPHb/TtnrcRdkfp/ww8dgYVVnPEgDHww7s2O15lMoEVsgqU3VY0mtZ3xJTtQxewLh9Uf5Gg6k3HMKx8b9/d8n52WQzNqUKZ+Fw3tUfgNFj0mZASiy03K1TEQ2uRycZZ4NMfJ5oiF1ybARicVwWQgwOoUCddsiA5mEMarvGpgeIMDCB4bu07WQ3aHwr+Lk9iKwckin/47jXwFQJR6Uwb53THurjalofs89SLsBz04pivAJVFLW6QbEbsP9wGYxt/9O9h+hIkqAKZwGx9vaLYXR1STiUDRLJpm7GkY1xP/y0DP+jQVpKHnR4NHArliPywP1UeZig6Ca9cbmTZz1KNF76SwZ1fUbpuAxdxXm8p/PZNN55DKS5JSUw9WQn71PFk3jVqMwr7JJ2UYzHf6yol+UR8RRgwD7c3RwD4lqZUl2VKggR0bv2nw9NoQpnQbHxR1+AjT/+Yp0RJRoAL0bCEIO3jIva4jzPBWPSwTgOnvgeaRF1UhGNcfun5IVjLzQ249gFVs2M0/gYKkKq7jkq8wxLVIQYqyVw/hYKe9+ksz2H8gZabrL3fDkBY5sulVIByKBdhSrjOMUx0hbqY5t/zot+Ef7yHW+DplDCWWCcd80HYPTY92Q1EXRpEsmGJRrSnplM7o5b3A8hGqk9dY/sPybfm+iELACNpY7VCITh/KStr5wMGOKCob6dX1moGacKEnsyBlxiQWQz/o+IA5dRsqFpqNuPSaZ0rexxZQe3HR//492/C22ghLPAOPz492D1GnRDHVYVZZo/dusYfCARjfuHrRtVPTYpxWcATV6UzxGNof3TfC/PyARBA7+2jj3mVq+w3aoOeHZceBk+ydBjDO7GS458bHVLMFYBIbVTqR90/KWb3grnvOhEofM06EPUFxj7zjgJ1q66GADGEyG6qaz65q0PTZVAbXAdm7QzuZrQdV2nDi4nafvAbjvZKQm4DzgvJzh6kLhdfnZUBHlI+jg98H5x0qyUafvQ8jINKwPSljk2aCwrbh1T2nbGYPvaNhi/VgbVA9Lr47LsJwZunlMXjRv1XZ3PSpm3Yvuqz8/Wqc6vyhu4D3wvX7914WprsgFQhbMUOO/aP4TDj39vnKBEQ0jEOTTGr2vjPAblca5WmWdQO7Y/qxZomcFmMOERxYDqO6RW5lfuCiI1VuFUQV5EcgCyujGkbKUmn3E7PC7Ul43/oAntrESBO14wZqxK6E7fMlldt6JWLI7KAajzwFU6doVqvJJVx3pwLKcAgHOe/zz44nW/Dl1ACWdJcN51iHQAXOLBk5/Jq7MoMZBGBtVjiIVLi3EagWi8CW+bETu1m4QnPLAkYG9TqJXKAJELacPFdso29mdUnJU0xs2qfuoFXyc8C+35DgyK0xT+RsAyduOQBQnyusRT5xcl0VTldvm8KFwyKgC+cPWvwTkveB50ASWcJcHhx78H5133hy7RELLwyKbMt3nGSfvtx9XSyMb70TaH9IiNioCgmsTjyevXc2I0TpCW9OuoDkw64LpEdlxOvAa1M1Dvt8Ht0Hl55FfVR+dNCceODwWI8SMl6AOxKqWClJBHPgbGN2FWdbHaKVwyKgnsgasOwDnP74ZsAJRwlgqHH/8enHf9HeMEJh7MC4yy8cmGEkn5BysCbJsqKE7V2BscJRJC9ZzJjuJJbkyIuC8eMRnfFt5NTOIwTltMOjRmYwmLjhfXx+RjbVkywYTJrSgB+G4VVjLHKNkw7tSxenWqIiBrA7llZz/vBHjgyjdDl1DCWTL87r1fgo173f05DgmUeUDyWCKxBYbUIWTltfeOEaEg8vLyq8mOJjwlGiCuDlY62EWrXCFLAMzyt0Q6iETGQVZwFZG1Rc8DxXmk+7EAoFzKsXlc/KU8B4dogCUQp62zBH7McZsw0RTHCjj7xBPggbe+CbqGEs4S4rwb7oDDT4zjOSFV4xxG4jeGTHqHhGgfRmpXlxl07BEJVhFkbFZhsArHkh99NChe5aIuEyUeO05KRgOkjBh3ziUkkm/zjqHrQ10mgJosKNlUy9qMyrHtHVVTHmNyQsdnn3ACfP7XL4dJQAlnSXHeDXfA1reerjMEsvHVB4BPPmR/CzZB6w7qtBMUDhCN46rR+I1VC7Yxvr8J/+a20waN2VneBjdWg5a9vd/xdtwpcOoYbMOSZRUoZsZUxXIKcFwpvAmvTEOZrlUNuHEXTB4ANflgssEE5O3FAfgf7/pN7/PSFXQfzpJi7YoL60SAbDhyoYqEkk1NBIRQqlUl+k2PJyJt45KN07ac7E7a2qB7YfD+FCYNAzPek7JiqlUq7G45NlcMmG2m2q8Dg0G158WgfS+wMgCzbWW8l2Zbvc8Gyv0wZhs+NmB+YsXZY4P3yGC1hff31P0S+9sGaG8OELUGzrng488d+NVuPmACVOEsMQ4/8TScf9MddQbjWnErQbQuXXGSVqpYW7aYqI+qKcoX4zeWyJBKMdV/Rk1Y1VROPKcedtUQMVX9V3eAC8FlqnQG7rjpPiDPhQMSqwG8XF1eH6tQcH6B0sewAmICxHRXcWnrc7/yBtj73OfGPzgtoISz5Dj8xNNw/sEP1hmEKBzXiDmmJFKpHewu4XqxMsG1CgeLDSEb47tTjptTdoy+7T23CpAqMAbMCiDlU54DDhY7ZIPyV0xdl7p6ti+DxmqDxUUB1TOELZGUwMTiEA0NIFNXqsqv3SnrSt3/+tfD3udMlmwAlHAUAHD4W5R0ImQDICoWyydZygbtR6GqhiUXnKaBXod0EMkg1ePEb1C5t9cGB4BXZBs0IOyQzWB8IuyDuwyySV1Vh0TKjMItw3EXTDzOXd+eqoGadP7f+P99l70e9j7nOcmflzZQwlEAACIdTBQATpq6XFS1cLGcNDeKfOvTtpRQsEvjEBEmIUCKw3W/aJmjgji3Ct/2UBEGITPPjULL5YD64M4X2yWz0dtPY8BZzqa7gp3lbWe5nOwuLhXOZy95Hez9hemQDYASjgLh8LeehvNv/lD3ZGNshv3nKhh6+4FHUvQ5NlQVYIKgysNRKlZRuWSBicINPANRL4SsDJCyss3KwLVvrxf3AK8Bun4De9IWaFWKPp+Y3MZQrzihupyqOVaT0Gcuei3sffYv5HxEWkMJR+Hg8LeehvNv+RB4D7eqWIgSCdSTvDz2yMZRTSTf4MlIiAUTEHV37MRFpFW5ZUSJOPc4sQFg4IlHaO8QCVU2K4OaUAb8GD23DJcDeCqnyiunqvcICfoArWO4nhursfU/+5rLYM/x0yUbACUcBYPD334a3vNnD8Lhb5f7dJDiqCYPgKsocD1LEjSPI5uBm0fjGY77Ql2QknQ8d4UhG84lqpaFsRqxqoW6SjQ+Q90rSzY4ziMor1oZCddMgnWTaKzGIxTgg8YFwJ5nHg/vOG0n7HnW9MkGQAlHEcAr3vHhMelY5eCRTUCxAPCTidajZDMgbTAB0LZMsBiAkADrCpU28B4UShKYQCKKZ2xLIJuKHMuxc0FiMn7gpqT1rrgNfni1yrmXyg0a7/n5Z8OnL9jf7kPREko4iiDe8+cPwu9+4kFexXBkIxEQae+RzYDYdtQME5epJiquh+2SgPGAkI11qZCy4WI6vNJxYzDVcjnupyInfF7c+N1r5cCbmSRmEwka1/dNFbD754+HT59/cduPQ2so4Sii2Pqb78Mr3vlhd1IwkyWsdqBWSpIbxcVxBm65E9AF24ZMbtsHUTVU5ZhyF667q5ghGS6Ggx5J4Y6L9DcoT5QGvrHqsSRbKRz7b/y7UAXKwzdl1vtxOHUD1e0Ln9p3Eex55vHdfSBaQG9tUERx7qkvhK//wU2wb8cLxxnVZIFqgtt89tuaTCwxZgPMpAR0TNUVRzZ24hIFgX/iZayI8BgI2Rjj1sXkVwWM0Zihrl9dF7ShsCYxqNSRsyRP1JdLvOPxGedaEcLC4yqPbfrTw/khGwBVOIpM/PK/vRO2vvODcYIqGUsyHkGUBfgmy0qx1PXdCevGQJw4B46VVAQjkA2Ou9gxOROUKBr8cKxY8Bj3yUx6x81jAtueShyA60ZhaYMUToFWqBylg9yt3T/7LLjlpNNh9889q7s3vwMo4Siycdt/+DK855NfdicOQB4B2W9oRo04sQ4cw6FuFSYYRAYu+fhk48VwDCKIFXDJxXmaH7h1HXfPj/u4MRtKiOh6oPE507HA/xHxREhn9888C/7T7ldN4q1vDSUcRSNsfef78J7/+BXY+s73PSIJEpCnPlDam5j+satusCtFArmWBDiVw8ZoGLXDxG9YlROK4TCk4l4Dco0sCMlUk9SJ4RQO6ez66WfBzS/cAbt/Zr5UDYYSjqIVtr77A7jgXR8ZJzxXQVAvtAzFUzwlQtwqz0XBCid0O4OjgmoiYd2mAbHPbfqz4+aIyyNVgXQp2SC+ccDduElI5+bn74CDL9jR2fs6KSjhKDrBBe++G7b+9gfs5KL7crB7RNWOtBzuERV2oSTVwdmwfdKfhWE29UVjOOwYGHUTU3T0PjIKJ67julO7n3Ec3PSLO2D3Tx/X4bs5OSjhKDrD1t/+AC747XvqCQsgqBsg7pItY9wPXO4cQ61eaGzFgKtyiD0bm+HulXKIaoDsO66SQEzU7ZPSHMmmrhcjhXPTiafCwRNP7eKtmxqUcBSd47ZPfRUOffprXsyiUjdAvtWZ+IYXf0HHLqEElM2AswUV4YQUjd8HQ0DWjjNueh7CeXkupSRvKArY9a+Pg0/ueEWXb9nUoISjmBgOffprcOgzX/NdKeZbP3rrAj2m8Ro2poOIhxCX50qxdoEhG8MTkzd2cFUbdSG562AhcM+unzoODp5wCuz6qWdO4N2aDpRwFBPHoc98DQ7d93U3rsMGU1G5oROaqANu+Zm5d4pbaeIIi1NNrFuFVQ0dHyEbkYyo2rJpAYtANBZKOIqp4VWH/giOPPn3vpvFxXGwO4JViyHHnDvFlhHSyCUhahe3o0rFS6M2ghLiVM2YZI5bCKKxUMJRTBVH/u7v4ciTfw/v/dxfuQTCKgI5DiO6PXayc+6UdN8UDQQTYnLHQNuR8VF3ilv6FgjI4uAJp8BNJ5wyvTdlilDCUcwMR578B7j9gb+CI0/9A5mExFXxls/RsadcwHeFsGpxNgUicqHuVEDVYKLxSY6OFaWlOE75f5GJxkIJRzEXuP2Bv4bbv7jJuk4h8hFXp8TYDkMQXFAYExrj3onxHk+lUdfJVTsHTzwVdj1jsdymEJRwFHOFh773Qzjy9D/A+740Iq4NsK5LitvDbtRDZOS7VALh0OB1kHAQmRE1c/D5p8LuZxwHu57Rj816XUIJRzG3eOjpH8JD3/8hPPSDH8FDP/ih58IkKQ02fgO8+0SJh7NB3agQ4aA4zcEX7IDdP/0s2NWTHcGTghKOojewxPN7X98S4idMkJhbdXLUEW3vKqY69kNUTYRwbj7pNAAwsOtnjpvrmymnDSUcRW/xe391ZHxgAB7+0X+Fh3/0Y6JCGNeKxmGoyxWM/fg29jzz2bDn548HMAC7f+542P2zSi4hKOEoFg4V+ZQxk2/8+Mfw8H//b6wakW9jGNd7x+lnQbUZEUx1fMtLf2mWp9hb/H/iOvTL8z1yYwAAAABJRU5ErkJggg=="/> + </g> + </g> + </g> + <g class="cls-5"> + <g class="cls-1"> + <g class="cls-4"> + <image width="391" height="396" transform="translate(0 -.11) scale(.48)" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYYAAAGLCAYAAADDHjU7AAAACXBIWXMAABcRAAAXEQHKJvM/AAAgAElEQVR4nO2da9huR1nf//PUL9Vqj9qDEFBRkGRv5Ji9sZJ3V9uKCmrTGiFRxLaC2oPRagKIe79gpPa62oggBxUByeaoom0pHoD9bohkh5z3JhwSkkCCXkU8YNXr6ofyTD+sOdz3PTPrWc/58P5/ybuftWbNzJq1nve9/3PfM2uW8957EELIEvnF3/4Y4IDb7/sT3H7fnwBwcM4BDnDOwXUbXRocXEhP+RDyuZBP5JfHkdKhyj7ukX8Tj7voSwAHPO6iL8HRi754DXdhe3AUBkLIIrn13s/itk98Frfe+8e47b4/hgOyQZ/SyDtr5GO+mgC00uX5u52UdtU//kdwcLjy6//hKm/RxkNhIITMzWve9WHceu9ncesnPmt6/zAGHflYMOTq+EKEoe5toCYWyHU87qIvxpGLvhhHH/43cOThf2Nl924ToTAQQqbmlns+g1vv+SO8+l0Xil6/NLbaM4ARABNOUmLQV0+9zLzCYL2MK5/6D3DkkIoEhYEQMphX/Y+7cMs9f4Rb7vlM3cAXAjFJGNDjOcwiDDDnz+WRjum03rzh89nH/34nEg/7oqXf402AwkAI6eVDH//feNV/vwu33POZivGNBnqkhUGGetxIjzOIY9OElOK59XhFJf8ShCESw0zPOvZly7nZGwKFgRBS5ZW/dQdu+fj/xoc+/pm6YQba4wWtMYBJ5QrBcf3llTdhhUmeG/U2oRSGnBc6PeXtzv/sY1+2swJBYSCEKF75m7fjFb91R9WQ9oVsqrOMegeijRhMFAaUZVoD1E1hKMVjJmEI1w8ARx72RXj2sS/DJTsUZqIwEEIAAK945214xW/eXhr/XuOO3t5/MwxkDHyXtSYm7VCRDldZjwXBcPcJA8rrmiAMuZxIC2WPPOyL8KxLv3QnBILCQMgh5+ffeSte8c7bAAD1sQKURtoY1vrxRjgJwpgPDCm1RaPlqWBJwhCOpfohynbsgkBQGAg5pNz80T/Eldf9ViM0JHvI0lgjH7deQMvAo3VchIuawtDwCIQxL8chsvG35VchDJEjD/siXHf5Ixf0ba0WCgMhh4ybP/oHePmv34KbP/qHDVEAsjhYw9rjNTQFoGLI+zwNI0D1wW00zgWVbxnCkKRhgjBEAbnu8kfikod94SK+upVBYSDkEPGsl76zEwRAG0RpKFW4BqVRbnkLTUOO+vFeYWh5BChFKJWvtb9HGJQA5muR96ZfGES6KpOJ4nBJCi9th0BQGAg5BJz7yB/gu1/yG9oYKjEwn7H3jLKXrww5tDg0Db31JgoPRApUTYR6PBd5rFcYZPksEFUvQngMaVN6EQDEP/k+GBx02rOOfSm++9IvneerXAkUBkJ2nCv2fx3nPvIHQhTip/UKYIyryVfxJlrHdFrZy5/Ja6iJhjheb+OMwiA8hlIYhMEXYjBEGIDt8B4oDITsKDfd/Wlcsf9rAKCNpAy92FBK/JQGtkucKAC9YaMBZVrGv56OZp3SC6l7R7qdswhD9hqmF4bIJnsPFAZCdpD/9vabcP07zgEQRhd1gcjpVhS0ka8Z55oA1MJOE72GXm8Ck/PLtk84Hq+/KgzmvoSCWRjSx/zCAHTew3WXP6L/y1wDFAZCdox/dfLtuOnuTxe93z5RqApEb+97ggcgwzl9XoCpK5atCcRswlBrtxW8CcJQ9RqiMKR/1P2DKt0vDsDmzVyiMBCyI9x090P4r2/7IM7d/RCSUQea4tDvPYR00/MvPIiG16CNdruulndQCAIc3GhUhp+qAtTXbiivQbVX3qvkJQCrEAZgs0JLFAZCdoCbPvwQLn/xW4Wh7j5t7z0ZvwkhlHZoqNUzL3vk9WPZA+mesi6NeZ+XMaldpXDVr0l7DdDtA1S9dWEI9yvkTSlzCAMAXPKwL9yIh+JG624AIWQ+PvjhB3H5T74FgEfXzcufkN0+75GTuwPx39g9VP1E77tjCJ+2Dymq996n/PaYOFHa6bL70KbcLphqLCkfkNoF0a6yWG53ce3xXsn2xnsEWa0vr2cK/BT/Xfj0X+FFv/7JGc+0OOgxELLFXP6iN+ODdz8EALknLMMdojfc7DlbrwGohGcaXgPK9OQJWE+kVpf1ZBohpiIsVPNY0vllWj2UVHoN1hvq2l16X3m7Fk6qeQyzsO7lNCgMhGwp/+JFp/HBCw9VwkZWHGoGHXVxCOkxb9sI6/BPn/EvxjWKsJI+R++gc3EOlHXVzl+EiKxowVwfik97j2vCoPPPQ2eWf+byr1jLYnwMJRGyhXznC0/jgxcehAjmqE+fYyNQ4ZQUvkGO2cTwSgjrqNBMzG9+UvgphoTiOWT4qZK/GuHKzVRXoo6r9sT0WuDI7sl2xaR83fJepYCT6SurkJK5tzK0tRhE2zzwgl97ABc+/VeLPMEgKAyEbBnf+YIb8MELn9LGvtsQBl8YvDTuoMUhl5XiEMy6l/lj3Tmm75UA6HPIsQMtTL5ej6hLlpECA9EeeV4pMoUwAcpoi7ui9nMeX9ZnytQUzRcHGng/8Sdtihpf+Gv3r1wcKAyEbBHfee2b8PsXPpkN4ARxKKynMGCyrPYYcrksAEgCkAysFACfB7DTWbL9L9LVOaVAWM9Enl9SdNUrhtmb1EpDsiMhRaFvoF2IaNGeeJrSw/LeSl79R1eYU1ctDhQGQraE77j2V3HjhU+KXj0wSRzypzTeMrxj8+a6c3VaAKQIKG/CGPTkAdh00SXOvW2dPypQ1gZTT/QtTHuKNkGWgbpG6ylA7Oa6fJkoU+L9TCeel1IiIqsUBwoDIVvAt1/zRvz++U8ao5Y/a+IQP3O0KBpKkZ48BfR4DFDHlYGX3oTo5SoPoDDQWQjgx0kApE0Upj/ltV6FCht5Wz9yRXJT9PazdxCPi3sh7mGpH+K+i4qlUE0tEjaGZH66wx4veMd9KxEHCgMhG863/0QnCtmQZ3GQhlwNAsP2dmMPXBq/4BlUxEF5DOq4Ntram4ApJ3v02cIVXkUljASTJo8pb8eIT07PbU2oC7AZTOaKQOR7L/NXxDSdyqv6en8MRhKRGueBF7z9Plz49F8WZRYJhYGQDeaZP/EG3Hj+AWH8u8+2OMRPLQ6+yC8NcCkO0sjm6oWRkgJgjbPq0SubWRhwaVwLD0EYf+tplKEjqDZlg62FKd0f6PY0vQZ5DqRCRhzEdyBEJ93LAd6DVz9yzxwMG2/+4Gcm1jkPFAZCNpRn/vjr8ft3PdA0/qqnLnutqYMrxUEab5EFUjCQjGK2Z7JXjmRk889Y9NBDmhCHmmdQDSkJU1yEoRrehB5vKI9BHFNey2CywMbtLAja24rfQZKUeD+MmbctyPuTxSB+994D5x/6S1z79vumuJbpoDAQsoHceNcDuPGuB7ShhTCE0lAbcSh7/8gGzmfDW05VjaIgzpF62LLOsqedtoVBzMZMGmmodqiBaD+G92NxbnHdqpwRDyMC6T6kZFWDvm/pFuV7kU8Efe9SOZ1HikW6LiMQlnSfhddWKocWA12Nx4WH/gLXvu0TRd2LgMJAyIZx410P4Bn/6VfKA4WRHyIOuqcOkW6Nc+r9pnOIsI0RqC5TapjxANJmtUdvDadqgzCAwt6bcvJc0iCL8yajOi7qyCdALpSS5f3I97oQByMg2Z7L+uR1+vKnShbTejYtJBce+suliAOFgZAN4xk/9joAVgBEGMMcy5+lOMgev5y2KcUhG9iKOCTvAeq4DRlB1i/EIBtsa8i1oZfCoUTM1uvzfm+YyvvgfaBIz/ev7QHJ6yjvB1K74nZu2wSBqDJUDFLlivMP/gUuPLTYwWgKAyEbxLf92OtET1UaYCAbaC0OcoDZioM06tLI+lAg5Su8DmOUTU9aGXCfjaa3P8ZAZpEzItDyLBoCIT2MJIIw5ZRRzkKg7pe8bnmdMZ8VS1E+5lHeRGqD+D5Ssq+WrYqBEEIrBlLkY33XvPUenF+gOFAYCNkQbrzrAdx45/3IhhAoDL0w6t2H6QHLnrw08KI+aaBrPe6cFhpWiEM+Z2GkKr1278el92AEou5ttAUCvv5ZrU8YYGVwhdG226UY6jLae2gIRPqatGUv84oyFZVId0QInqgsXdvp3//DSp2zQWEgZAO48a4H8K0/+kuipw9EcVDGCTBGH4VISPGI5a1htz39XF4b0HbIaFwY5mTQlQFH0XOvigjypUT7W/MskhBCH1cikNqAlDffz4rnIa45338rpNE4Q1xr3paCkY13rlu2L+dPNyf85PYm2TTHbDl5v88/+Be4YUHiQGEgZAN42Rvfk//ekwECar3k1PtOxkEa9dLoWeGoG/oyLRut2BSZDypf3djXe+4qj48GcFw5hnRucSu0kZXGUZ0L9XNHA5624u0RYtoUBykIuUw+pCSoaHg29rL53h7NQiAvWolMzJKVJF7rDTf+Ic4/+Bez/RIKKAyErJmXvfE9+MCd9wsDBwDSQMV9pONWHKQRU7m97tnq3q/PBsbn+nX82oiGz8bLGvKWONg6U084NysbN2PkrSB6lOdUgpnPWK2nJixZfbJHULuvWhByGXnGXKcw9qkNyGVEe5QQqPpKEVFCYa47pv/4mz82429ihsJAyBr5wJ3342VveE82WhC9TWQD3u1ocbAiocQhGRII4xjrkEZ/XBj7orePbICsCJShoLKXrgVmDD/ujo3HYfyhJjJVoy4NoWmjEBdpdHPL8v3U+xDXL3IUgmrzibo8VFklEEYAJv8n9coIQTpXvA/xu473JovHvOLwBXOVJoTMxbf8yGuR3yYWDIhz8PBwYRvo/uC794V5eOfgorFygPOA7w6FHB3OIeeJ1TsH5313Du/hnIP36OpzgOv+gfculw81Ojh459P5nBf74pzSIKf2hHZIclvHiK/RVH3V0G6hO+r60jUiNTSdIhpNvR/euCbkwSHfE30Pwz1O9wvdPUn3qSvtXW6N806cOTZGtyDWPxgpVipdnMdsAcBdn/pznH/w/+DoRV8yzdkS9BgIWRNP/5HXhi3ZA4T+o/de2BQbOkHq2coQUek9hN5k3FYeg+zNa88CPXlqn/k8ur3WAwC8OhbbKs9bC2cpz2IcfmQ7Vb8bZt8DxjtJiqO8A4j67DFx/vgNSW/FtkDex8KLsod9/UeJgqgjtbDuTQDAf7rhI8N/GQ0UBkLWwAfuvB8fuOO+9EcMQBgcmB6h7g3q0JIXebM4aIMa6qgJR8UIS/EoRQBmv2K00zZM2riafzyOx8bVPFYcxrJ9Yw8/rpUblyKT7qWQCyUG6Tbp78MIh7wXsk4pErV7E9ugREUa9vwNmzpz3UkQaucSwhXb/KYPfLr9S9gDQ0mErIGfef3vovurziEdAN0fdHxxvfddCCOESuLL7LtDoUw09ohhka7aGNRwIbbju1PpsA9QhJYgj4k6c/hIf8KnJnXtgghbQYaqcn5Zv93uiKEl0W/1CPEbF4I8OuTUXbOV0TGAkQlZjUSRcdeo0UhdcLxHLsTScqjJhuHiddq7lnd12CiHvKwU9OMrm17XYesN+7/6/odw9KIvweMeMV1IiR4DISvmA3feh/ffcV/uySP3+ACIHmA8LAIHsUcYt5MpMD3fmCpCC8ojyTnK3nAUktQDtT3/uocwyTsoPIrYc6/WE+9D5w2MbX3jtocxpJ0qVBMH4FNP23o+Iq1yj+W9tL191eG3barkr//Y3wPzuxE9EVlGfPe/+v6Hmr+LLegxELJirkveAuB916d0oQvuQ3ffIfZWAcCFznLsFcqeqxjwdV6UE15GOlsYPEWlx154Gkh1e1NAexPRu4nn8fmgrB/R1TA3w+TNBK8hlAnOUa5T9NZdErzsafR6CWGg24X0dG+cD95NHlSPnXw98B48iHTzLU5ckrhp9tK9TBzoQwhRqopURfzv+uTncNen/hyPe8TfHHYO0GMgZKVc9/rfxQfukOvoR4GI26GHLrZzjzVmr/fyY7l0zKdahCdgPJRWz7jSg697E7rnXY5JiHRRJuWJHpPqZVe8Cuhy2cMa4iXUvBeofLI9Np89R+tc8jst/ivOnb8j7RWkL6z+A9TPme5J3pdpbzz74FS/p857dUWEkCXyhd/wY2nbFb3N6D3k7eQ9qKTY83YqryoXEtJeNb8T+co6nTpm92Pe7kcdF8d0ekiz5VQdrsg7GuVjRbmYNhqJY3m7+xmlduXtLr3Mh3TedO9Fmv7KYhvtVyg9Bv3dTkpqUjPTUSgqeWpp33vZRXjOZRcNOh09BkJWxHW/8juQIQMV/+9SIHvkMUl7DyJcY/KmXnAqK3vbYT/2RoF8buEp5N5r9jzKOLvssRqvwPSqZf5JYw5x+qmcoQR4NTW1KFet2449lA/SwXoSlZ59vmbk/XHtfI22pG+06kO0vYKqpyA8BFO/8iYAXbf4XXvjwacG/67SYyBkRfz1f/yjAGRY2sxZKXqfsecpvYe8kXvuXVp2BloehPE2RGNq3kP2VHq8B1U+9KhVzz+cy3gH0nOA3Q/11Xr9o1HL42h5CX35RnAjeXxUvy7peYl7Lu/lVN8r6vk6Wua45jGobobK4tW+T4e/b+8ReM7eIxrnyNBjIGQFZG9BxJhznw9AxYOIPXwZf0fYD55DjP+nPqnIHz2I3OPU8WmP7DWk+LTtJae02B7jDYwbs4Lg6/lbP+MxEL2Eat7u+NicD+J43Uuwddo8xosI91feF9UWSM8ob2fPydwLmQ7jBEh/oucZDjsmkraFZ2A9luxRhvzhPHc+8LlBv6+clUTICnjp694teo7R6MSeZhQDF9J9SO/m0XiP3Gv1vptxBK+XZfCxB9vlj9vpbOHhAxe2c5ksTXE7fbocjQhnTDN3Es6Fef8+5Jc1ltSOhgVAJt1CgV5CQ/bmvag9n0tu5fsC6Gc3EFrhYdsZU/RmH9GR0NXL79UcS5Wjevt0W3zjYBRwccB4FXd88s9w5yc/h6975N/qbT89BkKWzE//ym8DQOq9ZWoehDhaeA+5B596/KnXWG6nnmOsW/YeY29Wbsvevex9praUPXWEXnTe1z1q6z3IWD1qveSx7OXXvZHSm5Behe59V72EYixDexD6/tW8C7PwH2qeR6XdyPey7RWk3wr1nz6YP0tPQXogPnkKsswbzjww8XeWHgMhS+b9t8uXtcsefU7req9dn1fGrbX3EPdD7D4abdc9n9D9HzyD6E0ItyD1lmM+hKXiwjMUctG41L+OHoj1HlKX2nShWw5DPrW6ZrtZFhNej64upOfnFLz34SHm+HyCF+MDXv/rZT2++Dee23oy5eWF70Ps1duJSg4xNlE4C7WbGA950RDRatm5iB2Aoixwx/1/hjsf+By+7ivaXgM9BkKWyPvv+ATO3n5vtqoBHwRCuf3IHcKa95A9iByzDgdTh7DwDCpeRKq/1cuF9hBSfSZfasdY5it79Lpn2/O08nhclFVxfHNsXOnNx6W805PSpk4Udcl7m/vqZTtKTyDlGes21F465OErs6vGyXtSbchuQ/W64/dT9xTy+eLvhrrmcOT177u/9/eWHgMhSyR6Cx7onlY2nkL3FDNCWu46R+OdJ7pkjyHNJgpGIo5FRE/AxbqSWGgvAmmcIHoE8XgY08jVC48ieheAcEKQm9LV40Yi4l+LscfZPuKe+PjcAPKxeDfslkTl8+OQMMJ4PIYbjRCfeh6Px909GsV+sFxDKXgcwg1SXoEYkvA5qduv3It43cIpsTuihgpRtON4lK9fe84u6/blqarnB+544M9wxwN/hsd/xd+u1kthIGSJvPSX/1c26gihkbgUQjDgSRxSrnjMZWOU4jghTQhECjcpoy/DVVk06gIhjFsK+cTQEoLxsyEnJPslmtaNHbiRCcOEaw5hnaiPUgjztecgRja43WJ3Xkw9hcv7KQ0OaQmM8TgIgViQL6UBUhwQvTeM4X2eEhvvu3f5+3LGxgopNW22uSTx3RqxbAV5U0V4qJFZ6IeXyY2quwN33k9hIGTlvPR17+42hKeQxCHvQJsHl22m7HO6bKhUWhQI6JlGnYBkK1aML1QEIvV0Y9ZgxR3yCktxHKLuNcSWRWMcr6E0jNJD0NnyjKPuZUFZCHKZMgLuve+eXRiJOjxE3mhcxyItbo+BsUve19iPgudjrsGnm4ssnfH+dvmSGKoDOld3b63/0SKLfg4PNfIVjoEViSBZIfl1770Pz/3Gr6yelcJAyJJ4/233yuBQ6pJ7YSyScU544VBIw+mTt+BkGqJoyOmrEIIR0/L5nRGI5BFI4x+a6KLAxEHpJEbCg4hvfAv55OwpJ9ocPZ0cJokHQv3C0Fo90bvj4GVpzyEa+E5IgsF30J7DOHhRIbTk/Tg/lJfEB8B41AkmkN5ql8VcCkVF9NJF1D2F0ni7evZ4GLnroH5TksdWUQrv9b0sKwQA3HH/n+LxX/l3iuIUBkKWwPtvv7cbdAbyCqTdXo7ZIG5qI26NQeds5C55V0bUqdKRY+LiuYn8mtAQdhAzmaR3UYSGfK7Tq7qlfQziAFd9t4O4MiUS0uOooTwSmdc6HN4DqYcvvIGxSw5BFIJ0DCP48eeDwEnPZATvxnDOixCV1xcc2xMOOQBj79NT3vHmpfsrSF+9SHeVtBY2S7rNXvy+VBRBfx053+0UBkJWx1k5RdXr/l4aHE7HZS/Si05o7ll7iJf5qDpRTw89/HwKEXYSA9cqnxyvEAY/LgeebFd2NEIr5dH8mQewodoaB9B9Z1GTZbSho65/LUJIvgwrpTJpKEG/5MePOyM/Gv21MMbQHfP+811bnDiHj6LgspA0YmzeDNanC0qdfznGIjGuUCpbydqkUkdMjuGiSlrclzle955P4F9/06OKqigMhCyBl/zSuwCEnn7u2nf/xiee0z+yXyx67PAykxhkhgph2GcdYiVKOIKFzr36UJMYXHXJCMY6RQ/ZxXaLMQf1zIMMFyEZUOeg5EIZNS9KpuQuLDWK4SCjCSXSfXAhBATAjeFHDvGZhvH48xiNRsB4BI/Pp9BRFIHOa0ASCe+7a3OjURCyThS6W+SCTkivTYiFqz+Totss06Uq9IiJGeMoBaL0UPJt1uIgv43b7/9TPMF4DRQGQhZMDCEByCEaALk7KfpsXhgXpw1E/vvV01a7JP2qzy5JCIQ18i7OfMqDx4heiByrkOITyrrQe1eikLZEaEW13iy7YbwML0Mvqa0unXksak6eg5iZlHv7ECGicMPSbdZyNB7HENGoaG93SWMhElFokI2xR/K21HTh5EKFzyAvPpURBtzJJnbpXhwuLHvSkFaYSJ4v7Le8j2Lcodu7/b4/oTAQsmzef9u9RVowAWFH9/LSrhSJmDeGWUKq6tUDWSAA09tHNvIxEhJ26qGjLAqp7jRI7CEHkmOzWtvhqtAeaI09YGijmbLE4+NiiqryDqIbYWcajaMX0F2XG+VwUQyPxZVV1TTYKEJqUBtBhPTb8fL3EK9UXlc+1l1TFIwuSd7H8s7F703si6rk/c37Zmow1FeJekL+/fnl370H/+affrU6RmEgZMGcvf0eHSaJ9jWlmNCB6MalV3nmJFES2Sil4nImj4lqR1FJ3gGUQNSehchNFp6EqVOPL9jt7J0YGUiGKFWiahiJnC5vIvTERw4eo6wjDllAxqOutx8N/WgUsozz8VH2fmTYpyoQTgqED2MN2RuQHkN3CdFb0J5aJh6PX1Pp7TUfZJO3Kt3rUlbEDcup1slohpp85zV81d9NaRQGQhbMWeUxyD/G0L9zak8di0KQizht7MWgMQAtEqnuXFeOcyOPEZjOrGyCC4nqyQrpiYjecH9YST8Ip0JH0oilzXEynklgRGjJjwEXQj2qZy+fWxiPuirG4+xhjPJzCvF+duIavYIBAjEOvXyf70WcMNDdiqiWwUtRg+Tpm4EUfBm2y1+nzY+WLa+Sv8pCScSurbDbv43CQMjyOHvbvblnWiC7cCIs48SxLkUU0c/GZsMkTIAwKnEcIVbT7eaepBxERjJi0ghFs57r1YPe7c6tIlqpFBpCvdeteroQ+437Z5+AHjt0U0w74cgPpjmkp53FeIQqqx6UG8OPw/hFTE9NEUKTnicR36XLIap4jXmGVbpz2puQ07XCd+JsWG1qlG8mHVGTJzYhb9/+iT8G/tnXpH0KAyEL5Ozt9wAA1DIV3YYhG4E02STlaxsIHzLrh9/CP1EIlEjIDes1yAffYmtFPVlfurIu/dOZn/RgWjZFcVxB9fpz17oiDrEdToR5ZGc79rS73nvnl3QzhUbquYQgBvIBN5fHKNKDdmoWUnha2hkvITzD0A1Sl16EGouR4w3ykfF0jQ4qbKZmhEHdkywO8q5XfwvUcSdSwxdT5C5UQjkOHrd+4rOqDIWBkAVy9rZ71H4aJMxde/E3Lf80c2jF6Q0URsLnenOVTv/xq12Xs8YZUWnhPFm/XhtJpQHFLJ88XVUYqmCYfBxIb3oI0rhJIyp7/DEtZosGuHuieTwOg8hhgDl5CQA8xkFOTH3mzHaAuykQcZwjTsGNYSU53pDCXEEgxZiGEvzoRaWGdOKQFzRMdzh+s+Kr92nLievJGYQnYpG/N5Xjt33ij/HER/09ABQGQhbK2VujMAiDhmgDREhFogzBJJFQhUQHMOfRIoEsBukf0euH7NFmAVP1ybR0aZ0xzOITZi01Q0T5LpQPjVWyR+MZjW0MzcSDsVz0CsLKrmnGkZzJlEJJ1vDH0FHpFehtYORcCjV5cQ/lp0d+jqEQDGvwk30X6WJOr7xW6QXmsRrhkRkqTkO+rfaA2KUwELIEXvKL7xJ70VfPPemK6dcHJngSEudkghEJpzM7KUTCONlZlel86RWgXYHuQwwth56nHTCtrZGUa50wdTV92h8Rr0+DuqjnDeMNckygeO7Brq9khKO73pgvPyw3TvnD7CkROrLjC3KGUn4ILnoI1msRIie2y3GqWghI1xTvipe3VH69tRCT2Ln13s/iB775MQAoDLNYWJoAACAASURBVIQskIb/rg65QiRCaiEk7TqRnp7uqrO9QC0Eavg6homilpipr3F9nyQDtYHpVLaMWeg3zWljmK/H6W07xTMlR+Poda8/XINddjuPG+RZRvr5hVyHFQhdRxCEuFifEJ8cHgJQiEH+zGLms+fS3Zh0ifGet8Shel+qNMJKIqF/ZdYOOc5AYSBkgVSXp9A5sgBU/+ZD+Uqeoh4AcdokVHZvstlz6W6nnOkUZcqlsYiwnxuFvKSHL9pXhDBizxkyRGIMYerejpLBjbH87BFAGMpghKXBFsY+hX+gjX99Ge/KSyx99jiimGTvIbRTCFwpj/LmS3GId60ijkpEG+JgPAGoWuphpXTfxNn0Rh3nq2u2EkKm5a898fllossbTRvvVMZGlhzjb4tOqEc7DOZwu6yt15m6skA0zgt7KZWMIoM6X+zJx7QY2nExX+zZI21Hw+0gtp051kwb6f1qHSO9DyRPJN8LIWApbBTane6fbHcO9aTfiHisuD/6XvlcsOe3JdcZdaWk5YUCz/+Wx+J5T38sPQZCloroouUIjzCiKY+HTtR/+jIcZPtyRSxaOgzW2NcsRezJqucVnPIsXOilx6ZmodJBjDylVVyTOEdXNnoetjcsQjByzMEDcVnvOG3KjhE4xPWcOi8gd6x9uDaH0WgkWhQfqBPeQEF84Y9cNkO88yGcRb6LIht22fPXYwfpRlXf8WC3ke6VfoVri64d9k1z6WhzVFofpzAQsiqkH+/kH262Ss7kscer1aalGSp+iTiWTXLZLrkSqA/l8umzSERJk9MmZShLPkqtesBC/PTT2bmefJ1lqCmuCptWgk3G1+Xj6cE0u8YSAOfDs25dWjb08vWf4kc+vezyfh6TGEGNLQwVifQ96aXK810Tt7L2RZnvN4q4ztZ8YWiuRshmDQoDIQtg/7X/U8eDJxH/Ip3cUSY1G2LX92cuzueFmbYiIb2SelEgGrVwLA1Ay0X3VOPLa5JaFuvU3pBTT2cnU+ccfFzKovaAmJwGGvLHnn5+/EE8oVw19OH4SD7ZbFZUlcIRn4lIs6zkQDQas5FaIiFNvf0d0WVD6VRP+laELiQJdcixqWmpeA+33PMZPP9bLqYwELIoip42MFkobDfRJKalmys4IyqqkigSTh7JD18V5w4JsTevjHdK6+2HAnB5qqyPbRHLa8hDorndNfpgqGQIySuh0M8yANWefngq2jmXXsqTz6rXPooCIpf11jOTxsFxkd5DCDuN8nPYEEZc3nAX750H4oNnzo1Uj14b+NJTcMhLkOulzy2Vc5tczmzVZirdes8fAaDHQMjC0c6A7C1bbAigdqgnmmwflAv5s+3UohKNdl+gIb2VTNSR3uPQLqXa6tK/ImQmhEIW009T+xD67x4UiwvS5ecPZIjJGPUwo8m7z6fB6rjqap6VFF/XifwqUPW8grymOL4AwI2E2Y0L9nnI5yLqD7RlT8AjXstYiFutp29CajAPDYZlTNLAtrqduWzNs7N+aU2t4xEKAyEL4OxtHy/S1J99NYrQ0wNP+fs8jlp5J2a9+AnZy7qjeOSlMqRItMoKQYjTZyueQyopusnJq4nz+5PTYEM00UjnT/XMQerdm5f2xLOrMN9YL74nPA8ZLsoeivBMklcx6p51S+cpPYfUt4/3wEyx1XdFegI5pDT20U+on0N+EyY4h/rvh6RyPPZjOF2VkPkZPeF5vcdr/cK6FzGM/imrpvKerPVDLn24WvokXDZYWQ9tZU5mFbN1sm+Sp6mGGtKU0XL6aTzeLYshp5mOcl1hammamjoapamqur5RuHZ9jtqU1+r02nStTlyHaIPJj1SuetPL+mJ5kbYI4vf1Q992hB4DIYugvdR2OD4pccq/71p/rrqEQvPk8VB54vJp5wEV5cJpLEL4CJCruMaprwDEpCS97lL3UQvLAM11jUT4KA8yj1Mbcm8/eFNjD4TnGRDDUQCAz2cvRfTw9Uwl8XKgFHIyXk7yhmJd8a5UBphD6CyGi5JjFO9jqF96FfMu1V3trITbT2EgZEGo5wAAYQyGFI5l5j+/ZLJnUZZJ1aiZNCGpWU/q+usSLhq+nE+LRDR8QkzkdRTiEOvMTx+n2UP2euQLe9T1xvoAvTQ3hHBI8RmpIqHy7lrGI2OcXV65Vt0xc95ifEGHgHy6zvKYKlfRBfuttb6zPpmnMBCyYNLfavVhsgmGuj5sMHtbeh+Gm1i4TMo1NY+o80SDn8JLXmWNbzLTguD1qdX4QPz8PODjDKG4ppF8JmGkyiuvIr1sx4VVWfN7HeJy2nJRva5FYqBZeCndmnrGo4nXKAejpVeBvHx3bWwh3UPx3EYhDmpKr/ZW7bc2/ViBpzAQsgyaDkDvLKUJlQHTeSG1qqYcUuxd86nnIuR5pOMhHIfuHz/Ox9TDbkjjDZ09DWsWIS6S57pQTuq1oxJCkoPJ0ZgKDyIa6rEX73UGtKiIem1oCS4MYnuk2ULiITYVQmoIhH72Qd2hWEk6VheKIDQQ05BLR28iyndhKImQ5dIWCLE9lUiIgnOKxLDT5SuItlwcFds164+ud+11ootGEx7aO/BJDHI9cU/2yLVH0M0qEstd+HE63tnsmojFnnpIHwevw4kppdE7gPAefJiRFLVh9Hmxkmp0FBy0oW/v57smr8/a9rpXocoaESkfeivvgRMbWkfoMRCyEnr717Z3N9TeD+39L0RAYrhHR87TTm0FT/guzCGtHWCW6/bJoGph0eGlbnucn1pGNv7F/hihlz/KvXjx0p/sOcQmmFBTEYoSyS6doPsJ3koRCur1EOJ1Sy8k3ws1tlAdk8hviCs9khxessItn2qHPFr5NaIwEDIn+6/9H4PyNb2HSkb1t9ooMNjctwSkJhgTl/WQJjyGOMoep9zMzyp0ZdSyG2KaqqpbvPRHMR7DF+96rrz7OY43JEMrw0eynd2xOBwQr8qrRfZsCCkPfHvvuzEKH3wq9awCJgpEDgHle25DRvZJZ3ErEW9tvpfdhZQhQN8UAme3PD0GQhbEpN57/vOTAjGoz98IO00ZRq6Esxo1DB40j4bcXIkv80hLphZfVd5B+GeSJ6TEAYjegm6FFAnbni49DQCH0JYTQhWSkuH1srSP6yuF2zIO5ypWRdW9/L6QUpba8iE3fTuFZ1CMT3Tpfb9X5beo37QX/6UwELISfLGbbOUs1cwQHuozFg3tEYWFnJUKUzmBryRJPwNaDNQ5BjDuppnKZwrU9NLUqZc9dIcy9DJK9SE88KY8B/EkeDLBxvZHpySvAAs1s9YLcQnSmO+C9NBkKCjdoZwWF+SLnoETg95RxaSgyXsNUWM5fVfzyt+8ncJAyMqo2b2JFrlV17T+QjxHeRJbU39vs0/RamJQ1uplHGSehRfSMxOVkNI4r7HkXQytxJBOJxApZCTFIYhLfLeDDONIAbXhHLlZ/+wMebz2uK3WcPJhUT4xuykafQefpvYCWXCQ2iO9NyO+6qtyxT2viQeFgZBlM9T22XzTOwUDzjGgMQ1vRBrF2kWVgtBzLj9uH5sG7+G9hx+N4IxA5Emcedlq9RAy8rXI3n1MVyJQCSvVvQDb20exb4VDkqJEIWN6CF2NJ4iXKsn8pl361G7Y9xagMBCyLOboDBfllyESzfM2Gu60aakaIL0xvO55qQxK54fIwnndyET0ARWX9xPEobKtiOUhPAFAh5ZgRSGGuuI7HzK1EJ8s0xIWGfVLH9EbqZGig92/lz7mH1IYCFk4y7B9RZ0yjrAi1ZAvyYktWKcYWIpxh86A6lVSozcRWxzSklsQjas3+exOTNJvZZDZqp+2Dg/E15ZKH6MtCvKsgByjUG0QOyKIh6gC6jfGQ13BUygMhCwAX/wFLvNk7fNPy6yCMvR861i4WY47hCmh+TmDkF4Th/EIGOV3PNfujTX+QDdGEQesddzfhpJkPeo5ZVFnfhmRHUDuDRVV2tZ754um6RIenK5KyGJYlyjMVZ3t/i7A89iEVfzlQn4ynKJGFHS69z4/jyFCPzGP6okj9rDRzUIqcuVnD/oHpO24Q2nSrZdhB51VWyvt1uSBCi9uUO29HRQGQubk1Gv+u0lZyqjxEuq0p6icY6hYbIIgFHgxMJutq+6pB5McjGXK1SMOKpRjjtd767KL3vYk1LE05qDbPdRTqLajHGApQ2UBCgMhC6fdZ5uvvjWwkQZ/OB5xZs+4W4pjJNdYCulqaY0h4tAz/lAJAbU+i/OlbSEQuZMvPIfuuBoob2yLC0316PuTxyjymARDSYQskXkFYruN8uYgYvr2fREA8vudR+mRhlacPhvunNCJRxk+6oJDoyQyusJg3JFnC5Xn9IB3hedg87YGvmseQvU3ymehiZkoDIQsnVr3bZoyZGbiAnnBWnYehOz3Iw0De7Pokzay8kE3aWmdEAWvytTCQKbTLxuqEuxwsF5Ndkj4qC9kpa9RRK9SWQoDIXOwX4wvTGKIF0FRWDzxvQ5IRj729OVaS11OQUpsrUHUY4BdLFd6ElGOamGq+tPWY6hH1FqDzib8ZS/D7violqLEpV/75RQGQtZDSyAoCgvHrBibTbnYki8WQv+4AqC/JfmiNvWJ9rfZ7PXHp5oduuU80niCF2skuRQSs08+23rzNcvBilpbQrDNAcceS2EgZM1QCFZB2a+v9/TLB9v0UhJlLL8eQkomvSISciA5DRS3BrpVeqg3qI8MV8WQUHMAWlSqBUMEyNJifBxjIIQcFuLKp0A3NuBStCe9fxkQ6xCVQ83NgV712mf5CTm1Ney5bhXWzpDrVVJTqMt7tbp2Z9DjInui0V4LjW1j3JeJVi/ywn3AsYsfBoDCQMhcHNz68XU3gUxLNNxA7s4DkH3pLuzevQWuZmjVALIvjuhd4x20B49dGgDPnoQTg+XZgCPJTfZ8UphLegZpCEE2Vgxyi1iUh8Oxx345AAoDIXNBYdgeJoWTuk64MaA+RfmLUkUISXkL/bOUosEvQkpoC0dcjrscwI5nyHEn60V0WURLXL7mdKKUkcJAyJzUY9VkQ+kNJ3kT2ukO2OecjSPQeBmPFItwnhQ+AuTvjR5wjgZdvr8BZjAaagA6iUwcQIYQE/Hr6URd8p0YzgoIKAyEzEz2FigOW0cKJ3nx9WWjKrc8xnAYmRfjyB65DTblDN0LdkqDD+NR2FrUdo72pH210G28BJUudmLoKYyjxFBUVAov9q/+ruMAKAyEzMxZFUaiOGwf0fBrr0Fa8jyILMIv6Z+K12DewyDFIYV4wtmlpwFRPnk1lcHicumL3OtP26ZMN4MpK4s3SuPslChQGAiZmYNbP2ZSioAt2URSOMkZPdfPMDuZ5r36dotxBZmeHqALoaNg9bt0L8JE0iCLgFXSpWzAlXiEDM11knKsSIecROZ0yWlwGjh+ycPTLaIwEDIj7YFneg/bQvYZAEih8AjTR2PXPciEGSHOIhGmm0KMN4g88VyAMOQqxBRHoMvAVFdXNujNelH+5qmlvUXFOQKWvYzjF1MYCFkyFIeNR8zUkc8y6EUsRNb4b+xxpxf0xOU2Qo7Qm3dwyui78JmeYBajDGkvhoSch1xOA5DbQjxSyMklIUv+gTT8ItSUB6OzUngHPPXii9L1UhgImYFhayRRHDaZFDAKAiFj/LH3Lr0G+Q7p9BBcCN24mBdI+XwY6M1DFjGkFOsQg8cmzC+9ARcMvA+DDjn6FENcXWG5XlKXLwuBHaxGDFylEzmGkghZHRSHTUe/aDOmCQ8BURwgrHnIJ0JL6dkFMaicp6vmsYLkJaRpqvGZhhguyktxy7hSCAiFc+SxgzwUEWc85Wuw5b3cEt7GU4UoADBvqCCEDKIceO7Dw8wTIZuCmvnjs6GPA7ZqwaG8tEV3SOQNzxHAx/QwOBzSvfd6G7JM2E55bN1I9cmysW15AcBcj/dIdYeddG7vx0A6b1f++CU5jARQGAiZidmeeKY4bBopHi8EIM/hyaoRjT7kJ4aLg63Di7qsGHlp8FP+KARScHIeKQi5nVokvBQJKR7weOoRCgMhczHfMhgUh01FGmuozeRP5D1fpisvAFockmAIUcgeAJT3kD0X6W2IskoURDnjoSShEJ5DqjV6DiHfU+kxEDIfZ7k+0k4h38WQ0ipeQ/6MYSZUjiEZ29QzhzHgwnBLEVBehTD06YyFEORwVzyP8gxiyeQdIJWT125FAaAwEDI1B7d8jB3/ncSEeNJnmWb8hywk0lgLI516+tFLMCGl4ryI/gKK3n4WAhTbKq8QKJhyUjyeeuQRxZ1wviaXhJAm7nH/WuzMVMOimkJaOFfdd43j8e1l8VicpeRivvBiHHkM8elp186r0hGnuzpRVqen47X6IMtW8pnrrV2ryhvy/NG7XlwUp8dAyBQUzy+wW7WdFP1hbzatJ5CPeZFXeQ1mEFnNGpIDx43QUh4sliEmaK8g9fz1eevhsPJaVT7v8ePPflrt7lAYCJmGg1sq01RDiJhsL97siRB9TosJNqRUExIYcUjbvi0glTrT+EPML9uTwlJ23AIm/JT3u82c76lHH1m9HxQGQqagd0YSxWEzqIVWpIFuURxseA1D6ohjCvbc0otALU99/ME+q5AHpuNYBqqGf5JAfH1lfAGgMBAymE4UJlgHisN6qYlCi0nDq7N6DbaXL87VFIdo2IsQk6lXCIicygq5XwsxVQTiJ668rHnpFAZCBnI2Pe08wKBQIDaPKefZSB8jG1iTLkNHyojnbXj9WRUHFb6SYiKnn5oZRalJXvzOSe+hXyB+4qq95rVTGAgZyKlX/5bYG2BkmlmoGkthGm+hihdfjQwfSREQeZKt9VWjbMM7YaP0Isw4QcxXDTEJryI/zwCxn8v2CUQrhBShMBAygPrYwjziQBbKFKKgvpJpvIhqSMkY7nhM6Yr1DlANMfmKiKQ8Phj2mgBUBUJ6GPo6vff4+sagc4TCQMgAzjYXzRsQN6I4LJcFjSsM+ZoKo60KWnHw+rAsL+swaTFfPJYHn7UApPwNgRCqoENQAK75nhO910lhIGQAOoxUY4A4UCA2EyUWOpwke/85uxUHL4rVxEE/Z2DFQX56k5YHk70YVtAeRCqv2uPzcSMQk0QBoDAQMpGDWz82MOTA0NLKmWVcQfb2hxdq1xXVQ2tKLuNz3lpYyfeJg8obBUHXXXghVkBM+InCQMgC2I/eAsVhs5h7sFkw6Tuxx6v5bZhHh3yKKozxT4LgRehH5k2CEI1/dkP1089eCEQUhG77mu/9JxMutINrJREyAXf0uSZhiEEakGeRhu0wMuf902sMlWsQxXWMRIped0iurwQnDjmRtWfdI7l+U209o9Zxc96i3fba0jkdPvfe6zAEegyE9LBfG1tYlOdA5mPOPq2v7Knh4voAgyjRHpuwJ6iue1SZkRTzWu/BPrdQrppaqUOdE7h2oLcA0GMgpBd39PvQ7P0vwnOg1zAf89w/Z970rFZglV5Dt1HP68o8ylNQldR78hNWPxUuQZG/6qkUebp6//x9L8NQ6DEQ0mD/1b8ZttoDj5Nhv2upzNOvtWVVR1/syFlGpqyveQplZaKYGSiOdclpqmbWU34uAYX3EMcbpHeTvZF8rmuf842YBgoDIQ30SqpLEgc67GtFB0w8quKQNuvioMv58us2RjovoQ1h/KF+F5pPSleeWUCcd+TzudImPL7h674SL3jON02+GQIKAyEVDm75WOVNbfOIA1kaC73/1rBPrtuKiBf/eLOfM2lxiEerYw0iv/QYskCY80nvwQPXTikKAIWBkCr7r35n3lmIONBr2CpqX0mv1yDLeJW/ZrBjWSUO8hmH4iE3KEEQyhD9BX0+4S18w9d95RQX3sHBZ0IquCPPiVsiUeVoFJw0GDrPQDbpZY57WL4eUw4e5/282Zh2qgaKywHsnF3Xp4a2G1NXewfK5TnF+f7y7H/BLNBjIMSQB52BMs5c3RHJM/az2D/bMHIoRu7nTd3zrxTNvoWpo/QcYq+/rC8vsR2muSbHoBJOMtvvfvnzhl5sAT0GQgzZW1Cp1c3pPYCeXi29hvmZ8R6WHgNQeg05LW7mfrx80Czv5z3zUFqqtzEt1noVqo3iXI0H3572+Efh3S9/fuWahkGPgRDB/qve2ei9L8pz4FjDJtLXP+77KnM/X/bg837OKvf1OIAuKBbuM7OZoM5VmeqKvP3C5/7T/gueAD0GQgTuku8NGwN6/JM8B3oN62FhXoOM9ZdpzXIq/o9mrz6l2LqHPjDn6nle9P3/HC967j8r2jkN9BgICey/Ss5E8o3O/RSeA72GLWeC5xhTijEGr3OaZTRsfrUaqi4oPoZtP+3xXzW3KAD0GAgBABzc8lGceO7PhD295EC9g297iY10oNGDpdewNFY5ztBXvsdzKPO3xyjcBA8hjnU87fGPwm+/4oeqbZsWegyEANj/BeEt2LjuJM9B7Q71HOg1bBozjTPIPI2UmudQns+bXzUz0yhVJF8e5EVWjxd9/z+f3MiBUBjIoefglo/i4JaP9NjqOGWwkl7dXYA4kA1hiu/N24ffJpZoLslR7veLw++84ofxDY//qsZZpofCQA49+7/wG2FLzw4p/5xb4lCzAEON/rSzmsi6GPaV2BfyeL01sYPgTRbpScjftSwOT3v8V+Fpj3/UkMYNhsJADjWdt/BRkWIHAC0DQ0vVLDMMRpOVMnzItdZxiEne9A+MOFjp8DatTxygNp72hEfhd1757wa2eTgcfCaHGnfxlXHLHhEfPYPHxaH6Mgg6y8DBaA5Cz84SlsdoV9ueiODMflmPTesboC4fcvu/H3x5rUFzQ4+BHFr2f+E3TOhIUpkS2DzePjzfeAP7bJuB6PFXHcb2WJM3+7KeatkJ+/K9zr/7yn/f0+b5oMdADi3usc9G+cCamULYPGby1KYzzvQAXH3KI5mShb4PGmg/2GimmBab7emu7bR+rwEAfu9V/xFPe8JixxUk9BjIoeTE9/102LIDx2aWiNyctqc/U5drUg+SrAcxplBxEMrBYXm0Vlf916kcbyjHPX7vVf9hqaIAUBjIIeTgQx/BwYc+IlL6BMDOOmr8oVdnK8miQ0NKtWooDptD+7tQAmEGj+PKqLaeWkipJg5xvxOFr5661dNCYSCHjv1f+PX5poPOPEYwz3gD2RxaM9PS0WLSaj5S7g8Zb/B+daIAUBjIIePEc16SvYXCM5C7Za+vOG4ZNBt1VnGgWKySyUOvk7+PWh1l0jCxeM+r/+PKRAGgMJBDxMGHPoKDmz+CIjSk/giNWKikSWGlOWYb9RkiasJmMpPXWf996AszrVoUAM5KIocI95gr0H4+YdLzB+VyyXpT7jdmG02cpdQ4b2+7SJMFzOiqL6w3/BzlMtt99bpiptJ7XvMjuGzFogDQYyCHhBPfux+25KBwJZTUF+8tvIcGg/paU4SiyGysos874Rz6BT2y2GRPcl2iAFAYyCFg/5XvwMHNd4sUIQK1cYYkAI1QkRUHrwqFtIaw1OrrTRswu4m0mVMcFhZQGRxRDGMKr7l6baIAMJREdpyDD92NE9+zL1JcPSxj18aX1B52aj7QNm1Z245KHQwnzc/CH3gbXr8rvr92+mVP/Br81L/9Vlz2xK+ZoZWL4wvWenZClsz+K96BrmsW//o84KNxFuneiz/u2FcSxwB93EsDH+rxAFylrDIasi2VtFRHX5laHaSX4ntYXf0evhMB87XZ9Mue+DV472uuXl4bp4AeA9lZTnzPyTALCfXB5moPfIpB5qGew1BPoi8/vYbFsNDF9YbX7YrvV6e/97VXr91LkHCMgewkBx+6O4wr9Aw2V8cSep5fmCZvb7kak6a+8rmGhTBHP3hiH7rvDXDF70PHZU/8avy/W1+9UaIAUBjIDnJw8904ceVPiZQhM5EmPb+Adl6FH1Zu1ucWmkJEBrPMIIm3vzutfMDJH/g2vPe1P7q8tswBQ0lk53BffXncGjhIPMOzDUPCSrbcxEHvSeeYUBeZjhnDShNDSo3lV2U46X2/+KMb5yVIOPhMdooTVxlPoTVIDDvY3EpHY7AaZpC4MkBsy6Vx6dag9yxwIHpmZrz33vsB4iALhA/nsffER+N9v7iZXoKEHgPZGU5c+VM4uPnDwweJATSnqfZOM+3p1S+k3ECvQW1SHGZmBnGY2msAcOaXfmyjvQQJxxjITnDiyhd3ogBUHjirPVwWD7UGjAeOHcxVrl5FOTYxBPbvZmaGvvE0/emTz3sGxre/dmtEAWAoiewA+z//tiwKKtQjN2xoR+athJWKdFTqcJXzTFPOhKJqYa9WfcV1FjtkyUwKKZ183jNw8nnftsIWLQ6GkshWc3Dzh3Hi2S/udoYOErfyNger7WDi0AHqAWGl3rDXLCGlWj4yiAWFlPae9GicfN4ztspDsFAYyNbSicJPhj1roG3aLOIwQWCqRt6WmyAOLYM/qK7W+Wt1kkHMIQ67IAgRCgPZSg5u/jBOPOsne4SglrZgcRjsOQwpN4840HNYKFOKw96THo1Tz3/mTghChMJAto5OFF4U9lrhn1bausRhiLcx4PxFXa1zV8qR4QwQhygGe0969AoatFo4+Ey2jv2Xv0Xs1QZt0X5+ofbsQe35guZieyZfbeB64oD0tIPRQwaV7bnFvaBALIy9Jz06hYx2GXoMZGs4OPdh7L/8LWIGkmCat6a14vrVY7N4Do1yQ+oefH6ONywdcY932TuoQWEgW8HBuQ/jxLNemBMGCUEtbUL4KH20jHNPvqnFYYjRHxqearWvUo4MYu9Jj8bekx+z895BDQoD2XgOzl0IomBj7SjTgLrBHPxk8ZzioM41RECmFYch4w22TKUcqXLq+c/EZSFcdJihMJCNJotCZFPEYWhPfqDhnzlPJc0epDg0OfX8ZwIAToZP0kFhIBtLKQqRAeIwSDCGioPcmFYcGnlsSGliPfLcA6+19/oOF3vGC6AQ9ENhbxf7JwAAD4ZJREFUIBvJie9+AQ7OXeh2Js3dT7trDCsVhn9APUPGEqyAtHr/Q8ShOOfucKpi6Gn8Z4fCQDYOJQoJaziLnel7083QzCaIQyNPS9Sqbazl2VxhsMadsf71QWEgG8WJ7742iELLgE0QiKl61BXjXs3bSsfkUM8s4jBJYHrFcbO9Bmn82aPfXCgMZGPIohCZIA5qc6g42PS+8Mw8nsMUhr+ZZ4iQTGp37XjPsQUSRYA9/+2DwkDWzsG5C9j/udOV8BHQb7h6es9TeRR99cza41+019CX3xyb5FVUk+YTiDi4SxHYDSgMZK3s/9xpnLr+dNirhYmqCfrYtOKQdgd4CK30VYvDtF7DTOLQTKzCqZ67C4WBrI0TV1yLg3PnTWrLsFcToI1sI1+vcCxDHBbhFUxzvHIdQ+5LI6nvIB8AOxxQGMjKOTh3ASeuuKZxdJLxalkyayhN/pbILFMcamGrmQeaK17D1OLQuHc94rD3pMd0i8bRKzhUUBjIStGhoxY9lqrXyLXEoXWsRxwWatgnhID66pjkhfSKwwTvqFYkcOr5307P4BBDYSAr4eDcBexff7oSOmoxIdbdZ+j6vIfB4tBjcKcx/taw18rXzt/nediQkira8Bpq5zDZugHkx9A7IBQGsnz6Q0d9TBCHlKVl7IYKxzyew4DjtbonicO04xGq+unE4dQP0jsgGgoDWSr1AeZpGCAOQFsE5haHIR7F0JCSqWOasNTENZP6xMHcA+fyktL0DkgFCgNZCgfnzuPEdwUvYa4nbacoO7U42GNTisO0U1QHi8PAsFTNa6i2P+/vPfkxOPmD307vgPRCYSAL5eDc+W4s4SbjJaxdHFr1DDTY1XomhHgWsVbSxPMNaWcUhO+gIJBBUBjIwjhxxTWlIEhWJg6N/IsQh2m9goWIwwznCOnZQ3gMCBkKhYHMzf71p3Hq+huGZd4Icagdm1UcJngNtTrmDSnZ442noM/8yrXYezIFgUwPhYHMzFSCYJlZIKYVh0qZanrDqC/c8DtzaKjxl3n7vYZTP/SdOPmD3wFCZoXCQKamOY4wLSsVh0q51npDU4uDK88zd0hJ7veFlPIxCgJZFBQGMpiFCYJkJnGolbG/xq662S8Otsws4Z2eehY6hTUf23vyY3Hm9S8AIYuCwkAmcnDuPM7edGH2sNEklvbimAHi0LdK6bRLYc/iOUwKO03wVM684YXYe/LXgpBFQmEgTZbiIfSxbIFojjmsQhwGjiUMOqfD3pO/Fmfe8CIQsgwoDKRgrkHleVmLOFSMebNN04rDkPGE6cThzBt/kl4CWSoUBgJgBeGiaViJOFS8hJZHUbRp0eIwQDycw6kfvhwnf/jysm2ELBgKwyFn5eGioSxFHCYMLqukJYjDJK+gVodz2HvKY3Hyh/8l9p5CL4GsBgrDIWSjvINJzCoQ8dd68JTUsN8XUirqmzR43Mo/fDxh79KLceaNLy7bQcgSoTAcErZKDCxDxKHv13jwlNSwP6849IWMJgmJEI8zv/pT2HvKY8vzE7JkKAw7zFaLgcWKwzS/tr1eg9qoHCt2KnVOEodaSMnUa+o786aTFAWyNigMO8Z+eG3mTojBIpk2pFQkL0McSmHYe8rFOPOmk42LIGQ1UBi2HArBFEwbUiqSh4rDbLOQ9i69GGfedKrVekJWBoVhi4gicHDu/ObNItoGpvIa7HGT1qx36Ewkfe4zN5zC3lMu7mk8IauDwrCBxLGBuE0RWCBTeQ0ibbA4TDkYDeDM6X2KAtkovmDdDTiMxJ5/hGGgdeGRDLYH4MS+zaMO1fKJYz6KQ61sZu/Si3Hmhv15LoCQpUCPYUpkb96ms2e/JfSujWT2bZ4+z2Hw+5mBvUsvwZnTLxnWXkJWDIWhgezV0+jvIMsQh4GzlCgKZNNhKCkQPQGKAOnoCSs10yZv7116MUWBbDyH2mPYv/40heAwM9FrMGnyYJE8eaB579glOHP6pTM1lZBVcqg8hp16EpgsATsYbdJkPm/FoW9AOnoKFAWyHRwKj2Gt7xcgm0tzDaaBnsPA5yL2jh3BmTf/9ExNJGQd7KwwbOxy0mSzmFccirCSHnTeO3YJzrz5uvnaSMiK2blQEscNyPIYOCAdkigKZFvZCWHg2AFZK5WH3/YuPUJRIFvL1gsDxw/I0pn41LMejN47dgnOvIWiQLaXrRUGCgJZCN43xhn6ZxlV83tg7/hRnHnLzyyocYSsh60ThoNz53Hiu65ZdzMIKdg7doSiQHaCrREGzjIim0PpTewdO4Izb33ZeppDyILZiumqJ664hoJAlseQKauVXZngP/k/F9kiQtbKaN0N6OPg3Hm4i55OUSBrwvfuxgR6CmTX2FiPgV4CWSlNrwHo8xzOvPU/Y+/YkaU0iZB1sXEew8G58xQFsnp6+0ceyl0Iu3vHjlAUyE6yUR4DZxyRtdPrOQBp+exjR3Dmbf95+e0hZA1sjDDQSyAbxYTQkv/Uu1bWFEJWzdpDSRxgJhtJT3+JngLZddYqDPvXn2boiGwuFXE4dfWVHFcgO8/aQkkMHZGtwcVxhaP0FsihYC0eA0WBbBXec7CZHCpWLgwUBbKNnLz6ynU3gZCVsVJhoCiQbeTU1Vdh79jRdTeDkJWxsjEGigLZRvaOH8WZt/3suptByEpZicdAUSDbCkNI5DCydGGgKJBthSEkclhZaiiJokC2FYaQyGFmaR4DRYFsMwwhkcPMUoSBokC2mb3jRxlCIoeahYeSuEIq2Xb8g+9edxMIWSsL9RgoCmTbOXX1VetuAiFrZ6Eeg7vo6YuqipCVwwFnQjoW5jGcuIKeAtluOOBMSMdChGH/+tMcbCZbDQecCcnMLQwH587j1PU3LKIthKwNeguEZOYSBg42k12A3gIhmrmEYf/604tqByFrg94CIZqZhYHjCmQXoLdASMlMwsBxBbIr0FsgpGQmYWAIiewK9BYIKZlaGA7OnWcIiewEfMqZkDpTP/nMp5vJrsA1kQipM5XHwBAS2RXoLRDSZiqPgd4C2RXoLRDSZrDHwLWQyK5Ab4GQfgZ5DHzCmewS9BYI6WeQx8CxBbIr0FsgZDIThYFPOJNd4rLjR9bdBEI2nomhJA44k12CYSRCJtPrMRyco6dAdgeGkQgZRq8wcGyB7BIMIxEyjKYwcOkLsmtwXSRChtEUBnoLZJdgGImQ4VQHn/ncAtk1OOhMyHCqHsPZmy6suh2ELI294wwhETINVWHgS3jILsGxBUKmoxAGTlEluwbf0kbIdBTCwEFnskswjETI9JQeA6eokh2CYSRCpkcJA70FsmswjETI9Chh4PgCIYQQLQwMI5Edgg+1ETIbSRjoLRBCCAGEMPChNrJrcNE8QmaDHgPZWTgjiZDZyMLA8QWyQ/D5BUJmZwTQWyC7B70FQmZnBHB8geweHF8gZHac997zvc5k1+Ay24TMTu+rPQnZRji+QMh8jLgMBtk1OL5AyHzQYyCEEKKgMJCdgwPPhMyHw8O/uXjnMyHbDAeeCZkPegyEEEIUFAZCCCEKCgPZKbjUNiHzQ2EghBCioDAQQghRUBjITsGpqoTMD4WB7BR86pmQ+aEwEEIIUVAYCCGEKCgMZGfgVFVCFgOFgRBCiILCQAghREFhIIQQoqAwEEIIUVAYCCGEKCgMhBBCFBQGQgghCgoD2Rm4ThIhi4HCQHYGrpNEyGKgMBBCCFFQGAghhCgoDIQQQhQUBkIIIQoKAyGEEAWFgRBCiILCQHaCveOcqkrIoqAwkJ2AzzAQsjgoDIQQQhQUBkIIIQoKAyGEEIXDw7/Zr7sRhMyLf/Dd624CITvD6NTVV627DYQQQjYIhpIIIYQoKAxk66HXS8hiGfHlJoQQQiQjPhhEth12bghZLCOArjjZbti5IWSxcIyBbDVcI4mQxTMCgJNXX7nudhAyE/QWCFk89BjIVsPxBUIWTxIGjjOQbYQeAyGLJwkDe15k2+D4AiHLIQkDe15k2+DvLCHLQY0xsAdGtglOmiBkOWhhYA+MbAnsxBCyPJQwsAdGtgV2YghZHsV0VfbEyDbATgwhy6MUBvbEyIbDzgshy6UQBvbEyKbDzgshy6X65DMfdiObDDsvhCyXqjDwYTeyqbDTQsjycd57Xztw4oprcHDT+VW3h5Be/IPvXncTCNl5movoMY5LNg0OOhOyGpoeAwC4i56+yrYQ0suZt/8sOyyErIDeZbcZzyWbwt7xoxQFQlZErzBw9gfZFCgKhKyOiS/qoddA1s3e8aPspBCyQnrHGFImjjWQNcKxBUJWy6BXe555+88uux2EVOHYAiGrZ5Aw7B07yqmCZC0whETI6hkkDAD/QMnqobdAyHoYLAx7x45yIJqsFHZGCFkPgwafVQEORJMVcOrqqygMhKyJqYXh4Nx5nPiua5bVHkIAcE0kQtbJ4FBShAPRZNlwFhwh62VqYQAY+yXLgwPOhKyfmYSBA9FkWZx5G70FQtbN1GMMqjAHoskC4RPOhGwGM3kMEcaCyaJgCImQzWEuYWBIiSwKhpAI2RzmEgagG4jmLCUyD/Q8Cdks5hYGoOvtURzILHBcgZDNYyHCAHAKK5meU1dfRVEgZAOZa1aShU9Fk6HsHT/KcQVCNpSFeQwAB6PJMCgKhGw2C/UYIieuuAYHN51fdLVkR+A6SIRsNgv1GCIcjCYtOAOJkM1nKcIAUBxICWcgEbIdLE0YAIoDyVAUCNkelioMAMWBUBQI2TaWMvhcPREX3DuUUBQI2T6W7jFEzrydnsNhg6JAyHayMo8hwqmshwOKAiHby8o8hgjHHHYfigIh283KhQGgOOwyFAVCtp+1CAPQiQOXz9gd9o4fhX/w3RQFQnaAlY8xWLjw3vZz6uqruLouITvE2oUB6MRh//rTHJTeQhg6ImT32AhhiOxffxqnrr9h3c0gA+AKqYTsLhslDABDS9sAQ0eE7DYbJwwRPu+wmTB0RMjus7HCANB72CQYOiLk8LDRwhCh97A+9o4fxcmrr6SXQMghYiuEAaD3sA44lkDI4WRrhCHCmUvLh2EjQg43WycMEYaXFg/DRoQQYIuFAeCDcYuCgkAIkWy1MEQoELNBQSCE1NgJYYgcnDuPszdd4BjEBE5dfRUuO36EgkAIqbJTwiDhIHUJZxkRQoaws8IQOexhJoaLCCHTsvPCINm//jQOzp3feZGI77mgd0AImYVDJQySXRMJjhsQQhbFoRUGy/71pwFga8Ri7/hR7B07Sq+AELJwKAw9bIpYyFegUggIIcuGwjAFcTqsZJEzn6QAMCxECFkXFIYlIoWEhp4Qsi38f8A3gveckHVHAAAAAElFTkSuQmCC"/> + </g> + </g> + </g> +</svg> \ No newline at end of file diff --git a/alfa-client/apps/admin/src/favicon/logo192.png b/alfa-client/apps/admin/src/favicon/logo192.png new file mode 100644 index 0000000000000000000000000000000000000000..058c5bb8a8fc79b10adea359c97563030c09bc91 Binary files /dev/null and b/alfa-client/apps/admin/src/favicon/logo192.png differ diff --git a/alfa-client/apps/admin/src/favicon/logo512.png b/alfa-client/apps/admin/src/favicon/logo512.png new file mode 100644 index 0000000000000000000000000000000000000000..86e8c57ac21fd004a424962e4d46bf13bfcfcdef Binary files /dev/null and b/alfa-client/apps/admin/src/favicon/logo512.png differ diff --git a/alfa-client/apps/admin/src/favicon/manifest.json b/alfa-client/apps/admin/src/favicon/manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..ab5afa131edbb266f434c9ce991db50fc685633b --- /dev/null +++ b/alfa-client/apps/admin/src/favicon/manifest.json @@ -0,0 +1,24 @@ +{ + "name": "Alfa Administration", + "short_name": "Administration Client", + "icons": [ + { + "src": "favicon.svg", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/alfa-client/apps/admin/src/index.html b/alfa-client/apps/admin/src/index.html index b1d42def4c92709d7794e04aaa3484164a21b4a8..667d6ae9fdd9724394c4018d6c6526ee13e177c1 100644 --- a/alfa-client/apps/admin/src/index.html +++ b/alfa-client/apps/admin/src/index.html @@ -1,13 +1,15 @@ <!doctype html> -<html lang="en" class="h-full bg-white antialiased"> +<html lang="de" class="h-full bg-white antialiased"> <head> <meta charset="utf-8" /> <title>admin</title> <base href="/" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> - <link rel="icon" type="image/x-icon" href="favicon.ico" /> + <link rel="icon" href="/favicon.svg" type="image/svg+xml" /> + <link rel="apple-touch-icon" href="/apple-touch-icon.png" /> + <link rel="manifest" href="/manifest.json" /> </head> - <body class="flex max-h-full min-h-full bg-white text-black dark:bg-slate-100 dark:bg-slate-900"> + <body class="flex max-h-full min-h-full overflow-hidden bg-white text-black dark:bg-slate-900 dark:text-slate-100"> <app-root class="flex w-full flex-col"></app-root> </body> </html> diff --git a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.html b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.html new file mode 100644 index 0000000000000000000000000000000000000000..2449a303b186022b68d062f7b59ba73c5cb6a790 --- /dev/null +++ b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.html @@ -0,0 +1 @@ +<admin-organisationseinheit-form-container/> \ No newline at end of file diff --git a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.spec.ts b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..4ad49ca4595e598e66a9e6b0d40b46cca0d606b5 --- /dev/null +++ b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.spec.ts @@ -0,0 +1,26 @@ +import { OrganisationsEinheitFormContainerComponent } from '@admin-client/admin-settings'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { MockComponent } from 'ng-mocks'; +import { OrganisationsEinheitFormPageComponent } from './organisationseinheit-form-page.component'; + +describe('OrganisationsEinheitFormPageComponent', () => { + let component: OrganisationsEinheitFormPageComponent; + let fixture: ComponentFixture<OrganisationsEinheitFormPageComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [OrganisationsEinheitFormPageComponent, MockComponent(OrganisationsEinheitFormContainerComponent)], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(OrganisationsEinheitFormPageComponent); + component = fixture.componentInstance; + + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.ts b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..b7c9e0ea72a6ccd313239a4461f3a75692be5d9d --- /dev/null +++ b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'organisationseinheit-form-page', + templateUrl: './organisationseinheit-form-page.component.html', +}) +export class OrganisationsEinheitFormPageComponent {} diff --git a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.html b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.html index ff86abb3c13e73397ead229e205a03fa87c3f944..792930158756ab6bea2bf0e8fbd5c164c5037c0a 100644 --- a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.html +++ b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.html @@ -1 +1 @@ -<admin-organisationseinheit-container></admin-organisationseinheit-container> +<admin-organisationseinheit-container/> diff --git a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.spec.ts b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.spec.ts index e5c52e8433943e7eaedee4c2cc541400b7eb873c..59ddda81ab9c26fbac8f8bd976298596c9283b5a 100644 --- a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.spec.ts +++ b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.spec.ts @@ -1,23 +1,20 @@ -import { OrganisationseinheitContainerComponent } from '@admin-client/admin-settings'; +import { OrganisationsEinheitContainerComponent } from '@admin-client/admin-settings'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MockComponent } from 'ng-mocks'; -import { OrganisationseinheitPageComponent } from './organisationseinheit-page.component'; +import { OrganisationsEinheitPageComponent } from './organisationseinheit-page.component'; -describe('OrganisationseinheitPageComponent', () => { - let component: OrganisationseinheitPageComponent; - let fixture: ComponentFixture<OrganisationseinheitPageComponent>; +describe('OrganisationsEinheitPageComponent', () => { + let component: OrganisationsEinheitPageComponent; + let fixture: ComponentFixture<OrganisationsEinheitPageComponent>; beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ - OrganisationseinheitPageComponent, - MockComponent(OrganisationseinheitContainerComponent), - ], + declarations: [OrganisationsEinheitPageComponent, MockComponent(OrganisationsEinheitContainerComponent)], }).compileComponents(); }); beforeEach(() => { - fixture = TestBed.createComponent(OrganisationseinheitPageComponent); + fixture = TestBed.createComponent(OrganisationsEinheitPageComponent); component = fixture.componentInstance; fixture.detectChanges(); diff --git a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.ts b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.ts index a87b271644db44803dd63e84c99ca71b0be15443..4d653b6ed7b3701a4f74ce763f313cc93ca29dc6 100644 --- a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.ts +++ b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.ts @@ -4,4 +4,4 @@ import { Component } from '@angular/core'; selector: 'organisationseinheit-page', templateUrl: './organisationseinheit-page.component.html', }) -export class OrganisationseinheitPageComponent {} +export class OrganisationsEinheitPageComponent {} diff --git a/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.html b/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.html new file mode 100644 index 0000000000000000000000000000000000000000..3000e0ffbac09b63c3d12d715638ab67f610bc39 --- /dev/null +++ b/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.html @@ -0,0 +1 @@ +<admin-users-roles /> \ No newline at end of file diff --git a/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.spec.ts b/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..1285eda7400123a525353d217969ab1d0d681074 --- /dev/null +++ b/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.spec.ts @@ -0,0 +1,24 @@ +import { UsersRolesComponent } from '@admin-client/admin-settings'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { MockComponent } from 'ng-mocks'; +import { UserRolesPageComponent } from './user-roles-page.component'; + +describe('UserRolesPageComponent', () => { + let component: UserRolesPageComponent; + let fixture: ComponentFixture<UserRolesPageComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [UserRolesPageComponent], + imports: [MockComponent(UsersRolesComponent)], + }).compileComponents(); + + fixture = TestBed.createComponent(UserRolesPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.ts b/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..6b3576a76e34d01f319b4a8b2c4f44c82c62f44f --- /dev/null +++ b/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-user-roles-page', + templateUrl: './user-roles-page.component.html', +}) +export class UserRolesPageComponent {} diff --git a/alfa-client/apps/admin/src/styles.scss b/alfa-client/apps/admin/src/styles.scss index 9a4448d0f9c72e50e1aac1b190f36cf3118d060a..4e5a7a5c68a63422c4523a58efe6f664c0a6e13e 100644 --- a/alfa-client/apps/admin/src/styles.scss +++ b/alfa-client/apps/admin/src/styles.scss @@ -6,14 +6,13 @@ @import 'libs/design-system/src/lib/tailwind-preset/root.css'; @import 'libs/ui/src/lib/font/font_material'; +@import 'variables'; @include mat.all-component-typographies(); @include mat.core(); -.heading-1 { - @apply text-3xl font-medium text-text; -} +@include mat.all-component-themes($alfaTheme); -.heading-2 { - @apply py-4 text-2xl font-medium text-text; +body.dark { + @include mat.all-component-colors($alfaDarkTheme); } diff --git a/alfa-client/apps/alfa-e2e/src/components/navigation/navigation.e2e.component.ts b/alfa-client/apps/alfa-e2e/src/components/navigation/navigation.e2e.component.ts index 61ed796a5a43f0cd00c2c13ce8f78970e590b4c6..9154bd84e7e90fb1de296df3e3b03af8b7ff476b 100644 --- a/alfa-client/apps/alfa-e2e/src/components/navigation/navigation.e2e.component.ts +++ b/alfa-client/apps/alfa-e2e/src/components/navigation/navigation.e2e.component.ts @@ -24,7 +24,7 @@ export class NavigationE2EComponent { private readonly alleFilterToggleButton: string = 'alle-filter-toggle-button'; private readonly meineVorgaengeToggleButton: string = 'meine-vorgaenge-filter-toggle-button'; - private readonly nichtZugewiesenToggleButton: string = 'nicht-zugewiesen-filter-toggle-button'; + private readonly unassignedToggleButton: string = 'unassigned-filter-toggle-button'; private readonly locatorRoot: string = 'navigation'; @@ -40,7 +40,7 @@ export class NavigationE2EComponent { return cy.getTestElement(this.meineVorgaengeToggleButton); } - public getNichtZugewiesenFilter() { - return cy.getTestElement(this.nichtZugewiesenToggleButton); + public getUnassignedFilter() { + return cy.getTestElement(this.unassignedToggleButton); } } diff --git a/alfa-client/apps/alfa-e2e/src/components/user-settings/user-settings.component.e2e.ts b/alfa-client/apps/alfa-e2e/src/components/user-settings/user-settings.component.e2e.ts index 0ff6578edbce33cb3da9392fe3a1d41716352a71..ad90c1c60619c7124c00ce359a0a9a036d917cc7 100644 --- a/alfa-client/apps/alfa-e2e/src/components/user-settings/user-settings.component.e2e.ts +++ b/alfa-client/apps/alfa-e2e/src/components/user-settings/user-settings.component.e2e.ts @@ -25,16 +25,32 @@ import { TOGGLE_ELEMENT } from '../../support/angular.util'; export class UserSettingsE2EComponent { private readonly rootLocator: string = 'user-settings'; - private readonly emailBenachrichtigungLocator: string = 'email-benachrichtigung'; + private readonly emailBenachrichtigungNewVorgangLocator: string = 'email-benachrichtigung-neuer-Vorgang'; + private readonly emailBenachrichtigungVorgangAssignedToUserLocator: string = 'email-benachrichtigung-neuer-Vorgang-Assigned'; + private readonly emailBenachrichtigungPostfachNachrichtFromAntragsteller: string = + 'email-benachrichtigung-neue-Nachricht-Antragsteller'; + private readonly emailBenachrichtigungWiedervorlageDueToday: string = 'email-benachrichtigung-Faellige-Wiedervorlage'; private readonly darkModeLocator: string = 'dark-mode'; - private readonly buttonLocator: string = 'icon-button'; + private readonly buttonLocator: string = 'user-settings-button'; public getRoot() { return cy.getTestElementWithOid(this.rootLocator); } - public getEmailBenachrichtigung(): ToggleE2EComponent { - return new ToggleE2EComponent(this.emailBenachrichtigungLocator); + public getEmailBenachrichtigungForNewVorgang(): ToggleE2EComponent { + return new ToggleE2EComponent(this.emailBenachrichtigungNewVorgangLocator); + } + + public getEmailBenachrichtigungForVorgangAssignedToUser(): ToggleE2EComponent { + return new ToggleE2EComponent(this.emailBenachrichtigungVorgangAssignedToUserLocator); + } + + public getEmailBenachrichtigungForPostfachNachrichtFromAntragsteller(): ToggleE2EComponent { + return new ToggleE2EComponent(this.emailBenachrichtigungPostfachNachrichtFromAntragsteller); + } + + public getEmailBenachrichtigungForWiedervorlageDueToday(): ToggleE2EComponent { + return new ToggleE2EComponent(this.emailBenachrichtigungWiedervorlageDueToday); } public getDarkMode(): ToggleE2EComponent { @@ -42,7 +58,7 @@ export class UserSettingsE2EComponent { } public getButton() { - return this.getRoot().findTestElementWithClass(this.buttonLocator); + return this.getRoot().getTestElementWithOid(this.buttonLocator); } } diff --git a/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-more-menu.e2e.components.ts b/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-more-menu.e2e.components.ts index cb6f501de05aeae9d46d44ccbcc9c53c37127a28..f064652c55847f3c0afdbb7b7a418653172f9d33 100644 --- a/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-more-menu.e2e.components.ts +++ b/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-more-menu.e2e.components.ts @@ -38,7 +38,10 @@ export class VorgangMoreMenuE2EComponent { public getButton() { return this.getRoot().getTestElementWithOid(this.buttonLocator); } - // + + public openMenu(): void { + this.getButton().click(); + } public getExportierenItem(): VorgangMoreMenuExportierenItemE2EComponent { return this.exportierenItem; diff --git a/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-zusammenarbeit.e2e.component.ts b/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-zusammenarbeit.e2e.component.ts index 9197f6bc89b181b3cfb5851d03d86083b60704ed..32f13f19300b3144b20522eea3891f31257f144d 100644 --- a/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-zusammenarbeit.e2e.component.ts +++ b/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-zusammenarbeit.e2e.component.ts @@ -4,7 +4,7 @@ export class VorgangZusammenarbeitE2EComponent { private readonly anfrageButton: string = 'anfrage-erstellen-button'; private readonly zustaendigeStelleButton: string = 'organisations-einheit-search-button'; private readonly titelText: string = 'Titel-text-input'; - private readonly messageText: string = 'Nachricht-textarea'; + private readonly messageText: string = 'Beschreibung-textarea'; private readonly sendButton: string = 'collaboration-request-submit-button'; private readonly cancelButton: string = 'collaboration-request-cancel-button'; private readonly searchText: string = 'instant_search-text-input'; @@ -18,8 +18,8 @@ export class VorgangZusammenarbeitE2EComponent { return cy.getTestElement(this.anfrageButton); } - public createAnfrage(): void { - this.getAnfrageButton().click(); + public createAnfrage(stelle: number): void { + this.getAnfrageButton().eq(stelle).click(); } public getZustaendigeStelleButton(): Cypress.Chainable<JQuery<HTMLElement>> { diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/accessibility/vorgang-list.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/accessibility/vorgang-list.cy.ts index 2afd947dca54b689a373fde801350d3c5d0a53f1..471fb34173394ac2d8f871aaad4eec49d5c5c7a2 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/accessibility/vorgang-list.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/accessibility/vorgang-list.cy.ts @@ -4,7 +4,7 @@ import { VorgangSearchE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/ import { VorgangViewsE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-views.e2e.component'; import { HeaderE2EComponent } from 'apps/alfa-e2e/src/page-objects/header.po'; import { MainPage, waitForSpinnerToDisappear } from 'apps/alfa-e2e/src/page-objects/main.po'; -import { isKeyboardFocused } from 'apps/alfa-e2e/src/support/angular.util'; +import { isKeyboardFocused, isOdsFocused } from 'apps/alfa-e2e/src/support/angular.util'; import { dropCollections, pressTab } from 'apps/alfa-e2e/src/support/cypress-helper'; import { exist, haveFocus } from 'apps/alfa-e2e/src/support/cypress.util'; import { initUsermanagerUsers, loginAsSabine } from 'apps/alfa-e2e/src/support/user-util'; @@ -63,7 +63,7 @@ describe('VorgangList Page', () => { it('should focus settings icon', () => { pressTab(); - isKeyboardFocused(header.getUserSettings().getButton()); + isOdsFocused(header.getUserSettings().getButton()); }); it('should focus user icon', () => { @@ -77,19 +77,19 @@ describe('VorgangList Page', () => { it('should focus Meine filter', () => { pressTab(); - isKeyboardFocused(navigation.getMeineVorgaengeFilter()); + isOdsFocused(navigation.getMeineVorgaengeFilter()); }); it('should focus Alle filter', () => { pressTab(); - isKeyboardFocused(navigation.getAlleFilter()); + isOdsFocused(navigation.getAlleFilter()); }); it('should focus Nicht zugewiesen filter', () => { pressTab(); - isKeyboardFocused(navigation.getNichtZugewiesenFilter()); + isOdsFocused(navigation.getUnassignedFilter()); }); }); diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/loesch-anforderung/loesch-anforderung-zuruecknehmen.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/loesch-anforderung/loesch-anforderung-zuruecknehmen.cy.ts index ffe863e32772dc046eaf29367ff88fe96bc07bbd..75ac8cdad8f38cffb276c4a0386e81628c996814 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/loesch-anforderung/loesch-anforderung-zuruecknehmen.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/loesch-anforderung/loesch-anforderung-zuruecknehmen.cy.ts @@ -102,6 +102,8 @@ describe('LoeschAnforderung zurücknehmen', () => { }); it('should change status', () => { + wait(1500, 'Statusänderung flaky'); + haveText( vorgangPage.getVorgangDetailHeader().getStatus(), vorgangStatusLabelE2E[VorgangStatusE2E.ABGESCHLOSSEN], @@ -177,7 +179,7 @@ describe('LoeschAnforderung zurücknehmen', () => { }); it('should have status zu loeschen', () => { - wait(1000); + wait(1000, 'Statusänderung flaky'); haveText( vorgangPage.getVorgangDetailHeader().getStatus(), diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/postfach-mail/postfach-mail.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/postfach-mail/postfach-mail.cy.ts index 292ad9ca566f8a29f7be1fcbf104757c712eb5cb..5f072fbfec1fa4f3497d046aa0eb949239bf7700 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/postfach-mail/postfach-mail.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/postfach-mail/postfach-mail.cy.ts @@ -246,7 +246,7 @@ describe('PostfachMail', () => { }); it('should show validation error on to long subject', () => { - postfachMailFormular.getBetreff().clear().type(faker.random.alphaNumeric(71)); + postfachMailFormular.getBetreff().clear().type(faker.string.alphanumeric(71)); postfachMailFormular.getSendButton().click(); exist(postfachMailFormular.getBetreffError()); diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/user-settings/user-settings.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/user-settings/user-settings.cy.ts index cd0b66b1f0310c27f6406ef071acdddabb5acd2f..2ba36a2468e8cf3c13653885f476e7d047da1d59 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/user-settings/user-settings.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/user-settings/user-settings.cy.ts @@ -58,8 +58,20 @@ describe('User Settings', () => { userSettings.getRoot().click(); }); - it('should show notificationsSendsFor toggle', () => { - exist(userSettings.getEmailBenachrichtigung().getRoot()); + it('should show benachrichtigung neuer Vorgang toggle', () => { + exist(userSettings.getEmailBenachrichtigungForNewVorgang().getRoot()); + }); + + it('should show benachrichtigung neue nachricht antragsteller toggle', () => { + exist(userSettings.getEmailBenachrichtigungForPostfachNachrichtFromAntragsteller().getRoot()); + }); + + it('should show benachrichtigung vorgang mir zugewiesen toggle', () => { + exist(userSettings.getEmailBenachrichtigungForVorgangAssignedToUser().getRoot()); + }); + + it('should show benachrichtigung faellige wiedervorlage toggle', () => { + exist(userSettings.getEmailBenachrichtigungForWiedervorlageDueToday().getRoot()); }); it('should show darkMode toggle', () => { @@ -67,22 +79,79 @@ describe('User Settings', () => { }); }); - describe('click on notificationSendsFor toggle', () => { + describe('click on neuer Vorgang toggle', () => { + it('should have initial unchecked toggle', () => { + isNotChecked(userSettings.getEmailBenachrichtigungForNewVorgang().getToggle()); + }); + + it('should switch toggle status', () => { + userSettings.getEmailBenachrichtigungForNewVorgang().getToggle().click(); + + isChecked(userSettings.getEmailBenachrichtigungForNewVorgang().getToggle()); + }); + + it('should be loaded after page reload', () => { + reload(); + + userSettings.getRoot().click(); + isChecked(userSettings.getEmailBenachrichtigungForNewVorgang().getToggle()); + }); + }); + + describe('click on neue nachricht antragsteller toggle', () => { + it('should have initial unchecked toggle', () => { + isNotChecked(userSettings.getEmailBenachrichtigungForPostfachNachrichtFromAntragsteller().getToggle()); + }); + + it('should switch toggle status', () => { + userSettings.getEmailBenachrichtigungForPostfachNachrichtFromAntragsteller().getToggle().click(); + + isChecked(userSettings.getEmailBenachrichtigungForPostfachNachrichtFromAntragsteller().getToggle()); + }); + + it('should be loaded after page reload', () => { + reload(); + + userSettings.getRoot().click(); + isChecked(userSettings.getEmailBenachrichtigungForPostfachNachrichtFromAntragsteller().getToggle()); + }); + }); + + describe('click on vorgang mir zugewiesen toggle', () => { + it('should have initial unchecked toggle', () => { + isNotChecked(userSettings.getEmailBenachrichtigungForVorgangAssignedToUser().getToggle()); + }); + + it('should switch toggle status', () => { + userSettings.getEmailBenachrichtigungForVorgangAssignedToUser().getToggle().click(); + + isChecked(userSettings.getEmailBenachrichtigungForVorgangAssignedToUser().getToggle()); + }); + + it('should be loaded after page reload', () => { + reload(); + + userSettings.getRoot().click(); + isChecked(userSettings.getEmailBenachrichtigungForVorgangAssignedToUser().getToggle()); + }); + }); + + describe('click on faellige wiedervorlage toggle', () => { it('should have initial unchecked toggle', () => { - isNotChecked(userSettings.getEmailBenachrichtigung().getToggle()); + isNotChecked(userSettings.getEmailBenachrichtigungForWiedervorlageDueToday().getToggle()); }); it('should switch toggle status', () => { - userSettings.getEmailBenachrichtigung().getToggle().click(); + userSettings.getEmailBenachrichtigungForWiedervorlageDueToday().getToggle().click(); - isChecked(userSettings.getEmailBenachrichtigung().getToggle()); + isChecked(userSettings.getEmailBenachrichtigungForWiedervorlageDueToday().getToggle()); }); it('should be loaded after page reload', () => { reload(); userSettings.getRoot().click(); - isChecked(userSettings.getEmailBenachrichtigung().getToggle()); + isChecked(userSettings.getEmailBenachrichtigungForWiedervorlageDueToday().getToggle()); }); }); diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-list/vorgang-list-views-pages.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-list/vorgang-list-views-pages.cy.ts index bd7f73d4ef984579de512bfbf916f6bb49f763dd..177e634b4a0c88afd8af705d8a2aedc2b6d3a2cc 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-list/vorgang-list-views-pages.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-list/vorgang-list-views-pages.cy.ts @@ -29,12 +29,7 @@ import { exist } from 'apps/alfa-e2e/src/support/cypress.util'; import { Interception } from 'cypress/types/net-stubbing'; import { HttpMethodE2E } from '../../../model/util'; import { VorgangE2E, VorgangStatusE2E } from '../../../model/vorgang'; -import { - dropCollections, - intercept, - scrollToWindowBottom, - waitOfInterceptor, -} from '../../../support/cypress-helper'; +import { dropCollections, intercept, scrollToWindowBottom, waitOfInterceptor } from '../../../support/cypress-helper'; import { generateIds } from '../../../support/tech.util'; import { getUserSabineId, initUsermanagerUsers, loginAsSabine } from '../../../support/user-util'; import { buildVorgang, initVorgaenge } from '../../../support/vorgang-util'; @@ -94,14 +89,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === PAGE_SIZE); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - ALLE_NAME_PREFIX + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - ALLE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, ALLE_NAME_PREFIX + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, ALLE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -118,14 +107,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === PAGE_SIZE); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -142,14 +125,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === 20); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 80, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[19].name, - MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 80); + assert(interception.response.body._embedded.vorgangHeaderList[19].name, MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -172,14 +149,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === PAGE_SIZE); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -196,14 +167,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === 10); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 101, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[9].name, - MEINE_VORGAENGE_NAME_PREFIX + 110, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 101); + assert(interception.response.body._embedded.vorgangHeaderList[9].name, MEINE_VORGAENGE_NAME_PREFIX + 110); }); }); }); @@ -222,18 +187,12 @@ describe('VorgangList View Pages', () => { }); it('should show page 1 with 100 vorgaenge NEU', () => { - navigation.getNichtZugewiesenFilter().click(); + navigation.getUnassignedFilter().click(); waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === PAGE_SIZE); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - ALLE_NAME_PREFIX + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - ALLE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, ALLE_NAME_PREFIX + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, ALLE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -250,14 +209,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === 10); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - ALLE_NAME_PREFIX + 101, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[9].name, - ALLE_NAME_PREFIX + 110, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, ALLE_NAME_PREFIX + 101); + assert(interception.response.body._embedded.vorgangHeaderList[9].name, ALLE_NAME_PREFIX + 110); }); }); }); @@ -287,14 +240,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === PAGE_SIZE); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - ALLE_NAME_PREFIX + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - ALLE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, ALLE_NAME_PREFIX + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, ALLE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -311,14 +258,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === PAGE_SIZE); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -335,14 +276,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === 20); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 80, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[19].name, - MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 80); + assert(interception.response.body._embedded.vorgangHeaderList[19].name, MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -357,9 +292,7 @@ describe('VorgangList View Pages', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangAngenommenAssignedPageLink(1)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangAngenommenAssignedPageLink(1)).as(loadPageInterceptor); }); it('should show page 1 with 100 vorgaenge ANGENOMMEN', () => { @@ -367,14 +300,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === PAGE_SIZE); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -383,9 +310,7 @@ describe('VorgangList View Pages', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangAngenommenAssignedPageLink(2)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangAngenommenAssignedPageLink(2)).as(loadPageInterceptor); }); it('should show page 2 with 10 vorgaenge ANGENOMMEN and 90 vorgaenge ASSIGNED on scrolling to bottom', () => { @@ -393,14 +318,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === 10); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 101, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[9].name, - MEINE_VORGAENGE_NAME_PREFIX + 110, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 101); + assert(interception.response.body._embedded.vorgangHeaderList[9].name, MEINE_VORGAENGE_NAME_PREFIX + 110); }); }); }); @@ -415,24 +334,16 @@ describe('VorgangList View Pages', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangAngenommenUnassignedPageLink(1)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangAngenommenUnassignedPageLink(1)).as(loadPageInterceptor); }); it('should show page 1 with 100 vorgaenge ANGENOMMEN', () => { - navigation.getNichtZugewiesenFilter().click(); + navigation.getUnassignedFilter().click(); waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === PAGE_SIZE); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - ALLE_NAME_PREFIX + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - ALLE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, ALLE_NAME_PREFIX + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, ALLE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -441,9 +352,7 @@ describe('VorgangList View Pages', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangAngenommenUnassignedPageLink(2)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangAngenommenUnassignedPageLink(2)).as(loadPageInterceptor); }); it('should show page 2 with 10 vorgaenge on scrolling to bottom', () => { @@ -451,14 +360,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === 10); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - ALLE_NAME_PREFIX + 101, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[9].name, - ALLE_NAME_PREFIX + 110, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, ALLE_NAME_PREFIX + 101); + assert(interception.response.body._embedded.vorgangHeaderList[9].name, ALLE_NAME_PREFIX + 110); }); }); }); @@ -480,9 +383,7 @@ describe('VorgangList View Pages', () => { beforeEach(() => { navigation.getAlleFilter().click(); waitForSpinnerToDisappear(); - intercept(HttpMethodE2E.GET, buildVorgangInBearbeitungPageLink(1)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangInBearbeitungPageLink(1)).as(loadPageInterceptor); }); it('should show page 1 with 100 vorgaenge IN_BEARBEITUNG', () => { @@ -490,14 +391,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === PAGE_SIZE); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - ALLE_NAME_PREFIX + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - ALLE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, ALLE_NAME_PREFIX + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, ALLE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -506,9 +401,7 @@ describe('VorgangList View Pages', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangInBearbeitungPageLink(2)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangInBearbeitungPageLink(2)).as(loadPageInterceptor); }); it('should show page 2 with 10 vorgaenge IN_BEARBEITUNG and 90 vorgaenge ASSIGNED on scrolling to bottom', () => { @@ -516,14 +409,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === PAGE_SIZE); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -532,9 +419,7 @@ describe('VorgangList View Pages', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangInBearbeitungPageLink(3)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangInBearbeitungPageLink(3)).as(loadPageInterceptor); }); it('should show page 3 with 10 vorgaenge IN_BEARBEITUNG ASSIGNED on scrolling to bottom', () => { @@ -542,14 +427,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === 20); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 80, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[19].name, - MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 80); + assert(interception.response.body._embedded.vorgangHeaderList[19].name, MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -564,9 +443,7 @@ describe('VorgangList View Pages', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangInBearbeitungAssignedPageLink(1)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangInBearbeitungAssignedPageLink(1)).as(loadPageInterceptor); }); it('should show page 1 with 100 vorgaenge IN_BEARBEITUNG', () => { @@ -574,14 +451,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === PAGE_SIZE); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -590,9 +461,7 @@ describe('VorgangList View Pages', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangInBearbeitungAssignedPageLink(2)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangInBearbeitungAssignedPageLink(2)).as(loadPageInterceptor); }); it('should show page 2 with 10 vorgaenge IN_BEARBEITUNG and 90 vorgaenge ASSIGNED on scrolling to bottom', () => { @@ -600,14 +469,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === 10); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 101, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[9].name, - MEINE_VORGAENGE_NAME_PREFIX + 110, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 101); + assert(interception.response.body._embedded.vorgangHeaderList[9].name, MEINE_VORGAENGE_NAME_PREFIX + 110); }); }); }); @@ -622,24 +485,16 @@ describe('VorgangList View Pages', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangInBearbeitungUnassignedPageLink(1)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangInBearbeitungUnassignedPageLink(1)).as(loadPageInterceptor); }); it('should show page 1 with 100 vorgaenge IN_BEARBEITUNG', () => { - navigation.getNichtZugewiesenFilter().click(); + navigation.getUnassignedFilter().click(); waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === PAGE_SIZE); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - ALLE_NAME_PREFIX + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - ALLE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, ALLE_NAME_PREFIX + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, ALLE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -648,9 +503,7 @@ describe('VorgangList View Pages', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangInBearbeitungUnassignedPageLink(2)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangInBearbeitungUnassignedPageLink(2)).as(loadPageInterceptor); }); it('should show page 2 with 10 vorgaenge on scrolling to bottom', () => { @@ -658,14 +511,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === 10); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - ALLE_NAME_PREFIX + 101, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[9].name, - ALLE_NAME_PREFIX + 110, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, ALLE_NAME_PREFIX + 101); + assert(interception.response.body._embedded.vorgangHeaderList[9].name, ALLE_NAME_PREFIX + 110); }); }); }); @@ -695,14 +542,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === PAGE_SIZE); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - ALLE_NAME_PREFIX + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - ALLE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, ALLE_NAME_PREFIX + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, ALLE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -719,14 +560,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === PAGE_SIZE); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -743,14 +578,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === 20); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 80, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[19].name, - MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 80); + assert(interception.response.body._embedded.vorgangHeaderList[19].name, MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -765,9 +594,7 @@ describe('VorgangList View Pages', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangInBescheidenAssignedPageLink(1)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangInBescheidenAssignedPageLink(1)).as(loadPageInterceptor); }); it('should show page 1 with 100 vorgaenge BESCHIEDEN', () => { @@ -775,14 +602,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === PAGE_SIZE); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -791,9 +612,7 @@ describe('VorgangList View Pages', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangInBescheidenAssignedPageLink(2)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangInBescheidenAssignedPageLink(2)).as(loadPageInterceptor); }); it('should show page 2 with 10 vorgaenge BESCHIEDEN and 90 vorgaenge ASSIGNED on scrolling to bottom', () => { @@ -801,14 +620,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === 10); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 101, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[9].name, - MEINE_VORGAENGE_NAME_PREFIX + 110, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 101); + assert(interception.response.body._embedded.vorgangHeaderList[9].name, MEINE_VORGAENGE_NAME_PREFIX + 110); }); }); }); @@ -823,24 +636,16 @@ describe('VorgangList View Pages', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangInBescheidenUnassignedPageLink(1)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangInBescheidenUnassignedPageLink(1)).as(loadPageInterceptor); }); it('should show page 1 with 100 vorgaenge BESCHIEDEN', () => { - navigation.getNichtZugewiesenFilter().click(); + navigation.getUnassignedFilter().click(); waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === PAGE_SIZE); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - ALLE_NAME_PREFIX + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - ALLE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, ALLE_NAME_PREFIX + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, ALLE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -849,9 +654,7 @@ describe('VorgangList View Pages', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangInBescheidenUnassignedPageLink(2)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangInBescheidenUnassignedPageLink(2)).as(loadPageInterceptor); }); it('should show page 2 with 10 vorgaenge on scrolling to bottom', () => { @@ -859,14 +662,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === 10); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - ALLE_NAME_PREFIX + 101, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[9].name, - ALLE_NAME_PREFIX + 110, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, ALLE_NAME_PREFIX + 101); + assert(interception.response.body._embedded.vorgangHeaderList[9].name, ALLE_NAME_PREFIX + 110); }); }); }); @@ -888,9 +685,7 @@ describe('VorgangList View Pages', () => { beforeEach(() => { navigation.getAlleFilter().click(); waitForSpinnerToDisappear(); - intercept(HttpMethodE2E.GET, buildVorgangAbgeschlossenPageLink(1)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangAbgeschlossenPageLink(1)).as(loadPageInterceptor); }); it('should show page 1 with 100 vorgaenge ABGESCHLOSSEN', () => { @@ -898,14 +693,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === PAGE_SIZE); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - ALLE_NAME_PREFIX + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - ALLE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, ALLE_NAME_PREFIX + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, ALLE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -914,9 +703,7 @@ describe('VorgangList View Pages', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangAbgeschlossenPageLink(2)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangAbgeschlossenPageLink(2)).as(loadPageInterceptor); }); it('should show page 2 with 10 vorgaenge ABGESCHLOSSEN and 90 vorgaenge ASSIGNED on scrolling to bottom', () => { @@ -924,14 +711,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === PAGE_SIZE); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -940,9 +721,7 @@ describe('VorgangList View Pages', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangAbgeschlossenPageLink(3)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangAbgeschlossenPageLink(3)).as(loadPageInterceptor); }); it('should show page 3 with 10 vorgaenge ABGESCHLOSSEN ASSIGNED on scrolling to bottom', () => { @@ -950,14 +729,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === 20); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 80, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[19].name, - MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 80); + assert(interception.response.body._embedded.vorgangHeaderList[19].name, MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -972,9 +745,7 @@ describe('VorgangList View Pages', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangInAbgeschlossenAssignedPageLink(1)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangInAbgeschlossenAssignedPageLink(1)).as(loadPageInterceptor); }); it('should show page 1 with 100 vorgaenge ABGESCHLOSSEN', () => { @@ -982,14 +753,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === PAGE_SIZE); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -998,9 +763,7 @@ describe('VorgangList View Pages', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangInAbgeschlossenAssignedPageLink(2)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangInAbgeschlossenAssignedPageLink(2)).as(loadPageInterceptor); }); it('should show page 2 with 10 vorgaenge ABGESCHLOSSEN and 90 vorgaenge ASSIGNED on scrolling to bottom', () => { @@ -1008,14 +771,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === 10); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 101, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[9].name, - MEINE_VORGAENGE_NAME_PREFIX + 110, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 101); + assert(interception.response.body._embedded.vorgangHeaderList[9].name, MEINE_VORGAENGE_NAME_PREFIX + 110); }); }); }); @@ -1030,24 +787,16 @@ describe('VorgangList View Pages', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangInAbgeschlossenUnassignedPageLink(1)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangInAbgeschlossenUnassignedPageLink(1)).as(loadPageInterceptor); }); it('should show page 1 with 100 vorgaenge ABGESCHLOSSEN', () => { - navigation.getNichtZugewiesenFilter().click(); + navigation.getUnassignedFilter().click(); waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === PAGE_SIZE); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -1056,9 +805,7 @@ describe('VorgangList View Pages', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangInAbgeschlossenUnassignedPageLink(2)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangInAbgeschlossenUnassignedPageLink(2)).as(loadPageInterceptor); }); it('should show page 2 with 10 vorgaenge on scrolling to bottom', () => { @@ -1066,14 +813,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === 10); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 101, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[9].name, - MEINE_VORGAENGE_NAME_PREFIX + 110, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 101); + assert(interception.response.body._embedded.vorgangHeaderList[9].name, MEINE_VORGAENGE_NAME_PREFIX + 110); }); }); }); @@ -1103,14 +844,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === PAGE_SIZE); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - ALLE_NAME_PREFIX + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - ALLE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, ALLE_NAME_PREFIX + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, ALLE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -1127,14 +862,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === PAGE_SIZE); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -1151,14 +880,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === 20); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 80, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[19].name, - MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 80); + assert(interception.response.body._embedded.vorgangHeaderList[19].name, MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -1173,9 +896,7 @@ describe('VorgangList View Pages', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangInVerworfenAssignedPageLink(1)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangInVerworfenAssignedPageLink(1)).as(loadPageInterceptor); }); it('should show page 1 with 100 vorgaenge VERWORFEN', () => { @@ -1183,14 +904,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === PAGE_SIZE); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, MEINE_VORGAENGE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -1199,9 +914,7 @@ describe('VorgangList View Pages', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangInVerworfenAssignedPageLink(2)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangInVerworfenAssignedPageLink(2)).as(loadPageInterceptor); }); it('should show page 2 with 10 vorgaenge VERWORFEN and 90 vorgaenge ASSIGNED on scrolling to bottom', () => { @@ -1209,14 +922,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === 10); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME_PREFIX + 101, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[9].name, - MEINE_VORGAENGE_NAME_PREFIX + 110, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME_PREFIX + 101); + assert(interception.response.body._embedded.vorgangHeaderList[9].name, MEINE_VORGAENGE_NAME_PREFIX + 110); }); }); }); @@ -1231,24 +938,16 @@ describe('VorgangList View Pages', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangInVerworfenUnassignedPageLink(1)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangInVerworfenUnassignedPageLink(1)).as(loadPageInterceptor); }); it('should show page 1 with 100 vorgaenge VERWORFEN', () => { - navigation.getNichtZugewiesenFilter().click(); + navigation.getUnassignedFilter().click(); waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === PAGE_SIZE); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - ALLE_NAME_PREFIX + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - ALLE_NAME_PREFIX + PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, ALLE_NAME_PREFIX + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, ALLE_NAME_PREFIX + PAGE_SIZE); }); }); }); @@ -1257,9 +956,7 @@ describe('VorgangList View Pages', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangInVerworfenUnassignedPageLink(2)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangInVerworfenUnassignedPageLink(2)).as(loadPageInterceptor); }); it('should show page 2 with 10 vorgaenge on scrolling to bottom', () => { @@ -1267,14 +964,8 @@ describe('VorgangList View Pages', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === 10); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - ALLE_NAME_PREFIX + 101, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[9].name, - ALLE_NAME_PREFIX + 110, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, ALLE_NAME_PREFIX + 101); + assert(interception.response.body._embedded.vorgangHeaderList[9].name, ALLE_NAME_PREFIX + 110); }); }); }); diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-list/vorgang-list.search.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-list/vorgang-list.search.cy.ts index 774264c1145b03c36e535c670df13f69554e857f..4435c4c5cd1003c012a201831c654af075d565f7 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-list/vorgang-list.search.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-list/vorgang-list.search.cy.ts @@ -88,7 +88,7 @@ describe('VorgangList Suche', () => { const vorgangHeader: VorgangDetailHeaderE2EComponent = vorgangPage.getVorgangDetailHeader(); describe(`on user with role ${UserRoleE2E.VERWALTUNG_USER} by requestId/Eingangskennzeichen`, () => { - const requestId: string = faker.datatype.uuid(); + const requestId: string = faker.string.uuid(); const eingang: EingangE2E = { ...EingangE2ETestData, header: { ...EingangHeaderE2ETestData, requestId }, diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-list/vorgang-view-wiedervorlagen.pages.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-list/vorgang-view-wiedervorlagen.pages.cy.ts index 78b04e5ac5848f34378341dd04c16d045b3ee8a7..35c9b4c199f2b558c1a97783a2f4edfe01793cd5 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-list/vorgang-view-wiedervorlagen.pages.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-list/vorgang-view-wiedervorlagen.pages.cy.ts @@ -8,19 +8,10 @@ import { VorgangViewsE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/v import { HttpMethodE2E } from 'apps/alfa-e2e/src/model/util'; import { ClientAttributeNameE2E, VorgangE2E } from 'apps/alfa-e2e/src/model/vorgang'; import { MainPage, waitForSpinnerToDisappear } from 'apps/alfa-e2e/src/page-objects/main.po'; -import { - dropCollections, - intercept, - scrollToWindowBottom, - waitOfInterceptor, -} from 'apps/alfa-e2e/src/support/cypress-helper'; +import { dropCollections, intercept, scrollToWindowBottom, waitOfInterceptor } from 'apps/alfa-e2e/src/support/cypress-helper'; import { exist } from 'apps/alfa-e2e/src/support/cypress.util'; import { createDateToday, generateIds } from 'apps/alfa-e2e/src/support/tech.util'; -import { - getUserSabineId, - initUsermanagerUsers, - loginAsSabine, -} from 'apps/alfa-e2e/src/support/user-util'; +import { getUserSabineId, initUsermanagerUsers, loginAsSabine } from 'apps/alfa-e2e/src/support/user-util'; import { VORGANG_LIST_NEXT_FRIST_PARAM, VORGANG_LIST_PAGE_SIZE, @@ -71,10 +62,7 @@ describe('VorgangList View Wiedervorlagen', () => { dropCollections(); }); - function createVorgaenge( - namePrefix: string, - buildFunction: (id: string, name: string) => VorgangE2E, - ): VorgangE2E[] { + function createVorgaenge(namePrefix: string, buildFunction: (id: string, name: string) => VorgangE2E): VorgangE2E[] { let count = 1; return generateIds(110).map((randomId) => { const vorgang: VorgangE2E = buildFunction(randomId, `${namePrefix}_${count}`); @@ -111,24 +99,16 @@ describe('VorgangList View Wiedervorlagen', () => { beforeEach(() => { navigation.getAlleFilter().click(); waitForSpinnerToDisappear(); - intercept(HttpMethodE2E.GET, buildVorgangWithOpenWiedervorlagenPageLink(1)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangWithOpenWiedervorlagenPageLink(1)).as(loadPageInterceptor); }); it('should show 1 page with 100 vorgaenge with open wiedervorlagen', () => { views.getWiedervorlagen().getRoot().click(); waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { - assert( - interception.response.body._embedded.vorgangHeaderList.length === - VORGANG_LIST_PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList.length === VORGANG_LIST_PAGE_SIZE); assert(interception.response.body._embedded.vorgangHeaderList[0].name, ALLE_NAME + 1); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - ALLE_NAME + VORGANG_LIST_PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, ALLE_NAME + VORGANG_LIST_PAGE_SIZE); }); }); }); @@ -137,27 +117,16 @@ describe('VorgangList View Wiedervorlagen', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangWithOpenWiedervorlagenPageLink(2)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangWithOpenWiedervorlagenPageLink(2)).as(loadPageInterceptor); }); it('should show 2 page with 10 vorgaenge with open wiedervorlagen and 90 vorgaenge with open wiedervorlagen ASSIGNED on scrolling to bottom', () => { scrollToWindowBottom(); waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { - assert( - interception.response.body._embedded.vorgangHeaderList.length === - VORGANG_LIST_PAGE_SIZE, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - MEINE_VORGAENGE_NAME + VORGANG_LIST_PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList.length === VORGANG_LIST_PAGE_SIZE); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, MEINE_VORGAENGE_NAME + VORGANG_LIST_PAGE_SIZE); }); }); }); @@ -166,9 +135,7 @@ describe('VorgangList View Wiedervorlagen', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangWithOpenWiedervorlagenPageLink(3)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangWithOpenWiedervorlagenPageLink(3)).as(loadPageInterceptor); }); it('should show 3 page with 10 vorgaenge with open wiedervorlagen ASSIGNED on scrolling to bottom', () => { @@ -176,14 +143,8 @@ describe('VorgangList View Wiedervorlagen', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === 20); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME + 80, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[19].name, - MEINE_VORGAENGE_NAME + VORGANG_LIST_PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME + 80); + assert(interception.response.body._embedded.vorgangHeaderList[19].name, MEINE_VORGAENGE_NAME + VORGANG_LIST_PAGE_SIZE); }); }); }); @@ -198,27 +159,16 @@ describe('VorgangList View Wiedervorlagen', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangWithOpenWiedervorlagenAssignedPageLink(1)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangWithOpenWiedervorlagenAssignedPageLink(1)).as(loadPageInterceptor); }); it('should show 1 page with 100 vorgaenge with open wiedervorlagen', () => { navigation.getMeineVorgaengeFilter().click(); waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { - assert( - interception.response.body._embedded.vorgangHeaderList.length === - VORGANG_LIST_PAGE_SIZE, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME + 1, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - MEINE_VORGAENGE_NAME + VORGANG_LIST_PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList.length === VORGANG_LIST_PAGE_SIZE); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME + 1); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, MEINE_VORGAENGE_NAME + VORGANG_LIST_PAGE_SIZE); }); }); }); @@ -227,9 +177,7 @@ describe('VorgangList View Wiedervorlagen', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildVorgangWithOpenWiedervorlagenAssignedPageLink(2)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildVorgangWithOpenWiedervorlagenAssignedPageLink(2)).as(loadPageInterceptor); }); it('should show 2 page with 10 vorgaenge with open wiedervorlagen and 90 vorgaenge with open wiedervorlagen ASSIGNED on scrolling to bottom', () => { @@ -237,14 +185,8 @@ describe('VorgangList View Wiedervorlagen', () => { waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { assert(interception.response.body._embedded.vorgangHeaderList.length === 10); - assert( - interception.response.body._embedded.vorgangHeaderList[0].name, - MEINE_VORGAENGE_NAME + 101, - ); - assert( - interception.response.body._embedded.vorgangHeaderList[9].name, - MEINE_VORGAENGE_NAME + 110, - ); + assert(interception.response.body._embedded.vorgangHeaderList[0].name, MEINE_VORGAENGE_NAME + 101); + assert(interception.response.body._embedded.vorgangHeaderList[9].name, MEINE_VORGAENGE_NAME + 110); }); }); }); @@ -259,24 +201,16 @@ describe('VorgangList View Wiedervorlagen', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildUnassignedVorgangWithOpenWiedervorlagenPageLink(1)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildUnassignedVorgangWithOpenWiedervorlagenPageLink(1)).as(loadPageInterceptor); }); it('should show 1 page with 100 vorgaenge with open wiedervorlagen', () => { - navigation.getNichtZugewiesenFilter().click(); + navigation.getUnassignedFilter().click(); waitOfInterceptor(loadPageInterceptor).then((interception: Interception) => { - assert( - interception.response.body._embedded.vorgangHeaderList.length === - VORGANG_LIST_PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList.length === VORGANG_LIST_PAGE_SIZE); assert(interception.response.body._embedded.vorgangHeaderList[0].name, ALLE_NAME + 1); - assert( - interception.response.body._embedded.vorgangHeaderList[99].name, - ALLE_NAME + VORGANG_LIST_PAGE_SIZE, - ); + assert(interception.response.body._embedded.vorgangHeaderList[99].name, ALLE_NAME + VORGANG_LIST_PAGE_SIZE); }); }); }); @@ -285,9 +219,7 @@ describe('VorgangList View Wiedervorlagen', () => { const loadPageInterceptor: string = 'loadPage'; beforeEach(() => { - intercept(HttpMethodE2E.GET, buildUnassignedVorgangWithOpenWiedervorlagenPageLink(2)).as( - loadPageInterceptor, - ); + intercept(HttpMethodE2E.GET, buildUnassignedVorgangWithOpenWiedervorlagenPageLink(2)).as(loadPageInterceptor); }); it('should show 2 page with 10 vorgaenge on scrolling to bottom', () => { diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-list/vorgang-views-filter.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-list/vorgang-views-filter.cy.ts index c2d95b6e8e7097f83c3cb9ac6e3ec80db42e8641..8eff4b160aab6dfd2b93262ac85770099f12486d 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-list/vorgang-views-filter.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-list/vorgang-views-filter.cy.ts @@ -9,32 +9,14 @@ import { VorgangViewE2EComponent, VorgangViewsE2EComponent, } from 'apps/alfa-e2e/src/components/vorgang/vorgang-views.e2e.component'; -import { - ClientAttributeNameE2E, - VorgangE2E, - VorgangStatusE2E, -} from 'apps/alfa-e2e/src/model/vorgang'; +import { ClientAttributeNameE2E, VorgangE2E, VorgangStatusE2E } from 'apps/alfa-e2e/src/model/vorgang'; import { HeaderE2EComponent } from 'apps/alfa-e2e/src/page-objects/header.po'; import { MainPage, waitForSpinnerToDisappear } from 'apps/alfa-e2e/src/page-objects/main.po'; -import { - isButtonToggleChecked, - isButtonToggleNotChecked, -} from 'apps/alfa-e2e/src/support/angular.util'; +import { isOdsButtonToggleChecked, isOdsButtonToggleNotChecked } from 'apps/alfa-e2e/src/support/angular.util'; import { dropCollections, dropSearchIndex } from 'apps/alfa-e2e/src/support/cypress-helper'; -import { - containClass, - contains, - exist, - haveLength, - haveText, - notContainClass, -} from 'apps/alfa-e2e/src/support/cypress.util'; +import { containClass, contains, exist, haveLength, haveText, notContainClass } from 'apps/alfa-e2e/src/support/cypress.util'; import { createDateToday } from 'apps/alfa-e2e/src/support/tech.util'; -import { - getUserSabineId, - initUsermanagerUsers, - loginAsSabine, -} from 'apps/alfa-e2e/src/support/user-util'; +import { getUserSabineId, initUsermanagerUsers, loginAsSabine } from 'apps/alfa-e2e/src/support/user-util'; import { buildVorgang, createAlfaClientAttributes, @@ -149,16 +131,10 @@ describe('Vorgang views and filter', () => { status: VorgangStatusE2E.ZU_LOESCHEN, }; - const vorgangNeuAssignedInList: VorgangListItemE2EComponent = vorgangList.getListItem( - vorgangNeuAssigned.name, - ); - const vorgangNeuUnassignedInList: VorgangListItemE2EComponent = vorgangList.getListItem( - vorgangNeuUnassigned.name, - ); + const vorgangNeuAssignedInList: VorgangListItemE2EComponent = vorgangList.getListItem(vorgangNeuAssigned.name); + const vorgangNeuUnassignedInList: VorgangListItemE2EComponent = vorgangList.getListItem(vorgangNeuUnassigned.name); - const vorgangAngenommenAssignedInList: VorgangListItemE2EComponent = vorgangList.getListItem( - vorgangAngenommenAssigned.name, - ); + const vorgangAngenommenAssignedInList: VorgangListItemE2EComponent = vorgangList.getListItem(vorgangAngenommenAssigned.name); const vorgangAngenommenUnassignedInList: VorgangListItemE2EComponent = vorgangList.getListItem( vorgangAngenommenUnassigned.name, ); @@ -170,9 +146,7 @@ describe('Vorgang views and filter', () => { vorgangInBearbeitungUnassigned.name, ); - const vorgangBeschiedenAssignedInList: VorgangListItemE2EComponent = vorgangList.getListItem( - vorgangBeschiedenAssigned.name, - ); + const vorgangBeschiedenAssignedInList: VorgangListItemE2EComponent = vorgangList.getListItem(vorgangBeschiedenAssigned.name); const vorgangBeschiedenUnassignedInList: VorgangListItemE2EComponent = vorgangList.getListItem( vorgangBeschiedenUnassigned.name, ); @@ -184,16 +158,10 @@ describe('Vorgang views and filter', () => { vorgangAbgeschlossenUnassigned.name, ); - const vorgangVerworfenAssignedInList: VorgangListItemE2EComponent = vorgangList.getListItem( - vorgangVerworfenAssigned.name, - ); - const vorgangVerworfenUnassignedInList: VorgangListItemE2EComponent = vorgangList.getListItem( - vorgangVerworfenUnassigned.name, - ); + const vorgangVerworfenAssignedInList: VorgangListItemE2EComponent = vorgangList.getListItem(vorgangVerworfenAssigned.name); + const vorgangVerworfenUnassignedInList: VorgangListItemE2EComponent = vorgangList.getListItem(vorgangVerworfenUnassigned.name); - const vorgangZuLoeschenAssignedInList: VorgangListItemE2EComponent = vorgangList.getListItem( - vorgangZuLoeschenAssigned.name, - ); + const vorgangZuLoeschenAssignedInList: VorgangListItemE2EComponent = vorgangList.getListItem(vorgangZuLoeschenAssigned.name); const vorgangZuLoeschenUnassignedInList: VorgangListItemE2EComponent = vorgangList.getListItem( vorgangZuLoeschenUnassigned.name, ); @@ -243,15 +211,15 @@ describe('Vorgang views and filter', () => { describe('filter', () => { it('Alle should be selected', () => { - isButtonToggleChecked(navigation.getAlleFilter()); + isOdsButtonToggleChecked(navigation.getAlleFilter()); }); it('Meine Vorgänge should not be selected', () => { - isButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); + isOdsButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); }); it('Nicht zugewiesen should not be selected', () => { - isButtonToggleNotChecked(navigation.getNichtZugewiesenFilter()); + isOdsButtonToggleNotChecked(navigation.getUnassignedFilter()); }); }); @@ -328,9 +296,9 @@ describe('Vorgang views and filter', () => { }); it('should keep filter selection', () => { - isButtonToggleChecked(navigation.getAlleFilter()); - isButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); - isButtonToggleNotChecked(navigation.getNichtZugewiesenFilter()); + isOdsButtonToggleChecked(navigation.getAlleFilter()); + isOdsButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); + isOdsButtonToggleNotChecked(navigation.getUnassignedFilter()); }); it('should filter List', () => { @@ -360,9 +328,9 @@ describe('Vorgang views and filter', () => { }); it('should keep filter selection', () => { - isButtonToggleChecked(navigation.getAlleFilter()); - isButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); - isButtonToggleNotChecked(navigation.getNichtZugewiesenFilter()); + isOdsButtonToggleChecked(navigation.getAlleFilter()); + isOdsButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); + isOdsButtonToggleNotChecked(navigation.getUnassignedFilter()); }); it('should filter List', () => { @@ -392,9 +360,9 @@ describe('Vorgang views and filter', () => { }); it('should keep filter selection', () => { - isButtonToggleChecked(navigation.getAlleFilter()); - isButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); - isButtonToggleNotChecked(navigation.getNichtZugewiesenFilter()); + isOdsButtonToggleChecked(navigation.getAlleFilter()); + isOdsButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); + isOdsButtonToggleNotChecked(navigation.getUnassignedFilter()); }); it('should filter List', () => { @@ -424,9 +392,9 @@ describe('Vorgang views and filter', () => { }); it('should keep filter selection', () => { - isButtonToggleChecked(navigation.getAlleFilter()); - isButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); - isButtonToggleNotChecked(navigation.getNichtZugewiesenFilter()); + isOdsButtonToggleChecked(navigation.getAlleFilter()); + isOdsButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); + isOdsButtonToggleNotChecked(navigation.getUnassignedFilter()); }); it('should filter List', () => { @@ -456,9 +424,9 @@ describe('Vorgang views and filter', () => { }); it('should keep filter selection', () => { - isButtonToggleChecked(navigation.getAlleFilter()); - isButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); - isButtonToggleNotChecked(navigation.getNichtZugewiesenFilter()); + isOdsButtonToggleChecked(navigation.getAlleFilter()); + isOdsButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); + isOdsButtonToggleNotChecked(navigation.getUnassignedFilter()); }); it('should filter List', () => { @@ -488,9 +456,9 @@ describe('Vorgang views and filter', () => { }); it('should keep filter selection', () => { - isButtonToggleChecked(navigation.getAlleFilter()); - isButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); - isButtonToggleNotChecked(navigation.getNichtZugewiesenFilter()); + isOdsButtonToggleChecked(navigation.getAlleFilter()); + isOdsButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); + isOdsButtonToggleNotChecked(navigation.getUnassignedFilter()); }); it('should filter List', () => { @@ -520,9 +488,9 @@ describe('Vorgang views and filter', () => { }); it('should keep filter selection', () => { - isButtonToggleChecked(navigation.getAlleFilter()); - isButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); - isButtonToggleNotChecked(navigation.getNichtZugewiesenFilter()); + isOdsButtonToggleChecked(navigation.getAlleFilter()); + isOdsButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); + isOdsButtonToggleNotChecked(navigation.getUnassignedFilter()); }); it('should filter List', () => { @@ -553,9 +521,9 @@ describe('Vorgang views and filter', () => { }); it('should keep filter selection', () => { - isButtonToggleChecked(navigation.getAlleFilter()); - isButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); - isButtonToggleNotChecked(navigation.getNichtZugewiesenFilter()); + isOdsButtonToggleChecked(navigation.getAlleFilter()); + isOdsButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); + isOdsButtonToggleNotChecked(navigation.getUnassignedFilter()); }); it('should filter List', () => { @@ -586,9 +554,9 @@ describe('Vorgang views and filter', () => { }); it('should keep filter selection', () => { - isButtonToggleChecked(navigation.getAlleFilter()); - isButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); - isButtonToggleNotChecked(navigation.getNichtZugewiesenFilter()); + isOdsButtonToggleChecked(navigation.getAlleFilter()); + isOdsButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); + isOdsButtonToggleNotChecked(navigation.getUnassignedFilter()); }); it('should show full List', () => { @@ -616,9 +584,9 @@ describe('Vorgang views and filter', () => { }); it('should keep filter selection', () => { - isButtonToggleChecked(navigation.getAlleFilter()); - isButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); - isButtonToggleNotChecked(navigation.getNichtZugewiesenFilter()); + isOdsButtonToggleChecked(navigation.getAlleFilter()); + isOdsButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); + isOdsButtonToggleNotChecked(navigation.getUnassignedFilter()); }); it('should show message', () => { @@ -630,18 +598,18 @@ describe('Vorgang views and filter', () => { describe('Select Filter', () => { describe('Nicht zugewiesen', () => { it('should set selected after click', () => { - navigation.getNichtZugewiesenFilter().click(); + navigation.getUnassignedFilter().click(); waitForSpinnerToDisappear(); - isButtonToggleChecked(navigation.getNichtZugewiesenFilter()); + isOdsButtonToggleChecked(navigation.getUnassignedFilter()); }); it('should unselect Meine Vorgänge', () => { - isButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); + isOdsButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); }); it('should keep Alle unselected', () => { - isButtonToggleNotChecked(navigation.getAlleFilter()); + isOdsButtonToggleNotChecked(navigation.getAlleFilter()); }); it('should keep view selection', () => { @@ -667,11 +635,11 @@ describe('Vorgang views and filter', () => { navigation.getMeineVorgaengeFilter().click(); waitForSpinnerToDisappear(); - isButtonToggleChecked(navigation.getMeineVorgaengeFilter()); + isOdsButtonToggleChecked(navigation.getMeineVorgaengeFilter()); }); it('should unselect Alle', () => { - isButtonToggleNotChecked(navigation.getAlleFilter()); + isOdsButtonToggleNotChecked(navigation.getAlleFilter()); }); it('should keep view selection', () => { @@ -704,9 +672,9 @@ describe('Vorgang views and filter', () => { }); it('should keep filter selection', () => { - isButtonToggleChecked(navigation.getMeineVorgaengeFilter()); - isButtonToggleNotChecked(navigation.getAlleFilter()); - isButtonToggleNotChecked(navigation.getNichtZugewiesenFilter()); + isOdsButtonToggleChecked(navigation.getMeineVorgaengeFilter()); + isOdsButtonToggleNotChecked(navigation.getAlleFilter()); + isOdsButtonToggleNotChecked(navigation.getUnassignedFilter()); }); it('should keep view selection', () => { @@ -734,11 +702,11 @@ describe('Vorgang views and filter', () => { }); it('should select Alle filter', () => { - isButtonToggleChecked(navigation.getAlleFilter()); + isOdsButtonToggleChecked(navigation.getAlleFilter()); }); it('should unselect Meine Vorgänge filter', () => { - isButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); + isOdsButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); }); it('should keep view selection', () => { @@ -757,7 +725,7 @@ describe('Vorgang views and filter', () => { describe('on Nicht zugewiesen filter selection', () => { it('should show filtered list', () => { - navigation.getNichtZugewiesenFilter().click(); + navigation.getUnassignedFilter().click(); waitForSpinnerToDisappear(); haveLength(vorgangList.getItems(), 1); @@ -765,15 +733,15 @@ describe('Vorgang views and filter', () => { }); it('should show Nicht zugewiesen as selected', () => { - isButtonToggleChecked(navigation.getNichtZugewiesenFilter()); + isOdsButtonToggleChecked(navigation.getUnassignedFilter()); }); it('should unselect Alle filter', () => { - isButtonToggleNotChecked(navigation.getAlleFilter()); + isOdsButtonToggleNotChecked(navigation.getAlleFilter()); }); it('should keep Meine Vorgänge unselected', () => { - isButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); + isOdsButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); }); it('should keep view selection', () => { @@ -806,12 +774,12 @@ describe('Vorgang views and filter', () => { }); it('should keep filter selection', () => { - isButtonToggleChecked(navigation.getAlleFilter()); - isButtonToggleNotChecked(navigation.getNichtZugewiesenFilter()); + isOdsButtonToggleChecked(navigation.getAlleFilter()); + isOdsButtonToggleNotChecked(navigation.getUnassignedFilter()); }); it('should unselect Meine Vorgänge filter', () => { - isButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); + isOdsButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); }); it('should keep view selection', () => { @@ -839,11 +807,11 @@ describe('Vorgang views and filter', () => { }); it('should select', () => { - isButtonToggleChecked(navigation.getMeineVorgaengeFilter()); + isOdsButtonToggleChecked(navigation.getMeineVorgaengeFilter()); }); it('should unselect Alle filter', () => { - isButtonToggleNotChecked(navigation.getAlleFilter()); + isOdsButtonToggleNotChecked(navigation.getAlleFilter()); }); it('should keep view selection', () => { @@ -862,7 +830,7 @@ describe('Vorgang views and filter', () => { describe('on Nicht zugewiesen filter selection', () => { it('should show filtered list', () => { - navigation.getNichtZugewiesenFilter().click(); + navigation.getUnassignedFilter().click(); waitForSpinnerToDisappear(); haveLength(vorgangList.getItems(), 2); @@ -871,15 +839,15 @@ describe('Vorgang views and filter', () => { }); it('should select', () => { - isButtonToggleChecked(navigation.getNichtZugewiesenFilter()); + isOdsButtonToggleChecked(navigation.getUnassignedFilter()); }); it('should unselect Meine Vorgänge filter', () => { - isButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); + isOdsButtonToggleNotChecked(navigation.getMeineVorgaengeFilter()); }); it('should keep filter unselected', () => { - isButtonToggleNotChecked(navigation.getAlleFilter()); + isOdsButtonToggleNotChecked(navigation.getAlleFilter()); }); it('should keep view selection', () => { diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-exportieren.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-xdomea/vorgang-exportieren.cy.ts similarity index 92% rename from alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-exportieren.cy.ts rename to alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-xdomea/vorgang-exportieren.cy.ts index 768acbc0f79869d9a834fd236fcc25232232808e..d11aeed9a9bbb1d38b1c7660d73773ea320084d4 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-exportieren.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-xdomea/vorgang-exportieren.cy.ts @@ -76,7 +76,7 @@ describe('Vorgang exportieren', () => { dropCollections(); }); - describe('exportieren', () => { + describe('export file', () => { const menuItem: VorgangMoreMenuExportierenItemE2EComponent = vorgangMoreMenu.getExportierenItem(); @@ -103,7 +103,7 @@ describe('Vorgang exportieren', () => { vorgangMoreMenu.getButton().click({ force: true }); }); - it('should handle snackbar after abschliessen', () => { + it('should show "Herunterladen" button in Abgeschlossen status', () => { vorgangFormularButtons.getAbschliessenButton().click(); waitForSpinnerToDisappear(); @@ -119,19 +119,18 @@ describe('Vorgang exportieren', () => { vorgangMoreMenu.getButton().click({ force: true }); }); - it('should have 1 file in download folder after download', () => { - vorgangMoreMenu.getButton().click(); + it('should delete the downloads folder and click on download', () => { deleteDownloadFolder().then(() => { menuItem.getButton().click({ force: true }); waitForSpinnerToDisappear(); - - countDownloadFiles().then((count) => { - expect(count).to.eq(1); - }); }); }); - it('should close menu after download', () => { + it('should have 1 file in download folder after download and close menu', () => { + countDownloadFiles().then((count) => { + expect(count).to.eq(1); + }); + notExist(menuItem.getRoot()); }); }); diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-xdomea/vorgang-xdomea-inhalte.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-xdomea/vorgang-xdomea-inhalte.cy.ts new file mode 100644 index 0000000000000000000000000000000000000000..e1ec775a98bb267f6958d829d7163570aed65949 --- /dev/null +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-xdomea/vorgang-xdomea-inhalte.cy.ts @@ -0,0 +1,286 @@ +/* + * 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 { registerLocaleData } from '@angular/common'; +import localeDe from '@angular/common/locales/de'; +import localeDeExtra from '@angular/common/locales/extra/de'; +import { VorgangBescheidWizardE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-bescheid-wizard.e2e.component'; +import { VorgangFormularButtonsE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-formular-buttons.e2e.components'; +import { + VorgangMoreMenuE2EComponent, + VorgangMoreMenuExportierenItemE2EComponent, +} from 'apps/alfa-e2e/src/components/vorgang/vorgang-more-menu.e2e.components'; +import { CommandE2E, CommandOrderE2E } from 'apps/alfa-e2e/src/model/command'; +import { KommentarE2E } from 'apps/alfa-e2e/src/model/kommentar'; +import { VorgangAttachedItemE2E } from 'apps/alfa-e2e/src/model/vorgang-attached-item'; +import { buildCommand, initCommands } from 'apps/alfa-e2e/src/support/command-util'; +import { TEST_FILE_BESCHEID_VALID } from 'apps/alfa-e2e/src/support/data.util'; +import { uploadFile } from 'apps/alfa-e2e/src/support/file-upload'; +import { + createKommentar, + createKommentarAttachedItem, +} from 'apps/alfa-e2e/src/support/kommentar.util'; +import { initVorgangAttachedItem } from 'apps/alfa-e2e/src/support/vorgang-attached-item-util'; +import { objectIds } from 'apps/alfa-e2e/src/support/vorgang-util'; +import { VorgangListE2EComponent } from '../../../components/vorgang/vorgang-list.e2e.component'; +import { VorgangE2E, VorgangStatusE2E } from '../../../model/vorgang'; +import { MainPage, waitForSpinnerToDisappear } from '../../../page-objects/main.po'; +import { VorgangPage } from '../../../page-objects/vorgang.po'; +import { + deleteDownloadFolder, + dropCollections, + getDownloadFileAt, + getDownloadFiles, + unzipDownloadFile, +} from '../../../support/cypress-helper'; +import { exist, notExist } from '../../../support/cypress.util'; +import { parseXml } from '../../../support/tech.util'; +import { getUserDorotheaId, initUsermanagerUsers, loginAsSabine } from '../../../support/user-util'; +import { createVorgang, initVorgang } from '../../../support/vorgang-util'; + +registerLocaleData(localeDe, 'de', localeDeExtra); + +describe('check xDomea contents', () => { + const mainPage: MainPage = new MainPage(); + const vorgangList: VorgangListE2EComponent = mainPage.getVorgangList(); + + const vorgangPage: VorgangPage = new VorgangPage(); + const vorgangMoreMenu: VorgangMoreMenuE2EComponent = vorgangPage.getMoreMenu(); + const menuItem: VorgangMoreMenuExportierenItemE2EComponent = vorgangMoreMenu.getExportierenItem(); + + const xdomeaNamespace: string = 'urn:xoev-de:xdomea:schema:3.0.0'; + //const ns3Namespace: string = 'urn:ozgcloud-de:xdomea:schema:1.0.0'; + + const kommentarText: string = 'Kommentar zum Export'; + let xdomeaFile: string; + + const vorgangExportieren: VorgangE2E = { + ...createVorgang(), + status: VorgangStatusE2E.IN_BEARBEITUNG, + name: 'DoExportieren', + }; + + const assignUserCommand: CommandE2E = { + ...buildCommand( + CommandOrderE2E.ASSIGN_USER, + vorgangExportieren._id.$oid, + vorgangExportieren._id.$oid, + ), + bodyObject: { assignedTo: getUserDorotheaId() }, + finishedAt: { $date: '2024-06-20T07:25:30.000Z' }, + }; + + const changeStatusCommand: CommandE2E = { + ...buildCommand( + CommandOrderE2E.VORGANG_WIEDEREROEFFNEN, + vorgangExportieren._id.$oid, + + vorgangExportieren._id.$oid, + ), + order: CommandOrderE2E.VORGANG_WIEDEREROEFFNEN, + finishedAt: { $date: '2024-06-18T07:25:30.000Z' }, + }; + + const setAktenzeichenCommand: CommandE2E = { + ...buildCommand( + CommandOrderE2E.SET_AKTENZEICHEN, + vorgangExportieren._id.$oid, + vorgangExportieren._id.$oid, + ), + order: CommandOrderE2E.SET_AKTENZEICHEN, + bodyObject: { aktenzeichen: 'AKT_ENZ_EIC_HEN1' }, + finishedAt: { $date: '2024-06-19T07:25:30.000Z' }, + }; + + const kommentar: KommentarE2E = { + ...createKommentar(), + text: kommentarText, + }; + const kommentarAttachedItem: VorgangAttachedItemE2E = { + ...createKommentarAttachedItem(objectIds[1], vorgangExportieren._id.$oid), + item: kommentar, + }; + + const vorgangFormularButtons: VorgangFormularButtonsE2EComponent = + vorgangPage.getFormularButtons(); + + const bescheidWizard: VorgangBescheidWizardE2EComponent = vorgangPage.getBescheidWizard(); + + before(() => { + initVorgang(vorgangExportieren); + initCommands([assignUserCommand, changeStatusCommand, setAktenzeichenCommand]); + initVorgangAttachedItem([kommentarAttachedItem]); + initUsermanagerUsers(); + + loginAsSabine(); + + waitForSpinnerToDisappear(); + exist(vorgangList.getRoot()); + }); + + after(() => { + dropCollections(); + }); + + describe('create Bescheid, export and unzip file', () => { + it('should create a Bescheid', () => { + vorgangList.getListItem(vorgangExportieren.name).getRoot().click(); + vorgangFormularButtons.getBescheidenButton().click(); + bescheidWizard.weiter(); + uploadFile(bescheidWizard.getUploadBescheidButton(), TEST_FILE_BESCHEID_VALID); + notExist(bescheidWizard.getBescheidUploadSpinner()); + bescheidWizard.weiter(); + bescheidWizard.getSendButton().click(); + waitForSpinnerToDisappear(); + vorgangFormularButtons.getAbschliessenButton().click(); + }); + + it('should download and unzip the xdomea file', () => { + waitForSpinnerToDisappear(); + openXdomeaFile(); + }); + + it('should read the xdomea content', () => { + readXdomeaFile(); + }); + }); + + describe('check contents of xdomea file', () => { + it('should contain entries for AnwendungsspezifischeErweiterung', () => { + const xmlMap: Map<XmlTypePosition, string> = new Map<XmlTypePosition, string>(); + xmlMap.set({ type: 'Kennung', position: 0 }, 'IDOZGCloud1234567'); + xmlMap.set({ type: 'Name', position: 6 }, 'Anwendungsspezifische Erweiterung OZGCloud Basis'); + xmlMap.set({ type: 'Wert', position: 0 }, '2021-02-11T17:17:28Z'); + xmlMap.set({ type: 'Wert', position: 1 }, 'Testermann'); + xmlMap.set({ type: 'Wert', position: 2 }, 'Max'); + xmlMap.set({ type: 'Wert', position: 3 }, '1995-03-21'); + xmlMap.set({ type: 'Wert', position: 4 }, '66X00'); + compareXmlEntry(xdomeaFile, xmlMap); + }); + + it('should contain change of Vorgang Status', () => { + const xmlMap: Map<XmlTypePosition, string> = new Map<XmlTypePosition, string>(); + xmlMap.set({ type: 'MetadatumNeuerWert', position: 0 }, 'In Bearbeitung'); + xmlMap.set({ type: 'DatumUhrzeit', position: 0 }, '2024-06-18T07:25:30.000Z'); + xmlMap.set({ type: 'Aktion', position: 0 }, CommandOrderE2E.VORGANG_WIEDEREROEFFNEN); + compareXmlEntry(xdomeaFile, xmlMap); + }); + + it('should contain change of Aktenzeichen', () => { + const xmlMap: Map<XmlTypePosition, string> = new Map<XmlTypePosition, string>(); + xmlMap.set({ type: 'MetadatumNeuerWert', position: 3 }, 'AKT_ENZ_EIC_HEN1'); + xmlMap.set({ type: 'DatumUhrzeit', position: 3 }, '2024-06-19T07:25:30.000Z'); + xmlMap.set({ type: 'Aktion', position: 3 }, 'SET_AKTENZEICHEN'); + compareXmlEntry(xdomeaFile, xmlMap); + }); + + it('should contain change of Bearbeiter', () => { + const xmlMap: Map<XmlTypePosition, string> = new Map<XmlTypePosition, string>(); + xmlMap.set({ type: 'MetadatumNeuerWert', position: 4 }, 'Dorothea Doe; 9030229'); + xmlMap.set({ type: 'DatumUhrzeit', position: 4 }, '2024-06-20T07:25:30.000Z'); + xmlMap.set({ type: 'Aktion', position: 4 }, 'ASSIGN_USER'); + compareXmlEntry(xdomeaFile, xmlMap); + }); + + it('should contain creation of Kommentar', () => { + const xmlMap: Map<XmlTypePosition, string> = new Map<XmlTypePosition, string>(); + xmlMap.set({ type: 'Typ', position: 0 }, 'Notiz'); + xmlMap.set({ type: 'Akteur', position: 5 }, 'Sabine Sach; 9030229'); + xmlMap.set({ type: 'DatumUhrzeit', position: 5 }, '2024-01-10T12:57:35.000Z'); + xmlMap.set({ type: 'Aktion', position: 5 }, 'CREATE_KOMMENTAR'); + compareXmlEntry(xdomeaFile, xmlMap); + }); + + it('should contain Bescheid info', () => { + const xmlMap: Map<XmlTypePosition, string> = new Map<XmlTypePosition, string>(); + xmlMap.set({ type: 'Typ', position: 2 }, 'Bescheid'); + xmlMap.set({ type: 'Akteur', position: 7 }, 'Sabine Sach; 9030229'); + xmlMap.set({ type: 'Aktion', position: 7 }, 'Bescheid an Antragsteller gesendet'); + compareXmlEntry(xdomeaFile, xmlMap); + }); + }); + + function openXdomeaFile(): void { + vorgangMoreMenu.openMenu(); + deleteDownloadFolder().then(() => { + menuItem.getButton().click({ force: true }); + waitForSpinnerToDisappear(); + cy.wait(1000); + getDownloadFiles().then((files) => { + unzipDownloadFile(files[0]); + }); + }); + } + + //TODO: Funktionen für NS3-Tag schreiben / anpassen + function getXdomeaNamespace(content: string, tagName: string, position: number): string { + return getXMLFromTagAtPosition(xdomeaNamespace, content, tagName, position); + } + + function getXMLFromTagAtPosition( + namespaceURI: string, + content: string, + tagName: string, + position: number, + ) { + const xmlDoc = parseXml(content); + return xmlDoc.getElementsByTagNameNS(namespaceURI, tagName)[position].textContent; + } + + function readXdomeaFile(): void { + findFirstDownloadFileWithString('Abgabe.0401.xml').then((xmlFile) => { + getDownloadFileAt(xmlFile).then((content) => { + xdomeaFile = content; + }); + }); + } + + function findFirstDownloadFileWithString(searchString: string): Cypress.Chainable<number> { + return getDownloadFiles().then((files) => { + const targetFiles = files.filter((file) => { + return file.toLowerCase().includes(searchString.toLowerCase()); + }); + + if (targetFiles.length === 0) { + throw new Error(`No files containing "${searchString}" found.`); + } + + const targetFileName = targetFiles[0]; + const position = files.indexOf(targetFileName); + return position; + }); + } + + function compareXmlEntry(xDomeaFile: string, xmlMap: Map<XmlTypePosition, string>) { + xmlMap.forEach((expectedValue, xmlTypePosition) => { + expect( + getXdomeaNamespace(xDomeaFile, xmlTypePosition.type, xmlTypePosition.position), + ).to.equal(expectedValue); + }); + } + + interface XmlTypePosition { + type: string; + position: number; + } +}); diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-zusammenarbeit/vorgang-zusammenarbeit-anfragen.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-zusammenarbeit/vorgang-zusammenarbeit-anfragen.cy.ts index ff47d4f57c44947ca091adfd2b7075fa92013942..4805403d3a7231fc3eb5d3ed5364ebb7ecfa832b 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-zusammenarbeit/vorgang-zusammenarbeit-anfragen.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-zusammenarbeit/vorgang-zusammenarbeit-anfragen.cy.ts @@ -20,8 +20,7 @@ describe('Vorgang Zusammenarbeit anfragen', () => { const vorgangList: VorgangListE2EComponent = mainPage.getVorgangList(); const vorgangPage: VorgangPage = new VorgangPage(); - const zusammenarbeitContainer: VorgangZusammenarbeitE2EComponent = - vorgangPage.getZusammenarbeitContainer(); + const zusammenarbeitContainer: VorgangZusammenarbeitE2EComponent = vorgangPage.getZusammenarbeitContainer(); const zusammenarbeitVorgang: VorgangE2E = { ...buildVorgang(objectIds[0], 'Zusammenarbeit Vorgang'), @@ -58,7 +57,7 @@ describe('Vorgang Zusammenarbeit anfragen', () => { }); it('should show input elements on Anfrage click', () => { - zusammenarbeitContainer.createAnfrage(); + zusammenarbeitContainer.createAnfrage(0); exist(zusammenarbeitContainer.getZustaendigeStelleButton()); exist(zusammenarbeitContainer.getStelleTitel()); @@ -79,7 +78,7 @@ describe('Vorgang Zusammenarbeit anfragen', () => { }); it('should open new search label for Zustaendige Stelle', () => { - zusammenarbeitContainer.createAnfrage(); + zusammenarbeitContainer.createAnfrage(0); zusammenarbeitContainer.searchZustaendigeStelle(); exist(zusammenarbeitContainer.getCloseSearchButton()); diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/wiedervorlage/wiedervorlage.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/wiedervorlage/wiedervorlage.cy.ts index 8b96e1c44eb2e71816823bfd62627fc3c35b2d6d..a290233137113cc891d4cf977827d435c6aea9e9 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/wiedervorlage/wiedervorlage.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/wiedervorlage/wiedervorlage.cy.ts @@ -98,7 +98,7 @@ describe('Wiedervorlage', () => { }); it('should show validation error if betreff is to long', () => { - wiedervorlageContainer.getBetreff().clear().type(faker.random.alphaNumeric(41)); + wiedervorlageContainer.getBetreff().clear().type(faker.string.alphanumeric(41)); wiedervorlageContainer.getSpeichernButton().click(); waitForSpinnerToDisappear(); diff --git a/alfa-client/apps/alfa-e2e/src/fixtures/postfach/postfach-nachricht-reply-item.json b/alfa-client/apps/alfa-e2e/src/fixtures/postfach/postfach-nachricht-reply-item.json index f8bcaf65c6708251c4535a5c98dc8b08839aace9..56a46b57288cc62eabb4932d9730c549e3067c0b 100644 --- a/alfa-client/apps/alfa-e2e/src/fixtures/postfach/postfach-nachricht-reply-item.json +++ b/alfa-client/apps/alfa-e2e/src/fixtures/postfach/postfach-nachricht-reply-item.json @@ -1,5 +1,12 @@ { - "postfachId": "04d39269-81c5-4838-8b73-08d9567f06d7", + "postfachAddress": { + "serviceKontoType": "OSI", + "identifier": { + "postfachId": "04d39269-81c5-4838-8b73-08d9567f06d7" + }, + "type": "0", + "version": "1" + }, "createdAt": "2020-12-31T01:01:43.790Z[UTC]", "mailBody": "Lorem ipsum dolor sit amet.", "createdBy": "", diff --git a/alfa-client/apps/alfa-e2e/src/fixtures/usermanager/usermanager_user_peter.json b/alfa-client/apps/alfa-e2e/src/fixtures/usermanager/usermanager_user_peter.json index 7f9b6d80eccbfbf7f0461cffc434adea04320f09..9bc95422fb2c6d99c6ea408d684e73b13fde1e08 100644 --- a/alfa-client/apps/alfa-e2e/src/fixtures/usermanager/usermanager_user_peter.json +++ b/alfa-client/apps/alfa-e2e/src/fixtures/usermanager/usermanager_user_peter.json @@ -1,6 +1,6 @@ { "_id": { - "$oid": "63284e55c39b316b2ad02e2c" + "$oid": "66fbb761bdbeecbd2b1681ed" }, "createdAt": { "$date": "2022-02-18T09:21:24.340Z" diff --git a/alfa-client/apps/alfa-e2e/src/model/command.ts b/alfa-client/apps/alfa-e2e/src/model/command.ts index acd160995e1bd16bc44116bd41f0e0977cb05e0c..b4ed055ac0fe2f4f2b54d302bff199a82813d437 100644 --- a/alfa-client/apps/alfa-e2e/src/model/command.ts +++ b/alfa-client/apps/alfa-e2e/src/model/command.ts @@ -34,7 +34,9 @@ export enum CommandOrderE2E { RESEND_POSTFACH_NACHRICHT = 'RESEND_POSTFACH_MAIL', SEND_POSTFACH_MAIL = 'SEND_POSTFACH_MAIL', SEND_POSTFACH_NACHRICHT = 'SEND_POSTFACH_NACHRICHT', + SET_AKTENZEICHEN = 'SET_AKTENZEICHEN', UPDATE_ATTACHED_ITEM = 'UPDATE_ATTACHED_ITEM', + VORGANG_WIEDEREROEFFNEN = 'VORGANG_WIEDEREROEFFNEN', } export class CommandE2E { vorgangId: string; diff --git a/alfa-client/apps/alfa-e2e/src/model/vorgang-attached-item.ts b/alfa-client/apps/alfa-e2e/src/model/vorgang-attached-item.ts index bef95bcbdc231077dbe183971db325ebf2f4f0c6..772db63fdb06f08195de47fe5bdc3d5aede9a0a2 100644 --- a/alfa-client/apps/alfa-e2e/src/model/vorgang-attached-item.ts +++ b/alfa-client/apps/alfa-e2e/src/model/vorgang-attached-item.ts @@ -81,8 +81,8 @@ export enum PostfachNachrichtMessageCodeE2E { } export enum PostfachNachrichtMessageCodeMessagesE2E { - CONNECTION_FAILED = 'Verbindungsfehler: Die Verbindung zum Zielserver des Osi-Postfachs ist nicht zustandegekommen.', - PROCESSING_FAILED = 'Fehlerhafte Verarbeitung: Die Nachricht wurde an das Osi-Postfach geschickt, konnte dort aber nicht richtig verarbeitet werden.', + CONNECTION_FAILED = 'Verbindungsfehler: Die Verbindung zum Zielserver des Postfachs ist nicht zustandegekommen.', + PROCESSING_FAILED = 'Fehlerhafte Verarbeitung: Die Nachricht wurde an das Postfach geschickt, konnte dort aber nicht richtig verarbeitet werden.', } export enum PostfachNachrichtSnackbarMessageE2E { diff --git a/alfa-client/apps/alfa-e2e/src/support/angular.util.ts b/alfa-client/apps/alfa-e2e/src/support/angular.util.ts index c2a2187e14ea6dab14577d723fafb49f8f0b85cb..1d93797208f4ac3202f9ab03b4509ad9abcc55ea 100644 --- a/alfa-client/apps/alfa-e2e/src/support/angular.util.ts +++ b/alfa-client/apps/alfa-e2e/src/support/angular.util.ts @@ -27,9 +27,10 @@ export const TOGGLE_ELEMENT: string = 'mat-slide-toggle'; enum AngularClassesE2E { MAT_CHECKED = 'mat-mdc-slide-toggle-checked', - MAT_BUTTONG_TOGGLE_CHECKED = 'mat-button-toggle-checked', + ODS_BUTTON_TOGGLE_CHECKED = 'ods-button-toggle-checked', MAT_FOCUSED = 'mat-focused', CDK_KEYBOARD_FOCUSED = 'cdk-keyboard-focused', + ODS_FOCUSED = 'ods-focused', MAT_BADGE_HIDDEN = 'mat-badge-hidden', } @@ -51,12 +52,12 @@ export function isNotChecked(element: any) { notContainClass(element, AngularClassesE2E.MAT_CHECKED); } -export function isButtonToggleChecked(element: any) { - containClass(element, AngularClassesE2E.MAT_BUTTONG_TOGGLE_CHECKED); +export function isOdsButtonToggleChecked(element: any) { + containClass(element, AngularClassesE2E.ODS_BUTTON_TOGGLE_CHECKED); } -export function isButtonToggleNotChecked(element: any) { - notContainClass(element, AngularClassesE2E.MAT_BUTTONG_TOGGLE_CHECKED); +export function isOdsButtonToggleNotChecked(element: any) { + notContainClass(element, AngularClassesE2E.ODS_BUTTON_TOGGLE_CHECKED); } export function getFormField(element: any) { @@ -71,6 +72,10 @@ export function isKeyboardFocused(element: any) { containClass(element, AngularClassesE2E.CDK_KEYBOARD_FOCUSED); } +export function isOdsFocused(element: any) { + containClass(element, AngularClassesE2E.ODS_FOCUSED); +} + export function expectIconWithoutBadge(element: any): void { containClass(element, AngularClassesE2E.MAT_BADGE_HIDDEN); } diff --git a/alfa-client/apps/alfa-e2e/src/support/cypress-helper.ts b/alfa-client/apps/alfa-e2e/src/support/cypress-helper.ts index 90c0c0b4058f983b0cb51861d8b632084cb2a8a3..aa30f90a3e2aba7dfd964af16093943324b68d14 100644 --- a/alfa-client/apps/alfa-e2e/src/support/cypress-helper.ts +++ b/alfa-client/apps/alfa-e2e/src/support/cypress-helper.ts @@ -192,7 +192,7 @@ export function reload(): void { } export function readFileFromDownloads(fileName: string): Cypress.Chainable<any> { - return cy.readFile(`${DOWNLOAD_FOLDER}/${fileName}`, { timeout: 5000 }); + return cy.readFile(`${DOWNLOAD_FOLDER}/${fileName}`); } export function pressTab(): void { @@ -216,3 +216,7 @@ export function addSmockerMock(mock: SmockerMocks): void { export function resetSmocker(): void { cy.resetSmocker(); } + +export function getDownloadFileAt(filePosition: number): Cypress.Chainable<string> { + return getDownloadFiles().then((files) => readFileFromDownloads(files[filePosition])); +} diff --git a/alfa-client/apps/alfa-e2e/src/support/cypress.util.ts b/alfa-client/apps/alfa-e2e/src/support/cypress.util.ts index 4440874cbfcc512a5b23c9394c60f50f15e07d21..fb946e5df04adf16437a2d71ac9666ed7ce1932e 100644 --- a/alfa-client/apps/alfa-e2e/src/support/cypress.util.ts +++ b/alfa-client/apps/alfa-e2e/src/support/cypress.util.ts @@ -26,6 +26,10 @@ import { wait } from './cypress-helper'; //TODO Naming der Methoden geradeziehen +export function beEqual(element: any, text: string): void { + element.should('equal', text); +} + export function containClass(element: any, cssClass: string): void { element.should('have.class', cssClass); } diff --git a/alfa-client/apps/alfa-e2e/src/support/tech.util.ts b/alfa-client/apps/alfa-e2e/src/support/tech.util.ts index 564665623ac9f858891882a163cb1f435694f77e..675bc0457ffeeb7d90dfa98cad59c706dad31965 100644 --- a/alfa-client/apps/alfa-e2e/src/support/tech.util.ts +++ b/alfa-client/apps/alfa-e2e/src/support/tech.util.ts @@ -105,3 +105,9 @@ export function getAdjustedDateEnglish(daysOffset: number): string { const date = add(new Date(), { days: daysOffset }); return format(date, 'yyyy/MM/dd'); } + +const parser = new DOMParser(); + +export function parseXml(fileContent): Document { + return parser.parseFromString(fileContent, 'text/xml'); +} diff --git a/alfa-client/apps/alfa-e2e/src/support/user-util.ts b/alfa-client/apps/alfa-e2e/src/support/user-util.ts index 72b27edd2355cb32742d6c2ac3d7607500c226fa..34d06a712b3944f70b621d4507ca2dfc3b6ca004 100644 --- a/alfa-client/apps/alfa-e2e/src/support/user-util.ts +++ b/alfa-client/apps/alfa-e2e/src/support/user-util.ts @@ -92,6 +92,10 @@ export function getUserSabineId(): string { return getUserManagerUserSabine()._id.$oid; } +export function getUserDorotheaId(): string { + return getUserManagerUserDorothea()._id.$oid; +} + enum DatabaseUser { EMIL = 'user-ea/user_emil.json', ADELHEIT = 'user-main/user_adelheit.json', diff --git a/alfa-client/apps/alfa/project.json b/alfa-client/apps/alfa/project.json index 932f9ed857394eebe857e588ed2cd2e7abea2ffb..971b4de26cdead729cfb59358965bbdc55e9ccbc 100644 --- a/alfa-client/apps/alfa/project.json +++ b/alfa-client/apps/alfa/project.json @@ -75,7 +75,7 @@ { "type": "initial", "maximumWarning": "2mb", - "maximumError": "5mb" + "maximumError": "6mb" }, { "type": "anyComponentStyle", diff --git a/alfa-client/apps/alfa/src/app/app.component.html b/alfa-client/apps/alfa/src/app/app.component.html index 089e9de91f369cb64da483eb2a4316543084ae53..b10af37299a6874ab18519ed496e0366d18cb0bc 100644 --- a/alfa-client/apps/alfa/src/app/app.component.html +++ b/alfa-client/apps/alfa/src/app/app.component.html @@ -31,11 +31,7 @@ <div class="mat-app-background relative grow"><router-outlet></router-outlet></div> <section class="mat-app-background right-nav"> - <alfa-build-info - *ngIf="apiRoot.resource" - [apiRoot]="apiRoot.resource" - data-test-id="build-info" - ></alfa-build-info> + <alfa-build-info *ngIf="apiRoot.resource" [apiRoot]="apiRoot.resource" data-test-id="build-info"></alfa-build-info> </section> </div> </ozgcloud-spinner> diff --git a/alfa-client/apps/alfa/src/app/app.component.spec.ts b/alfa-client/apps/alfa/src/app/app.component.spec.ts index 5bf3f422b0147d964b21fd1f8f585b20c69f2e06..f20f5bc5f23bd56572d7b5d78c8117f5f83341e6 100644 --- a/alfa-client/apps/alfa/src/app/app.component.spec.ts +++ b/alfa-client/apps/alfa/src/app/app.component.spec.ts @@ -21,28 +21,28 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { registerLocaleData } from '@angular/common'; -import localeDe from '@angular/common/locales/de'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { RouterTestingModule } from '@angular/router/testing'; import { ApiRootFacade } from '@alfa-client/api-root-shared'; +import { BuildInfoComponent } from '@alfa-client/common-lib'; import { ENVIRONMENT_CONFIG } from '@alfa-client/environment-shared'; import { NavigationService } from '@alfa-client/navigation-shared'; import { createEmptyStateResource, createStateResource } from '@alfa-client/tech-shared'; import { mock, notExistsAsHtmlElement } from '@alfa-client/test-utils'; import { IconService, SpinnerComponent } from '@alfa-client/ui'; +import { registerLocaleData } from '@angular/common'; +import localeDe from '@angular/common/locales/de'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { Params } from '@angular/router'; +import { RouterTestingModule } from '@angular/router/testing'; import { AuthConfig, OAuthEvent, OAuthService } from 'angular-oauth2-oidc'; import { createApiRootResource } from 'libs/api-root-shared/test/api-root'; -import { BuildInfoComponent } from 'libs/navigation/src/lib/build-info/build-info.component'; import { HeaderContainerComponent } from 'libs/navigation/src/lib/header-container/header-container.component'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { setWindowLocationUrl } from 'libs/tech-shared/test/window'; +import * as VorgangNavigationUtil from 'libs/vorgang-shared/src/lib/vorgang-navigation.util'; import { MockComponent } from 'ng-mocks'; import { of } from 'rxjs'; import { AppComponent } from './app.component'; -import * as VorgangNavigationUtil from 'libs/vorgang-shared/src/lib/vorgang-navigation.util'; - registerLocaleData(localeDe); describe('AppComponent', () => { @@ -364,6 +364,15 @@ describe('AppComponent', () => { done(); }); }); + + it('should call buildInitialQueryParams', (done) => { + component.buildInitialQueryParams = jest.fn(); + + component.loadApiRootAndNavigate().subscribe(() => { + expect(component.buildInitialQueryParams).toHaveBeenCalled(); + done(); + }); + }); }); describe('apiRoot.resource is null', () => { @@ -420,9 +429,7 @@ describe('AppComponent', () => { it('should return path segments from localStorage', () => { const pathSegments: string[] = ['alle', 'angenommen']; - jest - .spyOn(VorgangNavigationUtil, 'buildPathSegmentsFromLocalStorage') - .mockReturnValue(pathSegments); + jest.spyOn(VorgangNavigationUtil, 'buildPathSegmentsFromLocalStorage').mockReturnValue(pathSegments); const redirectUri: string = component.buildInitialPath(); @@ -430,4 +437,36 @@ describe('AppComponent', () => { }); }); }); + + describe('buildInitialQueryParams', () => { + describe('with existing window.location.search', () => { + const query: string = '?uri=some-uri'; + const url: string = 'http://localhost/resources' + query; + + beforeEach(() => { + setWindowLocationUrl(url); + }); + + it('should return query params', () => { + const expected: Params = { uri: 'some-uri' }; + const queryParams: Params = component.buildInitialQueryParams(); + + expect(queryParams).toStrictEqual(expected); + }); + }); + + describe('with empty window.location.search', () => { + const url: string = 'http://localhost/resources'; + + beforeEach(() => { + setWindowLocationUrl(url); + }); + + it('should return undefined', () => { + const queryParams: Params = component.buildInitialQueryParams(); + + expect(queryParams).toBeUndefined(); + }); + }); + }); }); diff --git a/alfa-client/apps/alfa/src/app/app.component.ts b/alfa-client/apps/alfa/src/app/app.component.ts index db8d9b623124ec7b0b5a1cdc259d3d919742220e..b8a23b6510cbd1aabcb5d28e3f77697b2d4d22c5 100644 --- a/alfa-client/apps/alfa/src/app/app.component.ts +++ b/alfa-client/apps/alfa/src/app/app.component.ts @@ -28,6 +28,7 @@ import { StateResource, isNotNull } from '@alfa-client/tech-shared'; import { IconService } from '@alfa-client/ui'; import { buildPathSegmentsFromLocalStorage } from '@alfa-client/vorgang-shared'; import { Component, Inject, OnInit } from '@angular/core'; +import { Params } from '@angular/router'; import { AuthConfig, OAuthEvent, OAuthService } from 'angular-oauth2-oidc'; import { JwksValidationHandler } from 'angular-oauth2-oidc-jwks'; import { Environment } from 'libs/environment-shared/src/lib/environment.model'; @@ -70,7 +71,7 @@ export class AppComponent implements OnInit { issuer: this.envConfig.authServer + '/realms/' + this.envConfig.realm, // URL of the SPA to redirect the user to after login - redirectUri: window.location.origin + this.buildInitialPath(), + redirectUri: window.location.origin + this.buildInitialPath() + window.location.search, postLogoutRedirectUri: window.location.origin + '/', // URL of the SPA to redirect the user after silent refresh @@ -87,18 +88,32 @@ export class AppComponent implements OnInit { } buildInitialPath(): string { - return window.location.pathname === '/' ? - '/' + buildPathSegmentsFromLocalStorage().join('/') - : window.location.pathname; + const currentPath: string = window.location.pathname; + if (currentPath === '/') { + return currentPath + buildPathSegmentsFromLocalStorage().join('/'); + } + + return currentPath; + } + + buildInitialQueryParams(): Params | undefined { + const queryParams: URLSearchParams = new URLSearchParams(window.location.search); + if (!queryParams.toString()) { + return undefined; + } + + const params: Params = {}; + queryParams.forEach((value: string, key: string) => { + params[key] = value; + }); + + return params; } listenToOAuthEvents(): void { this.oAuthEventSubscription = this.oAuthService.events .pipe( - filter( - (event: OAuthEvent) => - this.consideredAsLoginEvent(event.type) || this.consideredAsPageReloadEvent(event.type), - ), + filter((event: OAuthEvent) => this.consideredAsLoginEvent(event.type) || this.consideredAsPageReloadEvent(event.type)), ) .subscribe(() => (this.apiRoot$ = this.loadApiRootAndNavigate())); } @@ -119,7 +134,7 @@ export class AppComponent implements OnInit { return this.apiRootFacade.getApiRoot().pipe( filter((apiRoot) => isNotNull(apiRoot.resource)), tap(() => { - this.navigationService.navigate(this.buildInitialPath()); + this.navigationService.navigate(this.buildInitialPath(), this.buildInitialQueryParams()); this.oAuthEventSubscription.unsubscribe(); }), ); diff --git a/alfa-client/apps/alfa/src/app/app.module.ts b/alfa-client/apps/alfa/src/app/app.module.ts index d62c5b53a37b34edb07e591c0a9bbc659e0e0da0..d9adaece899487f8d6d584d8ea20ff641578c7e9 100644 --- a/alfa-client/apps/alfa/src/app/app.module.ts +++ b/alfa-client/apps/alfa/src/app/app.module.ts @@ -23,13 +23,15 @@ */ import { ApiRootModule } from '@alfa-client/api-root-shared'; import { AppSharedModule } from '@alfa-client/app-shared'; +import { BuildInfoComponent } from '@alfa-client/common-lib'; import { EnvironmentModule } from '@alfa-client/environment-shared'; import { HintSharedModule } from '@alfa-client/hint-shared'; import { NavigationModule } from '@alfa-client/navigation'; import { OzgCloudUrlSerializer } from '@alfa-client/navigation-shared'; +import { ResourceRedirectComponent } from '@alfa-client/resource-redirect'; import { UiModule } from '@alfa-client/ui'; import { registerLocaleData } from '@angular/common'; -import { HttpClientModule } from '@angular/common/http'; +import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'; import localeDe from '@angular/common/locales/de'; import { LOCALE_ID, NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; @@ -50,13 +52,16 @@ const routes: Routes = [ path: '', loadChildren: () => import('@alfa-client/vorgang').then((m) => m.VorgangModule), }, + { + path: 'resources', + component: ResourceRedirectComponent, + }, ]; @NgModule({ declarations: [AppComponent], imports: [ BrowserModule, - HttpClientModule, BrowserAnimationsModule, RouterModule.forRoot(routes, { initialNavigation: 'disabled', @@ -71,6 +76,7 @@ const routes: Routes = [ }), ApiRootModule, NavigationModule, + BuildInfoComponent, AppSharedModule, StoreModule.forRoot( {}, @@ -85,15 +91,14 @@ const routes: Routes = [ EffectsModule.forRoot([]), environment.production ? [] : StoreDevtoolsModule.instrument({ connectInZone: true }), StoreRouterConnectingModule.forRoot(), - // Workaround: load any module depending on ApiRootActions.loadApiRootSuccess // TODO Check if a future NgRx version will solve Lazy Loading + Effects.forFeature() HintSharedModule, - // ], providers: [ { provide: LOCALE_ID, useValue: 'de' }, { provide: UrlSerializer, useClass: OzgCloudUrlSerializer }, + provideHttpClient(withInterceptorsFromDi()), ], bootstrap: [AppComponent], }) diff --git a/alfa-client/apps/alfa/src/styles/abstracts/_variables.scss b/alfa-client/apps/alfa/src/styles/abstracts/_variables.scss index cc31ef7e6b34ed79d269902dd8e6775c3bc68603..631bca8f5f8bc51fc8d33286756ffb12b932b788 100644 --- a/alfa-client/apps/alfa/src/styles/abstracts/_variables.scss +++ b/alfa-client/apps/alfa/src/styles/abstracts/_variables.scss @@ -40,18 +40,18 @@ $navigation-height: 50px; $activeButton: #e5eef8; $activeButtonDark: #212121; -$primaryPalette: mat.define-palette(mat.$blue-palette, 800, 500, 900); -$accentPalette: mat.define-palette(mat.$yellow-palette, 600, 300, 800); -$warnPalette: mat.define-palette(mat.$red-palette, 800, 600, 900); +$primaryPalette: mat.m2-define-palette(mat.$m2-blue-palette, 800, 500, 900); +$accentPalette: mat.m2-define-palette(mat.$m2-yellow-palette, 600, 300, 800); +$warnPalette: mat.m2-define-palette(mat.$m2-red-palette, 800, 600, 900); -$statusNeuPalette: mat.define-palette(mat.$blue-palette, 800, 500, 900); -$statusAngenommenPalette: mat.define-palette(mat.$yellow-palette, 600, 300, 800); -$statusInBearbeitungPalette: mat.define-palette(mat.$yellow-palette, 600, 300, 800); -$statusBeschiedenPalette: mat.define-palette(mat.$green-palette, 600, 300, 800); -$statusAbgeschlossenPalette: mat.define-palette(mat.$green-palette, 600, 300, 800); -$statusVerworfenPalette: mat.define-palette(mat.$gray-palette, 600, 300, 800); +$statusNeuPalette: mat.m2-define-palette(mat.$m2-blue-palette, 800, 500, 900); +$statusAngenommenPalette: mat.m2-define-palette(mat.$m2-yellow-palette, 600, 300, 800); +$statusInBearbeitungPalette: mat.m2-define-palette(mat.$m2-yellow-palette, 600, 300, 800); +$statusBeschiedenPalette: mat.m2-define-palette(mat.$m2-green-palette, 600, 300, 800); +$statusAbgeschlossenPalette: mat.m2-define-palette(mat.$m2-green-palette, 600, 300, 800); +$statusVerworfenPalette: mat.m2-define-palette(mat.$m2-gray-palette, 600, 300, 800); -$alfaTheme: mat.define-light-theme( +$alfaTheme: mat.m2-define-light-theme( ( color: ( primary: $primaryPalette, @@ -62,10 +62,10 @@ $alfaTheme: mat.define-light-theme( ); // dark theme -$primaryDarkPalette: mat.define-palette(mat.$yellow-palette, 700, 300, 900); -$accentDarkPalette: mat.define-palette(mat.$brown-palette, 600, 300, 800); +$primaryDarkPalette: mat.m2-define-palette(mat.$m2-yellow-palette, 700, 300, 900); +$accentDarkPalette: mat.m2-define-palette(mat.$m2-brown-palette, 600, 300, 800); -$alfaDarkTheme: mat.define-dark-theme( +$alfaDarkTheme: mat.m2-define-dark-theme( ( color: ( primary: $primaryDarkPalette, diff --git a/alfa-client/apps/alfa/src/styles/main.scss b/alfa-client/apps/alfa/src/styles/main.scss index bded7a1477336c22f6f4358a41da3ffbc82c14ee..0f5c687be0b195133b4dfc7d27f60dc7d5ff96b3 100644 --- a/alfa-client/apps/alfa/src/styles/main.scss +++ b/alfa-client/apps/alfa/src/styles/main.scss @@ -26,8 +26,7 @@ @import 'libs/design-system/src/lib/tailwind-preset/root.css'; // FIX mdc-notched-outline conflict -.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field - .mdc-notched-outline__notch { +.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field .mdc-notched-outline__notch { border-right-style: hidden; } @@ -58,8 +57,6 @@ @import 'libs/user-profile/src/lib/user-profile-in-vorgang-container/user-profile-in-vorgang/user-profile-in-vorgang.theme'; @import 'libs/user-profile/src/lib/user-profile-search-container/user-profile-search-container.theme'; @import 'libs/ui/src/lib/icon/postfach-icon/postfach-icon.component.theme'; -@import 'libs/ui/src/lib/ui/button-toggle/button-toogle.theme'; -@import 'libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/_vorgang-filter-item.theme.scss'; @import 'libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-views-menu/_vorgang-views-menu.theme.scss'; @include mat.all-component-typographies(); @@ -85,15 +82,21 @@ body.dark { body { --mdc-filled-text-field-label-text-size: 1rem; - --mdc-form-field-label-text-size: 12rem; + --mat-checkbox-label-text-size: 14px; } // Material Datepicker font-sizes .mat-datepicker-content { - .mat-button, .mat-fab, .mat-icon-button, .mat-mini-fab, .mat-raised-button,th,td { - font-size: 1rem - } - } + .mat-button, + .mat-fab, + .mat-icon-button, + .mat-mini-fab, + .mat-raised-button, + th, + td { + font-size: 1rem; + } +} .mdc-text-field__input { font-size: 1rem !important; @@ -105,4 +108,4 @@ body { .mdc-button__label { font-size: 0.875rem !important; -} \ No newline at end of file +} diff --git a/alfa-client/apps/alfa/src/styles/material/_autocomplete.scss b/alfa-client/apps/alfa/src/styles/material/_autocomplete.scss index 7cdf9cd39e3d7374043becae32bd2aca23dce90f..e654673aa1779bc651dd7ac65ff31f3ee6b6fdd4 100644 --- a/alfa-client/apps/alfa/src/styles/material/_autocomplete.scss +++ b/alfa-client/apps/alfa/src/styles/material/_autocomplete.scss @@ -3,7 +3,7 @@ @use 'variables'; @mixin autocomplete($theme) { - $color-config: mat.get-color-config($theme); + $color-config: mat.m2-get-color-config($theme); $primary-palette: map.get($color-config, 'primary'); .cdk-overlay-pane { diff --git a/alfa-client/apps/alfa/src/styles/material/_button.scss b/alfa-client/apps/alfa/src/styles/material/_button.scss index 712c9d60d5b752e69c58b2a7793f0a1d53653239..a61dc7b30a8786f35c0543dcbc3ab2fd0891f2d5 100644 --- a/alfa-client/apps/alfa/src/styles/material/_button.scss +++ b/alfa-client/apps/alfa/src/styles/material/_button.scss @@ -2,13 +2,13 @@ @use '@angular/material' as mat; @mixin button($theme) { - $color-config: mat.get-color-config($theme); + $color-config: mat.m2-get-color-config($theme); $primary: map.get($color-config, 'primary'); ozgcloud-button-with-spinner, ozgcloud-stroked-button-with-spinner { .mat-primary svg path { - fill: mat.get-color-from-palette($primary); + fill: mat.m2-get-color-from-palette($primary); } } @@ -27,8 +27,3 @@ margin-right: 0 !important; } } - -// Necessary since Angular 17 - for mat-button-toggle -.mat-pseudo-checkbox { - display: none !important; -} \ No newline at end of file diff --git a/alfa-client/apps/alfa/src/styles/material/_dialog.scss b/alfa-client/apps/alfa/src/styles/material/_dialog.scss index 0de26a163ce47c4047a24c95bf8823be55747fe5..e740faecea93c4c217dfc5f8ba109d7a05a03522 100644 --- a/alfa-client/apps/alfa/src/styles/material/_dialog.scss +++ b/alfa-client/apps/alfa/src/styles/material/_dialog.scss @@ -2,11 +2,11 @@ @use '@angular/material' as mat; @mixin internal-server-error-dialog($theme) { - $color-config: mat.get-color-config($theme); + $color-config: mat.m2-get-color-config($theme); $primary-palette: map.get($color-config, 'primary'); h1.mat-mdc-dialog-title { - color: mat.get-color-from-palette($primary-palette) !important; + color: mat.m2-get-color-from-palette($primary-palette) !important; font-size: 1.5rem !important; font-weight: normal !important; } diff --git a/alfa-client/apps/alfa/src/styles/material/_expansion-panel.scss b/alfa-client/apps/alfa/src/styles/material/_expansion-panel.scss index 6a112124d5c3d02971ca4150048589d2516fa1da..39a2bde48774d0392a5b6e7907dc435afa0c07b8 100644 --- a/alfa-client/apps/alfa/src/styles/material/_expansion-panel.scss +++ b/alfa-client/apps/alfa/src/styles/material/_expansion-panel.scss @@ -26,11 +26,11 @@ @import 'variables'; @mixin expansion-panel($theme) { - $color-config: mat.get-color-config($theme); + $color-config: mat.m2-get-color-config($theme); $primary-palette: map.get($color-config, 'primary'); ozgcloud-expansion-panel h3 { - color: mat.get-color-from-palette($primary-palette); + color: mat.m2-get-color-from-palette($primary-palette); } body.mat-typography ozgcloud-expansion-panel { diff --git a/alfa-client/apps/alfa/src/styles/material/_snackbar.scss b/alfa-client/apps/alfa/src/styles/material/_snackbar.scss index ab8994e15c2e1fa40b5581cf16b0341a64304e9b..746daef72063f3d75d6531420bacffc84456353f 100644 --- a/alfa-client/apps/alfa/src/styles/material/_snackbar.scss +++ b/alfa-client/apps/alfa/src/styles/material/_snackbar.scss @@ -25,9 +25,9 @@ min-width: 240px; max-width: 90vw; - border: 3px solid mat.get-color-from-palette($warnPalette); + border: 3px solid mat.m2-get-color-from-palette($warnPalette); border-radius: 4px; - background-color: lighten(mat.get-color-from-palette($warnPalette), 38%); + background-color: lighten(mat.m2-get-color-from-palette($warnPalette), 38%); box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), @@ -39,7 +39,7 @@ position: absolute; content: url('/assets/icons/error_outline_white.svg'); display: block; - background-color: mat.get-color-from-palette($warnPalette); + background-color: mat.m2-get-color-from-palette($warnPalette); left: 0; top: 0; padding: 11px 9px 11px 7px; diff --git a/alfa-client/apps/demo/src/app/app.component.html b/alfa-client/apps/demo/src/app/app.component.html index 4c187c3b809d118c8bc9bb2a3fed9b29534338ff..bae7d97a832d82ad6e91c77233ff11ea7eb6bc88 100644 --- a/alfa-client/apps/demo/src/app/app.component.html +++ b/alfa-client/apps/demo/src/app/app.component.html @@ -1,10 +1,7 @@ <ng-container> <header class="flex items-center justify-between bg-white p-6"> <div class="font-extrabold text-primary">OZG-Cloud Demoapp</div> - <button - class="flex align-middle text-orange-500 transition-transform hover:scale-125" - (click)="darkMode.set(!darkMode())" - > + <button class="flex align-middle text-orange-500 transition-transform hover:scale-125" (click)="darkMode.set(!darkMode())"> <span *ngIf="!darkMode()" class="material-icons">dark_mode</span> <span *ngIf="darkMode()" class="material-icons">light_mode</span> </button> @@ -14,6 +11,289 @@ <nav>NAV</nav> </div> <main class="flex-auto bg-background-50 p-6"> + <div class="my-12"> + <h1 class="mb-6 text-2xl font-semibold text-text">Organisationseinheiten</h1> + <ods-button text="Organisationseinheit hinzufügen" /> + <ul class="mt-6 divide-y divide-gray-300 rounded-md bg-background-50 text-text shadow-sm ring-1 ring-gray-300"> + <li> + <a + href="#" + class="flex flex-col items-start justify-between gap-2 rounded-t-md border-primary-600/50 px-6 py-4 hover:bg-background-150 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus lg:flex-row lg:gap-6" + > + <div class="flex-1 basis-5/6"> + <div class="flex flex-wrap items-center gap-x-3"> + <h3 class="text-md font-semibold"> + Amt für Digitalisierung, Breitband und Vermessung Nürnberg Außenstelle Hersbruck + </h3> + </div> + </div> + + <dl class="flex-1 basis-1/6"> + <dt class="sr-only">Organisations-ID:</dt> + <dd>2348328-0</dd> + </dl> + </a> + </li> + <li> + <a + href="#" + class="flex flex-col items-start justify-between gap-2 rounded-t-md border-primary-600/50 px-6 py-4 hover:bg-background-150 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus lg:flex-row lg:gap-6" + > + <div class="flex-1 basis-5/6"> + <div class="flex flex-wrap items-center gap-x-3"> + <h3 class="text-md font-semibold">Amt für Planwirtschaft</h3> + </div> + </div> + + <dl class="flex-1 basis-1/6"> + <dt class="sr-only">Organisations-ID:</dt> + <dd>2348328-0</dd> + </dl> + </a> + </li> + <li> + <a + href="#" + class="flex flex-col items-start justify-between gap-2 rounded-t-md border-primary-600/50 px-6 py-4 hover:bg-background-150 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus lg:flex-row lg:gap-6" + > + <div class="flex-1 basis-5/6"> + <div class="flex flex-wrap items-center gap-x-3"> + <h3 class="text-md font-semibold"> + Landeshauptstadt Kiel - Umweltschutzamt, Untere Naturschutzbehörde (uNB), Arten- und Biotopschutz + </h3> + </div> + </div> + + <dl class="flex-1 basis-1/6"> + <dt class="sr-only">Organisations-ID:</dt> + <dd>1238328-0</dd> + </dl> + </a> + </li> + </ul> + </div> + <div class="my-4"> + <h1 class="mb-6 text-2xl font-semibold text-text">Benutzer & Rollen</h1> + <ods-button text="Benutzer hinzufügen" /> + <ul class="mt-6 divide-y divide-gray-300 rounded-md bg-background-50 text-text shadow-sm ring-1 ring-gray-300"> + <li> + <a + href="#" + class="flex flex-col items-start justify-between gap-6 rounded-t-md border-primary-600/50 px-6 py-4 hover:bg-background-150 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus lg:flex-row" + > + <div class="flex-1 basis-1/2"> + <div class="mb-2 flex flex-wrap items-center gap-x-3"> + <h3 class="text-md font-semibold">Fridolin Kaspers-Maajowski</h3> + + <dl class="flex flex-wrap gap-2"> + <dt class="sr-only">Rollen:</dt> + <dd + class="inline-flex flex-shrink-0 items-center rounded-full bg-green-50 px-1.5 py-0.5 text-sm font-medium text-green-700 ring-1 ring-inset ring-green-600/20" + > + Admin + </dd> + <dd + class="inline-flex flex-shrink-0 items-center rounded-full bg-green-50 px-1.5 py-0.5 text-sm font-medium text-green-700 ring-1 ring-inset ring-green-600/20" + > + Alfa: User + </dd> + <dd + class="inline-flex flex-shrink-0 items-center rounded-full bg-green-50 px-1.5 py-0.5 text-sm font-medium text-green-700 ring-1 ring-inset ring-green-600/20" + > + Alfa: Löschen + </dd> + </dl> + </div> + + <dl> + <div class="flex items-center gap-2"> + <dt> + <span class="sr-only">E-Mail: </span + ><svg + class="size-4 flex-none fill-gray-600" + viewBox="0 0 20 16" + fill="none" + xmlns="http://www.w3.org/2000/svg" + aria-hidden="true" + > + <path + d="M2 16C1.45 16 0.979167 15.8042 0.5875 15.4125C0.195833 15.0208 0 14.55 0 14V2C0 1.45 0.195833 0.979167 0.5875 0.5875C0.979167 0.195833 1.45 0 2 0H18C18.55 0 19.0208 0.195833 19.4125 0.5875C19.8042 0.979167 20 1.45 20 2V14C20 14.55 19.8042 15.0208 19.4125 15.4125C19.0208 15.8042 18.55 16 18 16H2ZM10 9L2 4V14H18V4L10 9ZM10 7L18 2H2L10 7ZM2 4V2V14V4Z" + /> + </svg> + </dt> + <dd>fidolin.kaspers-maajowski@landratsamt-kiel.de</dd> + </div> + <div class="flex items-center gap-2"> + <dt> + <span class="sr-only">E-Benutzername: </span + ><svg + class="size-4 flex-none fill-gray-600" + viewBox="0 0 16 16" + fill="none" + xmlns="http://www.w3.org/2000/svg" + aria-hidden="true" + > + <path + d="M8 8C6.9 8 5.95833 7.60833 5.175 6.825C4.39167 6.04167 4 5.1 4 4C4 2.9 4.39167 1.95833 5.175 1.175C5.95833 0.391667 6.9 0 8 0C9.1 0 10.0417 0.391667 10.825 1.175C11.6083 1.95833 12 2.9 12 4C12 5.1 11.6083 6.04167 10.825 6.825C10.0417 7.60833 9.1 8 8 8ZM0 16V13.2C0 12.6333 0.145833 12.1125 0.4375 11.6375C0.729167 11.1625 1.11667 10.8 1.6 10.55C2.63333 10.0333 3.68333 9.64583 4.75 9.3875C5.81667 9.12917 6.9 9 8 9C9.1 9 10.1833 9.12917 11.25 9.3875C12.3167 9.64583 13.3667 10.0333 14.4 10.55C14.8833 10.8 15.2708 11.1625 15.5625 11.6375C15.8542 12.1125 16 12.6333 16 13.2V16H0ZM2 14H14V13.2C14 13.0167 13.9542 12.85 13.8625 12.7C13.7708 12.55 13.65 12.4333 13.5 12.35C12.6 11.9 11.6917 11.5625 10.775 11.3375C9.85833 11.1125 8.93333 11 8 11C7.06667 11 6.14167 11.1125 5.225 11.3375C4.30833 11.5625 3.4 11.9 2.5 12.35C2.35 12.4333 2.22917 12.55 2.1375 12.7C2.04583 12.85 2 13.0167 2 13.2V14ZM8 6C8.55 6 9.02083 5.80417 9.4125 5.4125C9.80417 5.02083 10 4.55 10 4C10 3.45 9.80417 2.97917 9.4125 2.5875C9.02083 2.19583 8.55 2 8 2C7.45 2 6.97917 2.19583 6.5875 2.5875C6.19583 2.97917 6 3.45 6 4C6 4.55 6.19583 5.02083 6.5875 5.4125C6.97917 5.80417 7.45 6 8 6Z" + /> + </svg> + </dt> + <dd>FKaspersMaajowski98</dd> + </div> + </dl> + </div> + + <div class="flex-1 basis-1/2"> + <h4 class="sr-only">Zuständige Stellen</h4> + <ul class="list-outside list-disc pl-4 text-base"> + <li>Landeshauptstadt Kiel - Umweltschutzamt, Untere Naturschutzbehörde (uNB), Arten- und Biotopschutz</li> + <li>Amt für Finanzwirtschaft</li> + <li>Amt für Planwirtschaft</li> + </ul> + <div class="pl-4 text-gray-500">und 2 weitere</div> + </div> + </a> + </li> + <li> + <a + href="#" + class="flex flex-col items-start justify-between gap-6 border-primary-600/50 px-6 py-4 hover:bg-background-150 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus lg:flex-row" + > + <div class="flex-1 basis-1/2"> + <div class="mb-2 flex flex-wrap items-center gap-x-3"> + <h3 class="text-md font-semibold">Hans Postler</h3> + <dl class="flex flex-wrap gap-2"> + <dt class="sr-only">Rollen:</dt> + <dd + class="inline-flex flex-shrink-0 items-center rounded-full bg-green-50 px-1.5 py-0.5 text-sm font-medium text-green-700 ring-1 ring-inset ring-green-600/20" + > + Alfa: Poststelle + </dd> + </dl> + </div> + + <dl> + <div class="flex items-center gap-2"> + <dt> + <span class="sr-only">E-Mail: </span + ><svg + class="size-4 flex-none fill-gray-600" + viewBox="0 0 20 16" + fill="none" + xmlns="http://www.w3.org/2000/svg" + aria-hidden="true" + > + <path + d="M2 16C1.45 16 0.979167 15.8042 0.5875 15.4125C0.195833 15.0208 0 14.55 0 14V2C0 1.45 0.195833 0.979167 0.5875 0.5875C0.979167 0.195833 1.45 0 2 0H18C18.55 0 19.0208 0.195833 19.4125 0.5875C19.8042 0.979167 20 1.45 20 2V14C20 14.55 19.8042 15.0208 19.4125 15.4125C19.0208 15.8042 18.55 16 18 16H2ZM10 9L2 4V14H18V4L10 9ZM10 7L18 2H2L10 7ZM2 4V2V14V4Z" + /> + </svg> + </dt> + <dd>hansi@landratsamt-kiel-mit-extralanger-mailadresse-zum-test.de</dd> + </div> + <div class="flex items-center gap-2"> + <dt> + <span class="sr-only">E-Benutzername: </span + ><svg + class="size-4 flex-none fill-gray-600" + viewBox="0 0 16 16" + fill="none" + xmlns="http://www.w3.org/2000/svg" + aria-hidden="true" + > + <path + d="M8 8C6.9 8 5.95833 7.60833 5.175 6.825C4.39167 6.04167 4 5.1 4 4C4 2.9 4.39167 1.95833 5.175 1.175C5.95833 0.391667 6.9 0 8 0C9.1 0 10.0417 0.391667 10.825 1.175C11.6083 1.95833 12 2.9 12 4C12 5.1 11.6083 6.04167 10.825 6.825C10.0417 7.60833 9.1 8 8 8ZM0 16V13.2C0 12.6333 0.145833 12.1125 0.4375 11.6375C0.729167 11.1625 1.11667 10.8 1.6 10.55C2.63333 10.0333 3.68333 9.64583 4.75 9.3875C5.81667 9.12917 6.9 9 8 9C9.1 9 10.1833 9.12917 11.25 9.3875C12.3167 9.64583 13.3667 10.0333 14.4 10.55C14.8833 10.8 15.2708 11.1625 15.5625 11.6375C15.8542 12.1125 16 12.6333 16 13.2V16H0ZM2 14H14V13.2C14 13.0167 13.9542 12.85 13.8625 12.7C13.7708 12.55 13.65 12.4333 13.5 12.35C12.6 11.9 11.6917 11.5625 10.775 11.3375C9.85833 11.1125 8.93333 11 8 11C7.06667 11 6.14167 11.1125 5.225 11.3375C4.30833 11.5625 3.4 11.9 2.5 12.35C2.35 12.4333 2.22917 12.55 2.1375 12.7C2.04583 12.85 2 13.0167 2 13.2V14ZM8 6C8.55 6 9.02083 5.80417 9.4125 5.4125C9.80417 5.02083 10 4.55 10 4C10 3.45 9.80417 2.97917 9.4125 2.5875C9.02083 2.19583 8.55 2 8 2C7.45 2 6.97917 2.19583 6.5875 2.5875C6.19583 2.97917 6 3.45 6 4C6 4.55 6.19583 5.02083 6.5875 5.4125C6.97917 5.80417 7.45 6 8 6Z" + /> + </svg> + </dt> + <dd>posthansi</dd> + </div> + </dl> + </div> + + <div class="flex-1 basis-1/2"> + <h4 class="sr-only">Zuständige Stellen</h4> + <div class="pl-4 text-gray-500">keine zuständigen Stellen zugewiesen</div> + </div> + </a> + </li> + <li> + <a + href="#" + class="flex flex-col items-start justify-between gap-6 rounded-b-md border-primary-600/50 px-6 py-4 hover:bg-background-150 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus lg:flex-row" + > + <div class="flex-1 basis-1/2"> + <div class="mb-2 flex flex-wrap items-center gap-x-3"> + <h3 class="text-md font-semibold">Hans Postler</h3> + <dl class="flex flex-wrap gap-2"> + <dt class="sr-only">Rollen:</dt> + <dd + class="inline-flex flex-shrink-0 items-center rounded-full bg-green-50 px-1.5 py-0.5 text-sm font-medium text-green-700 ring-1 ring-inset ring-green-600/20" + > + ADMIN_ADMIN + </dd> + <dd + class="inline-flex flex-shrink-0 items-center rounded-full bg-green-50 px-1.5 py-0.5 text-sm font-medium text-green-700 ring-1 ring-inset ring-green-600/20" + > + Alfa: VERWALTUNG_USER + </dd> + <dd + class="inline-flex flex-shrink-0 items-center rounded-full bg-green-50 px-1.5 py-0.5 text-sm font-medium text-green-700 ring-1 ring-inset ring-green-600/20" + > + Alfa: VERWALTUNG_LOESCHEN + </dd> + </dl> + </div> + + <dl> + <div class="flex items-center gap-2"> + <dt> + <span class="sr-only">E-Mail: </span + ><svg + class="size-4 flex-none fill-gray-600" + viewBox="0 0 20 16" + fill="none" + xmlns="http://www.w3.org/2000/svg" + aria-hidden="true" + > + <path + d="M2 16C1.45 16 0.979167 15.8042 0.5875 15.4125C0.195833 15.0208 0 14.55 0 14V2C0 1.45 0.195833 0.979167 0.5875 0.5875C0.979167 0.195833 1.45 0 2 0H18C18.55 0 19.0208 0.195833 19.4125 0.5875C19.8042 0.979167 20 1.45 20 2V14C20 14.55 19.8042 15.0208 19.4125 15.4125C19.0208 15.8042 18.55 16 18 16H2ZM10 9L2 4V14H18V4L10 9ZM10 7L18 2H2L10 7ZM2 4V2V14V4Z" + /> + </svg> + </dt> + <dd>hansi@landratsamt-kiel1.de</dd> + </div> + <div class="flex items-center gap-2"> + <dt> + <span class="sr-only">E-Benutzername: </span + ><svg + class="size-4 flex-none fill-gray-600" + viewBox="0 0 16 16" + fill="none" + xmlns="http://www.w3.org/2000/svg" + aria-hidden="true" + > + <path + d="M8 8C6.9 8 5.95833 7.60833 5.175 6.825C4.39167 6.04167 4 5.1 4 4C4 2.9 4.39167 1.95833 5.175 1.175C5.95833 0.391667 6.9 0 8 0C9.1 0 10.0417 0.391667 10.825 1.175C11.6083 1.95833 12 2.9 12 4C12 5.1 11.6083 6.04167 10.825 6.825C10.0417 7.60833 9.1 8 8 8ZM0 16V13.2C0 12.6333 0.145833 12.1125 0.4375 11.6375C0.729167 11.1625 1.11667 10.8 1.6 10.55C2.63333 10.0333 3.68333 9.64583 4.75 9.3875C5.81667 9.12917 6.9 9 8 9C9.1 9 10.1833 9.12917 11.25 9.3875C12.3167 9.64583 13.3667 10.0333 14.4 10.55C14.8833 10.8 15.2708 11.1625 15.5625 11.6375C15.8542 12.1125 16 12.6333 16 13.2V16H0ZM2 14H14V13.2C14 13.0167 13.9542 12.85 13.8625 12.7C13.7708 12.55 13.65 12.4333 13.5 12.35C12.6 11.9 11.6917 11.5625 10.775 11.3375C9.85833 11.1125 8.93333 11 8 11C7.06667 11 6.14167 11.1125 5.225 11.3375C4.30833 11.5625 3.4 11.9 2.5 12.35C2.35 12.4333 2.22917 12.55 2.1375 12.7C2.04583 12.85 2 13.0167 2 13.2V14ZM8 6C8.55 6 9.02083 5.80417 9.4125 5.4125C9.80417 5.02083 10 4.55 10 4C10 3.45 9.80417 2.97917 9.4125 2.5875C9.02083 2.19583 8.55 2 8 2C7.45 2 6.97917 2.19583 6.5875 2.5875C6.19583 2.97917 6 3.45 6 4C6 4.55 6.19583 5.02083 6.5875 5.4125C6.97917 5.80417 7.45 6 8 6Z" + /> + </svg> + </dt> + <dd>posthansi77</dd> + </div> + </dl> + </div> + + <div class="flex-1 basis-1/2"> + <h4 class="sr-only">Zuständige Stellen</h4> + <ul class="list-outside list-disc pl-4 text-base"> + <li>Amt für Finanzwirtschaft</li> + <li>Amt für Planwirtschaft</li> + </ul> + </div> + </a> + </li> + </ul> + </div> + <div class="my-5"> <ods-instant-search headerText="In der OZG-Cloud" @@ -34,21 +314,12 @@ loadingCaption="Mein_Bescheid.pdf wird heruntergeladen..." > </ods-attachment> - <ods-attachment caption="Mein_Bescheid.xml" description="234 kB" fileType="xml"> - </ods-attachment> - <ods-attachment caption="Mein_Bescheid.xml" description="234 kB" fileType="image"> - </ods-attachment> - <ods-attachment caption="Mein_Bescheid.doc" description="234 kB" fileType="doc"> - </ods-attachment> - <ods-attachment caption="Mein_Bescheid.doc" description="234 kB" fileType="doc"> - </ods-attachment> - <ods-attachment caption="Mein_Bescheid.doc" description="234 kB" fileType="exclamation"> - </ods-attachment> - <ods-attachment - caption="Katzenanmeldung_1231231_eingsdfsdsdfdsfdsfsdfang.pdf" - description="234 kB" - fileType="pdf" - > + <ods-attachment caption="Mein_Bescheid.xml" description="234 kB" fileType="xml"> </ods-attachment> + <ods-attachment caption="Mein_Bescheid.xml" description="234 kB" fileType="image"> </ods-attachment> + <ods-attachment caption="Mein_Bescheid.doc" description="234 kB" fileType="doc"> </ods-attachment> + <ods-attachment caption="Mein_Bescheid.doc" description="234 kB" fileType="doc"> </ods-attachment> + <ods-attachment caption="Mein_Bescheid.doc" description="234 kB" fileType="exclamation"> </ods-attachment> + <ods-attachment caption="Katzenanmeldung_1231231_eingsdfsdsdfdsfdsfsdfang.pdf" description="234 kB" fileType="pdf"> </ods-attachment> </ods-attachment-wrapper> </div> @@ -58,11 +329,7 @@ <ods-fieldset legend="Checkboxes!" name="Checkboxes group"> <ods-checkbox label="Brand new checkbox" inputId="chckbx1" /> <ods-checkbox label="Disabled checkbox" inputId="chckbx2" [disabled]="true" /> - <ods-checkbox - label="Checkbox with error" - inputId="chckbx3" - [fieldControl]="checkboxControl" - /> + <ods-checkbox label="Checkbox with error" inputId="chckbx3" [hasError]="true" /> </ods-fieldset> </div> <div class="my-4"> @@ -79,12 +346,7 @@ </ods-textarea> </div> <div class="my-4"> - <ods-text-input - id="test-input-id" - label="Betreff" - placeholder="Betreff hier eingeben" - variant="error" - > + <ods-text-input id="test-input-id" label="Betreff" placeholder="Betreff hier eingeben" variant="error"> <ods-error-message text="Betreff fehlt"></ods-error-message ></ods-text-input> </div> @@ -102,20 +364,10 @@ </div> <div class="my-10 flex gap-8"> - <ods-radio-button-card - label="bewilligt" - name="exampleName" - value="bewilligt" - variant="bescheid_bewilligt" - > + <ods-radio-button-card label="bewilligt" name="exampleName" value="bewilligt" variant="bescheid_bewilligt"> <ods-stamp-icon /> </ods-radio-button-card> - <ods-radio-button-card - label="abgelehnt" - name="exampleName" - value="abgelehnt" - variant="bescheid_abgelehnt" - > + <ods-radio-button-card label="abgelehnt" name="exampleName" value="abgelehnt" variant="bescheid_abgelehnt"> <ods-close-icon class="fill-abgelehnt" size="large" /> </ods-radio-button-card> </div> @@ -156,8 +408,8 @@ <cdk-step> <div class="mb-4">Antrag bescheiden</div> <p> - Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor - invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore + magna aliquyam erat, sed diam voluptua. </p> </cdk-step> <cdk-step> @@ -168,34 +420,19 @@ <hr /> <div class="flex flex-col gap-4 bg-background-200 p-6"> <div class="mt-4"> - <ods-button-card - class="w-72" - [isLoading]="false" - text="Bescheiddokument" - subText="automatisch erstellen" - > + <ods-button-card class="w-72" [isLoading]="false" text="Bescheiddokument" subText="automatisch erstellen"> <ods-bescheid-generate-icon icon /> <ods-spinner-icon spinner size="extra-large" /> </ods-button-card> </div> <div class="mt-4"> - <ods-button-card - class="w-72" - [isLoading]="true" - text="Bescheiddokument" - subText="automatisch erstellen" - > + <ods-button-card class="w-72" [isLoading]="true" text="Bescheiddokument" subText="automatisch erstellen"> <ods-bescheid-generate-icon icon /> <ods-spinner-icon spinner size="extra-large" /> </ods-button-card> </div> <div class="mt-4"> - <ods-button-card - class="w-72" - [isLoading]="true" - text="Bescheiddokument" - subText="automatisch erstellen" - > + <ods-button-card class="w-72" [isLoading]="true" text="Bescheiddokument" subText="automatisch erstellen"> <ods-bescheid-generate-icon icon /> </ods-button-card> </div> diff --git a/alfa-client/apps/demo/src/app/app.component.ts b/alfa-client/apps/demo/src/app/app.component.ts index fe9bea7b9e284ee8c47c36bb051a6e682f991b84..d2ac3257386258a3bd111f893c0afc1616c666cc 100644 --- a/alfa-client/apps/demo/src/app/app.component.ts +++ b/alfa-client/apps/demo/src/app/app.component.ts @@ -105,7 +105,6 @@ export class AppComponent { }, ]; instantSearchFormControl = new FormControl(EMPTY_STRING); - checkboxControl = new FormControl(false); getInstantSearchResults() { if (this.instantSearchFormControl.value.length < 2) return []; @@ -132,7 +131,6 @@ export class AppComponent { effect(() => { window.localStorage.setItem('darkMode', JSON.stringify(this.darkMode())); }); - this.checkboxControl.setErrors({ 1: 'error' }); } public onSearchQueryChanged(searchQuery: InstantSearchQuery) { diff --git a/alfa-client/libs/admin/settings/src/index.ts b/alfa-client/libs/admin/settings/src/index.ts index 8d33b086734e167bd7ba0f3b40e56033948b02a1..a13f84185d2480694cbb145fb300e553cc668381 100644 --- a/alfa-client/libs/admin/settings/src/index.ts +++ b/alfa-client/libs/admin/settings/src/index.ts @@ -1,4 +1,7 @@ export * from './lib/admin-settings.module'; +export * from './lib/organisationseinheit/organisations-einheit.model'; export * from './lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component'; +export * from './lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component'; export * from './lib/postfach/postfach-container/postfach-container.component'; export * from './lib/shared/navigation-item/navigation-item.component'; +export * from './lib/users-roles/users-roles.component'; diff --git a/alfa-client/libs/admin/settings/src/lib/admin-settings.module.ts b/alfa-client/libs/admin/settings/src/lib/admin-settings.module.ts index a6865423b56b2537999ce25764a3357a883fe0da..ad13c6426adbf09d39909c175b215c4e79f6c932 100644 --- a/alfa-client/libs/admin/settings/src/lib/admin-settings.module.ts +++ b/alfa-client/libs/admin/settings/src/lib/admin-settings.module.ts @@ -1,36 +1,43 @@ import { ApiRootService } from '@alfa-client/api-root-shared'; import { Environment, ENVIRONMENT_CONFIG } from '@alfa-client/environment-shared'; +import { NavigationSharedModule } from '@alfa-client/navigation-shared'; import { ResourceRepository, TechSharedModule } from '@alfa-client/tech-shared'; +import { UiModule } from '@alfa-client/ui'; import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { ReactiveFormsModule } from '@angular/forms'; import { RouterModule } from '@angular/router'; import KcAdminClient from '@keycloak/keycloak-admin-client'; import { ButtonWithSpinnerComponent, TextareaEditorComponent } from '@ods/component'; -import { TextInputComponent } from '@ods/system'; import { - createSettingListResourceService, - SettingListResourceService, -} from './admin-settings-resource.service'; + ExclamationIconComponent, + ListComponent, + ListItemComponent, + MailboxIconComponent, + PersonIconComponent, + TextInputComponent, +} from '@ods/system'; +import { createSettingListResourceService, SettingListResourceService } from './admin-settings-resource.service'; import { SettingsService } from './admin-settings.service'; -import { - ConfigurationResourceService, - createConfigurationResourceService, -} from './configuration/configuration-resource.service'; +import { ConfigurationResourceService, createConfigurationResourceService } from './configuration/configuration-resource.service'; import { ConfigurationService } from './configuration/configuration.service'; -import { NavigationComponent } from './navigation/navigation.component'; -import { OrganisationseinheitContainerComponent } from './organisationseinheit/organisationseinheit-container/organisationseinheit-container.component'; -import { OrganisationseinheitFormComponent } from './organisationseinheit/organisationseinheit-container/organisationseinheit-form/organisationseinheit-form.component'; -import { OrganisationseinheitListComponent } from './organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component'; -import { OrganisationseinheitNavigationItemComponent } from './organisationseinheit/organisationseinheit-navigation-item/organisationseinheit-navigation-item.component'; +import { + createOrganisationsEinheitListResourceService, + OrganisationsEinheitListResourceService, +} from './organisationseinheit/organisations-einheit-list-resource.service'; +import { + createOrganisationsEinheitResourceService, + OrganisationsEinheitResourceService, +} from './organisationseinheit/organisations-einheit-resource.service'; +import { OrganisationsEinheitContainerComponent } from './organisationseinheit/organisationseinheit-container/organisationseinheit-container.component'; +import { OrganisationsEinheitListComponent } from './organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component'; +import { OrganisationsEinheitFormContainerComponent } from './organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component'; +import { OrganisationsEinheitFormComponent } from './organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component'; +import { OrganisationsEinheitSignaturComponent } from './organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component'; import { PostfachContainerComponent } from './postfach/postfach-container/postfach-container.component'; import { PostfachFormComponent } from './postfach/postfach-container/postfach-form/postfach-form.component'; import { PostfachSignaturComponent } from './postfach/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component'; -import { PostfachNavigationItemComponent } from './postfach/postfach-navigation-item/postfach-navigation-item.component'; -import { - createPostfachResourceService, - PostfachResourceService, -} from './postfach/postfach-resource.service'; +import { createPostfachResourceService, PostfachResourceService } from './postfach/postfach-resource.service'; import { PostfachService } from './postfach/postfach.service'; import { MoreItemButtonComponent } from './shared/more-menu/more-item-button/more-item-button.component'; import { MoreMenuComponent } from './shared/more-menu/more-menu.component'; @@ -39,6 +46,8 @@ import { PrimaryButtonComponent } from './shared/primary-button/primary-button.c import { SecondaryButtonComponent } from './shared/secondary-button/secondary-button.component'; import { SpinnerComponent } from './shared/spinner/spinner.component'; import { TextFieldComponent } from './shared/text-field/text-field.component'; +import { ToUserNamePipe } from './user/to-user-name.pipe'; +import { UsersRolesComponent } from './users-roles/users-roles.component'; @NgModule({ declarations: [ @@ -47,17 +56,17 @@ import { TextFieldComponent } from './shared/text-field/text-field.component'; PostfachSignaturComponent, NavigationItemComponent, TextFieldComponent, - PostfachNavigationItemComponent, - OrganisationseinheitContainerComponent, - OrganisationseinheitFormComponent, + OrganisationsEinheitContainerComponent, + OrganisationsEinheitListComponent, + OrganisationsEinheitFormContainerComponent, + OrganisationsEinheitFormComponent, + OrganisationsEinheitSignaturComponent, PrimaryButtonComponent, - NavigationComponent, SecondaryButtonComponent, - OrganisationseinheitNavigationItemComponent, - OrganisationseinheitListComponent, MoreMenuComponent, MoreItemButtonComponent, SpinnerComponent, + UsersRolesComponent, ], imports: [ CommonModule, @@ -67,12 +76,21 @@ import { TextFieldComponent } from './shared/text-field/text-field.component'; TextInputComponent, ButtonWithSpinnerComponent, TextareaEditorComponent, + MailboxIconComponent, + PersonIconComponent, + ToUserNamePipe, + ListComponent, + ListItemComponent, + ExclamationIconComponent, + UiModule, + NavigationSharedModule, ], exports: [ PostfachContainerComponent, - OrganisationseinheitContainerComponent, - NavigationComponent, + OrganisationsEinheitContainerComponent, + OrganisationsEinheitFormContainerComponent, NavigationItemComponent, + UsersRolesComponent, ], providers: [ ConfigurationService, @@ -102,6 +120,16 @@ import { TextFieldComponent } from './shared/text-field/text-field.component'; useFactory: createSettingListResourceService, deps: [ResourceRepository, ConfigurationService], }, + { + provide: OrganisationsEinheitListResourceService, + useFactory: createOrganisationsEinheitListResourceService, + deps: [ResourceRepository, ApiRootService], + }, + { + provide: OrganisationsEinheitResourceService, + useFactory: createOrganisationsEinheitResourceService, + deps: [ResourceRepository, OrganisationsEinheitListResourceService], + }, ], }) export class AdminSettingsModule {} diff --git a/alfa-client/libs/admin/settings/src/lib/navigation/navigation.component.html b/alfa-client/libs/admin/settings/src/lib/navigation/navigation.component.html deleted file mode 100644 index aa69f82b45426328c850c413c0653d4a074c7ac5..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/navigation/navigation.component.html +++ /dev/null @@ -1,2 +0,0 @@ -<!--<admin-organisationseinheit-navigation-item></admin-organisationseinheit-navigation-item>--> -<admin-postfach-navigation-item></admin-postfach-navigation-item> diff --git a/alfa-client/libs/admin/settings/src/lib/navigation/navigation.component.scss b/alfa-client/libs/admin/settings/src/lib/navigation/navigation.component.scss deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/alfa-client/libs/admin/settings/src/lib/navigation/navigation.component.spec.ts b/alfa-client/libs/admin/settings/src/lib/navigation/navigation.component.spec.ts deleted file mode 100644 index 2598e618c4eb36e2762d7f34ac87260719706a99..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/navigation/navigation.component.spec.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { MockComponent } from 'ng-mocks'; -import { OrganisationseinheitNavigationItemComponent } from '../organisationseinheit/organisationseinheit-navigation-item/organisationseinheit-navigation-item.component'; -import { PostfachNavigationItemComponent } from '../postfach/postfach-navigation-item/postfach-navigation-item.component'; -import { NavigationComponent } from './navigation.component'; - -describe('NavigationComponent', () => { - let component: NavigationComponent; - let fixture: ComponentFixture<NavigationComponent>; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ - NavigationComponent, - MockComponent(PostfachNavigationItemComponent), - MockComponent(OrganisationseinheitNavigationItemComponent), - ], - }).compileComponents(); - - fixture = TestBed.createComponent(NavigationComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/alfa-client/libs/admin/settings/src/lib/navigation/navigation.component.ts b/alfa-client/libs/admin/settings/src/lib/navigation/navigation.component.ts deleted file mode 100644 index 0161a117a1692930d4335c882992892626744a6e..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/navigation/navigation.component.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'admin-navigation', - templateUrl: './navigation.component.html', - styleUrls: ['./navigation.component.scss'], -}) -export class NavigationComponent {} diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit-list-resource.service.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit-list-resource.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..6fd977e0f5cffdd20fc701931e73e023279efafc --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit-list-resource.service.ts @@ -0,0 +1,24 @@ +import { AdminOrganisationsEinheitItemResource, AdminOrganisationsEinheitListResource } from '@admin-client/admin-settings'; +import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared'; +import { ListResourceServiceConfig, ResourceListService, ResourceRepository } from '@alfa-client/tech-shared'; +import { ConfigurationResource } from 'libs/admin/settings/src/lib/configuration/configuration.model'; +import { OrganisationsEinheitListLinkRel } from './organisations-einheit.linkrel'; + +export class OrganisationsEinheitListResourceService extends ResourceListService< + ApiRootResource, + AdminOrganisationsEinheitListResource, + AdminOrganisationsEinheitItemResource +> {} + +export function createOrganisationsEinheitListResourceService(repository: ResourceRepository, apiRootService: ApiRootService) { + return new ResourceListService(buildConfig(apiRootService), repository); +} + +function buildConfig(apiRootService: ApiRootService): ListResourceServiceConfig<ConfigurationResource> { + return { + baseResource: apiRootService.getApiRoot(), + createLinkRel: 'TODO', + listLinkRel: ApiRootLinkRel.ORGANISATIONS_EINHEIT, + listResourceListLinkRel: OrganisationsEinheitListLinkRel.LIST, + }; +} diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit-resource.service.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit-resource.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..7722ed1bc822c933a67f33f74b7175ae2e7e2f47 --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit-resource.service.ts @@ -0,0 +1,25 @@ +import { AdminOrganisationsEinheitResource } from '@admin-client/admin-settings'; +import { ApiResourceService, ResourceRepository, ResourceServiceConfig } from '@alfa-client/tech-shared'; +import { ConfigurationResource } from 'libs/admin/settings/src/lib/configuration/configuration.model'; +import { OrganisationsEinheitListResourceService } from './organisations-einheit-list-resource.service'; +import { OrganisationsEinheitLinkRel } from './organisations-einheit.linkrel'; + +export class OrganisationsEinheitResourceService extends ApiResourceService< + AdminOrganisationsEinheitResource, + AdminOrganisationsEinheitResource +> {} + +export function createOrganisationsEinheitResourceService( + repository: ResourceRepository, + listResourceService: OrganisationsEinheitListResourceService, +) { + return new ApiResourceService(buildConfig(listResourceService), repository); +} + +function buildConfig(listResourceService: OrganisationsEinheitListResourceService): ResourceServiceConfig<ConfigurationResource> { + return { + resource: listResourceService.getSelected(), + getLinkRel: OrganisationsEinheitLinkRel.SELF, + edit: { linkRel: OrganisationsEinheitLinkRel.SELF }, + }; +} diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit.linkrel.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit.linkrel.ts new file mode 100644 index 0000000000000000000000000000000000000000..6e941e1fc3ac3406b32d44085fcde10284fde8ba --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit.linkrel.ts @@ -0,0 +1,7 @@ +export enum OrganisationsEinheitListLinkRel { + LIST = 'organisationsEinheitList', +} + +export enum OrganisationsEinheitLinkRel { + SELF = 'self', +} diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit.model.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit.model.ts new file mode 100644 index 0000000000000000000000000000000000000000..f74a83a382373287cfc21afe8654c9023d67e341 --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit.model.ts @@ -0,0 +1,26 @@ +import { ListResource } from '@alfa-client/tech-shared'; +import { Resource } from '@ngxp/rest'; + +export interface AdminOrganisationsEinheit { + name: string; + organisationsEinheitId: string; + syncResult: AdminOrganisationsEinheitSyncResult; + settings?: AdminOrganisationsEinheitSettings; + isChild?: boolean; +} + +export enum AdminOrganisationsEinheitSyncResult { + OK = 'OK', + NOT_FOUND_IN_PVOG = 'NOT_FOUND_IN_PVOG', + NAME_MISMATCH = 'NAME_MISMATCH', + ORGANISATIONSEINHEIT_ID_NOT_UNIQUE = 'ORGANISATIONSEINHEIT_ID_NOT_UNIQUE', + DELETED = 'DELETED', +} + +export interface AdminOrganisationsEinheitSettings { + signatur?: string; +} + +export interface AdminOrganisationsEinheitResource extends AdminOrganisationsEinheit, Resource {} +export interface AdminOrganisationsEinheitListResource extends ListResource {} +export declare type AdminOrganisationsEinheitItemResource = Resource & AdminOrganisationsEinheit; diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.html b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.html index d324f8d83fe91defe9b5066f4f24d230bc33eb4f..15147aaf6e7a835c2392340bb18c2d02c9d80f88 100644 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.html +++ b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.html @@ -1,24 +1,10 @@ <h1 class="heading-1 pb-4">Organisationseinheiten</h1> -<p id="absender-desc" class="p-1">Hinterlegen Sie Name und ID der Organisationseinheiten.</p> -<admin-organisationseinheit-form - data-test-id="organisationseinheit-form" -></admin-organisationseinheit-form> - -<admin-secondary-button - (clickEmitter)="openDialogForNewGroup()" - data-test-id="organisationseinheit-open-dialog-button" - label="Neue Organisationseinheit anlegen" -> -</admin-secondary-button> -<admin-spinner - data-test-id="organisationseinheit-spinner" - *ngIf="deleteInProgress$ | async" -></admin-spinner> - -<admin-organisationseinheit-list - [organisationseinheitItems]="organisationseinheitItems$ | async" - (editOrganisationseinheit)="edit($event)" - (deleteOrganisationseinheit)="delete($event)" - data-test-id="organisationseinheit-list" -></admin-organisationseinheit-list> +<ng-container *ngIf="organisationsEinheitListStateResource$ | async as organisationsEinheitListStateResource"> + <ozgcloud-spinner [stateResource]="organisationsEinheitListStateResource"> + <admin-organisationseinheit-list + [organisationsEinheitResources]="organisationsEinheitListStateResource.resource | toEmbeddedResources: OrganisationsEinheitListLinkRel.LIST" + data-test-id="organisations-einheit-list" + /> + </ozgcloud-spinner> +</ng-container> diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.spec.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.spec.ts index 50aed3b14f080f41d6dd560101a3c1a358bc5b8f..4df2de4c73425c2807d46e7d01d53d4839eb34af 100644 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.spec.ts +++ b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.spec.ts @@ -1,132 +1,88 @@ -import { - Mock, - dispatchEventFromFixture, - existsAsHtmlElement, - getElementFromFixtureByType, - mock, - notExistsAsHtmlElement, -} from '@alfa-client/test-utils'; +import { AdminOrganisationsEinheitListResource, OrganisationsEinheitContainerComponent } from '@admin-client/admin-settings'; +import { StateResource, ToEmbeddedResourcesPipe, createStateResource } from '@alfa-client/tech-shared'; +import { Mock, existsAsHtmlElement, getMockComponent, mock } from '@alfa-client/test-utils'; +import { SpinnerComponent } from '@alfa-client/ui'; +import { OrganisationsEinheitListResource } from '@alfa-client/zustaendige-stelle-shared'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; -import { singleCold } from 'libs/tech-shared/test/marbles'; +import { ButtonWithSpinnerComponent } from '@ods/component'; import { MockComponent } from 'ng-mocks'; import { of } from 'rxjs'; -import { - createOrganisationseinheit, - createOrganisationseinheitState, -} from '../../../../test/user/user'; -import { SecondaryButtonComponent } from '../../shared/secondary-button/secondary-button.component'; -import { SpinnerComponent } from '../../shared/spinner/spinner.component'; -import { Organisationseinheit } from '../../user/user.model'; -import { UserService } from '../../user/user.service'; -import { OrganisationseinheitContainerComponent } from './organisationseinheit-container.component'; -import { OrganisationseinheitFormComponent } from './organisationseinheit-form/organisationseinheit-form.component'; -import { OrganisationseinheitListComponent } from './organisationseinheit-list/organisationseinheit-list.component'; - -describe('OrganisationseinheitContainerComponent', () => { - let component: OrganisationseinheitContainerComponent; - let fixture: ComponentFixture<OrganisationseinheitContainerComponent>; - - const userService: Mock<UserService> = mock(UserService); - - const dialogOpenButtonSelector: string = getDataTestIdOf( - 'organisationseinheit-open-dialog-button', +import { getDataTestIdOf } from '../../../../../../tech-shared/test/data-test'; +import { createAdminOrganisationsEinheitListResource } from '../../../../test/organisations-einheit/organisations-einheit'; +import { OrganisationsEinheitService } from '../organisationseinheit.service'; +import { OrganisationsEinheitListComponent } from './organisationseinheit-list/organisationseinheit-list.component'; + +describe('OrganisationsEinheitContainerComponent', () => { + let component: OrganisationsEinheitContainerComponent; + let fixture: ComponentFixture<OrganisationsEinheitContainerComponent>; + let organisationsEinheitService: Mock<OrganisationsEinheitService>; + + const organisationsEinheitListStateResource: StateResource<AdminOrganisationsEinheitListResource> = createStateResource( + createAdminOrganisationsEinheitListResource(), ); - const spinnerSelector: string = getDataTestIdOf('organisationseinheit-spinner'); - - const organisationseinheitItems: Organisationseinheit[] = [createOrganisationseinheit()]; - let formComponent: OrganisationseinheitFormComponent; - let listComponent: OrganisationseinheitListComponent; + const listSelector: string = getDataTestIdOf('organisations-einheit-list'); beforeEach(async () => { + organisationsEinheitService = { + ...mock(OrganisationsEinheitService), + getList: jest.fn().mockReturnValue(of(organisationsEinheitListStateResource)), + }; + await TestBed.configureTestingModule({ declarations: [ - OrganisationseinheitContainerComponent, - MockComponent(SecondaryButtonComponent), - MockComponent(OrganisationseinheitFormComponent), - MockComponent(OrganisationseinheitListComponent), + OrganisationsEinheitContainerComponent, + MockComponent(OrganisationsEinheitListComponent), MockComponent(SpinnerComponent), + ToEmbeddedResourcesPipe, ], - providers: [{ provide: UserService, useValue: userService }], + imports: [ButtonWithSpinnerComponent], + providers: [{ provide: OrganisationsEinheitService, useValue: organisationsEinheitService }], }).compileComponents(); - fixture = TestBed.createComponent(OrganisationseinheitContainerComponent); + fixture = TestBed.createComponent(OrganisationsEinheitContainerComponent); component = fixture.componentInstance; - - userService.getOrganisationseinheitState = jest - .fn() - .mockReturnValue(of(createOrganisationseinheitState(organisationseinheitItems))); fixture.detectChanges(); - - formComponent = getElementFromFixtureByType(fixture, OrganisationseinheitFormComponent); - listComponent = getElementFromFixtureByType(fixture, OrganisationseinheitListComponent); }); it('should create', () => { expect(component).toBeTruthy(); }); - it('should open form on new organisationseinheit button', () => { - formComponent.open = jest.fn(); - - dispatchEventFromFixture(fixture, dialogOpenButtonSelector, 'clickEmitter'); - - expect(formComponent.open).toHaveBeenCalled(); - }); - - describe('organisationseinheit list', () => { - it('should open form for editing on editOrganisationseinheit event', () => { - const organisationseinheit: Organisationseinheit = organisationseinheitItems[0]; - formComponent.openEdit = jest.fn(); - - listComponent.editOrganisationseinheit.emit(organisationseinheit); - - expect(formComponent.openEdit).toHaveBeenCalledWith(organisationseinheit); - }); - - it('should call deleteOrganisationseinheit form on deleteOrganisationseinheit event', () => { - const organisationseinheit: Organisationseinheit = organisationseinheitItems[0]; - component.delete = jest.fn(); - - listComponent.deleteOrganisationseinheit.emit(organisationseinheit); - - expect(component.delete).toHaveBeenCalledWith(organisationseinheit); - }); - }); - - describe('delete', () => { - const organisationseinheit: Organisationseinheit = organisationseinheitItems[0]; - - beforeEach(() => { - userService.deleteOrganisationseinheit = jest.fn().mockReturnValue(singleCold(true)); - }); - - it('should call service method', () => { - component.delete(organisationseinheit); - - expect(userService.deleteOrganisationseinheit).toHaveBeenCalledWith(organisationseinheit.id); - }); - - it('should assign delete progress observable', () => { - component.delete(organisationseinheit); - - expect(component.deleteInProgress$).toBeObservable(singleCold(true)); + describe('component', () => { + describe('ngOnInit', () => { + it('should call organisationsEinheitService getList', (done) => { + component.ngOnInit(); + + component.organisationsEinheitListStateResource$.subscribe(() => { + expect(organisationsEinheitService.getList).toHaveBeenCalled(); + done(); + }); + }); + + it('should set organisationsEinheitListStateResource$', (done) => { + component.ngOnInit(); + + component.organisationsEinheitListStateResource$.subscribe( + (listStateResource: StateResource<OrganisationsEinheitListResource>) => { + expect(listStateResource).toBe(organisationsEinheitListStateResource); + done(); + }, + ); + }); }); }); - describe('spinner', () => { - it('should not show if delete in not progress', () => { - fixture.detectChanges(); - - notExistsAsHtmlElement(fixture, spinnerSelector); - }); - it('should show if delete in progress', () => { - component.deleteInProgress$ = of(true); - - fixture.detectChanges(); + describe('template', () => { + describe('organisationsEinheiten list', () => { + it('should show list', () => { + existsAsHtmlElement(fixture, listSelector); + }); - existsAsHtmlElement(fixture, spinnerSelector); + it('should have organisationsEinheitResources', () => { + const listComponent: OrganisationsEinheitListComponent = getMockComponent(fixture, OrganisationsEinheitListComponent); + expect(listComponent.organisationsEinheitResources).toBeTruthy(); + }); }); }); }); diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.ts index f2bc2061e143c013c4d7f9f3096c2020c8852d3a..eaa53e7accd8d8f1a27c8ed39dd64e47b5c94ce9 100644 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.ts +++ b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.ts @@ -1,35 +1,22 @@ -import { Component, OnInit, ViewChild } from '@angular/core'; -import { Observable, of } from 'rxjs'; -import { Organisationseinheit } from '../../user/user.model'; -import { UserService } from '../../user/user.service'; -import { OrganisationseinheitFormComponent } from './organisationseinheit-form/organisationseinheit-form.component'; +import { StateResource } from '@alfa-client/tech-shared'; +import { Component, OnInit } from '@angular/core'; +import { Observable } from 'rxjs'; +import { OrganisationsEinheitListLinkRel } from '../organisations-einheit.linkrel'; +import { AdminOrganisationsEinheitListResource } from '../organisations-einheit.model'; +import { OrganisationsEinheitService } from '../organisationseinheit.service'; @Component({ selector: 'admin-organisationseinheit-container', templateUrl: './organisationseinheit-container.component.html', }) -export class OrganisationseinheitContainerComponent implements OnInit { - organisationseinheitItems$: Observable<Organisationseinheit[]>; - deleteInProgress$: Observable<boolean> = of(false); +export class OrganisationsEinheitContainerComponent implements OnInit { + organisationsEinheitListStateResource$: Observable<StateResource<AdminOrganisationsEinheitListResource>>; - @ViewChild(OrganisationseinheitFormComponent) - private form!: OrganisationseinheitFormComponent; + public readonly OrganisationsEinheitListLinkRel = OrganisationsEinheitListLinkRel; - constructor(private userService: UserService) {} + constructor(private organisationsEinheitService: OrganisationsEinheitService) {} ngOnInit(): void { - this.organisationseinheitItems$ = this.userService.getOrganisationseinheitItems(); - } - - public openDialogForNewGroup(): void { - this.form.open(); - } - - public edit(organisationseinheit: Organisationseinheit): void { - this.form.openEdit(organisationseinheit); - } - - public delete(organisationseinheit: Organisationseinheit): void { - this.deleteInProgress$ = this.userService.deleteOrganisationseinheit(organisationseinheit.id); + this.organisationsEinheitListStateResource$ = this.organisationsEinheitService.getList(); } } diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-form/organisationseinheit-form.component.html b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-form/organisationseinheit-form.component.html deleted file mode 100644 index 8d00b44b3737090091e15a34e731f4168b12b601..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-form/organisationseinheit-form.component.html +++ /dev/null @@ -1,33 +0,0 @@ -<dialog #OrganisationseinheitDialog data-test-id="organisationseinheit-dialog" class="bg-gray-50"> - <button - (click)="OrganisationseinheitDialog.close()" - data-test-id="organisationseinheit-close-button" - class="absolute right-3 top-1 text-2xl text-black hover:font-bold active:text-black/80" - > - ✕ - </button> - <form [formGroup]="formService.form" class="m-5 grid grid-cols-1 gap-5"> - <h1 class="text-2xl" data-test-id="organisationseinheit-form-header"> - {{ label }} - </h1> - <text-field - label="Name" - data-test-id="organisationseinheit-name" - [formControlName]="OrganisationseinheitFormService.ORGANISATIONSEINHEIT_NAME_FIELD" - ></text-field> - <text-field - label="OrganisationseinheitID" - data-test-id="organisationseinheit-id" - [formControlName]="OrganisationseinheitFormService.ORGANISATIONSEINHEIT_IDS_FIELD" - ></text-field> - - <admin-primary-button - data-test-id="organisationseinheit-save-button" - class="justify-self-end" - (clickEmitter)="submit()" - [submitInProgress]="submitInProgress$ | async" - label="Speichern" - > - </admin-primary-button> - </form> -</dialog> diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-form/organisationseinheit-form.component.spec.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-form/organisationseinheit-form.component.spec.ts deleted file mode 100644 index 0418653a9be772a8adc99ba50aa1a7f4dfda142f..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-form/organisationseinheit-form.component.spec.ts +++ /dev/null @@ -1,301 +0,0 @@ -import { - dispatchEventFromFixture, - getDebugElementFromFixtureByCss, - getElementFromFixture, - mock, - Mock, -} from '@alfa-client/test-utils'; -import { DebugElement } from '@angular/core'; -import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing'; -import { - AbstractControl, - FormsModule, - ReactiveFormsModule, - UntypedFormGroup, -} from '@angular/forms'; -import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; -import { MockComponent, ngMocks } from 'ng-mocks'; -import { of, throwError } from 'rxjs'; -import { createOrganisationseinheit } from '../../../../../test/user/user'; -import { PrimaryButtonComponent } from '../../../shared/primary-button/primary-button.component'; -import { TextFieldComponent } from '../../../shared/text-field/text-field.component'; -import { Organisationseinheit } from '../../../user/user.model'; -import { UserService } from '../../../user/user.service'; -import { OrganisationseinheitFormComponent } from './organisationseinheit-form.component'; -import { OrganisationseinheitFormservice } from './organisationseinheit.formservice'; - -describe('OrganisationseinheitFormComponent', () => { - let component: OrganisationseinheitFormComponent; - let fixture: ComponentFixture<OrganisationseinheitFormComponent>; - let form: UntypedFormGroup; - - const userService: Mock<UserService> = mock(UserService); - - const saveButtonSelector: string = getDataTestIdOf('organisationseinheit-save-button'); - const closeButtonSelector: string = getDataTestIdOf('organisationseinheit-close-button'); - const headerSelector: string = getDataTestIdOf('organisationseinheit-form-header'); - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ - OrganisationseinheitFormComponent, - MockComponent(PrimaryButtonComponent), - MockComponent(TextFieldComponent), - ], - imports: [ReactiveFormsModule, FormsModule], - providers: [{ provide: UserService, useValue: userService }], - }).compileComponents(); - - fixture = TestBed.createComponent(OrganisationseinheitFormComponent); - component = fixture.componentInstance; - form = fixture.componentInstance.formService.form; - fixture.detectChanges(); - - component.dialog.showModal = jest.fn(); - component.dialog.close = jest.fn(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); - - describe('form element', () => { - const fields: string[][] = [ - [ - OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_NAME_FIELD, - 'Name', - 'organisationseinheit-name', - ], - [ - OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_IDS_FIELD, - 'OrganisationseinheitID', - 'organisationseinheit-id', - ], - ]; - - it.each(fields)( - 'should have label for field "%s" with name "%s"', - (fieldName: string, text: string, inputId: string) => { - const textFieldElement = getElementFromFixture(fixture, getDataTestIdOf(inputId)); - expect(textFieldElement.getAttribute('label')).toBe(text); - }, - ); - - it.each(fields)('should bind form for text-field "%s"', (fieldName, text, dataTestId) => { - const fieldValue: string = `some text-field ${text}`; - const formControl: AbstractControl = form.get(fieldName); - - const textFieldComponent: DebugElement = getDebugElementFromFixtureByCss( - fixture, - getDataTestIdOf(dataTestId), - ); - ngMocks.change(textFieldComponent, fieldValue); - expect(formControl.value).toBe(fieldValue); - }); - }); - - describe('save button', () => { - let saveButtonComponent: PrimaryButtonComponent; - - beforeEach(() => { - saveButtonComponent = getDebugElementFromFixtureByCss( - fixture, - saveButtonSelector, - ).componentInstance; - }); - - it('should call submit on click', () => { - component.submit = jest.fn(); - - dispatchEventFromFixture(fixture, saveButtonSelector, 'clickEmitter'); - - expect(component.submit).toHaveBeenCalled(); - }); - - it('should be disabled while in progress', () => { - component.submitInProgress$ = of(true); - - fixture.detectChanges(); - - expect(saveButtonComponent.submitInProgress).toBe(true); - }); - - it('should be enabled while not in progress', () => { - component.submitInProgress$ = of(false); - - fixture.detectChanges(); - - expect(saveButtonComponent.submitInProgress).toBe(false); - }); - }); - - describe('submit', () => { - beforeEach(() => { - component.handleProgressChange = jest.fn(); - }); - - it('should not call complete on submit error', fakeAsync(() => { - component.formService.submit = () => throwError(() => new Error('some error')); - - component.submit(); - component.submitInProgress$.subscribe({ - error: () => {}, - }); - tick(); - - expect(component.handleProgressChange).not.toHaveBeenCalled(); - })); - - it('should call complete on submit event', fakeAsync(() => { - component.formService.submit = () => of(false); - - component.submit(); - component.submitInProgress$.subscribe(); - tick(); - - expect(component.handleProgressChange).toHaveBeenCalled(); - })); - - it.each([true, false])('should use submit progress "%s"', (progress) => { - component.submitInProgress$ = of(progress); - - fixture.detectChanges(); - - const saveButtonComponent: PrimaryButtonComponent = getDebugElementFromFixtureByCss( - fixture, - saveButtonSelector, - ).componentInstance; - expect(saveButtonComponent.submitInProgress).toBe(progress); - }); - }); - - describe('handle progress change', () => { - it('should call complete if no errors with progress false', () => { - component.completeIfNoErrors = jest.fn(); - - component.handleProgressChange(false); - - expect(component.completeIfNoErrors).toHaveBeenCalled(); - }); - - it('should call complete if no errors with progress true', () => { - component.completeIfNoErrors = jest.fn(); - - component.handleProgressChange(true); - - expect(component.completeIfNoErrors).not.toHaveBeenCalled(); - }); - }); - - describe('complete if no errors', () => { - beforeEach(() => { - component.complete = jest.fn(); - }); - - it('should call not complete with errors', () => { - component.formService.isInvalid = jest.fn().mockReturnValue(true); - - component.completeIfNoErrors(); - - expect(component.complete).not.toHaveBeenCalled(); - }); - - it('should call complete without errors', () => { - component.formService.isInvalid = jest.fn().mockReturnValue(false); - - component.completeIfNoErrors(); - - expect(component.complete).toHaveBeenCalled(); - }); - }); - - describe('complete', () => { - beforeEach(() => { - component.dialog.close = jest.fn(); - component.formService.reset = jest.fn(); - }); - - it('should close dialog', () => { - component.complete(); - - expect(component.dialog.close).toHaveBeenCalled(); - }); - it('should reset form', () => { - component.complete(); - - expect(component.formService.reset).toHaveBeenCalled(); - }); - }); - - describe('close button', () => { - it('should call to close dialog', () => { - component.dialog.close = jest.fn(); - - dispatchEventFromFixture(fixture, closeButtonSelector, 'click'); - - expect(component.dialog.close).toHaveBeenCalled(); - }); - }); - - describe('open', () => { - beforeEach(() => { - form.markAsTouched(); - }); - - it('should set create label', () => { - component.open(); - - expect(component.label).toEqual(OrganisationseinheitFormComponent.CREATE_LABEL); - }); - - it('should open form', () => { - component.open(); - - expect(component.dialog.showModal).toHaveBeenCalled(); - }); - - it('should reset form', () => { - component.formService.reset = jest.fn(); - - component.open(); - - expect(component.formService.reset).toHaveBeenCalled(); - }); - }); - - describe('open edit', () => { - const organisationseinheit: Organisationseinheit = createOrganisationseinheit(); - - it('should set edit label', () => { - component.openEdit(organisationseinheit); - - expect(component.label).toEqual(OrganisationseinheitFormComponent.EDIT_LABEL); - }); - - it('should open dialog', () => { - component.open(); - - expect(component.dialog.showModal).toHaveBeenCalled(); - }); - - it('should patch form', () => { - component.formService.patch = jest.fn(); - - component.openEdit(organisationseinheit); - - expect(component.formService.patch).toHaveBeenCalledWith(organisationseinheit); - }); - }); - - describe('header', () => { - it('should show label text', () => { - const text: string = 'test-text'; - component.label = text; - - fixture.detectChanges(); - - const headerElement: HTMLElement = getElementFromFixture(fixture, headerSelector); - expect(headerElement.textContent.trim()).toEqual(text); - }); - }); -}); diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-form/organisationseinheit-form.component.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-form/organisationseinheit-form.component.ts deleted file mode 100644 index 5224f6db0c0c1abd27fba74b2adc3067fe00a460..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-form/organisationseinheit-form.component.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { AfterViewInit, Component, ElementRef, ViewChild } from '@angular/core'; -import { Observable, of, tap } from 'rxjs'; -import { Organisationseinheit } from '../../../user/user.model'; -import { OrganisationseinheitFormservice } from './organisationseinheit.formservice'; - -@Component({ - selector: 'admin-organisationseinheit-form', - templateUrl: './organisationseinheit-form.component.html', - providers: [OrganisationseinheitFormservice], -}) -export class OrganisationseinheitFormComponent implements AfterViewInit { - static CREATE_LABEL: string = 'Neue Organisationseinheit anlegen'; - static EDIT_LABEL: string = 'Organisationseinheit bearbeiten'; - - protected readonly OrganisationseinheitFormService = OrganisationseinheitFormservice; - - @ViewChild('OrganisationseinheitDialog') private dialogRef: ElementRef<HTMLDialogElement>; - dialog: HTMLDialogElement; - - submitInProgress$: Observable<boolean> = of(false); - - label: string; - - constructor(public formService: OrganisationseinheitFormservice) {} - - ngAfterViewInit(): void { - this.dialog = this.dialogRef.nativeElement; - } - - public submit() { - this.submitInProgress$ = this.formService - .submit() - .pipe(tap((progress: boolean) => this.handleProgressChange(progress))); - } - - handleProgressChange(progress: boolean): void { - if (!progress) { - this.completeIfNoErrors(); - } - } - - completeIfNoErrors(): void { - if (!this.formService.isInvalid()) { - this.complete(); - } - } - - public open(): void { - this.label = OrganisationseinheitFormComponent.CREATE_LABEL; - this.formService.reset(); - this.dialog.showModal(); - } - - public openEdit(organisationseinheit: Organisationseinheit): void { - this.label = OrganisationseinheitFormComponent.EDIT_LABEL; - this.formService.patch(organisationseinheit); - this.dialog.showModal(); - } - - complete(): void { - this.dialog.close(); - this.formService.reset(); - } -} diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-form/organisationseinheit.formservice.spec.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-form/organisationseinheit.formservice.spec.ts deleted file mode 100644 index c43144f6a8730dd6c81ed73aaef73aa4f0b4b5ef..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-form/organisationseinheit.formservice.spec.ts +++ /dev/null @@ -1,354 +0,0 @@ -import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; -import { fakeAsync, tick } from '@angular/core/testing'; -import { AbstractControl, FormBuilder } from '@angular/forms'; -import { hot } from 'jest-marbles'; -import { singleCold, singleHot } from 'libs/tech-shared/test/marbles'; -import { Observable, lastValueFrom, throwError } from 'rxjs'; -import { - createOrganisationseinheit, - createOrganisationseinheitError, -} from '../../../../../test/user/user'; -import { - Organisationseinheit, - OrganisationseinheitError, - OrganisationseinheitErrorType, -} from '../../../user/user.model'; -import { UserService } from '../../../user/user.service'; -import { getOrganisationseinheitErrorMessage } from '../../../user/user.util'; -import { OrganisationseinheitFormservice } from './organisationseinheit.formservice'; - -describe('OrganisationseinheitFormService', () => { - let formService: OrganisationseinheitFormservice; - let organisationseinheit: Organisationseinheit; - const userService: Mock<UserService> = mock(UserService); - - const formBuilder: FormBuilder = new FormBuilder(); - - beforeEach(() => { - formService = new OrganisationseinheitFormservice(formBuilder, useFromMock(userService)); - organisationseinheit = createOrganisationseinheit(); - formService.form.setValue({ - [OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_NAME_FIELD]: organisationseinheit.name, - [OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_IDS_FIELD]: - organisationseinheit.organisationseinheitIds.join(','), - }); - }); - - it('should create', () => { - expect(formService).toBeTruthy(); - }); - - describe('submit', () => { - beforeEach(() => { - formService.handleError = jest.fn(); - }); - - describe('with successful validation', () => { - beforeEach(() => { - formService.validate = jest.fn().mockReturnValue(true); - }); - it('should call handle error with service call observable', fakeAsync(() => { - const error: OrganisationseinheitError = createOrganisationseinheitError(); - formService.callService = jest.fn().mockReturnValue(throwError(() => error)); - - formService.submit().subscribe(); - tick(); - - expect(formService.handleError).toHaveBeenCalledWith(error); - })); - - it('should emit emit progress as false on error', () => { - const error: OrganisationseinheitError = createOrganisationseinheitError(); - formService.callService = jest.fn().mockReturnValue(hot('a#', { a: true }, error)); - - const progressObservable: Observable<boolean> = formService.submit(); - - expect(progressObservable).toBeObservable(hot('a(b|)', { a: true, b: false })); - }); - - it('should return progress observable', () => { - formService.callService = jest.fn().mockReturnValue(singleCold(true)); - - const progressObservable: Observable<boolean> = formService.submit(); - - expect(progressObservable).toBeObservable(singleCold(true)); - }); - }); - describe('with unsuccessful validation', () => { - beforeEach(() => { - formService.validate = jest.fn().mockReturnValue(false); - }); - - it('should return progress observable with false', async () => { - const progressObservable: Observable<boolean> = formService.submit(); - - const progress: boolean = await lastValueFrom(progressObservable); - - expect(progress).toBeFalsy(); - }); - }); - }); - - describe('validate', () => { - const hasIdMissingError = () => - formService.form.hasError( - OrganisationseinheitErrorType.ID_MISSING, - OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_IDS_FIELD, - ); - describe('without organisationeinheitIds', () => { - beforeEach(() => { - formService.form.setValue({ - [OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_NAME_FIELD]: - organisationseinheit.name, - [OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_IDS_FIELD]: ',', - }); - }); - - it('should set id-missing error', () => { - formService.validate(); - - expect(hasIdMissingError()).toBeTruthy(); - }); - it('should be invalid', () => { - const valid: boolean = formService.validate(); - - expect(valid).toBeFalsy(); - }); - }); - describe('with organisationeinheitIds', () => { - it('should not set error', () => { - formService.validate(); - - expect(hasIdMissingError()).toBeFalsy(); - }); - - it('should be valid', () => { - const valid: boolean = formService.validate(); - - expect(valid).toBeTruthy(); - }); - }); - }); - - describe('call service', () => { - it('should use create if is not patch', () => { - formService.isPatch = jest.fn().mockReturnValue(false); - formService.create = jest.fn().mockReturnValue(singleHot(true)); - - const progressObservable: Observable<boolean> = formService.callService(); - - expect(progressObservable).toBeObservable(singleHot(true)); - }); - - it('should use save if is patch', () => { - formService.isPatch = jest.fn().mockReturnValue(true); - formService.save = jest.fn().mockReturnValue(singleHot(true)); - - const progressObservable: Observable<boolean> = formService.callService(); - - expect(progressObservable).toBeObservable(singleHot(true)); - }); - }); - - describe('is patch', () => { - it('should return false without source', () => { - formService.source = null; - - const isPatch: boolean = formService.isPatch(); - - expect(isPatch).toBeFalsy(); - }); - it('should return true with source', () => { - formService.source = createOrganisationseinheit(); - - const isPatch: boolean = formService.isPatch(); - - expect(isPatch).toBeTruthy(); - }); - }); - - describe('create', () => { - it('should call create organisationseinheit', () => { - formService.create(); - - expect(userService.createOrganisationseinheit).toHaveBeenCalledWith( - organisationseinheit.name, - organisationseinheit.organisationseinheitIds, - ); - }); - - it('should call create organisationseinheit with empty form', () => { - formService.form.setValue({ - [OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_NAME_FIELD]: null, - [OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_IDS_FIELD]: null, - }); - formService.create(); - - expect(userService.createOrganisationseinheit).toHaveBeenCalledWith('', []); - }); - - it('should return progress observable', () => { - userService.createOrganisationseinheit.mockReturnValue(singleCold(true)); - - const progressObservable: Observable<boolean> = formService.create(); - - expect(progressObservable).toBeObservable(singleCold(true)); - }); - }); - - describe('save', () => { - it('should call save organisationseinheit', () => { - formService.source = createOrganisationseinheit(); - - formService.save(); - - expect(userService.saveOrganisationseinheit).toHaveBeenCalledWith({ - id: formService.source.id, - name: organisationseinheit.name, - organisationseinheitIds: organisationseinheit.organisationseinheitIds, - }); - }); - - it('should call save organisationseinheit with empty form', () => { - formService.source = createOrganisationseinheit(); - formService.form.setValue({ - [OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_NAME_FIELD]: null, - [OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_IDS_FIELD]: null, - }); - formService.save(); - - expect(userService.saveOrganisationseinheit).toHaveBeenCalledWith({ - id: formService.source.id, - name: '', - organisationseinheitIds: [], - }); - }); - - it('should return progress observable', () => { - userService.saveOrganisationseinheit.mockReturnValue(singleCold(true)); - - const progressObservable: Observable<boolean> = formService.save(); - - expect(progressObservable).toBeObservable(singleCold(true)); - }); - }); - - describe('handle error', () => { - it.each([ - OrganisationseinheitErrorType.NAME_CONFLICT, - OrganisationseinheitErrorType.NAME_MISSING, - ])('should set error on name field on %s', (type: OrganisationseinheitErrorType) => { - const error: OrganisationseinheitError = { - ...createOrganisationseinheitError(), - errorType: type, - }; - - formService.handleError(error); - const errorMessage = formService.form.getError( - type, - OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_NAME_FIELD, - ); - expect(errorMessage).toEqual(getOrganisationseinheitErrorMessage(error)); - }); - - it('should not set error on name field for unknown errors', () => { - const unknownError: OrganisationseinheitError = createOrganisationseinheitError(undefined); - - formService.handleError(unknownError); - - expect(formService.form.errors).toBeNull(); - }); - }); - - describe('patch', () => { - const organisationseinheit: Organisationseinheit = createOrganisationseinheit(); - - it('should reset', () => { - formService.reset = jest.fn(); - - formService.patch(organisationseinheit); - - expect(formService.reset).toHaveBeenCalled(); - }); - - it('should set source', () => { - formService.patch(organisationseinheit); - - expect(formService.source).toBe(organisationseinheit); - }); - - it('should set name', () => { - formService.patch(organisationseinheit); - - const formControl: AbstractControl = formService.form.get( - OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_NAME_FIELD, - ); - expect(formControl.value).toEqual(organisationseinheit.name); - }); - - it('should set organisationseinheitIds', () => { - formService.patch(organisationseinheit); - - const formControl: AbstractControl = formService.form.get( - OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_IDS_FIELD, - ); - expect(formControl.value).toEqual(organisationseinheit.organisationseinheitIds.join(', ')); - }); - }); - - describe('split organisationseinheitIds by comma', () => { - it('should return', () => { - const organisationseinheitIds: string[] = - formService.splitOrganisationseinheitIds('123, 555 , 666'); - - expect(organisationseinheitIds).toEqual(['123', '555', '666']); - }); - - it('should filter empty organisationseinheitIds', () => { - const organisationseinheitIds: string[] = - formService.splitOrganisationseinheitIds(',55,,66,'); - - expect(organisationseinheitIds).toEqual(['55', '66']); - }); - }); - - describe('reset', () => { - it('should set source to null', () => { - formService.form.reset = jest.fn(); - - formService.reset(); - - expect(formService.source).toBeNull(); - }); - - it('should call form reset', () => { - formService.form.reset = jest.fn(); - - formService.reset(); - - expect(formService.form.reset).toHaveBeenCalled(); - }); - - it('should mark as untouched', () => { - formService.patch(organisationseinheit); - - expect(formService.form.untouched).toBeTruthy(); - }); - }); - - describe('is invalid', () => { - it('should return true', () => { - formService.form.setErrors({ some: 'message' }); - - const invalid: boolean = formService.isInvalid(); - - expect(invalid).toBeTruthy(); - }); - - it('should return false', () => { - const invalid: boolean = formService.isInvalid(); - - expect(invalid).toBeFalsy(); - }); - }); -}); diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-form/organisationseinheit.formservice.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-form/organisationseinheit.formservice.ts deleted file mode 100644 index 850b5f775f723f0b27073ac5de0b99d7a2c877e8..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-form/organisationseinheit.formservice.ts +++ /dev/null @@ -1,140 +0,0 @@ -import { isNotNil } from '@alfa-client/tech-shared'; -import { Injectable } from '@angular/core'; -import { AbstractControl, FormControl, UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { Observable, catchError, of } from 'rxjs'; -import { - Organisationseinheit, - OrganisationseinheitError, - OrganisationseinheitErrorType, -} from '../../../user/user.model'; -import { UserService } from '../../../user/user.service'; -import { getOrganisationseinheitErrorMessage } from '../../../user/user.util'; - -@Injectable() -export class OrganisationseinheitFormservice { - public static readonly ORGANISATIONSEINHEIT_NAME_FIELD: string = 'name'; - public static readonly ORGANISATIONSEINHEIT_IDS_FIELD: string = 'organisationseinheit'; - - form: UntypedFormGroup; - - source: Organisationseinheit; - - constructor( - private formBuilder: UntypedFormBuilder, - private userService: UserService, - ) { - this.form = this.formBuilder.group({ - [OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_NAME_FIELD]: new FormControl(''), - [OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_IDS_FIELD]: new FormControl(''), - }); - } - - public submit(): Observable<boolean> { - if (this.validate()) { - return this.callService().pipe( - catchError((error: OrganisationseinheitError) => { - this.handleError(error); - return of(false); - }), - ); - } else { - return of(false); - } - } - - callService(): Observable<boolean> { - return this.isPatch() ? this.save() : this.create(); - } - - create(): Observable<boolean> { - return this.userService.createOrganisationseinheit( - this.getName(), - this.getOrganisationseinheitIds(), - ); - } - - save(): Observable<boolean> { - return this.userService.saveOrganisationseinheit({ - ...this.source, - name: this.getName(), - organisationseinheitIds: this.getOrganisationseinheitIds(), - }); - } - - validate(): boolean { - let valid: boolean = true; - - if (this.getOrganisationseinheitIds().length == 0) { - this.setError(OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_IDS_FIELD, { - errorType: OrganisationseinheitErrorType.ID_MISSING, - detail: '', - }); - valid = false; - } - - return valid; - } - - private getName(): string { - return this.getStringFromPotentiallyEmptyField( - OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_NAME_FIELD, - ); - } - - private getOrganisationseinheitIds(): string[] { - return this.splitOrganisationseinheitIds( - this.form.get(OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_IDS_FIELD).value ?? '', - ); - } - - private getStringFromPotentiallyEmptyField(fieldName: string): string { - return this.form.get(fieldName).value ?? ''; - } - - public isPatch(): boolean { - return isNotNil(this.source); - } - - handleError(error: OrganisationseinheitError): void { - if ( - error.errorType === OrganisationseinheitErrorType.NAME_CONFLICT || - error.errorType === OrganisationseinheitErrorType.NAME_MISSING - ) { - this.setError(OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_NAME_FIELD, error); - } - } - - private setError(controlName: string, error: OrganisationseinheitError): void { - const control: AbstractControl = this.form.get(controlName); - control.setErrors({ - [error.errorType]: getOrganisationseinheitErrorMessage(error), - }); - } - - splitOrganisationseinheitIds(organisationseinheitIdsString: string): string[] { - return organisationseinheitIdsString - .split(',') - .map((organisationseinheitId) => organisationseinheitId.trim()) - .filter((organisationseinheitId) => organisationseinheitId.length > 0); - } - - public patch(organisationseinheit: Organisationseinheit): void { - this.reset(); - this.source = organisationseinheit; - this.form.patchValue({ - [OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_NAME_FIELD]: organisationseinheit.name, - [OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_IDS_FIELD]: - organisationseinheit.organisationseinheitIds.join(', '), - }); - } - - public reset(): void { - this.source = null; - this.form.reset(); - this.form.markAsUntouched(); - } - - public isInvalid(): boolean { - return this.form.invalid; - } -} diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.html b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.html index f26e6e0c0d028d7d8bf3b224279cf662d80e5603..4d7bb88c347ce810280f41d2202077cccf4e9062 100644 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.html +++ b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.html @@ -1,52 +1,38 @@ -<table - *ngIf="organisationseinheitItems.length; else emptyMessage" - aria-label="Keycloak-Gruppen mit OrganisationseinheitIDs" - class="mb-2 mt-2 table-fixed" - data-test-id="organisationseinheit-table" -> - <tr class="invisible"> - <th scope="col">Name</th> - <th scope="col">Attribute</th> - </tr> - <tr *ngFor="let organisationseinheit of organisationseinheitItems" [id]="organisationseinheit.id"> - <td - [attr.data-test-id]=" - 'organisationseinheit-name-' + organisationseinheit.id | convertForDataTest - " - class="w-96 border border-slate-500 p-2 font-bold" - > - {{ organisationseinheit.name }} - </td> - <td - [attr.data-test-id]=" - 'organisationseinheit-attr-' + organisationseinheit.id | convertForDataTest - " - class="w-96 border border-slate-500 p-2" - > - OrganisationseinheitID: {{ organisationseinheit.organisationseinheitIds.join(', ') }} - <admin-more-menu class="float-right"> - <admin-more-item-button - (clickEmitter)="editOrganisationseinheit.emit(organisationseinheit)" - more-menu-item - [attr.data-test-id]=" - 'organisationseinheit-edit-' + organisationseinheit.id | convertForDataTest - " - label="Bearbeiten" - ></admin-more-item-button> - <admin-more-item-button - (clickEmitter)="deleteOrganisationseinheit.emit(organisationseinheit)" - more-menu-item - [attr.data-test-id]=" - 'organisationseinheit-delete-' + organisationseinheit.id | convertForDataTest - " - label="Löschen" - ></admin-more-item-button> - </admin-more-menu> - </td> - </tr> -</table> -<ng-template #emptyMessage - ><span data-test-id="organisationseinheit-empty-message" class="mb-2 mt-2 block italic" - >Keine Organisationseinheiten vorhanden.</span +<ods-list *ngIf="organisationsEinheitResources.length > 0" data-test-id="organisations-einheit-list"> + <ods-list-item + *ngFor="let organisationsEinheitResource of organisationsEinheitResources" + [path]="organisationsEinheitResource | toResourceUri" + [class.text-red-500]=" + organisationsEinheitResource.syncResult === AdminOrganisationsEinheitSyncResult.NOT_FOUND_IN_PVOG || + organisationsEinheitResource.syncResult === AdminOrganisationsEinheitSyncResult.ORGANISATIONSEINHEIT_ID_NOT_UNIQUE + " + data-test-id="organisations-einheit-list-item" > -</ng-template> + <dl class="flex-1 basis-3/4 font-semibold" [class.pl-4]="organisationsEinheitResource.isChild"> + <dt class="sr-only">Name</dt> + <dd data-test-id="organisations-einheit-name">{{ organisationsEinheitResource.name }}</dd> + </dl> + + <dl class="flex-1 basis-3/12"> + <dt class="sr-only">Organisationseinheit-ID</dt> + <dd data-test-id="organisations-einheit-id">{{ organisationsEinheitResource.organisationsEinheitId }}</dd> + </dl> + + <dl class="flex-1 basis-1/12"> + <dt class="sr-only">Synchronisationsergebnis</dt> + <dd class="mt-1"> + <ods-exclamation-icon + *ngIf="organisationsEinheitResource.syncResult === AdminOrganisationsEinheitSyncResult.NOT_FOUND_IN_PVOG" + matTooltip="Organisationseinheit wurde nicht in den PVOG-Daten gefunden." + size="small" + /> + <ods-exclamation-icon + *ngIf=" + organisationsEinheitResource.syncResult === AdminOrganisationsEinheitSyncResult.ORGANISATIONSEINHEIT_ID_NOT_UNIQUE + " + size="small" + /> + </dd> + </dl> + </ods-list-item> +</ods-list> diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.spec.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.spec.ts index 912a82f8a93e2865f011ec5a8f0c40905a910d85..1ed84ced8bdd0a6662cb17d9d227c1b3a2a46b31 100644 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.spec.ts +++ b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.spec.ts @@ -1,43 +1,49 @@ -import { ConvertForDataTestPipe, convertForDataTest } from '@alfa-client/tech-shared'; +import { AdminOrganisationsEinheitResource, AdminOrganisationsEinheitSyncResult } from '@admin-client/admin-settings'; +import { ConvertForDataTestPipe, ToResourceUriPipe } from '@alfa-client/tech-shared'; import { - dispatchEventFromFixture, existsAsHtmlElement, getElementFromFixture, + getElementFromFixtureByType, + getElementsFromFixture, + mock, notExistsAsHtmlElement, } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { MatTooltipModule } from '@angular/material/tooltip'; +import { ActivatedRoute } from '@angular/router'; +import { ExclamationIconComponent, ListComponent, ListItemComponent } from '@ods/system'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; -import { MockComponent } from 'ng-mocks'; -import { createOrganisationseinheit } from '../../../../../test/user/user'; -import { MoreItemButtonComponent } from '../../../shared/more-menu/more-item-button/more-item-button.component'; -import { MoreMenuComponent } from '../../../shared/more-menu/more-menu.component'; -import { Organisationseinheit } from '../../../user/user.model'; -import { OrganisationseinheitListComponent } from './organisationseinheit-list.component'; - -describe('OrganisationseinheitListComponent', () => { - let component: OrganisationseinheitListComponent; - let fixture: ComponentFixture<OrganisationseinheitListComponent>; - - const emptyMessageSelector: string = getDataTestIdOf('organisationseinheit-empty-message'); - const tableSelector: string = getDataTestIdOf('organisationseinheit-table'); - - const organisationseinheitElementSelector = ( - organisationseinheit: Organisationseinheit, - cell: string, - ) => - getDataTestIdOf(convertForDataTest(`organisationseinheit-${cell}-${organisationseinheit.id}`)); +import { MockModule } from 'ng-mocks'; +import { createAdminOrganisationsEinheitResource } from '../../../../../test/organisations-einheit/organisations-einheit'; +import { OrganisationsEinheitListComponent } from './organisationseinheit-list.component'; + +describe('OrganisationsEinheitListComponent', () => { + let component: OrganisationsEinheitListComponent; + let fixture: ComponentFixture<OrganisationsEinheitListComponent>; + + const listSelector: string = getDataTestIdOf('organisations-einheit-list'); + const listItemSelector: string = getDataTestIdOf('organisations-einheit-list-item'); + const organisationsEinheitNameSelector: string = getDataTestIdOf('organisations-einheit-name'); + const organisationsEinheitIdSelector: string = getDataTestIdOf('organisations-einheit-id'); + + const organisationsEinheitResource: AdminOrganisationsEinheitResource = { + ...createAdminOrganisationsEinheitResource(), + syncResult: AdminOrganisationsEinheitSyncResult.NOT_FOUND_IN_PVOG, + }; beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ - OrganisationseinheitListComponent, - ConvertForDataTestPipe, - MockComponent(MoreMenuComponent), - MockComponent(MoreItemButtonComponent), + providers: [ + { + provide: ActivatedRoute, + useValue: mock(ActivatedRoute), + }, ], + declarations: [OrganisationsEinheitListComponent, ConvertForDataTestPipe, ToResourceUriPipe, MockModule(MatTooltipModule)], + imports: [ListComponent, ListItemComponent, ExclamationIconComponent], }).compileComponents(); - fixture = TestBed.createComponent(OrganisationseinheitListComponent); + fixture = TestBed.createComponent(OrganisationsEinheitListComponent); component = fixture.componentInstance; fixture.detectChanges(); }); @@ -46,104 +52,92 @@ describe('OrganisationseinheitListComponent', () => { expect(component).toBeTruthy(); }); - describe('table rows', () => { - describe('without organisationseinheit items', () => { - it('should show empty message', () => { - existsAsHtmlElement(fixture, emptyMessageSelector); + describe('input', () => { + describe('organisationsEinheitResources', () => { + beforeEach(() => { + component.organisationsEinheitResources = [organisationsEinheitResource]; + fixture.detectChanges(); }); - it('should not show table', () => { - notExistsAsHtmlElement(fixture, tableSelector); + + it('should set organisationsEinheitResource name', () => { + const nameElement: HTMLElement = getElementFromFixture(fixture, organisationsEinheitNameSelector); + + expect(nameElement.textContent).toBe(organisationsEinheitResource.name); }); - }); - describe('with organisationseinheit items', () => { - const organisationseinheitItems: Organisationseinheit[] = [ - createOrganisationseinheit(), - createOrganisationseinheit(), - ]; - beforeEach(() => { - component.organisationseinheitItems = organisationseinheitItems; - fixture.detectChanges(); + it('should set organisationsEinheitResource organisationsEinheitId', () => { + const idElement: HTMLElement = getElementFromFixture(fixture, organisationsEinheitIdSelector); + + expect(idElement.textContent).toBe(organisationsEinheitResource.organisationsEinheitId); }); - it('should show table', () => { - existsAsHtmlElement(fixture, tableSelector); + it('should set exclamation icon', () => { + const iconElement: ExclamationIconComponent = getElementFromFixtureByType(fixture, ExclamationIconComponent); + + expect(iconElement).toBeTruthy(); }); - it('should not show empty message', () => { - notExistsAsHtmlElement(fixture, emptyMessageSelector); + }); + }); + + describe('component', () => { + describe('moveChildrenIntoParentLevel', () => { + it('should move children one level up', () => { + const childList: AdminOrganisationsEinheitResource[] = [ + createAdminOrganisationsEinheitResource(), + createAdminOrganisationsEinheitResource(), + ]; + const item1: AdminOrganisationsEinheitResource = createAdminOrganisationsEinheitResource(); + const item2: AdminOrganisationsEinheitResource = createAdminOrganisationsEinheitResource(); + item2['_embedded'] = { childList }; + component.organisationsEinheitResources = [item1, item2]; + + expect(component.organisationsEinheitResources.length).toBe(4); }); - it('should show rows in order', () => { - const tableElement: HTMLTableElement = getElementFromFixture(fixture, tableSelector); - const rows: HTMLTableRowElement[] = Array.from(tableElement.querySelectorAll('tr[id]')); - const rowIds: string[] = rows.map((row) => row.id); + it('should set isChild property at moved children', () => { + const childList: AdminOrganisationsEinheitResource[] = [ + createAdminOrganisationsEinheitResource(), + createAdminOrganisationsEinheitResource(), + ]; + const item1: AdminOrganisationsEinheitResource = createAdminOrganisationsEinheitResource(); + const item2: AdminOrganisationsEinheitResource = createAdminOrganisationsEinheitResource(); + item2['_embedded'] = { childList }; + component.organisationsEinheitResources = [item1, item2]; + + expect(component.organisationsEinheitResources[2].isChild).toBeTruthy(); + }); + }); + }); - expect(rowIds).toEqual( - organisationseinheitItems.map( - (organisationseinheit: Organisationseinheit) => organisationseinheit.id, - ), - ); + describe('template', () => { + describe('organisationsEinheiten list', () => { + describe('without organisationsEinheiten', () => { + it('should not show list', () => { + notExistsAsHtmlElement(fixture, listSelector); + }); }); - it.each(organisationseinheitItems)( - 'should show name of organisationseinheit %#', - (organisationseinheit: Organisationseinheit) => { - const nameTableCell = getElementFromFixture( - fixture, - organisationseinheitElementSelector(organisationseinheit, 'name'), - ); + describe('with organisationsEinheiten', () => { + const organisationsEinheiten: AdminOrganisationsEinheitResource[] = [ + createAdminOrganisationsEinheitResource(), + createAdminOrganisationsEinheitResource(), + ]; - expect(nameTableCell.textContent.trim()).toBe(organisationseinheit.name); - }, - ); - - it.each(organisationseinheitItems)( - 'should show organisationseinheitId of organisationseinheit %#', - (organisationseinheit: Organisationseinheit) => { - const attrTableCell = getElementFromFixture( - fixture, - organisationseinheitElementSelector(organisationseinheit, 'attr'), - ); - - expect(attrTableCell.textContent.trim()).toBe( - `OrganisationseinheitID: ${organisationseinheit.organisationseinheitIds.join(', ')}`, - ); - }, - ); - - it.each(organisationseinheitItems)( - 'should emit editOrganisationseinheit %# on edit button click ', - (organisationseinheit: Organisationseinheit) => { - component.editOrganisationseinheit.emit = jest.fn(); - - dispatchEventFromFixture( - fixture, - organisationseinheitElementSelector(organisationseinheit, 'edit'), - 'clickEmitter', - ); - - expect(component.editOrganisationseinheit.emit).toHaveBeenCalledWith( - organisationseinheit, - ); - }, - ); - - it.each(organisationseinheitItems)( - 'should emit deleteOrganisationseinheit %# on delete button click ', - (organisationseinheit: Organisationseinheit) => { - component.deleteOrganisationseinheit.emit = jest.fn(); - - dispatchEventFromFixture( - fixture, - organisationseinheitElementSelector(organisationseinheit, 'delete'), - 'clickEmitter', - ); - - expect(component.deleteOrganisationseinheit.emit).toHaveBeenCalledWith( - organisationseinheit, - ); - }, - ); + beforeEach(() => { + component.organisationsEinheitResources = organisationsEinheiten; + fixture.detectChanges(); + }); + + it('should show list', () => { + existsAsHtmlElement(fixture, listSelector); + }); + + it('should show rows', () => { + const rows = getElementsFromFixture(fixture, listItemSelector); + + expect(rows.length).toEqual(2); + }); + }); }); }); }); diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.ts index dadd2f0401682461a67e76f73e79dfc09afb54be..51937dcb6d5bc30bec596b5514879c14fca79dcc 100644 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.ts +++ b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.ts @@ -1,17 +1,34 @@ -import { Component, EventEmitter, Input, Output } from '@angular/core'; -import { Organisationseinheit } from '../../../user/user.model'; +import { AdminOrganisationsEinheitResource, AdminOrganisationsEinheitSyncResult } from '@admin-client/admin-settings'; +import { Component, Input } from '@angular/core'; @Component({ selector: 'admin-organisationseinheit-list', templateUrl: './organisationseinheit-list.component.html', }) -export class OrganisationseinheitListComponent { +export class OrganisationsEinheitListComponent { + private _organisationsEinheitResources: AdminOrganisationsEinheitResource[] = []; + @Input() - organisationseinheitItems: Organisationseinheit[] = []; + public get organisationsEinheitResources(): AdminOrganisationsEinheitResource[] { + return this._organisationsEinheitResources; + } + + public set organisationsEinheitResources(list: AdminOrganisationsEinheitResource[]) { + this.moveChildrenIntoParentLevel(list); + } + + public readonly AdminOrganisationsEinheitSyncResult = AdminOrganisationsEinheitSyncResult; - @Output() - editOrganisationseinheit: EventEmitter<Organisationseinheit> = new EventEmitter(); + moveChildrenIntoParentLevel(list: AdminOrganisationsEinheitResource[]): void { + list.forEach((parent: AdminOrganisationsEinheitResource) => { + this._organisationsEinheitResources.push(parent); - @Output() - deleteOrganisationseinheit: EventEmitter<Organisationseinheit> = new EventEmitter(); + if (parent._embedded && Array.isArray(parent._embedded.childList)) { + parent._embedded.childList.forEach((child: AdminOrganisationsEinheitResource) => { + child.isChild = true; + this._organisationsEinheitResources.push(child); + }); + } + }); + } } diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.html b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.html new file mode 100644 index 0000000000000000000000000000000000000000..097bae6dc28c04048164fcc07896dee8a37ff43f --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.html @@ -0,0 +1,10 @@ +<ng-container *ngIf="organisationsEinheitStateResource$ | async as organisationsEinheitStateResource"> + <ozgcloud-spinner [stateResource]="organisationsEinheitStateResource"> + <h1 class="heading-1" data-test-id="organisations-form-container-headline">{{ organisationsEinheitStateResource.resource?.name }}</h1> + + <admin-organisationseinheit-form + [organisationsEinheitStateResource]="organisationsEinheitStateResource" + data-test-id="organisations-form" + /> + </ozgcloud-spinner> +</ng-container> \ No newline at end of file diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.spec.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..cdb93ce6d6c9ff32ad146a4a7a19946faac2b84d --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.spec.ts @@ -0,0 +1,97 @@ +import { AdminOrganisationsEinheitResource, OrganisationsEinheitFormContainerComponent } from '@admin-client/admin-settings'; +import { StateResource, createStateResource } from '@alfa-client/tech-shared'; +import { Mock, existsAsHtmlElement, getElementFromFixture, getMockComponent, mock } from '@alfa-client/test-utils'; +import { SpinnerComponent } from '@alfa-client/ui'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { MockComponent } from 'ng-mocks'; +import { of } from 'rxjs'; +import { getDataTestIdOf } from '../../../../../../tech-shared/test/data-test'; +import { createAdminOrganisationsEinheitResource } from '../../../../test/organisations-einheit/organisations-einheit'; +import { OrganisationsEinheitService } from '../organisationseinheit.service'; +import { OrganisationsEinheitFormComponent } from './organisationseinheit-form/organisationseinheit-form.component'; + +describe('OrganisationsEinheitFormContainerComponent', () => { + let component: OrganisationsEinheitFormContainerComponent; + let fixture: ComponentFixture<OrganisationsEinheitFormContainerComponent>; + let organisationsEinheitService: Mock<OrganisationsEinheitService>; + + const organisationsEinheitResource: AdminOrganisationsEinheitResource = createAdminOrganisationsEinheitResource(); + const organisationsEinheitStateResource: StateResource<AdminOrganisationsEinheitResource> = + createStateResource(organisationsEinheitResource); + + const headlineSelector: string = getDataTestIdOf('organisations-form-container-headline'); + const formSelector: string = getDataTestIdOf('organisations-form'); + + beforeEach(async () => { + organisationsEinheitService = { + ...mock(OrganisationsEinheitService), + get: jest.fn().mockReturnValue(of(organisationsEinheitStateResource)), + }; + + await TestBed.configureTestingModule({ + declarations: [ + OrganisationsEinheitFormContainerComponent, + MockComponent(OrganisationsEinheitFormComponent), + MockComponent(SpinnerComponent), + ], + providers: [{ provide: OrganisationsEinheitService, useValue: organisationsEinheitService }], + }).compileComponents(); + + fixture = TestBed.createComponent(OrganisationsEinheitFormContainerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + describe('component', () => { + describe('ngOnInit', () => { + it('should call organisationsEinheitService get', (done) => { + component.ngOnInit(); + + component.organisationsEinheitStateResource$.subscribe(() => { + expect(organisationsEinheitService.get).toHaveBeenCalled(); + done(); + }); + }); + + it('should set organisationsEinheitStateResource', (done) => { + component.ngOnInit(); + + component.organisationsEinheitStateResource$.subscribe( + (organisationsEinheitStateResource: StateResource<AdminOrganisationsEinheitResource>) => { + expect(organisationsEinheitStateResource).toEqual(organisationsEinheitStateResource); + done(); + }, + ); + }); + }); + }); + + describe('template', () => { + describe('headline', () => { + it('should show headline', () => { + existsAsHtmlElement(fixture, headlineSelector); + }); + + it('should show organisationsEinheit name', () => { + const headlineElement: HTMLElement = getElementFromFixture(fixture, headlineSelector); + + expect(headlineElement.textContent).toBe(organisationsEinheitResource.name); + }); + }); + + describe('organisationsEinheit form', () => { + it('should show form', () => { + existsAsHtmlElement(fixture, formSelector); + }); + + it('should have organisationsEinheitStateResource', () => { + const formComponent: OrganisationsEinheitFormComponent = getMockComponent(fixture, OrganisationsEinheitFormComponent); + expect(formComponent.organisationsEinheitStateResource).toBe(organisationsEinheitStateResource); + }); + }); + }); +}); diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..d643c74a04163010a590714a2f1d6d00640cf259 --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.ts @@ -0,0 +1,22 @@ +import { StateResource } from '@alfa-client/tech-shared'; +import { Component, OnInit } from '@angular/core'; +import { Observable } from 'rxjs'; +import { OrganisationsEinheitListLinkRel } from '../organisations-einheit.linkrel'; +import { AdminOrganisationsEinheitResource } from '../organisations-einheit.model'; +import { OrganisationsEinheitService } from '../organisationseinheit.service'; + +@Component({ + selector: 'admin-organisationseinheit-form-container', + templateUrl: './organisationseinheit-form-container.component.html', +}) +export class OrganisationsEinheitFormContainerComponent implements OnInit { + organisationsEinheitStateResource$: Observable<StateResource<AdminOrganisationsEinheitResource>>; + + constructor(private organisationsEinheitService: OrganisationsEinheitService) {} + + ngOnInit(): void { + this.organisationsEinheitStateResource$ = this.organisationsEinheitService.get(); + } + + protected readonly OrganisationsEinheitListLinkRel = OrganisationsEinheitListLinkRel; +} diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.html b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.html new file mode 100644 index 0000000000000000000000000000000000000000..3b1b1f0673cb2d42afa4b6d5a67a0fa14a3b0f1f --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.html @@ -0,0 +1,18 @@ +<form class="form flex-col" [formGroup]="formService.form"> + <admin-organisationseinheit-signatur class="mb-6 block" data-test-id="organisations-einheit-signatur-component" /> + + <ods-button-with-spinner + data-test-id="save-button" + text="Speichern" + [stateResource]="submitInProgress$ | async" + (clickEmitter)="submit()" + ></ods-button-with-spinner> + + <span + *ngIf="formService.isInvalid()" + data-test-id="invalid-empty-message-span" + class="m-2 text-red-500" + > + *Es müssen alle Felder ausgefüllt sein. + </span> +</form> \ No newline at end of file diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.spec.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..ad4f7bd11d40c6444ba2fdbbc169cd0b81aff0f4 --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.spec.ts @@ -0,0 +1,120 @@ +import { AdminOrganisationsEinheitResource } from '@admin-client/admin-settings'; +import { createEmptyStateResource, createStateResource, ProblemDetail } from '@alfa-client/tech-shared'; +import { existsAsHtmlElement, Mock, mock, notExistsAsHtmlElement } from '@alfa-client/test-utils'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { ButtonWithSpinnerComponent } from '@ods/component'; +import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; +import { MockComponent } from 'ng-mocks'; +import { of } from 'rxjs'; +import { createInvalidParam, createProblemDetail } from '../../../../../../../tech-shared/test/error'; +import { createAdminOrganisationsEinheitResource } from '../../../../../test/organisations-einheit/organisations-einheit'; +import { TextFieldComponent } from '../../../shared/text-field/text-field.component'; +import { OrganisationsEinheitService } from '../../organisationseinheit.service'; +import { OrganisationsEinheitFormComponent } from './organisationseinheit-form.component'; +import { OrganisationsEinheitSignaturComponent } from './organisationseinheit-signatur/organisationseinheit-signatur.component'; +import { OrganisationsEinheitFormService } from './organisationseinheit.formservice'; + +describe('OrganisationsEinheitFormComponent', () => { + let component: OrganisationsEinheitFormComponent; + let fixture: ComponentFixture<OrganisationsEinheitFormComponent>; + let formService: OrganisationsEinheitFormService; + let organisationsEinheitService: Mock<OrganisationsEinheitService>; + + const signaturComponentSelector: string = getDataTestIdOf('organisations-einheit-signatur-component'); + const saveButtonSelector: string = getDataTestIdOf('save-button'); + const invalidMessageSpanSelector: string = getDataTestIdOf('invalid-empty-message-span'); + + beforeEach(async () => { + organisationsEinheitService = mock(OrganisationsEinheitService); + + await TestBed.configureTestingModule({ + declarations: [ + OrganisationsEinheitFormComponent, + MockComponent(TextFieldComponent), + MockComponent(OrganisationsEinheitSignaturComponent), + MockComponent(ButtonWithSpinnerComponent), + ], + imports: [ReactiveFormsModule, FormsModule], + providers: [{ provide: OrganisationsEinheitService, useValue: organisationsEinheitService }], + }).compileComponents(); + + fixture = TestBed.createComponent(OrganisationsEinheitFormComponent); + component = fixture.componentInstance; + formService = component.formService; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + describe('input', () => { + describe('organisationsEinheitStateResource', () => { + it('should return resource', () => { + component.updateOrganisationsEinheitResource = jest.fn(); + + const organisationsEinheitResource: AdminOrganisationsEinheitResource = createAdminOrganisationsEinheitResource(); + component.organisationsEinheitStateResource = createStateResource(organisationsEinheitResource); + + expect(component.updateOrganisationsEinheitResource).toHaveBeenCalledWith(organisationsEinheitResource); + }); + }); + }); + + describe('component', () => { + describe('updateOrganisationsEinheitResource', () => { + it('should call formService patch', () => { + formService.patch = jest.fn(); + + const organisationsEinheitResource: AdminOrganisationsEinheitResource = createAdminOrganisationsEinheitResource(); + + component.updateOrganisationsEinheitResource(organisationsEinheitResource); + + expect(formService.patch).toHaveBeenCalledWith(organisationsEinheitResource.settings); + }); + }); + + describe('submit', () => { + it('should call formService submit', () => { + formService.submit = jest.fn().mockReturnValue(of(createEmptyStateResource())); + + component.submit(); + + expect(formService.submit).toHaveBeenCalled(); + }); + }); + }); + + describe('template', () => { + describe('organisationsEinheit signatur component', () => { + it('should show signatur component', () => { + existsAsHtmlElement(fixture, signaturComponentSelector); + }); + }); + + describe('save button', () => { + it('should show save button', () => { + existsAsHtmlElement(fixture, saveButtonSelector); + }); + }); + + describe('invalid message', () => { + it('should show if form is invalid', () => { + const problemDetail: ProblemDetail = { + ...createProblemDetail(), + invalidParams: [{ ...createInvalidParam(), name: 'settingBody.signatur' }], + }; + formService.setErrorByProblemDetail(problemDetail); + + fixture.detectChanges(); + + existsAsHtmlElement(fixture, invalidMessageSpanSelector); + }); + + it('should not show if form valid', () => { + notExistsAsHtmlElement(fixture, invalidMessageSpanSelector); + }); + }); + }); +}); diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..e23d78e48258b6444fa11e4375ce8259f46742fd --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.ts @@ -0,0 +1,31 @@ +import { AdminOrganisationsEinheitResource } from '@admin-client/admin-settings'; +import { StateResource, createEmptyStateResource, isNotNil } from '@alfa-client/tech-shared'; +import { Component, Input } from '@angular/core'; +import { Resource } from '@ngxp/rest'; +import { Observable, of } from 'rxjs'; +import { OrganisationsEinheitFormService } from './organisationseinheit.formservice'; + +@Component({ + selector: 'admin-organisationseinheit-form', + templateUrl: './organisationseinheit-form.component.html', + providers: [OrganisationsEinheitFormService], +}) +export class OrganisationsEinheitFormComponent { + submitInProgress$: Observable<StateResource<Resource>> = of(createEmptyStateResource<Resource>()); + + @Input() set organisationsEinheitStateResource(stateResource: StateResource<AdminOrganisationsEinheitResource>) { + this.updateOrganisationsEinheitResource(stateResource.resource); + } + + updateOrganisationsEinheitResource(organisationsEinheitResource: AdminOrganisationsEinheitResource): void { + if (isNotNil(organisationsEinheitResource)) { + this.formService.patch(organisationsEinheitResource.settings); + } + } + + constructor(public formService: OrganisationsEinheitFormService) {} + + public submit(): void { + this.submitInProgress$ = this.formService.submit(); + } +} diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.html b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.html new file mode 100644 index 0000000000000000000000000000000000000000..08db87e61bb3198d993070fdb54ab8ae5a68eb0c --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.html @@ -0,0 +1,16 @@ +<form [formGroup]="formService.form" class="max-w-[960px]"> + <h2 class="heading-2">Signatur</h2> + <p id="signatur-desc"> + Diese Signatur gilt für die ausgewählte Organisationseinheit und wird bei allen Nachrichten an den Antragsteller angezeigt. + </p> + <ods-textarea-editor + [formControlName]="formServiceClass.ORGANISATIONSEINHEIT_SIGNATUR_FIELD" + [isResizable]="false" + [showLabel]="false" + data-test-id="signatur-text" + label="signature" + rows="6" + class="w-full" + aria-describedby="signatur-desc" + /> +</form> \ No newline at end of file diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.spec.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..9f47fc9511c867a415ced0e677eb486c083a970c --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.spec.ts @@ -0,0 +1,55 @@ +import { NavigationSharedModule } from '@alfa-client/navigation-shared'; +import { getElementFromFixture, mock, useFromMock } from '@alfa-client/test-utils'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { FormBuilder, ReactiveFormsModule } from '@angular/forms'; +import { EffectsModule } from '@ngrx/effects'; +import { StoreModule } from '@ngrx/store'; +import { TextareaEditorComponent } from '@ods/component'; +import { MockComponent } from 'ng-mocks'; +import { getDataTestIdOf } from '../../../../../../../../tech-shared/test/data-test'; +import { OrganisationsEinheitService } from '../../../organisationseinheit.service'; +import { OrganisationsEinheitFormService } from '../organisationseinheit.formservice'; +import { OrganisationsEinheitSignaturComponent } from './organisationseinheit-signatur.component'; + +describe('OrganisationsEinheitSignaturComponent', () => { + let component: OrganisationsEinheitSignaturComponent; + let fixture: ComponentFixture<OrganisationsEinheitSignaturComponent>; + let formService: OrganisationsEinheitFormService; + + const signaturTextareaSelector: string = getDataTestIdOf('signatur-text'); + + beforeEach(async () => { + formService = new OrganisationsEinheitFormService(new FormBuilder(), useFromMock(mock(OrganisationsEinheitService))); + + await TestBed.configureTestingModule({ + imports: [ReactiveFormsModule, NavigationSharedModule, StoreModule.forRoot({}), EffectsModule.forRoot([])], + declarations: [OrganisationsEinheitSignaturComponent, MockComponent(TextareaEditorComponent)], + providers: [ + { + provide: OrganisationsEinheitFormService, + useValue: formService, + }, + ], + }).compileComponents(); + + fixture = TestBed.createComponent(OrganisationsEinheitSignaturComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + describe('template', () => { + describe('ods-textarea-editor', () => { + describe('input', () => { + it('should set signatur field', () => { + const textAreaEditor: HTMLElement = getElementFromFixture(fixture, signaturTextareaSelector); + + expect(textAreaEditor.getAttribute('rows')).toEqual('6'); + }); + }); + }); + }); +}); diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..ad670e03d75622a851b7de1bfe7b9ceb18cefce7 --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; +import { OrganisationsEinheitFormService } from '../organisationseinheit.formservice'; + +@Component({ + selector: 'admin-organisationseinheit-signatur', + templateUrl: './organisationseinheit-signatur.component.html', +}) +export class OrganisationsEinheitSignaturComponent { + public readonly formServiceClass = OrganisationsEinheitFormService; + + constructor(public formService: OrganisationsEinheitFormService) {} +} diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit.formservice.spec.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit.formservice.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..249af7021abcd360680e7c7318c2123763089d20 --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit.formservice.spec.ts @@ -0,0 +1,42 @@ +import { AdminOrganisationsEinheitResource } from '@admin-client/admin-settings'; +import { StateResource, createStateResource } from '@alfa-client/tech-shared'; +import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; +import { FormBuilder } from '@angular/forms'; +import { of } from 'rxjs'; +import { createAdminOrganisationsEinheitResource } from '../../../../../test/organisations-einheit/organisations-einheit'; +import { OrganisationsEinheitService } from '../../organisationseinheit.service'; +import { OrganisationsEinheitFormService } from './organisationseinheit.formservice'; + +describe('OrganisationsEinheitFormService', () => { + let service: OrganisationsEinheitFormService; + let organisationsEinheitService: Mock<OrganisationsEinheitService>; + const formBuilder: FormBuilder = new FormBuilder(); + + beforeEach(() => { + organisationsEinheitService = mock(OrganisationsEinheitService); + service = new OrganisationsEinheitFormService(formBuilder, useFromMock(organisationsEinheitService)); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('submit', () => { + const organisationsEinheitResource: AdminOrganisationsEinheitResource = createAdminOrganisationsEinheitResource(); + + beforeEach(() => { + const stateResource: StateResource<AdminOrganisationsEinheitResource> = createStateResource(organisationsEinheitResource); + organisationsEinheitService.patch.mockReturnValue(of(stateResource)); + organisationsEinheitService.get.mockReturnValue(of(stateResource)); + service.form.setValue({ + [OrganisationsEinheitFormService.ORGANISATIONSEINHEIT_SIGNATUR_FIELD]: organisationsEinheitResource.settings.signatur, + }); + }); + + it('should call organisationsEinheitService patch', () => { + service.submit(); + + expect(organisationsEinheitService.patch).toHaveBeenCalledWith(organisationsEinheitResource.settings); + }); + }); +}); diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit.formservice.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit.formservice.ts new file mode 100644 index 0000000000000000000000000000000000000000..9cb9131e6259cf12b596db1438224396abd952ae --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit.formservice.ts @@ -0,0 +1,32 @@ +import { AdminOrganisationsEinheitResource } from '@admin-client/admin-settings'; +import { AbstractFormService, EMPTY_STRING, StateResource } from '@alfa-client/tech-shared'; +import { Injectable } from '@angular/core'; +import { FormControl, UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; +import { Observable } from 'rxjs'; +import { OrganisationsEinheitService } from '../../organisationseinheit.service'; + +@Injectable() +export class OrganisationsEinheitFormService extends AbstractFormService { + public static readonly ORGANISATIONSEINHEIT_SIGNATUR_FIELD: string = 'signatur'; + + constructor( + formBuilder: UntypedFormBuilder, + private organisationsEinheitService: OrganisationsEinheitService, + ) { + super(formBuilder); + } + + protected initForm(): UntypedFormGroup { + return this.formBuilder.group({ + [OrganisationsEinheitFormService.ORGANISATIONSEINHEIT_SIGNATUR_FIELD]: new FormControl(EMPTY_STRING), + }); + } + + protected doSubmit(): Observable<StateResource<AdminOrganisationsEinheitResource>> { + return this.organisationsEinheitService.patch(this.getFormValue()); + } + + protected getPathPrefix(): string { + return 'settingBody'; + } +} diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-navigation-item/organisationseinheit-navigation-item.component.html b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-navigation-item/organisationseinheit-navigation-item.component.html deleted file mode 100644 index 2e7a09a8541daa2e00417268ec67b4a43103702b..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-navigation-item/organisationseinheit-navigation-item.component.html +++ /dev/null @@ -1,5 +0,0 @@ -<admin-navigation-item - name="Organisationseinheiten" - imageSrc="/assets/organisationseinheit.svg" - link="/organisationseinheiten" -></admin-navigation-item> diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-navigation-item/organisationseinheit-navigation-item.component.spec.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-navigation-item/organisationseinheit-navigation-item.component.spec.ts deleted file mode 100644 index b855265b14e0b5ec4e03e1db4b4af27cd1528b23..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-navigation-item/organisationseinheit-navigation-item.component.spec.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { NavigationItemComponent } from '@admin-client/admin-settings'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { MockComponent } from 'ng-mocks'; -import { OrganisationseinheitNavigationItemComponent } from './organisationseinheit-navigation-item.component'; - -describe('OrganisationseinheitNavigationItemComponent', () => { - let component: OrganisationseinheitNavigationItemComponent; - let fixture: ComponentFixture<OrganisationseinheitNavigationItemComponent>; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ - OrganisationseinheitNavigationItemComponent, - MockComponent(NavigationItemComponent), - ], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(OrganisationseinheitNavigationItemComponent); - component = fixture.componentInstance; - - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-navigation-item/organisationseinheit-navigation-item.component.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-navigation-item/organisationseinheit-navigation-item.component.ts deleted file mode 100644 index 6e66cbe44e49519c4b169c18067059807d11216a..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-navigation-item/organisationseinheit-navigation-item.component.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'admin-organisationseinheit-navigation-item', - templateUrl: './organisationseinheit-navigation-item.component.html', -}) -export class OrganisationseinheitNavigationItemComponent {} diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit.service.spec.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit.service.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..ad3de85839043a279b9692d3ece0593d83602bb3 --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit.service.spec.ts @@ -0,0 +1,155 @@ +import { AdminOrganisationsEinheitListResource, AdminOrganisationsEinheitResource } from '@admin-client/admin-settings'; +import { NavigationService } from '@alfa-client/navigation-shared'; +import { StateResource, createStateResource } from '@alfa-client/tech-shared'; +import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; +import { SnackBarService } from '@alfa-client/ui'; +import { singleColdCompleted } from 'libs/tech-shared/test/marbles'; +import { Observable, of } from 'rxjs'; +import { + createAdminOrganisationsEinheitListResource, + createAdminOrganisationsEinheitResource, +} from '../../../test/organisations-einheit/organisations-einheit'; +import { OrganisationsEinheitListResourceService } from './organisations-einheit-list-resource.service'; +import { OrganisationsEinheitResourceService } from './organisations-einheit-resource.service'; +import { OrganisationsEinheitService } from './organisationseinheit.service'; + +jest.mock('./organisations-einheit-list-resource.service'); +jest.mock('./organisations-einheit-resource.service'); +jest.mock('../../../../../navigation-shared/src/lib/navigation.service'); +jest.mock('../../../../../ui/src/lib/snackbar/snackbar.service'); + +describe('OrganisationsEinheitService', () => { + let service: OrganisationsEinheitService; + let listResourceService: Mock<OrganisationsEinheitListResourceService>; + let resourceService: Mock<OrganisationsEinheitResourceService>; + let navigationService: Mock<NavigationService>; + let snackBarService: Mock<SnackBarService>; + + beforeEach(() => { + listResourceService = mock(OrganisationsEinheitListResourceService); + resourceService = mock(OrganisationsEinheitResourceService); + + navigationService = mock(NavigationService); + navigationService.urlChanged.mockReturnValue(of({})); + + snackBarService = mock(SnackBarService); + service = new OrganisationsEinheitService( + useFromMock(listResourceService), + useFromMock(resourceService), + useFromMock(navigationService), + useFromMock(snackBarService), + ); + }); + + describe('onNavigation', () => { + it('should not call listResourceService select', () => { + service.onNavigation({}); + + expect(listResourceService.select).not.toHaveBeenCalled(); + }); + + it('should call listResourceService select', () => { + service.onNavigation({ [OrganisationsEinheitService.ORGANISATIONS_EINHEIT_URL]: 'some-uri' }); + + expect(listResourceService.select).toHaveBeenCalled(); + }); + + it('should call getOrganisationsEinheitUrl', () => { + service.getOrganisationsEinheitUrl = jest.fn(); + + service.onNavigation({ [OrganisationsEinheitService.ORGANISATIONS_EINHEIT_URL]: 'some-uri' }); + + expect(service.getOrganisationsEinheitUrl).toHaveBeenCalled(); + }); + }); + + describe('getOrganisationsEinheitUrl', () => { + it('should call navigationService getDecodedParam', () => { + service.getOrganisationsEinheitUrl(); + + expect(navigationService.getDecodedParam).toHaveBeenCalled(); + }); + + it('should return uri', () => { + navigationService.getDecodedParam.mockReturnValue('some-uri'); + + expect(service.getOrganisationsEinheitUrl()).toBe('some-uri'); + }); + }); + + describe('getList', () => { + const organisationsEinheitListResource: AdminOrganisationsEinheitListResource = createAdminOrganisationsEinheitListResource(); + const organisationsEinheitStateListResource: StateResource<AdminOrganisationsEinheitListResource> = + createStateResource(organisationsEinheitListResource); + + beforeEach(() => { + listResourceService.getList.mockReturnValue(of(organisationsEinheitStateListResource)); + }); + + it('should call listResourceService', () => { + service.getList(); + + expect(listResourceService.getList).toHaveBeenCalled(); + }); + + it('should return value', () => { + const list$: Observable<StateResource<AdminOrganisationsEinheitListResource>> = service.getList(); + + expect(list$).toBeObservable(singleColdCompleted(organisationsEinheitStateListResource)); + }); + }); + + describe('get', () => { + const organisationsEinheitResource: AdminOrganisationsEinheitResource = createAdminOrganisationsEinheitResource(); + const organisationsEinheitStateResource: StateResource<AdminOrganisationsEinheitResource> = + createStateResource(organisationsEinheitResource); + + beforeEach(() => { + resourceService.get.mockReturnValue(of(organisationsEinheitStateResource)); + }); + + it('should call resourceService', () => { + service.get(); + + expect(resourceService.get).toHaveBeenCalled(); + }); + + it('should return value', () => { + const resource$: Observable<StateResource<AdminOrganisationsEinheitResource>> = service.get(); + + expect(resource$).toBeObservable(singleColdCompleted(organisationsEinheitStateResource)); + }); + }); + + describe('patch', () => { + const organisationsEinheitResource: AdminOrganisationsEinheitResource = createAdminOrganisationsEinheitResource(); + const organisationsEinheitStateResource: StateResource<AdminOrganisationsEinheitResource> = + createStateResource(organisationsEinheitResource); + + beforeEach(() => { + resourceService.patch.mockReturnValue(of(organisationsEinheitStateResource)); + }); + + it('should call resourceService', () => { + service.patch(organisationsEinheitResource.settings).subscribe(); + + expect(resourceService.patch).toHaveBeenCalled(); + }); + + it('should call snackBarService showInfo', () => { + service.patch(organisationsEinheitResource.settings).subscribe(); + + expect(snackBarService.showInfo).toHaveBeenCalled(); + }); + + it('should return value', () => { + const resource$: Observable<StateResource<AdminOrganisationsEinheitResource>> = service.patch( + organisationsEinheitResource.settings, + ); + + resource$.subscribe((result: StateResource<AdminOrganisationsEinheitResource>) => { + expect(result).toEqual(organisationsEinheitStateResource); + }); + }); + }); +}); diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit.service.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..d20e30cc1f824e8f912a624540ff8047b3771041 --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit.service.ts @@ -0,0 +1,81 @@ +import { + AdminOrganisationsEinheitListResource, + AdminOrganisationsEinheitResource, + AdminOrganisationsEinheitSettings, +} from '@admin-client/admin-settings'; +import { NavigationService } from '@alfa-client/navigation-shared'; +import { StateResource, createEmptyStateResource, isNotUndefined } from '@alfa-client/tech-shared'; +import { SnackBarService } from '@alfa-client/ui'; +import { Injectable } from '@angular/core'; +import { Params } from '@angular/router'; +import { ResourceUri } from '@ngxp/rest'; +import { isNil } from 'lodash-es'; +import { Observable, Subscription, startWith, tap } from 'rxjs'; +import { OrganisationsEinheitListResourceService } from './organisations-einheit-list-resource.service'; +import { OrganisationsEinheitResourceService } from './organisations-einheit-resource.service'; + +@Injectable({ + providedIn: 'root', +}) +export class OrganisationsEinheitService { + static ORGANISATIONS_EINHEIT_URL: string = 'organisationsEinheitUrl'; + + private subscription: Subscription; + + constructor( + private listResourceService: OrganisationsEinheitListResourceService, + private resourceService: OrganisationsEinheitResourceService, + private navigationService: NavigationService, + private snackBarService: SnackBarService, + ) { + this.listenToNavigation(); + } + + private listenToNavigation(): void { + this.unsubscribe(); + this.subscription = this.navigationService.urlChanged().subscribe((params: Params) => this.onNavigation(params)); + } + + private unsubscribe(): void { + if (!isNil(this.subscription)) { + this.subscription.unsubscribe(); + } + } + + onNavigation(params: Params): void { + if (this.navigateToOrganisationsEinheitDetailPage(params)) { + this.listResourceService.select(this.getOrganisationsEinheitUrl()); + } + } + + private navigateToOrganisationsEinheitDetailPage(params: Params): boolean { + return isNotUndefined(params[OrganisationsEinheitService.ORGANISATIONS_EINHEIT_URL]); + } + + getOrganisationsEinheitUrl(): ResourceUri { + return this.navigationService.getDecodedParam(OrganisationsEinheitService.ORGANISATIONS_EINHEIT_URL); + } + + public getList(): Observable<StateResource<AdminOrganisationsEinheitListResource>> { + return this.listResourceService.getList(); + } + + public get(): Observable<StateResource<AdminOrganisationsEinheitResource>> { + return this.resourceService.get(); + } + + public patch( + organisationsEinheitSettings: AdminOrganisationsEinheitSettings, + ): Observable<StateResource<AdminOrganisationsEinheitResource>> { + return this.resourceService.patch(organisationsEinheitSettings).pipe( + tap((stateResource: StateResource<AdminOrganisationsEinheitResource>) => this.showInfoAfterPatch(stateResource)), + startWith(createEmptyStateResource<AdminOrganisationsEinheitResource>(true)), + ); + } + + private showInfoAfterPatch(stateResource: StateResource<AdminOrganisationsEinheitResource>) { + if (!stateResource.loading) { + this.snackBarService.showInfo('Die Signatur wurde erfolgreich gespeichert.'); + } + } +} diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.html b/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.html index a5aace656e46f148670b719e35a52d23df73ec4b..23447820822d57bfca778a3b4f870bb4e1780a52 100644 --- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.html +++ b/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.html @@ -45,7 +45,7 @@ ></ods-button-with-spinner> <span - *ngIf="formService.invalidEmpty" + *ngIf="formService.isInvalid()" data-test-id="invalid-empty-message-span" class="m-2 text-red-500" > diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.spec.ts b/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.spec.ts index 3470d76a49844b39ea90737b2474d95c76ff5a2c..8c8096d7df647918130510a8ac0fad54499064f7 100644 --- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.spec.ts +++ b/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.spec.ts @@ -1,15 +1,5 @@ -import { - createEmptyStateResource, - createStateResource, - ProblemDetail, -} from '@alfa-client/tech-shared'; -import { - dispatchEventFromFixture, - existsAsHtmlElement, - Mock, - mock, - notExistsAsHtmlElement, -} from '@alfa-client/test-utils'; +import { createEmptyStateResource, createStateResource, ProblemDetail } from '@alfa-client/tech-shared'; +import { dispatchEventFromFixture, existsAsHtmlElement, Mock, mock, notExistsAsHtmlElement } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { ButtonWithSpinnerComponent } from '@ods/component'; @@ -67,15 +57,12 @@ describe('PostfachFormComponent', () => { describe('set postfachStateResource', () => { it('should return resource', () => { - const updatePostfachResourceFn: jest.SpyInstance = jest.spyOn( - component, - 'updatePostfachResource', - ); - const postfachResource: PostfachResource = createPostfachResource(); + component.updatePostfachResource = jest.fn(); + const postfachResource: PostfachResource = createPostfachResource(); component.postfachStateResource = createStateResource(postfachResource); - expect(updatePostfachResourceFn).toHaveBeenCalledWith(postfachResource); + expect(component.updatePostfachResource).toHaveBeenCalledWith(postfachResource); }); }); @@ -152,7 +139,7 @@ describe('PostfachFormComponent', () => { }); describe('invalid message', () => { - it('should show if form invalidEmpty', () => { + it('should show if form is invalid', () => { formService.setErrorByProblemDetail(createProblemDetailForAbsenderName()); fixture.detectChanges(); diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.ts b/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.ts index ed81ff5fd52cfc3ef92312fd3f2d0cbbcb8d4d89..dd9bcc7a3732f8562aa596faa52b1b4b70407f26 100644 --- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.ts +++ b/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.ts @@ -46,17 +46,10 @@ export class PostfachFormService extends AbstractFormService { } private shouldSkipAbsender(postfach: Postfach): boolean { - return ( - isNil(this.source?.absender) && - Object.values(postfach.absender).every((v) => isNil(v) || v.length === 0) - ); + return isNil(this.source?.absender) && Object.values(postfach.absender).every((v) => isNil(v) || v.length === 0); } protected getPathPrefix(): string { return 'settingBody'; } - - public get invalidEmpty(): boolean { - return this.form.invalid; - } } diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-navigation-item/postfach-navigation-item.component.html b/alfa-client/libs/admin/settings/src/lib/postfach/postfach-navigation-item/postfach-navigation-item.component.html deleted file mode 100644 index c2dc7ea533bb1d807a8a73de12d273881e2e0053..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-navigation-item/postfach-navigation-item.component.html +++ /dev/null @@ -1,5 +0,0 @@ -<admin-navigation-item - name="Postfach" - imageSrc="/assets/mail.svg" - link="/postfach" -></admin-navigation-item> diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-navigation-item/postfach-navigation-item.component.scss b/alfa-client/libs/admin/settings/src/lib/postfach/postfach-navigation-item/postfach-navigation-item.component.scss deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-navigation-item/postfach-navigation-item.component.spec.ts b/alfa-client/libs/admin/settings/src/lib/postfach/postfach-navigation-item/postfach-navigation-item.component.spec.ts deleted file mode 100644 index 78ced8dcace6a475a7d5bda4c1f2d2be6a60171a..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-navigation-item/postfach-navigation-item.component.spec.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { NavigationItemComponent } from '@admin-client/admin-settings'; -import { getMockComponent } from '@alfa-client/test-utils'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { MockComponent } from 'ng-mocks'; -import { SettingName } from '../../admin-settings.model'; -import { PostfachNavigationItemComponent } from './postfach-navigation-item.component'; - -describe('PostfachNavigationItemComponent', () => { - let component: PostfachNavigationItemComponent; - let fixture: ComponentFixture<PostfachNavigationItemComponent>; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [PostfachNavigationItemComponent, MockComponent(NavigationItemComponent)], - }).compileComponents(); - - fixture = TestBed.createComponent(PostfachNavigationItemComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); - - describe('navigation item component', () => { - let navigationItemComponent: NavigationItemComponent; - - beforeEach(() => { - navigationItemComponent = getMockComponent(fixture, NavigationItemComponent); - }); - - it('should be called with name', () => { - expect(navigationItemComponent.name).toBe(SettingName.POSTFACH); - }); - - it('should be called with imageSrc', () => { - expect(navigationItemComponent.imageSrc).toBe('/assets/mail.svg'); - }); - - it('should be called with link', () => { - expect(navigationItemComponent.link).toBe('/postfach'); - }); - }); -}); diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-navigation-item/postfach-navigation-item.component.ts b/alfa-client/libs/admin/settings/src/lib/postfach/postfach-navigation-item/postfach-navigation-item.component.ts deleted file mode 100644 index c5765cc3bf0b3170300d23383a9dead64714feb8..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-navigation-item/postfach-navigation-item.component.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'admin-postfach-navigation-item', - templateUrl: './postfach-navigation-item.component.html', - styleUrls: ['./postfach-navigation-item.component.scss'], -}) -export class PostfachNavigationItemComponent {} diff --git a/alfa-client/libs/admin/settings/src/lib/user/keycloak.resource.service.spec.ts b/alfa-client/libs/admin/settings/src/lib/user/keycloak.resource.service.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..39b17b591b2f6e9c8f75fed4b8965718b87cd0b2 --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/user/keycloak.resource.service.spec.ts @@ -0,0 +1,227 @@ +import { fakeAsync, tick } from '@angular/core/testing'; +import { faker } from '@faker-js/faker'; +import { cold } from 'jest-marbles'; +import { StateResource, createEmptyStateResource } from 'libs/tech-shared/src/lib/resource/resource.util'; +import { Dummy, createDummy } from 'libs/tech-shared/test/dummy'; +import { singleCold } from 'libs/tech-shared/test/marbles'; +import { Observable, of } from 'rxjs'; +import * as resourceUtil from '../../../../../tech-shared/src/lib/resource/resource.util'; +import { KeycloakResourceService } from './keycloak.resource.service'; + +describe('KeycloakResourceService', () => { + let service: KeycloakResourceService<unknown>; + + const id: string = faker.word.sample(); + const emptyStateResource: StateResource<unknown[]> = createEmptyStateResource<unknown[]>(); + const dummyObject: Dummy = createDummy(); + const dummyAction: Observable<Dummy> = of(dummyObject); + + beforeEach(() => { + service = new TestResourceService(); + }); + + describe('get', () => { + beforeEach(() => { + service.handleChanges = jest.fn(); + }); + + it('should return stateResource as observable', (done) => { + service.get().subscribe((stateResource) => { + expect(stateResource).toBe(service.stateResource.value); + done(); + }); + }); + + it('should call handleChanges ', fakeAsync(() => { + service.get().subscribe(); + + expect(service.handleChanges).toHaveBeenCalled(); + })); + }); + + describe('handleChanges', () => { + it('should call doIfLoadingRequired', () => { + const doIfLoadingRequired: jest.SpyInstance<boolean> = jest.spyOn(resourceUtil, 'doIfLoadingRequired'); + + service.handleChanges(emptyStateResource); + + expect(doIfLoadingRequired).toHaveBeenCalled(); + }); + }); + + describe('loadResource', () => { + it('should call set loading', () => { + service.setLoading = jest.fn(); + + service.loadResource(); + + expect(service.setLoading).toHaveBeenCalled(); + }); + + it('should update Resource', fakeAsync(() => { + const dummyItems = [createDummy(), createDummy()]; + service.getItemsFromKeycloak = jest.fn().mockReturnValue(of(dummyItems)); + + service.loadResource(); + tick(); + + expect(service.stateResource.value.resource).toEqual(dummyItems); + })); + }); + + describe('create', () => { + const saveObject: Dummy = createDummy(); + + it('should call handleLoading', () => { + service.handleLoading = jest.fn(); + + service.create(saveObject); + + expect(service.handleLoading).toHaveBeenCalled(); + }); + + it('should call createInKeycloak', () => { + service.createInKeycloak = jest.fn().mockReturnValue(of({})); + + service.create(saveObject); + + expect(service.createInKeycloak).toHaveBeenCalled(); + }); + }); + + describe('save', () => { + it('should call handleLoading', () => { + service.handleLoading = jest.fn(); + + service.save(dummyObject); + + expect(service.handleLoading).toHaveBeenCalled(); + }); + + it('should call createInKeycloak', () => { + service.saveInKeycloak = jest.fn().mockReturnValue(of({})); + + service.save(dummyObject); + + expect(service.saveInKeycloak).toHaveBeenCalled(); + }); + }); + + describe('delete', () => { + it('should call handleLoading', () => { + service.handleLoading = jest.fn(); + + service.delete(id); + + expect(service.handleLoading).toHaveBeenCalled(); + }); + + it('should call createInKeycloak', () => { + service.saveInKeycloak = jest.fn().mockReturnValue(of({})); + + service.save(id); + + expect(service.saveInKeycloak).toHaveBeenCalled(); + }); + }); + + describe('handleLoading', () => { + it('should set loading', () => { + service.handleLoading(dummyAction); + + expect(service.stateResource.value.loading).toBe(true); + }); + + it('should call refreshAfterFirstEmit', () => { + service.refreshAfterFirstEmit = jest.fn().mockReturnValue(dummyAction); + + service.handleLoading(dummyAction); + + expect(service.refreshAfterFirstEmit).toHaveBeenCalled(); + }); + + it('should call progress', () => { + service.progress = jest.fn().mockReturnValue(dummyAction); + + service.handleLoading(dummyAction); + + expect(service.progress).toHaveBeenCalled(); + }); + }); + + describe('refreshAfterFirstEmit', () => { + it('should call refresh after first emit', fakeAsync(() => { + service.refresh = jest.fn(); + + service.refreshAfterFirstEmit(dummyAction).subscribe(); + tick(); + + expect(service.refresh).toHaveBeenCalled(); + })); + }); + + describe('progress', () => { + it('should emit true at the start and false after first parameter emit', () => { + const result: Observable<boolean> = service.progress(cold('--x', { x: dummyObject })); + + expect(result).toBeObservable(cold('a-b', { a: true, b: false })); + }); + }); + + describe('setLoading', () => { + it('should set loading in state to true without parameter', () => { + service.setLoading(); + + expect(service.stateResource.value.loading).toEqual(true); + }); + + it('should set loading in state to false for parameter false', () => { + service.setLoading(false); + + expect(service.stateResource.value.loading).toEqual(false); + }); + }); + + describe('refresh', () => { + it('should set reload in state to true', () => { + service.refresh(); + + expect(service.stateResource.value.reload).toBe(true); + }); + + it('should clear resource in state', () => { + service.refresh(); + + expect(service.stateResource.value.resource).toBe(null); + }); + }); + + describe('select resource', () => { + it('should return state resource', () => { + const stateResource = createEmptyStateResource<unknown[]>(); + service.stateResource.next(stateResource); + + const resource$: Observable<StateResource<unknown[]>> = service.selectResource(); + + expect(resource$).toBeObservable(singleCold(stateResource)); + }); + }); +}); + +class TestResourceService extends KeycloakResourceService<unknown> { + getItemsFromKeycloak(): Observable<unknown[]> { + return of(null); + } + + saveInKeycloak(): Observable<void> { + return of(null); + } + + createInKeycloak(): Observable<void> { + return of(null); + } + + deleteInKeycloak(): Observable<void> { + return of(null); + } +} diff --git a/alfa-client/libs/admin/settings/src/lib/user/keycloak.resource.service.ts b/alfa-client/libs/admin/settings/src/lib/user/keycloak.resource.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..bc62384b90ed390dccad35c9acb296d74ca3a1e0 --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/user/keycloak.resource.service.ts @@ -0,0 +1,82 @@ +import { createEmptyStateResource, createStateResource, doIfLoadingRequired, StateResource } from '@alfa-client/tech-shared'; +import { BehaviorSubject, first, map, Observable, startWith, tap } from 'rxjs'; + +export abstract class KeycloakResourceService<T> { + readonly stateResource: BehaviorSubject<StateResource<T[]>> = new BehaviorSubject(createEmptyStateResource()); + + public get(): Observable<StateResource<T[]>> { + return this.stateResource.asObservable().pipe(tap((stateResource) => this.handleChanges(stateResource))); + } + + handleChanges(stateResource: StateResource<T[]>) { + doIfLoadingRequired(stateResource, () => this.loadResource()); + } + + loadResource(): void { + this.setLoading(); + this.getItemsFromKeycloak() + .pipe(first()) + .subscribe((items) => this.updateResource(items)); + } + + abstract getItemsFromKeycloak(): Observable<T[]>; + + private updateResource(items: T[]): void { + this.stateResource.next(createStateResource(items)); + } + + public create(item: Partial<T>): Observable<boolean> { + return this.handleLoading(this.createInKeycloak(item)); + } + + abstract createInKeycloak(item: Partial<T>): Observable<T>; + + public save(item: T): Observable<boolean> { + return this.handleLoading(this.saveInKeycloak(item)); + } + + abstract saveInKeycloak(item: T): Observable<void>; + + public delete(id: string): Observable<boolean> { + return this.handleLoading(this.deleteInKeycloak(id)); + } + + abstract deleteInKeycloak(id: string): Observable<void>; + + handleLoading(action: Observable<unknown>): Observable<boolean> { + this.setLoading(); + return this.progress(this.refreshAfterFirstEmit(action)); + } + + refreshAfterFirstEmit(action: Observable<unknown>): Observable<unknown> { + return action.pipe( + first(), + tap(() => this.refresh()), + ); + } + + progress(action: Observable<unknown>): Observable<boolean> { + return action.pipe( + map(() => false), + startWith(true), + ); + } + + setLoading(loading: boolean = true): void { + this.stateResource.next({ + ...this.stateResource.value, + loading, + }); + } + + refresh(): void { + this.stateResource.next({ + ...createEmptyStateResource(), + reload: true, + }); + } + + public selectResource(): Observable<StateResource<T[]>> { + return this.stateResource.asObservable(); + } +} diff --git a/alfa-client/libs/admin/settings/src/lib/user/to-user-name.pipe.spec.ts b/alfa-client/libs/admin/settings/src/lib/user/to-user-name.pipe.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..81012d2754951d89e18992d26fea0fd7b2248bf0 --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/user/to-user-name.pipe.spec.ts @@ -0,0 +1,23 @@ +import { createUser } from '../../../test/user/user'; +import { ToUserNamePipe } from './to-user-name.pipe'; +import { User } from './user.model'; + +describe('UserNamePipe', () => { + it('should return user name', () => { + const user: User = { ...createUser(), firstName: 'Max', lastName: 'Mustermann' }; + const userNamePipe: ToUserNamePipe = new ToUserNamePipe(); + + const result: string = userNamePipe.transform(user); + + expect(result).toBe('Max Mustermann'); + }); + + it('should return username for user without firstName and lastName', () => { + const user: User = { ...createUser(), firstName: null, lastName: null }; + const userNamePipe: ToUserNamePipe = new ToUserNamePipe(); + + const result: string = userNamePipe.transform(user); + + expect(result).toBe(user.username); + }); +}); diff --git a/alfa-client/libs/admin/settings/src/lib/user/to-user-name.pipe.ts b/alfa-client/libs/admin/settings/src/lib/user/to-user-name.pipe.ts new file mode 100644 index 0000000000000000000000000000000000000000..4711ff9e5d78eea721342923a296976dde6a0389 --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/user/to-user-name.pipe.ts @@ -0,0 +1,13 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { User } from './user.model'; + +@Pipe({ + name: 'toUserName', + standalone: true, +}) +export class ToUserNamePipe implements PipeTransform { + transform(user: User): string { + if (!user.firstName || !user.lastName) return user.username; + return `${user.firstName} ${user.lastName}`; + } +} diff --git a/alfa-client/libs/admin/settings/src/lib/user/user.model.ts b/alfa-client/libs/admin/settings/src/lib/user/user.model.ts index 308e945aa9b0f900ccfc135eeb98f713efc7e5e7..43f4181229bb301da6124cde831ab9f7346c5ea9 100644 --- a/alfa-client/libs/admin/settings/src/lib/user/user.model.ts +++ b/alfa-client/libs/admin/settings/src/lib/user/user.model.ts @@ -1,22 +1,9 @@ -export interface Organisationseinheit { +export interface User { id: string; - name: string; - organisationseinheitIds: string[]; -} - -export interface OrganisationseinheitState { - organisationseinheitItems: Organisationseinheit[]; - loading: boolean; - updateRequired: boolean; -} - -export enum OrganisationseinheitErrorType { - NAME_CONFLICT = 'name-conflict', - NAME_MISSING = 'name-missing', - ID_MISSING = 'id-missing', -} - -export interface OrganisationseinheitError { - errorType: OrganisationseinheitErrorType; - detail: string; + username: string; + email: string; + firstName: string; + lastName: string; + groups?: string[]; + roles?: string[]; } diff --git a/alfa-client/libs/admin/settings/src/lib/user/user.repository.service.ts b/alfa-client/libs/admin/settings/src/lib/user/user.repository.service.ts index 293806db24c520afa4b0907811092ee0bf023979..f7da378621af67111a8ce3640a4a86e566cc1f14 100644 --- a/alfa-client/libs/admin/settings/src/lib/user/user.repository.service.ts +++ b/alfa-client/libs/admin/settings/src/lib/user/user.repository.service.ts @@ -1,11 +1,14 @@ import { Injectable } from '@angular/core'; -import KcAdminClient, { NetworkError } from '@keycloak/keycloak-admin-client'; +import KcAdminClient from '@keycloak/keycloak-admin-client'; import { TokenProvider } from '@keycloak/keycloak-admin-client/lib/client'; import GroupRepresentation from '@keycloak/keycloak-admin-client/lib/defs/groupRepresentation'; +import MappingsRepresentation from '@keycloak/keycloak-admin-client/lib/defs/mappingsRepresentation'; +import RoleRepresentation from '@keycloak/keycloak-admin-client/lib/defs/roleRepresentation'; +import UserRepresentation from '@keycloak/keycloak-admin-client/lib/defs/userRepresentation'; import { OAuthService } from 'angular-oauth2-oidc'; -import { Observable, OperatorFunction, catchError, from, map, throwError } from 'rxjs'; -import { Organisationseinheit, OrganisationseinheitError } from './user.model'; -import { KEYCLOAK_CREATE_GROUPS_ERROR_STATUS } from './user.util'; +import { isNil } from 'lodash-es'; +import { Observable, forkJoin, from, map, mergeMap } from 'rxjs'; +import { User } from './user.model'; @Injectable({ providedIn: 'root', @@ -28,69 +31,52 @@ export class UserRepository { }; } - public deleteOrganisationseinheit(id: string): Observable<void> { - return from(this.kcAdminClient.groups.del({ id })); - } - - public findOrganisationseinheitItems(): Observable<Organisationseinheit[]> { - return from(this.kcAdminClient.groups.find({ briefRepresentation: false })).pipe( - map((reps: GroupRepresentation[]) => - reps.map((rep: GroupRepresentation) => - this.mapGroupRepresentationToOrganisationseinheit(rep), - ), - ), + public getUsers(): Observable<User[]> { + return from(this.kcAdminClient.users.find()).pipe( + map((userReps: UserRepresentation[]) => userReps.map((userReps) => this.mapToUser(userReps))), + mergeMap((users) => forkJoin(users.map((users) => this.addInformationToUser(users)))), ); } - mapGroupRepresentationToOrganisationseinheit(group: GroupRepresentation): Organisationseinheit { + mapToUser(userRepresentation: UserRepresentation): User { return { - id: group.id, - name: group.name, - organisationseinheitIds: group.attributes?.organisationseinheitId ?? [], + id: userRepresentation.id, + email: userRepresentation.email, + username: userRepresentation.username, + firstName: userRepresentation.firstName, + lastName: userRepresentation.lastName, + groups: null, + roles: null, }; } - public saveOrganisationseinheit(organisationseinheit: Organisationseinheit): Observable<void> { - return from( - this.kcAdminClient.groups.update( - { id: organisationseinheit.id }, - { - name: organisationseinheit.name, - attributes: { organisationseinheitId: organisationseinheit.organisationseinheitIds }, - }, - ), - ).pipe(this.rethrowMappedGroupsError()); + private addInformationToUser(user: User): Observable<User> { + return forkJoin([this.getUserGroups(user), this.getAlfaClientRoles(user)]).pipe( + map(([groups, roles]) => ({ + ...user, + groups, + roles, + })), + ); } - public createOrganisationseinheit( - name: string, - organisationseinheitIds: string[], - ): Observable<Organisationseinheit> { - return from( - this.kcAdminClient.groups.create({ - name, - attributes: { organisationseinheitId: organisationseinheitIds }, - }), - ).pipe( - map( - ({ id }): Organisationseinheit => ({ - id, - name, - organisationseinheitIds: organisationseinheitIds, - }), - ), - this.rethrowMappedGroupsError(), + private getUserGroups(user: User): Observable<string[]> { + return from(this.kcAdminClient.users.listGroups({ id: user.id })).pipe( + map((groups: GroupRepresentation[]) => groups.map((group) => group.name)), ); } - rethrowMappedGroupsError<T>(): OperatorFunction<T, T> { - return catchError((err) => throwError(() => this.mapCreateGroupsNetworkError(err))); + private getAlfaClientRoles(user: User): Observable<string[]> { + return from(this.kcAdminClient.users.listRoleMappings({ id: user.id })).pipe( + map((clientMappings: MappingsRepresentation) => this.mapToAlfaClientRoleNames(clientMappings)), + ); } - mapCreateGroupsNetworkError(error: NetworkError): OrganisationseinheitError { - return { - errorType: KEYCLOAK_CREATE_GROUPS_ERROR_STATUS[error.response.status], - detail: error.responseData['errorMessage'] ?? '', - }; + private mapToAlfaClientRoleNames(roleMappings: MappingsRepresentation): string[] { + if (isNil(roleMappings?.clientMappings?.['alfa'])) { + return []; + } + + return roleMappings.clientMappings['alfa'].mappings.map((role: RoleRepresentation) => role.name); } } diff --git a/alfa-client/libs/admin/settings/src/lib/user/user.repository.spec.ts b/alfa-client/libs/admin/settings/src/lib/user/user.repository.spec.ts index 47926c8e111e9ab28bc517ef13add588011b0d1e..a854ab7a46bb79f8bab8a22c3417e88f7321e3d2 100644 --- a/alfa-client/libs/admin/settings/src/lib/user/user.repository.spec.ts +++ b/alfa-client/libs/admin/settings/src/lib/user/user.repository.spec.ts @@ -1,41 +1,23 @@ import { Mock, mock } from '@alfa-client/test-utils'; import { TestBed, fakeAsync, tick } from '@angular/core/testing'; import { faker } from '@faker-js/faker'; -import KcAdminClient, { NetworkError } from '@keycloak/keycloak-admin-client'; +import KcAdminClient from '@keycloak/keycloak-admin-client'; import { TokenProvider } from '@keycloak/keycloak-admin-client/lib/client'; import GroupRepresentation from '@keycloak/keycloak-admin-client/lib/defs/groupRepresentation'; -import { Groups } from '@keycloak/keycloak-admin-client/lib/resources/groups'; +import MappingsRepresentation from '@keycloak/keycloak-admin-client/lib/defs/mappingsRepresentation'; import { OAuthService } from 'angular-oauth2-oidc'; -import { Observable, OperatorFunction, catchError, firstValueFrom, of, throwError } from 'rxjs'; -import { - createGroupRepresentation, - createNetworkError, - createOrganisationseinheit, - createOrganisationseinheitError, -} from '../../../test/user/user'; -import { - Organisationseinheit, - OrganisationseinheitError, - OrganisationseinheitErrorType, -} from './user.model'; +import { createUser } from '../../../test/user/user'; +import { User } from './user.model'; import { UserRepository } from './user.repository.service'; describe('UserRepository', () => { - const accessToken: string = faker.random.alphaNumeric(40); - const error: OrganisationseinheitError = createOrganisationseinheitError(); - const networkError: NetworkError = createNetworkError(400, ''); + const accessToken: string = faker.string.alphanumeric(40); let repository: UserRepository; let kcAdminClient: Mock<KcAdminClient>; let oAuthService: Mock<OAuthService>; - const mockGroupsFunc = (groupsKey: keyof Groups, implementation: jest.Mock) => { - kcAdminClient.groups = <any>{ - [groupsKey]: implementation, - }; - }; - beforeEach(() => { kcAdminClient = mock(KcAdminClient); oAuthService = mock(OAuthService); @@ -61,273 +43,69 @@ describe('UserRepository', () => { }); }); - describe('map organisationseinheit representation', () => { - let expectedOrganisationseinheit: Organisationseinheit = createOrganisationseinheit(); - - it('should map field "id"', () => { - const organisationseinheit: Organisationseinheit = - repository.mapGroupRepresentationToOrganisationseinheit({ - id: expectedOrganisationseinheit.id, - }); - - expect(organisationseinheit.id).toEqual(expectedOrganisationseinheit.id); - }); - - it('should map field "name"', () => { - const organisationseinheit: Organisationseinheit = - repository.mapGroupRepresentationToOrganisationseinheit({ - name: expectedOrganisationseinheit.name, - }); - - expect(organisationseinheit.name).toEqual(expectedOrganisationseinheit.name); - }); - - it('should map field "organisationseinheitIds"', () => { - const organisationseinheit: Organisationseinheit = - repository.mapGroupRepresentationToOrganisationseinheit({ - attributes: { - organisationseinheitId: expectedOrganisationseinheit.organisationseinheitIds, - }, - }); - - expect(organisationseinheit.organisationseinheitIds).toEqual( - expectedOrganisationseinheit.organisationseinheitIds, - ); - }); - - it('should map missing organisationseinheitIds to empty list', () => { - const organisationseinheit: Organisationseinheit = - repository.mapGroupRepresentationToOrganisationseinheit({}); + describe('getUsers', () => { + const userRep: User = createUser(); + const userRepArray: User[] = [userRep, userRep, userRep]; + const group: string = faker.word.sample(); + const role: string = faker.word.sample(); + const groupRep: GroupRepresentation[] = [{ name: group }]; + const roleRep: MappingsRepresentation = { + clientMappings: { alfa: { mappings: [{ name: role }] } }, + }; - expect(organisationseinheit.organisationseinheitIds).toEqual([]); + beforeEach(() => { + jest.clearAllMocks(); + kcAdminClient.users = <any>{ + find: jest.fn().mockReturnValue(Promise.resolve(userRepArray)), + listGroups: jest.fn().mockReturnValue(Promise.resolve(groupRep)), + listRoleMappings: jest.fn().mockReturnValue(Promise.resolve(roleRep)), + }; }); - }); - describe('find organisationseinheitItems', () => { - const organisationseinheitItems: Organisationseinheit[] = [ - createOrganisationseinheit(), - createOrganisationseinheit(), - createOrganisationseinheit(), - ]; + it('should call kcAdminClient users find', () => { + repository.getUsers(); - const groupReps: GroupRepresentation[] = - organisationseinheitItems.map(createGroupRepresentation); - - it('should return mapped organisationseinheit search result', async () => { - const findMock: jest.Mock = jest.fn().mockReturnValue(Promise.resolve(groupReps)); - mockGroupsFunc('find', findMock); - - const groupsResult: Organisationseinheit[] = await firstValueFrom( - repository.findOrganisationseinheitItems(), - ); - - expect(groupsResult).toEqual(groupsResult); + expect(kcAdminClient.users['find']).toHaveBeenCalled(); }); - it('should call with brief representation', fakeAsync(() => { - const findMock: jest.Mock = jest.fn().mockReturnValue(Promise.resolve(groupReps)); - mockGroupsFunc('find', findMock); + it('should call mapToUser', fakeAsync(() => { + const mapToUser: jest.SpyInstance<User> = jest.spyOn(repository, 'mapToUser'); - repository.findOrganisationseinheitItems().subscribe(); + repository.getUsers().subscribe(); tick(); - expect(findMock).toHaveBeenCalledWith({ briefRepresentation: false }); + expect(mapToUser).toBeCalledTimes(userRepArray.length); })); - }); - describe('save organisationseinheit', () => { - const saveGroup: Organisationseinheit = createOrganisationseinheit(); - - it('should call kcAdminClient.groups.save', async () => { - const updateMock: jest.Mock = jest.fn(() => of(null)); - mockGroupsFunc('update', updateMock); - - await firstValueFrom(repository.saveOrganisationseinheit(saveGroup)); - - expect(updateMock).toHaveBeenCalledWith( - { id: saveGroup.id }, - { - name: saveGroup.name, - attributes: { - organisationseinheitId: saveGroup.organisationseinheitIds, - }, - }, - ); - }); - - it('should return organisationseinheit save observable', async () => { - const updateMock: jest.Mock = jest.fn(() => Promise.resolve(null)); - mockGroupsFunc('update', updateMock); - - const voidResult = await firstValueFrom(repository.saveOrganisationseinheit(saveGroup)); - - expect(voidResult).toBe(null); - }); - - it('should pipe rethrowMappedGroupsError', (done) => { - const updateMock: jest.Mock = jest.fn(() => Promise.reject(networkError)); - mockGroupsFunc('update', updateMock); - repository.rethrowMappedGroupsError = jest - .fn() - .mockReturnValue(catchError(() => throwError(() => error))); - - repository.saveOrganisationseinheit(saveGroup).subscribe({ - error: (err) => { - expect(err).toBe(error); - done(); - }, - }); - }); - }); - - describe('create organisationseinheit', () => { - const newOrganisationseinheit: Organisationseinheit = createOrganisationseinheit(); - - it('should call kcAdminClient.groups.create', async () => { - const createMock: jest.Mock = jest.fn(() => of({ id: newOrganisationseinheit.id })); - mockGroupsFunc('create', createMock); - - await firstValueFrom( - repository.createOrganisationseinheit( - newOrganisationseinheit.name, - newOrganisationseinheit.organisationseinheitIds, - ), - ); - - expect(createMock).toHaveBeenCalledWith({ - name: newOrganisationseinheit.name, - attributes: { - organisationseinheitId: newOrganisationseinheit.organisationseinheitIds, - }, - }); - }); - - it('should return mapped organisationseinheit result', async () => { - const createMock: jest.Mock = jest.fn(() => - Promise.resolve({ id: newOrganisationseinheit.id }), - ); - mockGroupsFunc('create', createMock); - - const newGroupResult: Organisationseinheit = await firstValueFrom( - repository.createOrganisationseinheit( - newOrganisationseinheit.name, - newOrganisationseinheit.organisationseinheitIds, - ), - ); - - expect(newGroupResult).toEqual(newOrganisationseinheit); - }); - - it('should pipe rethrowMappedGroupsError', (done) => { - const createMock: jest.Mock = jest.fn(() => Promise.reject(networkError)); - mockGroupsFunc('create', createMock); - repository.rethrowMappedGroupsError = jest - .fn() - .mockReturnValue(catchError(() => throwError(() => error))); - - repository - .createOrganisationseinheit( - newOrganisationseinheit.name, - newOrganisationseinheit.organisationseinheitIds, - ) - .subscribe({ - error: (err) => { - expect(err).toBe(error); - done(); - }, - }); - }); - }); + it('should call kcadminClient listGroups for every user', fakeAsync(() => { + repository.getUsers().subscribe(); + tick(); - describe('rethrow mapped groups error', () => { - let networkErrorObservable: Observable<never>; + expect(kcAdminClient.users['listGroups']).toBeCalledTimes(userRepArray.length); + })); - beforeEach(() => { - repository.mapCreateGroupsNetworkError = jest.fn().mockReturnValue(error); - networkErrorObservable = throwError(() => networkError); - }); + it('should call kcadminClient listRoleMappings for every user', fakeAsync(() => { + repository.getUsers().subscribe(); + tick(); - it('should throw mapped error', (done) => { - const rethrowOperator: OperatorFunction<never, never> = repository.rethrowMappedGroupsError(); + expect(kcAdminClient.users['listRoleMappings']).toBeCalledTimes(userRepArray.length); + })); - networkErrorObservable.pipe(rethrowOperator).subscribe({ - error: (err) => { - expect(err).toBe(error); - done(); - }, + it('should return users with groups and roles', (done) => { + repository.getUsers().subscribe((users: User[]) => { + users.forEach((user) => expect(user).toEqual({ ...userRep, groups: [group], roles: [role] })); + done(); }); }); - it('should call mapCreateGroupsNetworkError', (done) => { - const rethrowOperator: OperatorFunction<never, never> = repository.rethrowMappedGroupsError(); + it('should return users with empty groups and roles if they have none', (done) => { + kcAdminClient.users['listGroups'] = jest.fn().mockReturnValue(Promise.resolve([])); + kcAdminClient.users['listRoleMappings'] = jest.fn().mockReturnValue(Promise.resolve({})); - networkErrorObservable.pipe(rethrowOperator).subscribe({ - error: () => { - expect(repository.mapCreateGroupsNetworkError).toHaveBeenCalledWith(networkError); - done(); - }, + repository.getUsers().subscribe((users: User[]) => { + users.forEach((user) => expect(user).toEqual({ ...userRep, groups: [], roles: [] })); + done(); }); }); }); - - describe('map create groups network error', () => { - it('should interpret 409 status as name conflict', () => { - const keycloakError: OrganisationseinheitError = createOrganisationseinheitError( - OrganisationseinheitErrorType.NAME_CONFLICT, - ); - const networkError: NetworkError = createNetworkError(409, keycloakError.detail); - - const error: OrganisationseinheitError = repository.mapCreateGroupsNetworkError(networkError); - - expect(error).toEqual(keycloakError); - }); - - it('should interpret 400 status as name missing', () => { - const keycloakError: OrganisationseinheitError = createOrganisationseinheitError( - OrganisationseinheitErrorType.NAME_MISSING, - ); - const networkError: NetworkError = createNetworkError(400, keycloakError.detail); - - const error: OrganisationseinheitError = repository.mapCreateGroupsNetworkError(networkError); - - expect(error).toEqual(keycloakError); - }); - - it('should map missing errorMessage to empty string', () => { - const networkError: NetworkError = createNetworkError(500, undefined); - - const error: OrganisationseinheitError = repository.mapCreateGroupsNetworkError(networkError); - expect(error.detail).toEqual(''); - }); - }); - - describe('delete organisationseinheit', () => { - const deleteOrganisationseinheit: Organisationseinheit = createOrganisationseinheit(); - - it('should call kcAdminClient.groups.del', async () => { - const delMock: jest.Mock = jest.fn(() => - Promise.resolve({ id: deleteOrganisationseinheit.id }), - ); - mockGroupsFunc('del', delMock); - - await firstValueFrom(repository.deleteOrganisationseinheit(deleteOrganisationseinheit.id)); - - expect(delMock).toHaveBeenCalledWith({ - id: deleteOrganisationseinheit.id, - }); - }); - - it('should return void', async () => { - mockGroupsFunc( - 'del', - jest.fn(() => Promise.resolve(null)), - ); - - const voidResult = await firstValueFrom( - repository.deleteOrganisationseinheit(deleteOrganisationseinheit.id), - ); - - expect(voidResult).toBeNull(); - }); - }); }); diff --git a/alfa-client/libs/admin/settings/src/lib/user/user.service.spec.ts b/alfa-client/libs/admin/settings/src/lib/user/user.service.spec.ts deleted file mode 100644 index 56ac9d24a8cf68804dce861d61b7a3cf551aeb54..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/user/user.service.spec.ts +++ /dev/null @@ -1,321 +0,0 @@ -import { mock, Mock, useFromMock } from '@alfa-client/test-utils'; -import { fakeAsync, tick } from '@angular/core/testing'; -import { cold } from 'jest-marbles'; -import { singleCold } from 'libs/tech-shared/test/marbles'; -import { firstValueFrom, lastValueFrom, Observable, of } from 'rxjs'; -import { - createOrganisationseinheit, - createOrganisationseinheitState, -} from '../../../test/user/user'; -import { Organisationseinheit } from './user.model'; -import { UserRepository } from './user.repository.service'; -import { UserService } from './user.service'; - -describe('UserService', () => { - let service: UserService; - let repository: Mock<UserRepository>; - const sortedNames: string[] = ['BBBB', 'CCCC', 'XXXX']; - const sortedOrganisationseinheitItems: Organisationseinheit[] = sortedNames.map((name) => ({ - ...createOrganisationseinheit(), - name, - })); - const unsortedOrganisationseinheitItems: Organisationseinheit[] = [ - sortedOrganisationseinheitItems[2], - sortedOrganisationseinheitItems[0], - sortedOrganisationseinheitItems[1], - ]; - let setOrganisationseinheitItemsSpy: jest.SpyInstance; - let setLoadingUntilFirstSpy: jest.SpyInstance; - - beforeEach(() => { - repository = mock(UserRepository); - service = new UserService(useFromMock(repository)); - setOrganisationseinheitItemsSpy = jest.spyOn(service, 'setOrganisationseinheit'); - setLoadingUntilFirstSpy = jest.spyOn(service, 'setLoadingUntilFirst'); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); - - describe('initial state', () => { - it('should have empty group list', () => { - expect(service.organisationseinheitState$.value.organisationseinheitItems).toEqual([]); - }); - it('should not be loading', () => { - expect(service.organisationseinheitState$.value.loading).toEqual(false); - }); - it('should be requiring a reload', () => { - expect(service.organisationseinheitState$.value.updateRequired).toEqual(true); - }); - }); - - describe('get group state', () => { - it('should update if required', async () => { - service.updateIfRequired = jest.fn(); - - await firstValueFrom(service.getOrganisationseinheitState()); - - expect(service.updateIfRequired).toHaveBeenCalled(); - }); - - it('should call find groups', fakeAsync(() => { - repository.findOrganisationseinheitItems.mockReturnValue( - of(unsortedOrganisationseinheitItems), - ); - - service.getOrganisationseinheitState().subscribe(); - tick(); - - expect(repository.findOrganisationseinheitItems).toHaveBeenCalled(); - })); - }); - - describe('update if required', () => { - beforeEach(() => { - service.updateOrganisationseinheitItems = jest.fn(() => of([])); - }); - - it('should call update groups with initial values', () => { - service.updateIfRequired(); - - expect(service.updateOrganisationseinheitItems).toHaveBeenCalled(); - }); - - it('should not call update groups if loading', () => { - service.setLoading(); - - service.updateIfRequired(); - - expect(service.updateOrganisationseinheitItems).not.toHaveBeenCalled(); - }); - - it('should not call update groups if not requiring update', () => { - service.setUpdateRequired(false); - - service.updateIfRequired(); - - expect(service.updateOrganisationseinheitItems).not.toHaveBeenCalled(); - }); - }); - - describe('update groups', () => { - beforeEach(() => { - repository.findOrganisationseinheitItems.mockReturnValue( - of(unsortedOrganisationseinheitItems), - ); - }); - - it('should set loading', () => { - service.updateOrganisationseinheitItems(); - - expect(service.organisationseinheitState$.value.loading).toBeTruthy(); - }); - - it('should set sorted groups', async () => { - await lastValueFrom(service.updateOrganisationseinheitItems()); - - expect(service.organisationseinheitState$.value.organisationseinheitItems).toEqual( - sortedOrganisationseinheitItems, - ); - }); - - it('should not require update afterward', async () => { - await lastValueFrom(service.updateOrganisationseinheitItems()); - - expect(service.organisationseinheitState$.value.updateRequired).toBeFalsy(); - }); - }); - - describe('save organisationseinheit', () => { - const saveGroup: Organisationseinheit = { - ...createOrganisationseinheit(), - id: sortedOrganisationseinheitItems[0].id, - }; - - beforeEach(() => { - repository.saveOrganisationseinheit.mockReturnValue(of(null)); - }); - - it('should use set loading until first', fakeAsync(() => { - service.saveOrganisationseinheit(saveGroup).subscribe(); - tick(); - - expect(setLoadingUntilFirstSpy).toHaveBeenCalled(); - })); - - it('should call repository for save', fakeAsync(() => { - service.saveOrganisationseinheit(saveGroup).subscribe(); - tick(); - - expect(repository.saveOrganisationseinheit).toHaveBeenCalledWith(saveGroup); - })); - - it('should set organisationseinheit items with updated organisationseinheit', fakeAsync(() => { - service.setOrganisationseinheit(sortedOrganisationseinheitItems); - setOrganisationseinheitItemsSpy.mockClear(); - - service.saveOrganisationseinheit(saveGroup).subscribe(); - tick(); - - expect(setOrganisationseinheitItemsSpy).toHaveBeenCalledWith([ - saveGroup, - ...sortedOrganisationseinheitItems.slice(1), - ]); - })); - }); - - describe('create organisationseinheit', () => { - const organisationseinheit: Organisationseinheit = createOrganisationseinheit(); - - beforeEach(() => { - repository.createOrganisationseinheit.mockReturnValue(of(organisationseinheit)); - }); - - it('should use set loading until first', () => { - service.createOrganisationseinheit( - organisationseinheit.name, - organisationseinheit.organisationseinheitIds, - ); - - expect(setLoadingUntilFirstSpy).toHaveBeenCalled(); - }); - - it('should call repository for save', () => { - service.createOrganisationseinheit( - organisationseinheit.name, - organisationseinheit.organisationseinheitIds, - ); - - expect(repository.createOrganisationseinheit).toHaveBeenCalledWith( - organisationseinheit.name, - organisationseinheit.organisationseinheitIds, - ); - }); - - it('should set organisationseinheit items with new group', fakeAsync(() => { - service.setOrganisationseinheit(sortedOrganisationseinheitItems); - setOrganisationseinheitItemsSpy.mockClear(); - - service - .createOrganisationseinheit( - organisationseinheit.name, - organisationseinheit.organisationseinheitIds, - ) - .subscribe(); - tick(); - - expect(setOrganisationseinheitItemsSpy).toHaveBeenCalledWith([ - ...sortedOrganisationseinheitItems, - organisationseinheit, - ]); - })); - }); - - describe('set organisationseinheit items', () => { - it('should sort groups by name', async () => { - service.setOrganisationseinheit(unsortedOrganisationseinheitItems); - - expect(service.organisationseinheitState$.value.organisationseinheitItems).toEqual( - sortedOrganisationseinheitItems, - ); - }); - }); - - describe('delete group', () => { - const deleteGroup: Organisationseinheit = unsortedOrganisationseinheitItems[1]; - - beforeEach(async () => { - repository.deleteOrganisationseinheit.mockReturnValue(of(null)); - service.organisationseinheitState$.next({ - ...service.organisationseinheitState$.value, - organisationseinheitItems: sortedOrganisationseinheitItems, - }); - }); - - it('should use set loading until first', () => { - const setLoadingUntilFirstSpy: jest.SpyInstance = jest.spyOn(service, 'setLoadingUntilFirst'); - service.deleteOrganisationseinheit(deleteGroup.id); - - expect(setLoadingUntilFirstSpy).toHaveBeenCalled(); - }); - - it('should call repository', () => { - service.deleteOrganisationseinheit(deleteGroup.id); - - expect(repository.deleteOrganisationseinheit).toHaveBeenCalledWith(deleteGroup.id); - }); - - describe('which exists', () => { - it('should not have group in list after delete', fakeAsync(() => { - service.deleteOrganisationseinheit(deleteGroup.id).subscribe(); - tick(); - - expect(service.organisationseinheitState$.value.organisationseinheitItems).not.toContain( - deleteGroup, - ); - })); - }); - - describe('which does not exist', () => { - it('should have no effect', fakeAsync(() => { - service.deleteOrganisationseinheit('unknown-id').subscribe(); - tick(); - - expect(service.organisationseinheitState$.value.organisationseinheitItems).toEqual( - sortedOrganisationseinheitItems, - ); - })); - }); - }); - - describe('set loading until first', () => { - it('should set loading', () => { - service.setLoadingUntilFirst(of(null), () => {}); - - expect(service.organisationseinheitState$.value.loading).toBe(true); - }); - - it('should unset loading', fakeAsync(() => { - service.setLoadingUntilFirst(of(null), () => {}).subscribe(); - tick(); - - expect(service.organisationseinheitState$.value.loading).toBe(false); - })); - - it('should emit loading before first and emit loading after first', () => { - const delayedNull = cold('-a|', { a: null }); - - const progressObservable = service.setLoadingUntilFirst(delayedNull, () => {}); - - expect(progressObservable).toBeObservable(cold('a(b|)', { a: true, b: false })); - }); - - it('should call tap function', fakeAsync(() => { - const tapFunction: jest.Mock = jest.fn(); - const value: string = 'abc'; - const delayedNull: Observable<string> = of(value); - - service.setLoadingUntilFirst(delayedNull, tapFunction).subscribe(); - tick(); - - expect(tapFunction).toHaveBeenCalledWith(value); - })); - }); - - describe('get organisationseinheit items', () => { - it('should return items of state', () => { - const organisationseinheitItems: Organisationseinheit[] = [ - createOrganisationseinheit(), - createOrganisationseinheit(), - ]; - service.getOrganisationseinheitState = jest - .fn() - .mockReturnValue(singleCold(createOrganisationseinheitState(organisationseinheitItems))); - - const itemsObservable: Observable<Organisationseinheit[]> = - service.getOrganisationseinheitItems(); - expect(itemsObservable).toBeObservable(singleCold(organisationseinheitItems)); - }); - }); -}); diff --git a/alfa-client/libs/admin/settings/src/lib/user/user.service.ts b/alfa-client/libs/admin/settings/src/lib/user/user.service.ts deleted file mode 100644 index 9ec08995ed49a91e48c044690c9770f121fcf9a5..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/user/user.service.ts +++ /dev/null @@ -1,143 +0,0 @@ -import { Injectable } from '@angular/core'; -import { BehaviorSubject, Observable, first, map, startWith, tap } from 'rxjs'; -import { Organisationseinheit, OrganisationseinheitState } from './user.model'; -import { UserRepository } from './user.repository.service'; - -@Injectable({ - providedIn: 'root', -}) -export class UserService { - readonly organisationseinheitState$: BehaviorSubject<OrganisationseinheitState> = - new BehaviorSubject({ - organisationseinheitItems: [], - loading: false, - updateRequired: true, - }); - - constructor(private userRepository: UserRepository) {} - - public saveOrganisationseinheit(organisationseinheit: Organisationseinheit): Observable<boolean> { - return this.setLoadingUntilFirst( - this.userRepository.saveOrganisationseinheit(organisationseinheit), - () => { - this.updateExistingOrganisationseinheit(organisationseinheit); - }, - ); - } - - private updateExistingOrganisationseinheit(organisationseinheit: Organisationseinheit): void { - this.setOrganisationseinheit([ - organisationseinheit, - ...this.organisationseinheitState$.value.organisationseinheitItems.filter( - (otherOrganisationseinheit: Organisationseinheit) => - otherOrganisationseinheit.id !== organisationseinheit.id, - ), - ]); - } - - public createOrganisationseinheit( - name: string, - organisationseinheitIds: string[], - ): Observable<boolean> { - return this.setLoadingUntilFirst( - this.userRepository.createOrganisationseinheit(name, organisationseinheitIds), - (organisationseinheit: Organisationseinheit) => { - this.addOrganisationseinheit(organisationseinheit); - }, - ); - } - - public deleteOrganisationseinheit(id: string): Observable<boolean> { - return this.setLoadingUntilFirst(this.userRepository.deleteOrganisationseinheit(id), () => - this.removeOrganisationseinheit(id), - ); - } - - private removeOrganisationseinheit(id: string): void { - this.setOrganisationseinheit( - this.organisationseinheitState$.value.organisationseinheitItems.filter( - (organisationseinheit: Organisationseinheit) => organisationseinheit.id !== id, - ), - ); - } - - setLoadingUntilFirst<T>( - action: Observable<T>, - tapFunction: (value: T) => void, - ): Observable<boolean> { - this.setLoading(); - - return action.pipe( - first(), - tap(tapFunction), - tap(() => this.setLoading(false)), - map(() => this.organisationseinheitState$.value.loading), - startWith(this.organisationseinheitState$.value.loading), - ); - } - - private addOrganisationseinheit(organisationseinheit: Organisationseinheit): void { - this.setOrganisationseinheit([ - ...this.organisationseinheitState$.value.organisationseinheitItems, - organisationseinheit, - ]); - } - - setOrganisationseinheit(organisationseinheitItems: Organisationseinheit[]): void { - this.organisationseinheitState$.next({ - ...this.organisationseinheitState$.value, - organisationseinheitItems: this.sortedOrganisationseinheitItems(organisationseinheitItems), - }); - } - - private sortedOrganisationseinheitItems( - organisationseinheitItems: Organisationseinheit[], - ): Organisationseinheit[] { - return [...organisationseinheitItems].sort((a, b) => a.name.localeCompare(b.name)); - } - - public getOrganisationseinheitState(): Observable<OrganisationseinheitState> { - return this.organisationseinheitState$.pipe(tap(() => this.updateIfRequired())); - } - - updateIfRequired(): void { - if (this.isUpdateRequired(this.organisationseinheitState$.value)) { - this.updateOrganisationseinheitItems().pipe(first()).subscribe(); - } - } - - private isUpdateRequired(state: OrganisationseinheitState): boolean { - return state.updateRequired && !state.loading; - } - - updateOrganisationseinheitItems(): Observable<Organisationseinheit[]> { - this.setLoading(); - - return this.userRepository.findOrganisationseinheitItems().pipe( - tap(() => this.setUpdateRequired(false)), - tap((organisationseinheitItems: Organisationseinheit[]) => - this.setOrganisationseinheit(organisationseinheitItems), - ), - ); - } - - setUpdateRequired(updateRequired: boolean = true) { - this.organisationseinheitState$.next({ - ...this.organisationseinheitState$.value, - updateRequired, - }); - } - - setLoading(loading: boolean = true): void { - this.organisationseinheitState$.next({ - ...this.organisationseinheitState$.value, - loading, - }); - } - - public getOrganisationseinheitItems(): Observable<Organisationseinheit[]> { - return this.getOrganisationseinheitState().pipe( - map((state: OrganisationseinheitState) => state.organisationseinheitItems), - ); - } -} diff --git a/alfa-client/libs/admin/settings/src/lib/user/user.util.spec.ts b/alfa-client/libs/admin/settings/src/lib/user/user.util.spec.ts index 7c0a60daa8b3f7e03fc2b974ada2d7b4ae2f4d13..7ede2e6daccb6281372e0f3a161fed776447c8bb 100644 --- a/alfa-client/libs/admin/settings/src/lib/user/user.util.spec.ts +++ b/alfa-client/libs/admin/settings/src/lib/user/user.util.spec.ts @@ -1,22 +1,21 @@ -import { createOrganisationseinheitError } from '../../../test/user/user'; -import { OrganisationseinheitError, OrganisationseinheitErrorType } from './user.model'; -import { KEYCLOAK_ERROR_MESSAGES, getOrganisationseinheitErrorMessage } from './user.util'; +import { createUser } from '../../../test/user/user'; +import { User } from './user.model'; +import { sortUsersByLastName } from './user.util'; -describe('get organisationseinheit error message', () => { - it('should map known error message', () => { - const nameConflictError: OrganisationseinheitError = createOrganisationseinheitError( - OrganisationseinheitErrorType.NAME_CONFLICT, - ); - const expectedMessage: string = KEYCLOAK_ERROR_MESSAGES[nameConflictError.errorType]; +describe('user util', () => { + describe('sort users by last name', () => { + const users: User[] = [ + { ...createUser(), lastName: 'Müller' }, + { ...createUser(), lastName: 'Schmidt' }, + { ...createUser(), lastName: 'Anders' }, + ]; - const message: string = getOrganisationseinheitErrorMessage(nameConflictError); - expect(message).toEqual(expectedMessage); - }); - - it('should map unknown error message to empty string', () => { - const nameConflictError: OrganisationseinheitError = createOrganisationseinheitError(null); + it('shoud sort users by last name alphabetically ', () => { + const sortedUsers: User[] = sortUsersByLastName(users); - const message: string = getOrganisationseinheitErrorMessage(nameConflictError); - expect(message).toEqual(''); + expect(sortedUsers[0].lastName).toBe('Anders'); + expect(sortedUsers[1].lastName).toBe('Müller'); + expect(sortedUsers[2].lastName).toBe('Schmidt'); + }); }); }); diff --git a/alfa-client/libs/admin/settings/src/lib/user/user.util.ts b/alfa-client/libs/admin/settings/src/lib/user/user.util.ts index 2a1da4ffbdac3353761518988c9c112cbc450ca1..f801d3276c4ce3cdf05b67ab9412bcda0dde7fcd 100644 --- a/alfa-client/libs/admin/settings/src/lib/user/user.util.ts +++ b/alfa-client/libs/admin/settings/src/lib/user/user.util.ts @@ -1,19 +1,5 @@ -import { OrganisationseinheitError, OrganisationseinheitErrorType } from './user.model'; +import { User } from './user.model'; -export const KEYCLOAK_ERROR_MESSAGES: { [type: string]: string } = { - [OrganisationseinheitErrorType.NAME_CONFLICT]: 'Der Name exisitert bereits.', - [OrganisationseinheitErrorType.NAME_MISSING]: 'Bitte den Namen angeben.', - [OrganisationseinheitErrorType.ID_MISSING]: - 'Bitte mindestens eine Organisationseinheit ID angeben.', -}; - -export const KEYCLOAK_CREATE_GROUPS_ERROR_STATUS: { - [status: number]: OrganisationseinheitErrorType; -} = { - 409: OrganisationseinheitErrorType.NAME_CONFLICT, - 400: OrganisationseinheitErrorType.NAME_MISSING, -}; - -export function getOrganisationseinheitErrorMessage(error: OrganisationseinheitError): string { - return KEYCLOAK_ERROR_MESSAGES[error.errorType] ?? ''; +export function sortUsersByLastName(users: User[]): User[] { + return users.sort((a, b) => (a.lastName ?? '').localeCompare(b.lastName ?? '')); } diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user.service.spec.ts b/alfa-client/libs/admin/settings/src/lib/users-roles/user.service.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..fbc8a861f16886d2e481d220281bfca7c01b03db --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/users-roles/user.service.spec.ts @@ -0,0 +1,37 @@ +import { mock, Mock, useFromMock } from '@alfa-client/test-utils'; +import { fakeAsync, tick } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { createUser } from '../../../test/user/user'; +import { User } from '../user/user.model'; +import { UserRepository } from '../user/user.repository.service'; +import * as UserUtil from '../user/user.util'; +import { UserService } from './user.service'; + +describe('UserService', () => { + let service: UserService; + let repository: Mock<UserRepository>; + + const user: User = createUser(); + + beforeEach(() => { + repository = { ...mock(UserRepository), getUsers: jest.fn().mockReturnValue(of([user])) }; + service = new UserService(useFromMock(repository)); + }); + + describe('getItemsFromKeycloak', () => { + it('should call getUsers from userRepository', () => { + service.getItemsFromKeycloak(); + + expect(repository.getUsers).toHaveBeenCalled(); + }); + + it('should call sortUsersByLastName', fakeAsync(() => { + const sortUsersByLastNameSpy: jest.SpyInstance<User[]> = jest.spyOn(UserUtil, 'sortUsersByLastName'); + + service.getItemsFromKeycloak().subscribe(); + tick(); + + expect(sortUsersByLastNameSpy).toHaveBeenCalled(); + })); + }); +}); diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user.service.ts b/alfa-client/libs/admin/settings/src/lib/users-roles/user.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..83c56cc41ce3f12ec58f542164a9a113c19b75ef --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/users-roles/user.service.ts @@ -0,0 +1,31 @@ +import { Injectable } from '@angular/core'; +import { map, Observable } from 'rxjs'; +import { KeycloakResourceService } from '../user/keycloak.resource.service'; +import { User } from '../user/user.model'; +import { UserRepository } from '../user/user.repository.service'; +import { sortUsersByLastName } from '../user/user.util'; + +@Injectable({ + providedIn: 'root', +}) +export class UserService extends KeycloakResourceService<User> { + constructor(private userRepository: UserRepository) { + super(); + } + + getItemsFromKeycloak(): Observable<User[]> { + return this.userRepository.getUsers().pipe(map(sortUsersByLastName)); + } + + createInKeycloak(item: Partial<User>): Observable<User> { + throw new Error('Method not implemented.'); + } + + saveInKeycloak(item: User): Observable<void> { + throw new Error('Method not implemented.'); + } + + deleteInKeycloak(id: string): Observable<void> { + throw new Error('Method not implemented.'); + } +} diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.html b/alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.html new file mode 100644 index 0000000000000000000000000000000000000000..09160afabe086d514782957cb31784a715e747f1 --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.html @@ -0,0 +1,51 @@ +<h1 class="heading-1">Benutzer & Rollen</h1> +<ods-button-with-spinner text="Benutzer hinzufügen" class="py-8" dataTestId="add-user-button" /> +<ods-list *ngIf="users$ | async as users"> + <ods-list-item *ngFor="let user of users.resource" [path]="user.username"> + <div class="flex-1 basis-1/2"> + <div class="mb-2 flex flex-wrap items-center gap-3"> + <h3 class="text-md font-semibold">{{ user | toUserName }}</h3> + <dl class="flex flex-wrap gap-2"> + <dt class="sr-only">Rollen:</dt> + <dd + *ngFor="let role of user.roles" + class="inline-flex flex-shrink-0 items-center rounded-full bg-green-50 px-1.5 py-0.5 text-sm font-medium text-green-700 ring-1 ring-inset ring-green-600/20" + > + {{ role }} + </dd> + </dl> + </div> + + <dl> + <div *ngIf="user.email" class="flex items-center gap-2"> + <dt> + <span class="sr-only">E-Mail:</span> + <ods-mailbox-icon size="small" class="stroke-gray-600" /> + </dt> + <dd>{{ user.email }}</dd> + </div> + <div class="flex items-center gap-2"> + <dt> + <span class="sr-only">Benutzername:</span> + <ods-person-icon /> + </dt> + <dd>{{ user.username }}</dd> + </div> + </dl> + </div> + + <div class="flex-1 basis-1/2"> + <h4 class="sr-only">Zuständige Stellen</h4> + + <ng-container *ngIf="user.groups.length > 0; else noGroups"> + <ul class="list-outside list-disc pl-4"> + <ng-container *ngFor="let group of user.groups | slice: 0 : GROUPS_TO_DISPLAY"> + <li>{{ group }}</li> + </ng-container> + </ul> + <p *ngIf="user.groups.length > GROUPS_TO_DISPLAY" class="pl-4 text-gray-500">und {{ user.groups.length - 3 }} weitere</p> + </ng-container> + <ng-template #noGroups>keine zuständige Stelle zugewiesen</ng-template> + </div> + </ods-list-item> +</ods-list> diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.spec.ts b/alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..49182ee84673fa793f0cbe0ee14eb694ab6f2319 --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.spec.ts @@ -0,0 +1,47 @@ +import { Mock, mock } from '@alfa-client/test-utils'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ButtonWithSpinnerComponent } from '@ods/component'; +import { MailboxIconComponent, PersonIconComponent } from '@ods/system'; +import { MockComponent, MockPipe } from 'ng-mocks'; +import { ToUserNamePipe } from '../user/to-user-name.pipe'; +import { UserService } from './user.service'; +import { UsersRolesComponent } from './users-roles.component'; + +describe('UsersRolesComponent', () => { + let component: UsersRolesComponent; + let fixture: ComponentFixture<UsersRolesComponent>; + + const userService: Mock<UserService> = { + ...mock(UserService), + get: jest.fn(), + }; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [UsersRolesComponent], + providers: [{ provide: UserService, useValue: userService }], + imports: [ + MockComponent(ButtonWithSpinnerComponent), + MockComponent(MailboxIconComponent), + MockComponent(PersonIconComponent), + MockPipe(ToUserNamePipe), + ], + }).compileComponents(); + + fixture = TestBed.createComponent(UsersRolesComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + describe('template', () => { + it('should create', () => { + expect(component).toBeTruthy(); + }); + + describe('constructor', () => { + it('should call userService.get', () => { + expect(userService.get).toHaveBeenCalled(); + }); + }); + }); +}); diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.ts b/alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..46003c627d6c355241eba06d875e49d4d7df0f2b --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.ts @@ -0,0 +1,18 @@ +import { StateResource } from '@alfa-client/tech-shared'; +import { Component } from '@angular/core'; +import { Observable } from 'rxjs'; +import { User } from '../user/user.model'; +import { UserService } from './user.service'; + +@Component({ + selector: 'admin-users-roles', + templateUrl: './users-roles.component.html', +}) +export class UsersRolesComponent { + public users$: Observable<StateResource<User[]>>; + public readonly GROUPS_TO_DISPLAY = 3; + + constructor(private userService: UserService) { + this.users$ = this.userService.get(); + } +} diff --git a/alfa-client/libs/admin/settings/test/organisations-einheit/organisations-einheit.ts b/alfa-client/libs/admin/settings/test/organisations-einheit/organisations-einheit.ts new file mode 100644 index 0000000000000000000000000000000000000000..754f117bada7606e59729a5a9a98028078e3e82b --- /dev/null +++ b/alfa-client/libs/admin/settings/test/organisations-einheit/organisations-einheit.ts @@ -0,0 +1,38 @@ +import { faker } from '@faker-js/faker'; +import { times } from 'lodash-es'; +import { toResource } from '../../../../tech-shared/test/resource'; +import { + AdminOrganisationsEinheit, + AdminOrganisationsEinheitListResource, + AdminOrganisationsEinheitResource, + AdminOrganisationsEinheitSyncResult, +} from '../../src'; +import { OrganisationsEinheitListLinkRel } from '../../src/lib/organisationseinheit/organisations-einheit.linkrel'; + +export function createAdminOrganisationsEinheit(): AdminOrganisationsEinheit { + return { + name: faker.lorem.word(), + organisationsEinheitId: faker.lorem.word(), + syncResult: AdminOrganisationsEinheitSyncResult.OK, + settings: { + signatur: faker.lorem.words(5), + }, + }; +} + +export function createAdminOrganisationsEinheitResource(linkRel: string[] = []): AdminOrganisationsEinheitResource { + return toResource(createAdminOrganisationsEinheit(), linkRel); +} + +export function createAdminOrganisationsEinheitResources(linkRelations: string[] = []): AdminOrganisationsEinheitResource[] { + return times(10, () => toResource(createAdminOrganisationsEinheit(), [...linkRelations])); +} + +export function createAdminOrganisationsEinheitListResource( + resources?: AdminOrganisationsEinheitResource[], + linkRelations: string[] = [], +): AdminOrganisationsEinheitListResource { + return toResource({}, [...linkRelations], { + [OrganisationsEinheitListLinkRel.LIST]: resources ? resources : createAdminOrganisationsEinheitResources(), + }); +} diff --git a/alfa-client/libs/admin/settings/test/postfach/postfach.ts b/alfa-client/libs/admin/settings/test/postfach/postfach.ts index 16dd988db914e892938d5b93ae63ede3055beead..4933569403d77d91b6be35083a35325e1e5c7614 100644 --- a/alfa-client/libs/admin/settings/test/postfach/postfach.ts +++ b/alfa-client/libs/admin/settings/test/postfach/postfach.ts @@ -1,4 +1,4 @@ -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { toResource } from 'libs/tech-shared/test/resource'; import { SettingItemResource, SettingName } from '../../src/lib/admin-settings.model'; import { @@ -10,11 +10,11 @@ import { export function createPostfach(): Postfach { return { absender: { - name: faker.name.lastName(), + name: faker.person.lastName(), anschrift: faker.internet.email(), - dienst: faker.name.jobTitle(), - mandant: faker.name.jobArea(), - gemeindeschluessel: faker.address.countryCode(), + dienst: faker.person.jobTitle(), + mandant: faker.person.jobArea(), + gemeindeschluessel: faker.location.countryCode(), }, signatur: faker.lorem.lines(3), }; @@ -33,7 +33,7 @@ export function createPostfachResource(): PostfachResource { export function createSettingItemResource(): SettingItemResource { return toResource({ - name: faker.random.word(), + name: faker.word.sample(), settingBody: {}, }); } diff --git a/alfa-client/libs/admin/settings/test/user/user.ts b/alfa-client/libs/admin/settings/test/user/user.ts index 090c729b48a5a0bea9f37ea4ec790793bf49b1f5..54f6d5fdf7881a193372e1e78641b8b35feeb25d 100644 --- a/alfa-client/libs/admin/settings/test/user/user.ts +++ b/alfa-client/libs/admin/settings/test/user/user.ts @@ -1,57 +1,14 @@ import { faker } from '@faker-js/faker'; -import { NetworkError } from '@keycloak/keycloak-admin-client'; -import type GroupRepresentation from '@keycloak/keycloak-admin-client/lib/defs/groupRepresentation'; -import { - Organisationseinheit, - OrganisationseinheitError, - OrganisationseinheitErrorType, - OrganisationseinheitState, -} from '../../src/lib/user/user.model'; +import { User } from '../../src/lib/user/user.model'; -export function createOrganisationseinheit(): Organisationseinheit { +export function createUser(): User { return { - id: faker.random.alphaNumeric(16), - name: faker.name.jobTitle(), - organisationseinheitIds: [faker.random.numeric(10), faker.random.numeric(10)], + id: faker.word.sample(), + username: faker.word.sample(), + firstName: faker.person.firstName(), + lastName: faker.person.lastName(), + email: faker.internet.email(), + roles: null, + groups: null, }; } - -export function createGroupRepresentation( - organisationseinheit: Organisationseinheit = createOrganisationseinheit(), -): GroupRepresentation { - return { - id: organisationseinheit.id, - name: organisationseinheit.name, - attributes: { - organisationseinheitId: organisationseinheit.organisationseinheitIds, - }, - }; -} - -export function createOrganisationseinheitState( - organisationseinheitItems: Organisationseinheit[] = [createOrganisationseinheit()], -): OrganisationseinheitState { - return { - organisationseinheitItems: organisationseinheitItems, - loading: false, - updateRequired: false, - }; -} - -export function createOrganisationseinheitError( - errorType: OrganisationseinheitErrorType = OrganisationseinheitErrorType.NAME_MISSING, -): OrganisationseinheitError { - return { - errorType, - detail: faker.lorem.sentence(10), - }; -} - -export function createNetworkError(status: number, errorMessage: string | undefined): NetworkError { - return new NetworkError('...', { - response: { status } as Response, - responseData: { - errorMessage, - }, - }); -} diff --git a/alfa-client/libs/api-root-shared/src/lib/api-root.linkrel.ts b/alfa-client/libs/api-root-shared/src/lib/api-root.linkrel.ts index e4d1553f981c6a4947b1151afcbd7af95636ba47..231bfb91adcc94fad96c9727f06992960376dc3f 100644 --- a/alfa-client/libs/api-root-shared/src/lib/api-root.linkrel.ts +++ b/alfa-client/libs/api-root-shared/src/lib/api-root.linkrel.ts @@ -60,4 +60,6 @@ export enum ApiRootLinkRel { UNASSIGNED_ZU_LOESCHEN = 'vorgaenge_zu_loeschen_unassigned', DOCUMENTATIONS = 'documentations', HINTS = 'hints', + RESOURCE = 'resource', + ORGANISATIONS_EINHEIT = 'organisationsEinheiten', } diff --git a/alfa-client/libs/api-root-shared/src/lib/api-root.repository.spec.ts b/alfa-client/libs/api-root-shared/src/lib/api-root.repository.spec.ts index 3b30e8efe741daad610b87bdcf675682074e82de..fa64d1fa28872de60d66dd176d18c3968e37def3 100644 --- a/alfa-client/libs/api-root-shared/src/lib/api-root.repository.spec.ts +++ b/alfa-client/libs/api-root-shared/src/lib/api-root.repository.spec.ts @@ -61,7 +61,7 @@ describe('ApiRoot Repository', () => { describe('downloadToken', () => { const resource: ApiRootResource = createApiRootResource(); - const uri: ResourceUri = faker.random.word(); + const uri: ResourceUri = faker.word.sample(); beforeEach(() => { resourceWrapper.post.mockReturnValue(hot('a', { a: resource })); diff --git a/alfa-client/libs/authentication/src/lib/http-unauthorized.interceptor.ts b/alfa-client/libs/authentication/src/lib/http-unauthorized.interceptor.ts index 0ce59555abc0f54337de086fdc3111c474935252..73f4170f2adcfc6c3da3795607d1b98e191f36f7 100644 --- a/alfa-client/libs/authentication/src/lib/http-unauthorized.interceptor.ts +++ b/alfa-client/libs/authentication/src/lib/http-unauthorized.interceptor.ts @@ -1,10 +1,4 @@ -import { - HttpErrorResponse, - HttpEvent, - HttpHandler, - HttpInterceptor, - HttpRequest, -} from '@angular/common/http'; +import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { isUnauthorized } from '@alfa-client/tech-shared'; import { EMPTY, Observable } from 'rxjs'; diff --git a/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.spec.ts b/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.spec.ts index 6fba31ec8361dbb715becde41d640de4cc06b93e..4eb95c74da90efb1b6c868d02960da27fe81d28c 100644 --- a/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.spec.ts +++ b/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.spec.ts @@ -27,7 +27,7 @@ import { VorgangWithEingangResource, } from '@alfa-client/vorgang-shared'; import { fakeAsync, tick } from '@angular/core/testing'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { ResourceUri, getUrl } from '@ngxp/rest'; import { cold } from 'jest-marbles'; import { CommandLinkRel } from 'libs/command-shared/src/lib/command.linkrel'; diff --git a/alfa-client/libs/bescheid-shared/src/test/bescheid.ts b/alfa-client/libs/bescheid-shared/src/test/bescheid.ts index cb90fd0966330bd6c9ed0f0fbeb39d7e4e7967af..102eca31e88008f7a9c17584a761377462f6e649 100644 --- a/alfa-client/libs/bescheid-shared/src/test/bescheid.ts +++ b/alfa-client/libs/bescheid-shared/src/test/bescheid.ts @@ -1,5 +1,5 @@ import { createStateResource, StateResource } from '@alfa-client/tech-shared'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { toResource } from 'libs/tech-shared/test/resource'; import { times } from 'lodash-es'; import { createApiError } from '../../../tech-shared/test/error'; @@ -37,7 +37,7 @@ export function createBescheidStateResource( } export function createUploadFileInProgress(): UploadFileInProgress { - return { loading: true, fileName: faker.name.firstName(), error: createApiError() }; + return { loading: true, fileName: faker.person.firstName(), error: createApiError() }; } export function createBescheidResources(linkRelations: string[] = []): BescheidResource[] { diff --git a/alfa-client/libs/bescheid-shared/src/test/document.ts b/alfa-client/libs/bescheid-shared/src/test/document.ts index 38fa7d022856d8c7ad33c9a5ba88ba4f0b4a3737..77dab61965cfdb0ce5a743ab98a694be9a3716d2 100644 --- a/alfa-client/libs/bescheid-shared/src/test/document.ts +++ b/alfa-client/libs/bescheid-shared/src/test/document.ts @@ -1,4 +1,4 @@ -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { toResource } from 'libs/tech-shared/test/resource'; import { Document, DocumentResource } from '../lib/document.model'; @@ -6,7 +6,7 @@ export function createDocument(): Document { return { type: 'Bescheid', fileId: faker.internet.url(), - nachrichtSubject: faker.datatype.string(10), + nachrichtSubject: faker.string.sample(10), nachrichtText: faker.lorem.text(), }; } diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-list-in-vorgang-container/bescheid-list-in-vorgang/document-in-bescheid-container/document-in-bescheid-container.component.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-list-in-vorgang-container/bescheid-list-in-vorgang/document-in-bescheid-container/document-in-bescheid-container.component.spec.ts index 6d4e62565ec7e6fa5e80f193cfa8c8c56fc2885d..3b677261a1d38d10b7a203a94f65602ca2ba1afe 100644 --- a/alfa-client/libs/bescheid/src/lib/bescheid-list-in-vorgang-container/bescheid-list-in-vorgang/document-in-bescheid-container/document-in-bescheid-container.component.spec.ts +++ b/alfa-client/libs/bescheid/src/lib/bescheid-list-in-vorgang-container/bescheid-list-in-vorgang/document-in-bescheid-container/document-in-bescheid-container.component.spec.ts @@ -14,7 +14,7 @@ import { notExistsAsHtmlElement, } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { ResourceUri, getUrl } from '@ngxp/rest'; import { AttachmentWrapperComponent } from '@ods/system'; import { DocumentLinkRel } from 'libs/bescheid-shared/src/lib/document.linkrel'; diff --git a/alfa-client/libs/binary-file-shared/src/lib/+state/binary-file.actions.ts b/alfa-client/libs/binary-file-shared/src/lib/+state/binary-file.actions.ts index 2c9c5ea0a0d6eb67717fa9e059d157ac9dd8cdff..6692c2ed1fdb93a45ed4b7fbf11b2015241f9c3b 100644 --- a/alfa-client/libs/binary-file-shared/src/lib/+state/binary-file.actions.ts +++ b/alfa-client/libs/binary-file-shared/src/lib/+state/binary-file.actions.ts @@ -22,16 +22,15 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { ApiError, ApiErrorAction, TypedActionCreatorWithProps } from '@alfa-client/tech-shared'; -import { createAction, props } from '@ngrx/store'; -import { TypedAction } from '@ngrx/store/src/models'; +import { createAction, props, Action } from '@ngrx/store'; import { Resource, ResourceUri } from '@ngxp/rest'; import { BinaryFileListResource } from '../binary-file.model'; export interface DownloadBinaryFileAsPdfAction { uri: ResourceUri; fileName: string; - successAction: () => TypedAction<string>; - failureAction: (apiError: ApiError) => ApiErrorAction & TypedAction<string>; + successAction: () => Action<string>; + failureAction: (apiError: ApiError) => ApiErrorAction & Action<string>; } export const downloadPdf: TypedActionCreatorWithProps<DownloadBinaryFileAsPdfAction> = createAction( @@ -57,8 +56,8 @@ export interface LoadBinaryFileListProps { linkRel: string; successAction: ( binaryFileList: BinaryFileListResource, - ) => LoadBinaryFileListSuccessProps & TypedAction<string>; - failureAction: (apiError: ApiError) => ApiErrorAction & TypedAction<string>; + ) => LoadBinaryFileListSuccessProps & Action<string>; + failureAction: (apiError: ApiError) => ApiErrorAction & Action<string>; } export const loadBinaryFileList: TypedActionCreatorWithProps<LoadBinaryFileListProps> = diff --git a/alfa-client/libs/binary-file-shared/src/lib/+state/binary-file.effects.spec.ts b/alfa-client/libs/binary-file-shared/src/lib/+state/binary-file.effects.spec.ts index e2116027b706b34555fecda3fb6f409db18d605f..860ee1e77b96d49209b601c57b3a7fdbb63aff89 100644 --- a/alfa-client/libs/binary-file-shared/src/lib/+state/binary-file.effects.spec.ts +++ b/alfa-client/libs/binary-file-shared/src/lib/+state/binary-file.effects.spec.ts @@ -22,7 +22,7 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { TestBed } from '@angular/core/testing'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { ApiError, ApiErrorAction, @@ -32,7 +32,6 @@ import { import { Mock, mock } from '@alfa-client/test-utils'; import { provideMockActions } from '@ngrx/effects/testing'; import { Action, createAction, props } from '@ngrx/store'; -import { TypedAction } from '@ngrx/store/src/models'; import { provideMockStore } from '@ngrx/store/testing'; import { Resource, ResourceUri } from '@ngxp/rest'; import { hot } from 'jasmine-marbles'; @@ -79,7 +78,7 @@ describe('BinaryFileEffects', () => { describe('downloadPdf', () => { const uri: ResourceUri = faker.internet.url(); - const fileName: string = faker.random.alphaNumeric(); + const fileName: string = faker.string.alphanumeric(); const fileData: Blob = new Blob(); const downloadAsPdfSuccess: TypedActionCreator = createAction('[Test Action] Download Success'); @@ -88,7 +87,7 @@ describe('BinaryFileEffects', () => { props<ApiErrorAction>(), ); - const downloadPdfAction: DownloadBinaryFileAsPdfAction & TypedAction<string> = + const downloadPdfAction: DownloadBinaryFileAsPdfAction & Action<string> = BinaryFileActions.downloadPdf({ successAction: downloadAsPdfSuccess, failureAction: (apiError) => downloadAsPdfFailure({ apiError }), @@ -130,7 +129,7 @@ describe('BinaryFileEffects', () => { }); describe('saveAsPdf', () => { - const fileName: string = faker.random.alphaNumeric(); + const fileName: string = faker.string.alphanumeric(); const fileData: Blob = new Blob(); it('should save file', () => { @@ -157,7 +156,7 @@ describe('BinaryFileEffects', () => { props<ApiErrorAction>(), ); - const loadBinaryFileListAction: LoadBinaryFileListProps & TypedAction<string> = + const loadBinaryFileListAction: LoadBinaryFileListProps & Action<string> = BinaryFileActions.loadBinaryFileList({ resource, linkRel, diff --git a/alfa-client/libs/binary-file-shared/src/lib/binary-file.repository.spec.ts b/alfa-client/libs/binary-file-shared/src/lib/binary-file.repository.spec.ts index 071f1a03138fae246311d53e97be4819b029127b..028ec248d97981464a4458538f6a6d25d798bab0 100644 --- a/alfa-client/libs/binary-file-shared/src/lib/binary-file.repository.spec.ts +++ b/alfa-client/libs/binary-file-shared/src/lib/binary-file.repository.spec.ts @@ -237,7 +237,7 @@ describe('BinaryFileRepository', () => { const blob: Blob = createBlob(); const uri: ResourceUri = faker.internet.url(); - const blobWithFileName: BlobWithFileName = { blob, fileName: faker.name.firstName() }; + const blobWithFileName: BlobWithFileName = { blob, fileName: faker.person.firstName() }; beforeEach(() => { httpClient.get.mockReturnValue(hot('a', { a: blob })); @@ -280,7 +280,7 @@ describe('BinaryFileRepository', () => { }); function buildExpectedRequestOptions(): HttpHeaders { - return new HttpHeaders().set(HttpHeader.ACCEPT, ContentType.APPLICATION_OCTET_STREAM); + return new HttpHeaders().set(HttpHeader.ACCEPT, ContentType.APPLICATION_ZIP); } }); }); diff --git a/alfa-client/libs/binary-file-shared/src/lib/binary-file.repository.ts b/alfa-client/libs/binary-file-shared/src/lib/binary-file.repository.ts index ef0c1b6762f8ac2177282f36b07d64879f8aac7c..945b8662db1b3076489002a6bdfac68bdcff320e 100644 --- a/alfa-client/libs/binary-file-shared/src/lib/binary-file.repository.ts +++ b/alfa-client/libs/binary-file-shared/src/lib/binary-file.repository.ts @@ -104,7 +104,7 @@ export class BinaryFileRepository { buildRequestOptionsForArchive(): GetRequestOptions { let headers = new HttpHeaders(); - headers = headers.set(HttpHeader.ACCEPT, ContentType.APPLICATION_OCTET_STREAM); + headers = headers.set(HttpHeader.ACCEPT, ContentType.APPLICATION_ZIP); return <GetRequestOptions>{ headers, responseType: 'blob' as 'json', observe: 'response' }; } } diff --git a/alfa-client/libs/binary-file-shared/src/lib/binary-file.service.spec.ts b/alfa-client/libs/binary-file-shared/src/lib/binary-file.service.spec.ts index 328960de1f9b9a87f8442595ad8b609f339f9da8..c3536d30c6c38c0455ffb0ede8bdd4d590129a00 100644 --- a/alfa-client/libs/binary-file-shared/src/lib/binary-file.service.spec.ts +++ b/alfa-client/libs/binary-file-shared/src/lib/binary-file.service.spec.ts @@ -170,7 +170,7 @@ describe('BinaryFileService', () => { }); describe('save data', () => { - const fileName: string = faker.random.word(); + const fileName: string = faker.word.sample(); const blobWithFileName: BlobWithFileName = { blob, fileName }; describe('on existing response', () => { diff --git a/alfa-client/libs/binary-file-shared/test/binary-file.ts b/alfa-client/libs/binary-file-shared/test/binary-file.ts index c776a49793353a3674e60ed40431df7392091509..d7fbf7501f2448359d869e39c81687bc5a07d6b1 100644 --- a/alfa-client/libs/binary-file-shared/test/binary-file.ts +++ b/alfa-client/libs/binary-file-shared/test/binary-file.ts @@ -35,7 +35,7 @@ import { times } from 'lodash-es'; export function createBinaryFile(): BinaryFile { return { name: faker.lorem.slug(10), - size: faker.datatype.number({ min: 1024, max: 10000000000 }), + size: faker.number.int({ min: 1024, max: 10000000000 }), contentType: faker.lorem.word(), }; } diff --git a/alfa-client/libs/binary-file/src/lib/binary-file-container/binary-file/binary-file.component.spec.ts b/alfa-client/libs/binary-file/src/lib/binary-file-container/binary-file/binary-file.component.spec.ts index 91e0d49606a54669edc018f3e97350e240de02b2..71ac18ea0d9a32c233e569e156de351e082ecbe5 100644 --- a/alfa-client/libs/binary-file/src/lib/binary-file-container/binary-file/binary-file.component.spec.ts +++ b/alfa-client/libs/binary-file/src/lib/binary-file-container/binary-file/binary-file.component.spec.ts @@ -126,7 +126,7 @@ describe('BinaryFileComponent', () => { describe('create download url', () => { it('should return a DownloadURL', () => { - component.downloadToken = { token: faker.random.alpha({ count: 30 }) } as ApiDownloadToken; + component.downloadToken = { token: faker.string.alpha({ length: 30 }) } as ApiDownloadToken; const pattern = `^[^:]+:[^:]+:http.+\\?token=${component.downloadToken.token}$`; const regex = new RegExp(pattern); diff --git a/alfa-client/libs/binary-file/src/lib/binary-file-uri-container/binary-file-uri-container.component.spec.ts b/alfa-client/libs/binary-file/src/lib/binary-file-uri-container/binary-file-uri-container.component.spec.ts index 0080d68eb8b8c6ae8a425340e1422b5055e21fa6..0e8d4361b590b95aa3dada4d1826a0e1f0dae7b4 100644 --- a/alfa-client/libs/binary-file/src/lib/binary-file-uri-container/binary-file-uri-container.component.spec.ts +++ b/alfa-client/libs/binary-file/src/lib/binary-file-uri-container/binary-file-uri-container.component.spec.ts @@ -12,7 +12,7 @@ import { notExistsAsHtmlElement, } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { ResourceUri } from '@ngxp/rest'; import { createBinaryFileResource } from 'libs/binary-file-shared/test/binary-file'; import { getDataTestClassOf } from 'libs/tech-shared/test/data-test'; diff --git a/alfa-client/libs/binary-file/src/lib/binary-file2-container/binary-file2/binary-file2.component.spec.ts b/alfa-client/libs/binary-file/src/lib/binary-file2-container/binary-file2/binary-file2.component.spec.ts index 025f5b604dcfc341937ffa720714c59e449143db..b91e41ed98b9e831f57dc3680b0fee671f3ad3a8 100644 --- a/alfa-client/libs/binary-file/src/lib/binary-file2-container/binary-file2/binary-file2.component.spec.ts +++ b/alfa-client/libs/binary-file/src/lib/binary-file2-container/binary-file2/binary-file2.component.spec.ts @@ -77,7 +77,7 @@ describe('BinaryFile2Component', () => { describe('create download url', () => { it('should return a DownloadURL', () => { - component.downloadToken = { token: faker.random.alpha({ count: 30 }) } as ApiDownloadToken; + component.downloadToken = { token: faker.string.alpha({ length: 30 }) } as ApiDownloadToken; const pattern = `^[^:]+:[^:]+:http.+\\?token=${component.downloadToken.token}$`; const regex = new RegExp(pattern); diff --git a/alfa-client/libs/binary-file/src/lib/download-archive-file-button-container/download-archive-file-button-container.component.spec.ts b/alfa-client/libs/binary-file/src/lib/download-archive-file-button-container/download-archive-file-button-container.component.spec.ts index 6b711f3a245de614563b6d1914ea0dbd09a0a73b..751832c784174cb67c9c12339c18983dcaef25a1 100644 --- a/alfa-client/libs/binary-file/src/lib/download-archive-file-button-container/download-archive-file-button-container.component.spec.ts +++ b/alfa-client/libs/binary-file/src/lib/download-archive-file-button-container/download-archive-file-button-container.component.spec.ts @@ -1,7 +1,7 @@ import { BinaryFileService } from '@alfa-client/binary-file-shared'; import { Mock, dispatchEventFromFixture, mock } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { DownloadButtonComponent } from '@ods/component'; import { getDataTestClassOf } from 'libs/tech-shared/test/data-test'; import { MockComponent } from 'ng-mocks'; diff --git a/alfa-client/libs/binary-file/src/lib/vertical-binary-file-list/vertical-binary-file-list.component.spec.ts b/alfa-client/libs/binary-file/src/lib/vertical-binary-file-list/vertical-binary-file-list.component.spec.ts index f0ec5b2c573b721bfd18afefde63750a310a0310..e831dc910c9511042f5815841f6851560121323a 100644 --- a/alfa-client/libs/binary-file/src/lib/vertical-binary-file-list/vertical-binary-file-list.component.spec.ts +++ b/alfa-client/libs/binary-file/src/lib/vertical-binary-file-list/vertical-binary-file-list.component.spec.ts @@ -30,7 +30,7 @@ import { } from '@alfa-client/test-utils'; import { SpinnerComponent } from '@alfa-client/ui'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { ResourceUri } from '@ngxp/rest'; import { AttachmentHeaderComponent, AttachmentWrapperComponent } from '@ods/system'; import { diff --git a/alfa-client/libs/collaboration-shared/src/index.ts b/alfa-client/libs/collaboration-shared/src/index.ts index cd761bf34a9d3d1e63337bb36e92e56977ef0b1e..58859f091df38c372a92ca17a76e2719ebf244d3 100644 --- a/alfa-client/libs/collaboration-shared/src/index.ts +++ b/alfa-client/libs/collaboration-shared/src/index.ts @@ -1,6 +1,3 @@ export * from './lib/collaboration-shared.module'; export * from './lib/collaboration.linkrel'; export * from './lib/collaboration.model'; -export * from './lib/organisations-einheit.linkrel'; -export * from './lib/organisations-einheit.model'; -export * from './lib/organisations-einheit.service'; diff --git a/alfa-client/libs/collaboration-shared/src/lib/collaboration-shared.module.ts b/alfa-client/libs/collaboration-shared/src/lib/collaboration-shared.module.ts index b4a95fe57bb26a6a1fe9cd8de98e6c2422b0033b..70457bcd41fd9709c9169744074b3b199859feb6 100644 --- a/alfa-client/libs/collaboration-shared/src/lib/collaboration-shared.module.ts +++ b/alfa-client/libs/collaboration-shared/src/lib/collaboration-shared.module.ts @@ -2,32 +2,18 @@ import { ResourceRepository } from '@alfa-client/tech-shared'; import { VorgangService } from '@alfa-client/vorgang-shared'; import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; -import { - CollaborationListResourceService, - createCollaborationListResourceService, -} from './collaboration-list-resource.service'; +import { CollaborationListResourceService, createCollaborationListResourceService } from './collaboration-list-resource.service'; import { CollaborationService } from './collaboration.service'; -import { - OrganisationsEinheitResourceSearchService, - createOrganisationsEinheitResourceSearchService, -} from './organisations-einheit-resource-search.service'; -import { OrganisationsEinheitService } from './organisations-einheit.service'; @NgModule({ imports: [CommonModule], providers: [ CollaborationService, - OrganisationsEinheitService, { provide: CollaborationListResourceService, useFactory: createCollaborationListResourceService, deps: [ResourceRepository, VorgangService], }, - { - provide: OrganisationsEinheitResourceSearchService, - useFactory: createOrganisationsEinheitResourceSearchService, - deps: [ResourceRepository, VorgangService], - }, ], }) export class CollaborationSharedModule {} diff --git a/alfa-client/libs/collaboration-shared/src/lib/collaboration.model.ts b/alfa-client/libs/collaboration-shared/src/lib/collaboration.model.ts index 0e5a678748f2ac3076ff3a7cd94f60d5bf69eae0..5cb0cb4409c1bf54e9447410b2e7bc02b54f1b30 100644 --- a/alfa-client/libs/collaboration-shared/src/lib/collaboration.model.ts +++ b/alfa-client/libs/collaboration-shared/src/lib/collaboration.model.ts @@ -5,6 +5,7 @@ export interface Collaboration { titel: string; anfrage: string; zustaendigeStelle: ResourceUri; + collaborationLevel?: number; } export interface CollaborationResource extends Collaboration, Resource, ListItemResource {} diff --git a/alfa-client/libs/collaboration-shared/src/lib/collaboration.service.spec.ts b/alfa-client/libs/collaboration-shared/src/lib/collaboration.service.spec.ts index d5cdf3d7a38229b500188f238c7ed137ac9a475b..3ad660af24dfd54fbe6a5b7368f2fe66e064aa4d 100644 --- a/alfa-client/libs/collaboration-shared/src/lib/collaboration.service.spec.ts +++ b/alfa-client/libs/collaboration-shared/src/lib/collaboration.service.spec.ts @@ -4,10 +4,7 @@ import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; import { createCommandResource } from 'libs/command-shared/test/command'; import { singleColdCompleted } from 'libs/tech-shared/test/marbles'; import { Observable, of } from 'rxjs'; -import { - createCollaboration, - createCollaborationListResource, -} from '../../../collaboration-shared/test/collaboration'; +import { createCollaboration, createCollaborationListResource } from '../../../collaboration-shared/test/collaboration'; import { CollaborationListResourceService } from './collaboration-list-resource.service'; import { CollaborationListLinkRel } from './collaboration.linkrel'; import { Collaboration, CollaborationListResource } from './collaboration.model'; @@ -22,8 +19,7 @@ describe('CollaborationService', () => { let commandService: Mock<CommandService>; const collaborationListResource: CollaborationListResource = createCollaborationListResource(); - const collaborationStateListResource: StateResource<CollaborationListResource> = - createStateResource(collaborationListResource); + const collaborationStateListResource: StateResource<CollaborationListResource> = createStateResource(collaborationListResource); beforeEach(() => { listService = mock(CollaborationListResourceService); @@ -50,47 +46,170 @@ describe('CollaborationService', () => { }); }); - describe('is request form visible', () => { - it('should return value', (done) => { - service.showRequestForm$.next(false); + describe('organisationsEinheit', () => { + describe('is form visible', () => { + it('should return value', (done) => { + service.showOrganisationsEinheitForm$.next(true); - service.isRequestFormVisible().subscribe((isVisible: boolean) => { - expect(isVisible).toBeTruthy(); - done(); + service.isOrganisationsEinheitFormVisible().subscribe((isVisible: boolean) => { + expect(isVisible).toBeTruthy(); + done(); + }); + + service.isOrganisationsEinheitFormVisible(); + }); + }); + + describe('show formular', () => { + it('should set form visibility to true', () => { + service.showOrganisationsEinheitForm$.next(false); + + service.showOrganisationsEinheitForm(); + + expect(service.showOrganisationsEinheitForm$.value).toBeTruthy(); }); - service.showRequestForm(); + it('should disable externeFachstelle button visibility', () => { + service.showExterneFachstelleAnfrageButton$.next(true); + + service.showOrganisationsEinheitForm(); + + expect(service.showExterneFachstelleAnfrageButton$.value).toBeFalsy(); + }); + + it('should set collaborationLevel to 1', () => { + service.showOrganisationsEinheitForm(); + + expect(service.collaborationLevel$.value).toEqual(1); + }); }); - }); - describe('show anfrage formular', () => { - it('should set "showRequestForm" to true', () => { - service.showRequestForm$.next(false); + describe('hide formular', () => { + it('should set "showRequestForm" to false', () => { + service.showOrganisationsEinheitForm$.next(true); + + service.hideOrganisationseinheitForm(); - service.showRequestForm(); + expect(service.showOrganisationsEinheitForm$.value).toBeFalsy(); + }); - expect(service.showRequestForm$.value).toBeTruthy(); + it('should enable externe fachstelle button visibility', () => { + service.showExterneFachstelleAnfrageButton$.next(false); + + service.hideOrganisationseinheitForm(); + + expect(service.showExterneFachstelleAnfrageButton$.value).toBeTruthy(); + }); + + it('should reset collaborationLevel to null', () => { + service.collaborationLevel$.next(1); + + service.hideOrganisationseinheitForm(); + + expect(service.collaborationLevel$.value).toBeNull(); + }); + }); + + describe('show anfrage button', () => { + it('should return value', (done) => { + service.showOrganisationsEinheitAnfrageButton$.next(true); + + service.showOrganisationsEinheitAnfrageButton().subscribe((isVisible: boolean) => { + expect(isVisible).toBeTruthy(); + done(); + }); + + service.showOrganisationsEinheitAnfrageButton(); + }); }); }); - describe('hide anfrage formular', () => { - it('should set "showRequestForm" to false', () => { - service.showRequestForm$.next(true); + describe('externe fachstelle', () => { + describe('is form visible', () => { + it('should return value', (done) => { + service.showExterneFachstelleForm$.next(true); + + service.isExterneFachstelleFormVisible().subscribe((isVisible: boolean) => { + expect(isVisible).toBeTruthy(); + done(); + }); + + service.isExterneFachstelleFormVisible(); + }); + }); + + describe('show formular', () => { + it('should set form visbility to true', () => { + service.showExterneFachstelleForm$.next(false); + + service.showExterneFachstelleForm(); + + expect(service.showExterneFachstelleForm$.value).toBeTruthy(); + }); + + it('should disable organisationsEinheit button visibility', () => { + service.showOrganisationsEinheitAnfrageButton$.next(true); + + service.showExterneFachstelleForm(); + + expect(service.showOrganisationsEinheitAnfrageButton$.value).toBeFalsy(); + }); + + it('should set collaborationLevel to 4', () => { + service.showExterneFachstelleForm(); + + expect(service.collaborationLevel$.value).toEqual(4); + }); + }); + + describe('hide formular', () => { + it('should set "showRequestForm" to false', () => { + service.showExterneFachstelleForm$.next(true); - service.hideRequestForm(); + service.hideExterneFachstelleForm(); - expect(service.showRequestForm$.value).toBeFalsy(); + expect(service.showExterneFachstelleForm$.value).toBeFalsy(); + }); + + it('should enable organisationsEinheit button visibility', () => { + service.showOrganisationsEinheitAnfrageButton$.next(false); + + service.hideExterneFachstelleForm(); + + expect(service.showOrganisationsEinheitAnfrageButton$.value).toBeTruthy(); + }); + + it('should reset collaborationLevel to null', () => { + service.collaborationLevel$.next(4); + + service.hideExterneFachstelleForm(); + + expect(service.collaborationLevel$.value).toBeNull(); + }); + }); + + describe('show anfrage button', () => { + it('should return value', (done) => { + service.showExterneFachstelleAnfrageButton$.next(true); + + service.showExterneFachstelleAnfrageButton().subscribe((isVisible: boolean) => { + expect(isVisible).toBeTruthy(); + done(); + }); + + service.showExterneFachstelleAnfrageButton(); + }); }); }); describe('create', () => { const collaborationListResource: CollaborationListResource = createCollaborationListResource(); - const commandStateResource: StateResource<CommandResource> = - createStateResource(createCommandResource()); + const commandStateResource: StateResource<CommandResource> = createStateResource(createCommandResource()); const collaboration: Collaboration = createCollaboration(); beforeEach(() => { commandService.createCommandByProps.mockReturnValue(of(commandStateResource)); + service.collaborationLevel$.next(1); }); it('should call command service', () => { @@ -101,17 +220,14 @@ describe('CollaborationService', () => { resource: collaborationListResource, command: { order: CommandOrder.CREATE_COLLABORATION_REQUEST, - body: collaboration, + body: { ...collaboration, collaborationLevel: 1 }, }, snackBarMessage: 'Die Zuarbeit wurde angefragt.', }); }); it('should return value', () => { - const created$: Observable<StateResource<CommandResource>> = service.create( - collaborationListResource, - collaboration, - ); + const created$: Observable<StateResource<CommandResource>> = service.create(collaborationListResource, collaboration); expect(created$).toBeObservable(singleColdCompleted(commandStateResource)); }); diff --git a/alfa-client/libs/collaboration-shared/src/lib/collaboration.service.ts b/alfa-client/libs/collaboration-shared/src/lib/collaboration.service.ts index f210a1133df3293f5bfa9da2bdd97fe033af1f6c..5e3a4bddae93de877988896523a9132e676c6575 100644 --- a/alfa-client/libs/collaboration-shared/src/lib/collaboration.service.ts +++ b/alfa-client/libs/collaboration-shared/src/lib/collaboration.service.ts @@ -8,7 +8,16 @@ import { Collaboration, CollaborationListResource } from './collaboration.model' @Injectable() export class CollaborationService { - showRequestForm$: BehaviorSubject<boolean> = new BehaviorSubject(false); + showExterneFachstelleForm$: BehaviorSubject<boolean> = new BehaviorSubject(false); + showExterneFachstelleAnfrageButton$: BehaviorSubject<boolean> = new BehaviorSubject(true); + + showOrganisationsEinheitForm$: BehaviorSubject<boolean> = new BehaviorSubject(false); + showOrganisationsEinheitAnfrageButton$: BehaviorSubject<boolean> = new BehaviorSubject(true); + + collaborationLevel$: BehaviorSubject<number> = new BehaviorSubject(null); + + readonly ORGANISATIONS_EINHEIT_COLLABORATION_LEVEL: number = 1; + readonly EXTERNE_FACHSTELLE_COLLABORATION_LEVEL: number = 4; constructor( private listService: CollaborationListResourceService, @@ -19,16 +28,44 @@ export class CollaborationService { return this.listService.getList(); } - public isRequestFormVisible(): Observable<boolean> { - return this.showRequestForm$.asObservable(); + public isOrganisationsEinheitFormVisible(): Observable<boolean> { + return this.showOrganisationsEinheitForm$.asObservable(); + } + + public showOrganisationsEinheitForm(): void { + this.showOrganisationsEinheitForm$.next(true); + this.showExterneFachstelleAnfrageButton$.next(false); + this.collaborationLevel$.next(this.ORGANISATIONS_EINHEIT_COLLABORATION_LEVEL); + } + + public hideOrganisationseinheitForm(): void { + this.showOrganisationsEinheitForm$.next(false); + this.showExterneFachstelleAnfrageButton$.next(true); + this.collaborationLevel$.next(null); + } + + public showOrganisationsEinheitAnfrageButton(): Observable<boolean> { + return this.showOrganisationsEinheitAnfrageButton$.asObservable(); + } + + public isExterneFachstelleFormVisible(): Observable<boolean> { + return this.showExterneFachstelleForm$.asObservable(); + } + + public showExterneFachstelleForm(): void { + this.showExterneFachstelleForm$.next(true); + this.showOrganisationsEinheitAnfrageButton$.next(false); + this.collaborationLevel$.next(this.EXTERNE_FACHSTELLE_COLLABORATION_LEVEL); } - public showRequestForm(): void { - this.showRequestForm$.next(true); + public hideExterneFachstelleForm(): void { + this.showExterneFachstelleForm$.next(false); + this.showOrganisationsEinheitAnfrageButton$.next(true); + this.collaborationLevel$.next(null); } - public hideRequestForm(): void { - this.showRequestForm$.next(false); + public showExterneFachstelleAnfrageButton(): Observable<boolean> { + return this.showExterneFachstelleAnfrageButton$.asObservable(); } public create( @@ -40,7 +77,7 @@ export class CollaborationService { resource: listResource, command: { order: CommandOrder.CREATE_COLLABORATION_REQUEST, - body: collaborationRequest, + body: { ...collaborationRequest, collaborationLevel: this.collaborationLevel$.value }, }, snackBarMessage: 'Die Zuarbeit wurde angefragt.', }); diff --git a/alfa-client/libs/collaboration-shared/src/lib/organisations-einheit.service.spec.ts b/alfa-client/libs/collaboration-shared/src/lib/organisations-einheit.service.spec.ts deleted file mode 100644 index f264006658fe044ac57ad9a2926427046ba6f029..0000000000000000000000000000000000000000 --- a/alfa-client/libs/collaboration-shared/src/lib/organisations-einheit.service.spec.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { StateResource, createStateResource } from '@alfa-client/tech-shared'; -import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; -import faker from '@faker-js/faker'; -import { Observable, of } from 'rxjs'; -import { singleColdCompleted } from '../../../tech-shared/test/marbles'; -import { - createOrganisationsEinheitListResource, - createOrganisationsEinheitResource, -} from '../../test/organisations-einheit'; -import { OrganisationsEinheitResourceSearchService } from './organisations-einheit-resource-search.service'; -import { - OrganisationsEinheitListResource, - OrganisationsEinheitResource, -} from './organisations-einheit.model'; -import { OrganisationsEinheitService } from './organisations-einheit.service'; - -jest.mock('./organisations-einheit-resource-search.service'); - -describe('OrganisationsEinheitService', () => { - let service: OrganisationsEinheitService; - - let searchService: Mock<OrganisationsEinheitResourceSearchService>; - - const listResource: OrganisationsEinheitListResource = createOrganisationsEinheitListResource(); - const listStateResource: StateResource<OrganisationsEinheitListResource> = - createStateResource(listResource); - - beforeEach(() => { - searchService = mock(OrganisationsEinheitResourceSearchService); - - service = new OrganisationsEinheitService(useFromMock(searchService)); - }); - - describe('get search result list', () => { - it('should call search service', () => { - service.getSearchResultList(); - - expect(searchService.getResultList).toHaveBeenCalled(); - }); - - it('should return result', (done) => { - searchService.getResultList.mockReturnValue(of(listStateResource)); - - service - .getSearchResultList() - .subscribe((result: StateResource<OrganisationsEinheitListResource>) => { - expect(result).toBe(listStateResource); - done(); - }); - }); - }); - - describe('search', () => { - const searchBy: string = faker.random.word(); - - it('should call search service with search string', () => { - service.search(searchBy); - - expect(searchService.search).toHaveBeenCalledWith(searchBy); - }); - }); - - describe('clear search result', () => { - it('should call search service', () => { - service.clearSearchResult(); - - expect(searchService.clearResultList).toHaveBeenCalledWith(); - }); - }); - - describe('get selected result', () => { - const organisationsEinheitResource: OrganisationsEinheitResource = - createOrganisationsEinheitResource(); - - beforeEach(() => { - searchService.getSelectedResult.mockReturnValue(of(organisationsEinheitResource)); - }); - - it('should call service', () => { - service.getSelectedResult(); - - expect(searchService.getSelectedResult).toHaveBeenCalled(); - }); - - it('should return result', () => { - const selectedResult$: Observable<OrganisationsEinheitResource> = service.getSelectedResult(); - - expect(selectedResult$).toBeObservable(singleColdCompleted(organisationsEinheitResource)); - }); - }); - - describe('select search result', () => { - const organisationsEinheitResource: OrganisationsEinheitResource = - createOrganisationsEinheitResource(); - - it('should call service', () => { - service.selectSearchResult(organisationsEinheitResource); - - expect(searchService.selectResult).toHaveBeenCalledWith(organisationsEinheitResource); - }); - }); - - describe('clear selected result', () => { - it('should call service', () => { - service.clearSelectedResult(); - - expect(searchService.clearSelectedResult).toHaveBeenCalled(); - }); - }); -}); diff --git a/alfa-client/libs/collaboration-shared/src/lib/organisations-einheit.service.ts b/alfa-client/libs/collaboration-shared/src/lib/organisations-einheit.service.ts deleted file mode 100644 index 495c115446391b8d126feef91bc6b02ad9c24134..0000000000000000000000000000000000000000 --- a/alfa-client/libs/collaboration-shared/src/lib/organisations-einheit.service.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { StateResource } from '@alfa-client/tech-shared'; -import { Injectable } from '@angular/core'; -import { Observable } from 'rxjs'; -import { OrganisationsEinheitResourceSearchService } from './organisations-einheit-resource-search.service'; -import { - OrganisationsEinheitListResource, - OrganisationsEinheitResource, -} from './organisations-einheit.model'; - -@Injectable() -export class OrganisationsEinheitService { - constructor(private readonly searchService: OrganisationsEinheitResourceSearchService) {} - - public getSearchResultList(): Observable<StateResource<OrganisationsEinheitListResource>> { - return this.searchService.getResultList(); - } - - public search(searchBy: string): void { - this.searchService.search(searchBy); - } - - public clearSearchResult(): void { - this.searchService.clearResultList(); - } - - public getSelectedResult(): Observable<OrganisationsEinheitResource> { - return this.searchService.getSelectedResult(); - } - - public selectSearchResult(organisationsEinheitResource: OrganisationsEinheitResource): void { - this.searchService.selectResult(organisationsEinheitResource); - } - - public clearSelectedResult(): void { - this.searchService.clearSelectedResult(); - } -} diff --git a/alfa-client/libs/collaboration-shared/test/collaboration.ts b/alfa-client/libs/collaboration-shared/test/collaboration.ts index fef47c56b2280e8cc85ae90773b90ba9d910d868..da923fb34b96e475b692c6212297e6f612f90be6 100644 --- a/alfa-client/libs/collaboration-shared/test/collaboration.ts +++ b/alfa-client/libs/collaboration-shared/test/collaboration.ts @@ -1,37 +1,28 @@ -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { times } from 'lodash-es'; import { LinkRelationName } from '../../tech-shared/src'; import { toResource } from '../../tech-shared/test/resource'; -import { CollaborationListLinkRel, OrganisationsEinheitResource } from '../src'; -import { - Collaboration, - CollaborationListResource, - CollaborationResource, -} from '../src/lib/collaboration.model'; +import { OrganisationsEinheitResource } from '../../zustaendige-stelle-shared/src/lib/organisations-einheit/organisations-einheit.model'; +import { CollaborationListLinkRel } from '../src'; +import { Collaboration, CollaborationListResource, CollaborationResource } from '../src/lib/collaboration.model'; export function createCollaboration(): Collaboration { return { - titel: faker.random.words(2), - anfrage: faker.random.words(10), + titel: faker.word.sample(2), + anfrage: faker.word.sample(10), zustaendigeStelle: faker.internet.url(), }; } -export function createCollaborationResource( - linkRelations: LinkRelationName[] = [], -): CollaborationResource { +export function createCollaborationResource(linkRelations: LinkRelationName[] = []): CollaborationResource { return toResource(createCollaboration(), linkRelations); } -export function createCollaborationResources( - linkRelations: LinkRelationName[] = [], -): OrganisationsEinheitResource[] { +export function createCollaborationResources(linkRelations: LinkRelationName[] = []): OrganisationsEinheitResource[] { return times(10, () => toResource(createCollaborationResource(), [...linkRelations])); } -export function createCollaborationListResource( - linkRelations: LinkRelationName[] = [], -): CollaborationListResource { +export function createCollaborationListResource(linkRelations: LinkRelationName[] = []): CollaborationListResource { return toResource({}, [...linkRelations], { [CollaborationListLinkRel.COLLABORATION_LIST]: createCollaborationResources(), }); diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang-container.component.html b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang-container.component.html index d0d5db82cd5b543c578693ef03c4907a134077f8..3f896b077d98b171d49206be45d866764fc3923f 100644 --- a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang-container.component.html +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang-container.component.html @@ -1,8 +1,6 @@ <alfa-collaboration-in-vorgang - data-test-id="collaboration-in-vorgang" + [vorgang]="vorgang" [collaborationStateListResource]="collaborationStateListResource$ | async" - [isRequestFormVisible]="isRequestFormVisible$ | async" - [organisationsEinheit]="selectedOrganisationsEinheit$ | async" - (hideRequestForm)="hideRequestForm()" - (showRequestForm)="showRequestForm()" + [showOrganisationsEinheitAnfrageButton]="showOrganisationsEinheitAnfrageButton$ | async" + [showExterneFachstelleAnfrageButton]="showExterneFachstelleAnfrageButton$ | async" ></alfa-collaboration-in-vorgang> diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang-container.component.spec.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang-container.component.spec.ts index a5e6e9e22dc4c22f174f59115b1bb954d1addaf3..4543235a339d3c62076e82ead2f770e45f2af46b 100644 --- a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang-container.component.spec.ts +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang-container.component.spec.ts @@ -1,57 +1,39 @@ -import { - CollaborationListResource, - OrganisationsEinheitResource, -} from '@alfa-client/collaboration-shared'; +import { CollaborationListResource } from '@alfa-client/collaboration-shared'; import { StateResource, createStateResource } from '@alfa-client/tech-shared'; -import { Mock, dispatchEventFromFixture, getMockComponent, mock } from '@alfa-client/test-utils'; +import { Mock, getMockComponent, mock } from '@alfa-client/test-utils'; +import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { CollaborationService } from 'libs/collaboration-shared/src/lib/collaboration.service'; -import { OrganisationsEinheitResourceSearchService } from 'libs/collaboration-shared/src/lib/organisations-einheit-resource-search.service'; import { createCollaborationListResource } from 'libs/collaboration-shared/test/collaboration'; -import { createOrganisationsEinheitResource } from 'libs/collaboration-shared/test/organisations-einheit'; -import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; +import { createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang'; import { MockComponent } from 'ng-mocks'; import { of } from 'rxjs'; import { CollaborationInVorgangContainerComponent } from './collaboration-in-vorgang-container.component'; import { CollaborationInVorgangComponent } from './collaboration-in-vorgang/collaboration-in-vorgang.component'; -jest.mock('libs/collaboration-shared/src/lib/organisations-einheit-resource-search.service'); - describe('CollaborationInVorgangContainerComponent', () => { let component: CollaborationInVorgangContainerComponent; let fixture: ComponentFixture<CollaborationInVorgangContainerComponent>; - const collaborationInVorgangComp: string = getDataTestIdOf('collaboration-in-vorgang'); - - const service: Mock<CollaborationService> = { - ...mock(CollaborationService), - isRequestFormVisible: jest.fn().mockReturnValue(of(false)), - }; + let service: Mock<CollaborationService>; - const organisationsEinheitSearchService: Mock<OrganisationsEinheitResourceSearchService> = mock( - OrganisationsEinheitResourceSearchService, - ); + const vorgang: VorgangWithEingangResource = createVorgangWithEingangResource(); beforeEach(async () => { + service = mock(CollaborationService); await TestBed.configureTestingModule({ - declarations: [ - CollaborationInVorgangContainerComponent, - MockComponent(CollaborationInVorgangComponent), - ], + declarations: [CollaborationInVorgangContainerComponent, MockComponent(CollaborationInVorgangComponent)], providers: [ { provide: CollaborationService, useValue: service, }, - { - provide: OrganisationsEinheitResourceSearchService, - useValue: organisationsEinheitSearchService, - }, ], }).compileComponents(); fixture = TestBed.createComponent(CollaborationInVorgangContainerComponent); component = fixture.componentInstance; + component.vorgang = vorgang; fixture.detectChanges(); }); @@ -66,101 +48,62 @@ describe('CollaborationInVorgangContainerComponent', () => { expect(service.getList).toHaveBeenCalled(); }); - it('should call service to get request form visbility', () => { + it('should call service to get organisationsEinheit anfrage button visbility', () => { component.ngOnInit(); - expect(service.isRequestFormVisible).toHaveBeenCalled(); + expect(service.showOrganisationsEinheitAnfrageButton).toHaveBeenCalled(); }); - it('should get selected result', () => { + it('should call service to get externeFachstelle anfrage button visbility', () => { component.ngOnInit(); - expect(organisationsEinheitSearchService.getSelectedResult).toHaveBeenCalled(); + expect(service.showExterneFachstelleAnfrageButton).toHaveBeenCalled(); }); }); - describe('collaboration in vorgang component', () => { - const collaborationListResource: CollaborationListResource = createCollaborationListResource(); - const collaborationStateListResource: StateResource<CollaborationListResource> = - createStateResource(collaborationListResource); - - describe('should be called with', () => { - it('collaboration state list resource', () => { - component.collaborationStateListResource$ = of(collaborationStateListResource); - - fixture.detectChanges(); - - expect(getCollaborationInVorgangComponent().collaborationStateListResource).toBe( - collaborationStateListResource, - ); - }); - - it('is request form visible', () => { - component.isRequestFormVisible$ = of(true); - - fixture.detectChanges(); - - expect(getCollaborationInVorgangComponent().isRequestFormVisible).toBeTruthy(); - }); - - it('organisations einheit', () => { - const organisationsEinheitResource: OrganisationsEinheitResource = - createOrganisationsEinheitResource(); - component.selectedOrganisationsEinheit$ = of(organisationsEinheitResource); + describe('template', () => { + describe('collaboration in vorgang component', () => { + const collaborationListResource: CollaborationListResource = createCollaborationListResource(); + const collaborationStateListResource: StateResource<CollaborationListResource> = + createStateResource(collaborationListResource); - fixture.detectChanges(); + describe('should be called with', () => { + it('vorgang', () => { + component.vorgang = vorgang; - expect(getCollaborationInVorgangComponent().organisationsEinheit).toBe( - organisationsEinheitResource, - ); - }); + fixture.detectChanges(); - function getCollaborationInVorgangComponent(): CollaborationInVorgangComponent { - return getMockComponent<CollaborationInVorgangComponent>( - fixture, - CollaborationInVorgangComponent, - ); - } - }); + expect(getCollaborationInVorgangComponent().vorgang).toBe(vorgang); + }); - it('should call hideRequestForm on output', () => { - component.hideRequestForm = jest.fn(); + it('collaboration state list resource', () => { + component.collaborationStateListResource$ = of(collaborationStateListResource); - dispatchEventFromFixture(fixture, collaborationInVorgangComp, 'hideRequestForm'); + fixture.detectChanges(); - expect(component.hideRequestForm).toHaveBeenCalled(); - }); + expect(getCollaborationInVorgangComponent().collaborationStateListResource).toBe(collaborationStateListResource); + }); - it('should call showRequestForm on output', () => { - component.showRequestForm = jest.fn(); + it('showOrganisationsEinheitAnfrageButton', () => { + component.showOrganisationsEinheitAnfrageButton$ = of(true); - dispatchEventFromFixture(fixture, collaborationInVorgangComp, 'showRequestForm'); + fixture.detectChanges(); - expect(component.showRequestForm).toHaveBeenCalled(); - }); - }); + expect(getCollaborationInVorgangComponent().showOrganisationsEinheitAnfrageButton).toBeTruthy(); + }); - describe('show request form', () => { - it('should call service', () => { - component.showRequestForm(); + it('showExterneFachstelleAnfrageButton', () => { + component.showExterneFachstelleAnfrageButton$ = of(true); - expect(service.showRequestForm).toHaveBeenCalled(); - }); - }); - - describe('hide request form', () => { - it('should call service', () => { - component.hideRequestForm(); - - expect(service.hideRequestForm).toHaveBeenCalled(); - }); - }); + fixture.detectChanges(); - describe('ngOnDestroy', () => { - it('should call service to clear selected result', () => { - component.ngOnDestroy(); + expect(getCollaborationInVorgangComponent().showExterneFachstelleAnfrageButton).toBeTruthy(); + }); - expect(organisationsEinheitSearchService.clearSelectedResult).toHaveBeenCalled(); + function getCollaborationInVorgangComponent(): CollaborationInVorgangComponent { + return getMockComponent<CollaborationInVorgangComponent>(fixture, CollaborationInVorgangComponent); + } + }); }); }); }); diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang-container.component.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang-container.component.ts index 50c5d04bcffdbd5cd7171a14c5f696839b7447ea..bd7530c12154abd88a8bf9ba75d6a3078bc021c1 100644 --- a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang-container.component.ts +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang-container.component.ts @@ -1,40 +1,26 @@ -import { OrganisationsEinheitResource } from '@alfa-client/collaboration-shared'; import { StateResource } from '@alfa-client/tech-shared'; -import { Component, OnDestroy, OnInit } from '@angular/core'; +import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; +import { Component, Input, OnInit } from '@angular/core'; import { CollaborationListResource } from 'libs/collaboration-shared/src/lib/collaboration.model'; import { CollaborationService } from 'libs/collaboration-shared/src/lib/collaboration.service'; -import { OrganisationsEinheitResourceSearchService } from 'libs/collaboration-shared/src/lib/organisations-einheit-resource-search.service'; import { Observable } from 'rxjs'; @Component({ selector: 'alfa-collaboration-in-vorgang-container', templateUrl: './collaboration-in-vorgang-container.component.html', }) -export class CollaborationInVorgangContainerComponent implements OnInit, OnDestroy { +export class CollaborationInVorgangContainerComponent implements OnInit { + @Input() public vorgang: VorgangWithEingangResource; + public collaborationStateListResource$: Observable<StateResource<CollaborationListResource>>; - public isRequestFormVisible$: Observable<boolean>; - public selectedOrganisationsEinheit$: Observable<OrganisationsEinheitResource>; + public showOrganisationsEinheitAnfrageButton$: Observable<boolean>; + public showExterneFachstelleAnfrageButton$: Observable<boolean>; - constructor( - private readonly service: CollaborationService, - private readonly searchService: OrganisationsEinheitResourceSearchService, - ) {} + constructor(private readonly service: CollaborationService) {} ngOnInit(): void { this.collaborationStateListResource$ = this.service.getList(); - this.isRequestFormVisible$ = this.service.isRequestFormVisible(); - this.selectedOrganisationsEinheit$ = this.searchService.getSelectedResult(); - } - - public showRequestForm(): void { - this.service.showRequestForm(); - } - - public hideRequestForm(): void { - this.service.hideRequestForm(); - } - - ngOnDestroy(): void { - this.searchService.clearSelectedResult(); + this.showOrganisationsEinheitAnfrageButton$ = this.service.showOrganisationsEinheitAnfrageButton(); + this.showExterneFachstelleAnfrageButton$ = this.service.showExterneFachstelleAnfrageButton(); } } diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/anfrage-erstellen-button/anfrage-erstellen-button.component.html b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/anfrage-erstellen-button/anfrage-erstellen-button.component.html new file mode 100644 index 0000000000000000000000000000000000000000..75d1ff1c07aa52d92793e99ac30c77acf7d89ddf --- /dev/null +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/anfrage-erstellen-button/anfrage-erstellen-button.component.html @@ -0,0 +1,6 @@ +<ods-button + variant="outline" + text="Neue Anfrage erstellen" + dataTestId="anfrage-erstellen-button" + (clickEmitter)="clickEmitter.emit()" +/> diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/anfrage-erstellen-button/anfrage-erstellen-button.component.spec.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/anfrage-erstellen-button/anfrage-erstellen-button.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..6f1c7fbe7d49d18bc41aa4d24b0fb2c541f5815d --- /dev/null +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/anfrage-erstellen-button/anfrage-erstellen-button.component.spec.ts @@ -0,0 +1,38 @@ +import { dispatchEventFromFixture } from '@alfa-client/test-utils'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ButtonComponent, UsersIconComponent } from '@ods/system'; +import { getDataTestIdAttributeOf } from 'libs/tech-shared/test/data-test'; +import { MockComponent } from 'ng-mocks'; +import { AnfrageErstellenButtonComponent } from './anfrage-erstellen-button.component'; + +describe('AnfrageErstellenButtonComponent', () => { + let component: AnfrageErstellenButtonComponent; + let fixture: ComponentFixture<AnfrageErstellenButtonComponent>; + + const button: string = getDataTestIdAttributeOf('anfrage-erstellen-button'); + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [AnfrageErstellenButtonComponent], + imports: [MockComponent(ButtonComponent), MockComponent(UsersIconComponent)], + }).compileComponents(); + + fixture = TestBed.createComponent(AnfrageErstellenButtonComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + describe('click on button', () => { + it('should emit', () => { + component.clickEmitter.emit = jest.fn(); + + dispatchEventFromFixture(fixture, button, 'clickEmitter'); + + expect(component.clickEmitter.emit).toHaveBeenCalled(); + }); + }); +}); diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/anfrage-erstellen-button/anfrage-erstellen-button.component.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/anfrage-erstellen-button/anfrage-erstellen-button.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..780d5d212884c43db0e423d91f85cf509f966509 --- /dev/null +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/anfrage-erstellen-button/anfrage-erstellen-button.component.ts @@ -0,0 +1,9 @@ +import { Component, EventEmitter, Output } from '@angular/core'; + +@Component({ + selector: 'alfa-anfrage-erstellen-button', + templateUrl: './anfrage-erstellen-button.component.html', +}) +export class AnfrageErstellenButtonComponent { + @Output() public clickEmitter: EventEmitter<void> = new EventEmitter(); +} diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/collaboration-in-vorgang.component.html b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/collaboration-in-vorgang.component.html index 733601490e198e7d93d37626f597974081b8367a..dc9ab9a02ccaaa690f1fe6c3d20eb27246766cdd 100644 --- a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/collaboration-in-vorgang.component.html +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/collaboration-in-vorgang.component.html @@ -1,38 +1,22 @@ -<ng-container - *ngIf=" - collaborationStateListResource.resource - | hasLink: collaborationListLinkRel.CREATE_COLLABORATION_REQUEST - " -> - <ng-template #anfrageErstellenButton> - <ods-button - variant="outline" - text="Anfrage erstellen" - dataTestId="anfrage-erstellen-button" - (clickEmitter)="showRequestForm.emit()" - > - <ods-collaboration-icon icon /> - </ods-button> - </ng-template> - - <ng-container *ngIf="isRequestFormVisible; else anfrageErstellenButton"> - <alfa-collaboration-request-form - data-test-id="collaboration-request-form" +<ng-container *ngIf="collaborationStateListResource.resource | hasLink: collaborationListLinkRel.CREATE_COLLABORATION_REQUEST"> + <div + [ngClass]="{ + 'flex flex-1 flex-col gap-6 xl:flex-row': showOrganisationsEinheitAnfrageButton && showExterneFachstelleAnfrageButton, + }" + > + <alfa-organisations-einheit-container + class="flex flex-1 flex-col" + *ngIf="showOrganisationsEinheitAnfrageButton" + data-test-id="organisations-einheit-container" + [vorgang]="vorgang" [collaborationListResource]="collaborationStateListResource.resource" - (hide)="hideRequestForm.emit()" - (showResult)="setCollaboration($event)" - ></alfa-collaboration-request-form> - </ng-container> -</ng-container> -<ng-container *ngIf="collaboration"> - <div data-test-id="collaboration-request-result"> - <div class="flex items-center gap-3"> - <ods-office-icon size="large" class="fill-text" /> - <alfa-organisations-einheit - [organisationsEinheitResource]="organisationsEinheit" - ></alfa-organisations-einheit> - </div> - <h4 class="my-6 text-xl font-medium">{{ collaboration.titel }}</h4> - <p class="text-base">{{ collaboration.anfrage }}</p> + ></alfa-organisations-einheit-container> + <alfa-externe-fachstelle-container + class="flex flex-1 flex-col" + *ngIf="showExterneFachstelleAnfrageButton" + data-test-id="externe-fachstelle-container" + [vorgang]="vorgang" + [collaborationListResource]="collaborationStateListResource.resource" + ></alfa-externe-fachstelle-container> </div> </ng-container> diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/collaboration-in-vorgang.component.spec.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/collaboration-in-vorgang.component.spec.ts index 5b17cd273cc3b503a6accb79219bb149c351041a..ba3837f2c82b22b05299684c891cf0686b9de804 100644 --- a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/collaboration-in-vorgang.component.spec.ts +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/collaboration-in-vorgang.component.spec.ts @@ -1,54 +1,39 @@ -import { - Collaboration, - CollaborationListLinkRel, - CollaborationListResource, -} from '@alfa-client/collaboration-shared'; +import { CollaborationListLinkRel, CollaborationListResource } from '@alfa-client/collaboration-shared'; import { HasLinkPipe, createStateResource } from '@alfa-client/tech-shared'; -import { - EventData, - dispatchEventFromFixture, - existsAsHtmlElement, - getMockComponent, - notExistsAsHtmlElement, - triggerEvent, -} from '@alfa-client/test-utils'; +import { existsAsHtmlElement, getMockComponent, notExistsAsHtmlElement } from '@alfa-client/test-utils'; +import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { ButtonComponent, CollaborationIconComponent, OfficeIconComponent } from '@ods/system'; -import { - createCollaboration, - createCollaborationListResource, -} from 'libs/collaboration-shared/test/collaboration'; -import { getDataTestIdAttributeOf, getDataTestIdOf } from 'libs/tech-shared/test/data-test'; +import { createCollaborationListResource } from 'libs/collaboration-shared/test/collaboration'; +import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; +import { createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang'; import { MockComponent } from 'ng-mocks'; -import { CollaborationRequestFormComponent } from '../collaboration-request-form/collaboration-request-form.component'; -import { OrganisationsEinheitComponent } from '../collaboration-request-form/organisations-einheit-container/organisations-einheit/organisations-einheit.component'; import { CollaborationInVorgangComponent } from './collaboration-in-vorgang.component'; +import { ExterneFachstelleContainerComponent } from './externe-fachstelle-container/externe-fachstelle-container.component'; +import { OrganisationsEinheitContainerComponent } from './organisations-einheit-container/organisations-einheit-container.component'; describe('CollaborationInVorgangComponent', () => { let component: CollaborationInVorgangComponent; let fixture: ComponentFixture<CollaborationInVorgangComponent>; - const anfrageErstellenButton: string = getDataTestIdAttributeOf('anfrage-erstellen-button'); - const collaborationRequestForm: string = getDataTestIdOf('collaboration-request-form'); - const collaborationRequestResult: string = getDataTestIdOf('collaboration-request-result'); + const externeFachstelleContainer: string = getDataTestIdOf('externe-fachstelle-container'); + const organisationsEinheitContainer: string = getDataTestIdOf('organisations-einheit-container'); const collaborationListResource: CollaborationListResource = createCollaborationListResource(); + const vorgang: VorgangWithEingangResource = createVorgangWithEingangResource(); beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [ CollaborationInVorgangComponent, HasLinkPipe, - MockComponent(ButtonComponent), - MockComponent(CollaborationRequestFormComponent), - MockComponent(CollaborationIconComponent), - MockComponent(OfficeIconComponent), - MockComponent(OrganisationsEinheitComponent), + MockComponent(OrganisationsEinheitContainerComponent), + MockComponent(ExterneFachstelleContainerComponent), ], }).compileComponents(); fixture = TestBed.createComponent(CollaborationInVorgangComponent); component = fixture.componentInstance; + component.vorgang = vorgang; component.collaborationStateListResource = createStateResource(collaborationListResource); fixture.detectChanges(); }); @@ -57,133 +42,125 @@ describe('CollaborationInVorgangComponent', () => { expect(component).toBeTruthy(); }); - describe('if create collaboration request link exists', () => { - const collaborationListResourceWithLink: CollaborationListResource = - createCollaborationListResource([CollaborationListLinkRel.CREATE_COLLABORATION_REQUEST]); - beforeEach(() => { - component.collaborationStateListResource = createStateResource( - collaborationListResourceWithLink, - ); - fixture.detectChanges(); - }); + describe('template', () => { + describe('on createCollaborationRequest link', () => { + describe('exists', () => { + const collaborationListResourceWithLink: CollaborationListResource = createCollaborationListResource([ + CollaborationListLinkRel.CREATE_COLLABORATION_REQUEST, + ]); - describe('anfrage erstellen button', () => { - describe('on request form visibility false', () => { beforeEach(() => { - component.isRequestFormVisible = false; - }); - - it('should be shown', () => { + component.collaborationStateListResource = createStateResource(collaborationListResourceWithLink); fixture.detectChanges(); - - existsAsHtmlElement(fixture, anfrageErstellenButton); }); - it('should call service on click', () => { - fixture.detectChanges(); - const showRequestFormSpy: jest.SpyInstance = (component.showRequestForm.emit = jest.fn()); + describe('and organisations einheit', () => { + describe('is visible', () => { + beforeEach(() => { + component.showOrganisationsEinheitAnfrageButton = true; + fixture.detectChanges(); + }); + + it('should show component', () => { + existsAsHtmlElement(fixture, organisationsEinheitContainer); + }); + + describe('component should be called with', () => { + it('vorgang', () => { + const comp: OrganisationsEinheitContainerComponent = getMockComponent<OrganisationsEinheitContainerComponent>( + fixture, + OrganisationsEinheitContainerComponent, + ); + + expect(comp.vorgang).toBe(vorgang); + }); + it('collaborationListResource', () => { + const comp: OrganisationsEinheitContainerComponent = getMockComponent<OrganisationsEinheitContainerComponent>( + fixture, + OrganisationsEinheitContainerComponent, + ); + + expect(comp.collaborationListResource).toBe(collaborationListResourceWithLink); + }); + }); + }); - dispatchEventFromFixture(fixture, anfrageErstellenButton, 'clickEmitter'); + describe('is not visible', () => { + beforeEach(() => { + component.showOrganisationsEinheitAnfrageButton = false; + fixture.detectChanges(); + }); - expect(showRequestFormSpy).toHaveBeenCalled(); + it('should hide component', () => { + notExistsAsHtmlElement(fixture, organisationsEinheitContainer); + }); + }); }); - }); - it('should be hidden if request form visibility is true', () => { - component.isRequestFormVisible = true; + describe('and externe fachstelle', () => { + describe('is visible', () => { + beforeEach(() => { + component.showExterneFachstelleAnfrageButton = true; + fixture.detectChanges(); + }); + + it('should show component', () => { + existsAsHtmlElement(fixture, externeFachstelleContainer); + }); + + describe('component should be called with', () => { + it('vorgang', () => { + const comp: ExterneFachstelleContainerComponent = getMockComponent<ExterneFachstelleContainerComponent>( + fixture, + ExterneFachstelleContainerComponent, + ); + + expect(comp.vorgang).toBe(vorgang); + }); + it('collaborationListResource', () => { + const comp: ExterneFachstelleContainerComponent = getMockComponent<ExterneFachstelleContainerComponent>( + fixture, + ExterneFachstelleContainerComponent, + ); + + expect(comp.collaborationListResource).toBe(collaborationListResourceWithLink); + }); + }); + }); - fixture.detectChanges(); + describe('is not visible', () => { + beforeEach(() => { + component.showExterneFachstelleAnfrageButton = false; + fixture.detectChanges(); + }); - notExistsAsHtmlElement(fixture, anfrageErstellenButton); + it('should hide component', () => { + notExistsAsHtmlElement(fixture, externeFachstelleContainer); + }); + }); + }); }); - }); - describe('zustaendige stelle', () => { - describe('on request form visibility true', () => { + describe('not exists', () => { + const collaborationListResource: CollaborationListResource = createCollaborationListResource(); + beforeEach(() => { - component.isRequestFormVisible = true; - }); - it('should be shown', () => { + component.collaborationStateListResource = createStateResource(collaborationListResource); fixture.detectChanges(); - - existsAsHtmlElement(fixture, collaborationRequestForm); }); - describe('component', () => { - it('should call service on hideFormular output', () => { - fixture.detectChanges(); - const hideRequestFormSpy: jest.SpyInstance = (component.hideRequestForm.emit = - jest.fn()); - - dispatchEventFromFixture(fixture, collaborationRequestForm, 'hide'); - - expect(hideRequestFormSpy).toHaveBeenCalled(); - }); - - it('should call set collaboration on showResult output', () => { - fixture.detectChanges(); - component.setCollaboration = jest.fn(); - const collaboration: Collaboration = createCollaboration(); - - const eventData: EventData<CollaborationInVorgangComponent> = { - fixture, - elementSelector: collaborationRequestForm, - name: 'showResult', - data: collaboration, - }; - triggerEvent(eventData); - - expect(component.setCollaboration).toHaveBeenCalledWith(collaboration); - }); - - it('should be called with', () => { - fixture.detectChanges(); + it('should hide externe fachstelle component', () => { + fixture.detectChanges(); - const comp: CollaborationRequestFormComponent = - getMockComponent<CollaborationRequestFormComponent>( - fixture, - CollaborationRequestFormComponent, - ); - expect(comp.collaborationListResource).toBe(collaborationListResourceWithLink); - }); + notExistsAsHtmlElement(fixture, externeFachstelleContainer); }); - }); - - it('should be hidden if request form visibility is false', () => { - component.isRequestFormVisible = false; - fixture.detectChanges(); + it('should hide organisations einheit component', () => { + fixture.detectChanges(); - notExistsAsHtmlElement(fixture, collaborationRequestForm); + notExistsAsHtmlElement(fixture, externeFachstelleContainer); + }); }); }); }); - - describe('on existing collaboration', () => { - it('should show result', () => { - component.collaboration = createCollaboration(); - - fixture.detectChanges(); - - existsAsHtmlElement(fixture, collaborationRequestResult); - }); - }); - - describe('set collaboration', () => { - const collaboration: Collaboration = createCollaboration(); - - it('should set attribute', () => { - component.setCollaboration(collaboration); - - expect(component.collaboration).toBe(collaboration); - }); - - it('should call emitter', () => { - const hideRequestFormEmitSpy: jest.SpyInstance = (component.hideRequestForm.emit = jest.fn()); - - component.setCollaboration(collaboration); - - expect(hideRequestFormEmitSpy).toBeCalled(); - }); - }); }); diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/collaboration-in-vorgang.component.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/collaboration-in-vorgang.component.ts index 3216f10156d4e4506b3a028a833700a04b4eb96b..b6685d289011d6a16c1336038af6f536d4fc43c8 100644 --- a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/collaboration-in-vorgang.component.ts +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/collaboration-in-vorgang.component.ts @@ -1,30 +1,17 @@ -import { - Collaboration, - CollaborationListLinkRel, - CollaborationListResource, - OrganisationsEinheitResource, -} from '@alfa-client/collaboration-shared'; +import { CollaborationListLinkRel, CollaborationListResource } from '@alfa-client/collaboration-shared'; import { StateResource } from '@alfa-client/tech-shared'; -import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; +import { Component, Input } from '@angular/core'; @Component({ selector: 'alfa-collaboration-in-vorgang', templateUrl: './collaboration-in-vorgang.component.html', }) export class CollaborationInVorgangComponent { + @Input() public vorgang: VorgangWithEingangResource; @Input() public collaborationStateListResource: StateResource<CollaborationListResource>; - @Input() public isRequestFormVisible: boolean; - @Input() public organisationsEinheit: OrganisationsEinheitResource; - - @Output() public readonly showRequestForm: EventEmitter<void> = new EventEmitter<void>(); - @Output() public readonly hideRequestForm: EventEmitter<void> = new EventEmitter<void>(); + @Input() public showOrganisationsEinheitAnfrageButton: boolean; + @Input() public showExterneFachstelleAnfrageButton: boolean; public readonly collaborationListLinkRel = CollaborationListLinkRel; - - public collaboration: Collaboration; - - public setCollaboration(collaboration: Collaboration) { - this.collaboration = collaboration; - this.hideRequestForm.emit(); - } } diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/externe-fachstelle-container/externe-fachstelle-container.component.html b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/externe-fachstelle-container/externe-fachstelle-container.component.html new file mode 100644 index 0000000000000000000000000000000000000000..6cba5c87759822517c618a393d7534359027e339 --- /dev/null +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/externe-fachstelle-container/externe-fachstelle-container.component.html @@ -0,0 +1,22 @@ +<ng-container *ngIf="isFormVisible$ | async; else anfrageErstellenButton"> + <alfa-search-externe-fachstelle-container + *ngIf="vorgang | hasLink: vorgangLinkRel.SEARCH_EXTERNE_FACHSTELLE" + data-test-id="search-externe-fachstelle-container" + [fieldControl]="formService.form.controls.zustaendigeStelle" + ></alfa-search-externe-fachstelle-container> + <alfa-collaboration-request-form + data-test-id="collaboration-request-form" + [collaborationListResource]="collaborationListResource" + (abbrechen)="hideForm()" + ></alfa-collaboration-request-form> +</ng-container> +<ng-template #anfrageErstellenButton> + <div class="flex flex-1 gap-3 border border-grayborder bg-background-100 p-4 shadow shadow-grayborder"> + <ods-external-unit-icon /> + <div class="flex flex-1 flex-col text-base"> + <p class="text-primary">Externe Fachstelle</p> + <p class="text-text">Private Organisation, Verein, Schule</p> + </div> + <alfa-anfrage-erstellen-button data-test-id="externe-fachstelle-anfrage-erstellen-button" (clickEmitter)="showForm()" /> + </div> +</ng-template> diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/externe-fachstelle-container/externe-fachstelle-container.component.spec.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/externe-fachstelle-container/externe-fachstelle-container.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..2770d0fb9d618c8e139b9cf4131ec33c9667869c --- /dev/null +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/externe-fachstelle-container/externe-fachstelle-container.component.spec.ts @@ -0,0 +1,204 @@ +import { CollaborationListResource } from '@alfa-client/collaboration-shared'; +import { HasLinkPipe } from '@alfa-client/tech-shared'; +import { + Mock, + dispatchEventFromFixture, + existsAsHtmlElement, + getMockComponent, + mock, + notExistsAsHtmlElement, + useFromMock, +} from '@alfa-client/test-utils'; +import { VorgangWithEingangLinkRel, VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; +import { SearchExterneFachstelleContainerComponent } from '@alfa-client/zustaendige-stelle'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { FormBuilder } from '@angular/forms'; +import { ExternalUnitIconComponent } from '@ods/system'; +import { CollaborationService } from 'libs/collaboration-shared/src/lib/collaboration.service'; +import { createCollaborationListResource } from 'libs/collaboration-shared/test/collaboration'; +import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; +import { createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang'; +import { MockComponent } from 'ng-mocks'; +import { of } from 'rxjs'; +import { CollaborationRequestFormComponent } from '../../collaboration-request-form/collaboration-request-form.component'; +import { CollaborationRequestFormService } from '../../collaboration-request-form/collaboration.request.formservice'; +import { AnfrageErstellenButtonComponent } from '../anfrage-erstellen-button/anfrage-erstellen-button.component'; +import { ExterneFachstelleContainerComponent } from './externe-fachstelle-container.component'; + +describe('ExterneFachstelleContainerComponent', () => { + let component: ExterneFachstelleContainerComponent; + let fixture: ComponentFixture<ExterneFachstelleContainerComponent>; + + const anfrageErstellenButton: string = getDataTestIdOf('externe-fachstelle-anfrage-erstellen-button'); + const collaborationRequestForm: string = getDataTestIdOf('collaboration-request-form'); + const searchExterneFachstelleContainer: string = getDataTestIdOf('search-externe-fachstelle-container'); + + let formService: CollaborationRequestFormService; + let service: Mock<CollaborationService>; + + const vorgang: VorgangWithEingangResource = createVorgangWithEingangResource(); + const collaborationListResource: CollaborationListResource = createCollaborationListResource(); + + beforeEach(async () => { + formService = new CollaborationRequestFormService(new FormBuilder(), useFromMock(mock(CollaborationService))); + service = mock(CollaborationService); + TestBed.overrideComponent(CollaborationRequestFormComponent, { + set: { + providers: [ + { + provide: CollaborationRequestFormService, + useValue: formService, + }, + ], + }, + }); + await TestBed.configureTestingModule({ + declarations: [ + ExterneFachstelleContainerComponent, + HasLinkPipe, + MockComponent(SearchExterneFachstelleContainerComponent), + MockComponent(CollaborationRequestFormComponent), + MockComponent(AnfrageErstellenButtonComponent), + MockComponent(ExternalUnitIconComponent), + ], + providers: [ + { + provide: CollaborationRequestFormService, + useValue: formService, + }, + { + provide: CollaborationService, + useValue: service, + }, + ], + }).compileComponents(); + + fixture = TestBed.createComponent(ExterneFachstelleContainerComponent); + component = fixture.componentInstance; + component.vorgang = vorgang; + component.collaborationListResource = collaborationListResource; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + describe('ngOnInit', () => { + it('should call service to get form visibility', () => { + component.ngOnInit(); + + expect(service.isExterneFachstelleFormVisible).toHaveBeenCalled(); + }); + }); + + describe('ngOnDestroy', () => { + it('should call hideForm', () => { + component.hideForm = jest.fn(); + + component.ngOnDestroy(); + + expect(component.hideForm).toHaveBeenCalled(); + }); + }); + + describe('hideForm', () => { + it('should call service to hide form', () => { + component.hideForm(); + + expect(service.hideExterneFachstelleForm).toHaveBeenCalled(); + }); + + it.skip('FIXME should call formService to reset values', () => { + component.hideForm(); + + expect(formService.reset).toHaveBeenCalled(); + }); + }); + + describe('showForm', () => { + it('should call service', () => { + component.showForm(); + + expect(service.showExterneFachstelleForm).toHaveBeenCalled(); + }); + }); + + describe('template', () => { + describe('on shown form', () => { + beforeEach(() => { + component.isFormVisible$ = of(true); + fixture.detectChanges(); + }); + + it('anfrage button should be hidden', () => { + notExistsAsHtmlElement(fixture, anfrageErstellenButton); + }); + + describe('request form', () => { + it('should be visible', () => { + existsAsHtmlElement(fixture, collaborationRequestForm); + }); + + describe('component', () => { + it('should be called with collaborationListResource', () => { + const comp: CollaborationRequestFormComponent = getMockComponent<CollaborationRequestFormComponent>( + fixture, + CollaborationRequestFormComponent, + ); + expect(comp.collaborationListResource).toBe(collaborationListResource); + }); + + it('should call hideForm on abbrechen output', () => { + component.hideForm = jest.fn(); + + dispatchEventFromFixture(fixture, collaborationRequestForm, 'abbrechen'); + + expect(component.hideForm).toHaveBeenCalled(); + }); + }); + }); + + describe('and search link exists', () => { + beforeEach(() => { + component.vorgang = createVorgangWithEingangResource([VorgangWithEingangLinkRel.SEARCH_EXTERNE_FACHSTELLE]); + fixture.detectChanges(); + }); + + it('search externe fachstelle component should be visible', () => { + existsAsHtmlElement(fixture, searchExterneFachstelleContainer); + }); + }); + + describe('and search link is NOT exists', () => { + beforeEach(() => { + component.vorgang = createVorgangWithEingangResource(); + fixture.detectChanges(); + }); + it('search externe fachstelle component should be hidden', () => { + notExistsAsHtmlElement(fixture, searchExterneFachstelleContainer); + }); + }); + }); + + describe('on hidden form', () => { + beforeEach(() => { + component.isFormVisible$ = of(false); + fixture.detectChanges(); + }); + describe('anfrage erstellen button', () => { + it('should be visible', () => { + existsAsHtmlElement(fixture, anfrageErstellenButton); + }); + + it('should call showForm on click output', () => { + component.showForm = jest.fn(); + + dispatchEventFromFixture(fixture, anfrageErstellenButton, 'clickEmitter'); + + expect(component.showForm).toHaveBeenCalled(); + }); + }); + }); + }); +}); diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/externe-fachstelle-container/externe-fachstelle-container.component.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/externe-fachstelle-container/externe-fachstelle-container.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..025455d739cbe39f5ac2fa96aa751eb73042c31a --- /dev/null +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/externe-fachstelle-container/externe-fachstelle-container.component.ts @@ -0,0 +1,42 @@ +import { CollaborationListResource } from '@alfa-client/collaboration-shared'; +import { VorgangWithEingangLinkRel, VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; +import { Component, Input } from '@angular/core'; +import { CollaborationService } from 'libs/collaboration-shared/src/lib/collaboration.service'; +import { Observable } from 'rxjs'; +import { CollaborationRequestFormService } from '../../collaboration-request-form/collaboration.request.formservice'; + +@Component({ + selector: 'alfa-externe-fachstelle-container', + templateUrl: './externe-fachstelle-container.component.html', + providers: [CollaborationRequestFormService], +}) +export class ExterneFachstelleContainerComponent { + @Input() public vorgang: VorgangWithEingangResource; + @Input() public collaborationListResource: CollaborationListResource; + + public isFormVisible$: Observable<boolean>; + + public readonly vorgangLinkRel = VorgangWithEingangLinkRel; + + constructor( + public service: CollaborationService, + public formService: CollaborationRequestFormService, + ) {} + + ngOnInit(): void { + this.isFormVisible$ = this.service.isExterneFachstelleFormVisible(); + } + + ngOnDestroy(): void { + this.hideForm(); + } + + public hideForm(): void { + this.service.hideExterneFachstelleForm(); + this.formService.reset(); + } + + public showForm(): void { + this.service.showExterneFachstelleForm(); + } +} diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/organisations-einheit-container/organisations-einheit-container.component.html b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/organisations-einheit-container/organisations-einheit-container.component.html new file mode 100644 index 0000000000000000000000000000000000000000..c0fbb4fd42809f2ab44f3b3ceb4a6bfdfd89bacd --- /dev/null +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/organisations-einheit-container/organisations-einheit-container.component.html @@ -0,0 +1,22 @@ +<ng-container *ngIf="isFormVisible$ | async; else anfrageErstellenButton"> + <alfa-search-organisations-einheit-container + *ngIf="vorgang | hasLink: vorgangLinkRel.SEARCH_ORGANISATIONS_EINHEIT" + data-test-id="search-organisations-einheit-container" + [fieldControl]="formService.form.controls.zustaendigeStelle" + ></alfa-search-organisations-einheit-container> + <alfa-collaboration-request-form + data-test-id="collaboration-request-form" + [collaborationListResource]="collaborationListResource" + (abbrechen)="hideForm()" + ></alfa-collaboration-request-form> +</ng-container> +<ng-template #anfrageErstellenButton> + <div class="flex flex-1 gap-3 border border-grayborder bg-background-100 bg-background-100 p-4 p-4 shadow shadow-grayborder"> + <ods-public-administration-icon /> + <div class="flex flex-1 flex-col text-base"> + <p class="text-primary">Öffentliche Verwaltung</p> + <p class="text-text">Kommune, Amt, Ministerium</p> + </div> + <alfa-anfrage-erstellen-button data-test-id="organisations-einheit-anfrage-erstellen-button" (clickEmitter)="showForm()" /> + </div> +</ng-template> diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/organisations-einheit-container/organisations-einheit-container.component.spec.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/organisations-einheit-container/organisations-einheit-container.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..db074ea7b2b912cf078df24749c72831b6935ba7 --- /dev/null +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/organisations-einheit-container/organisations-einheit-container.component.spec.ts @@ -0,0 +1,204 @@ +import { CollaborationListResource } from '@alfa-client/collaboration-shared'; +import { HasLinkPipe } from '@alfa-client/tech-shared'; +import { + dispatchEventFromFixture, + existsAsHtmlElement, + getMockComponent, + mock, + Mock, + notExistsAsHtmlElement, + useFromMock, +} from '@alfa-client/test-utils'; +import { VorgangWithEingangLinkRel, VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; +import { SearchOrganisationsEinheitContainerComponent } from '@alfa-client/zustaendige-stelle'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { FormBuilder } from '@angular/forms'; +import { PublicAdministrationIconComponent } from '@ods/system'; +import { CollaborationService } from 'libs/collaboration-shared/src/lib/collaboration.service'; +import { createCollaborationListResource } from 'libs/collaboration-shared/test/collaboration'; +import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; +import { createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang'; +import { MockComponent } from 'ng-mocks'; +import { of } from 'rxjs'; +import { CollaborationRequestFormComponent } from '../../collaboration-request-form/collaboration-request-form.component'; +import { CollaborationRequestFormService } from '../../collaboration-request-form/collaboration.request.formservice'; +import { AnfrageErstellenButtonComponent } from '../anfrage-erstellen-button/anfrage-erstellen-button.component'; +import { OrganisationsEinheitContainerComponent } from './organisations-einheit-container.component'; + +describe('OrganisationsEinheitContainerComponent', () => { + let component: OrganisationsEinheitContainerComponent; + let fixture: ComponentFixture<OrganisationsEinheitContainerComponent>; + + const anfrageErstellenButton: string = getDataTestIdOf('organisations-einheit-anfrage-erstellen-button'); + const collaborationRequestForm: string = getDataTestIdOf('collaboration-request-form'); + const searchOrganisationsEinheitContainer: string = getDataTestIdOf('search-organisations-einheit-container'); + + let formService: CollaborationRequestFormService; + let service: Mock<CollaborationService>; + + const vorgang: VorgangWithEingangResource = createVorgangWithEingangResource(); + const collaborationListResource: CollaborationListResource = createCollaborationListResource(); + + beforeEach(async () => { + formService = new CollaborationRequestFormService(new FormBuilder(), useFromMock(mock(CollaborationService))); + service = mock(CollaborationService); + TestBed.overrideComponent(CollaborationRequestFormComponent, { + set: { + providers: [ + { + provide: CollaborationRequestFormService, + useValue: formService, + }, + ], + }, + }); + await TestBed.configureTestingModule({ + declarations: [ + OrganisationsEinheitContainerComponent, + HasLinkPipe, + MockComponent(SearchOrganisationsEinheitContainerComponent), + MockComponent(CollaborationRequestFormComponent), + MockComponent(AnfrageErstellenButtonComponent), + MockComponent(PublicAdministrationIconComponent), + ], + providers: [ + { + provide: CollaborationRequestFormService, + useValue: formService, + }, + { + provide: CollaborationService, + useValue: service, + }, + ], + }).compileComponents(); + + fixture = TestBed.createComponent(OrganisationsEinheitContainerComponent); + component = fixture.componentInstance; + component.vorgang = vorgang; + component.collaborationListResource = collaborationListResource; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + describe('ngOnInit', () => { + it('should call service to get form visibility', () => { + component.ngOnInit(); + + expect(service.isOrganisationsEinheitFormVisible).toHaveBeenCalled(); + }); + }); + + describe('ngOnDestroy', () => { + it('should call hideForm', () => { + component.hideForm = jest.fn(); + + component.ngOnDestroy(); + + expect(component.hideForm).toHaveBeenCalled(); + }); + }); + + describe('hideForm', () => { + it('should call service to hide form', () => { + component.hideForm(); + + expect(service.hideOrganisationseinheitForm).toHaveBeenCalled(); + }); + + it.skip('FIXME should call formService to reset values', () => { + component.hideForm(); + + expect(formService.reset).toHaveBeenCalled(); + }); + }); + + describe('showForm', () => { + it('should call service', () => { + component.showForm(); + + expect(service.showOrganisationsEinheitForm).toHaveBeenCalled(); + }); + }); + + describe('template', () => { + describe('on shown form', () => { + beforeEach(() => { + component.isFormVisible$ = of(true); + fixture.detectChanges(); + }); + + it('anfrage button should be hidden', () => { + notExistsAsHtmlElement(fixture, anfrageErstellenButton); + }); + + describe('request form', () => { + it('should be visible', () => { + existsAsHtmlElement(fixture, collaborationRequestForm); + }); + + describe('component', () => { + it('should be called with collaborationListResource', () => { + const comp: CollaborationRequestFormComponent = getMockComponent<CollaborationRequestFormComponent>( + fixture, + CollaborationRequestFormComponent, + ); + expect(comp.collaborationListResource).toBe(collaborationListResource); + }); + + it('should call hideForm on abbrechen output', () => { + component.hideForm = jest.fn(); + + dispatchEventFromFixture(fixture, collaborationRequestForm, 'abbrechen'); + + expect(component.hideForm).toHaveBeenCalled(); + }); + }); + }); + + describe('and search link exists', () => { + beforeEach(() => { + component.vorgang = createVorgangWithEingangResource([VorgangWithEingangLinkRel.SEARCH_ORGANISATIONS_EINHEIT]); + fixture.detectChanges(); + }); + + it('search organisations einheit component should be visible', () => { + existsAsHtmlElement(fixture, searchOrganisationsEinheitContainer); + }); + }); + + describe('and search link is NOT exists', () => { + beforeEach(() => { + component.vorgang = createVorgangWithEingangResource(); + fixture.detectChanges(); + }); + it('search organisations einheit component should be hidden', () => { + notExistsAsHtmlElement(fixture, searchOrganisationsEinheitContainer); + }); + }); + }); + + describe('on hidden form', () => { + beforeEach(() => { + component.isFormVisible$ = of(false); + fixture.detectChanges(); + }); + describe('anfrage erstellen button', () => { + it('should be visible', () => { + existsAsHtmlElement(fixture, anfrageErstellenButton); + }); + + it('should call showForm on click output', () => { + component.showForm = jest.fn(); + + dispatchEventFromFixture(fixture, anfrageErstellenButton, 'clickEmitter'); + + expect(component.showForm).toHaveBeenCalled(); + }); + }); + }); + }); +}); diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/organisations-einheit-container/organisations-einheit-container.component.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/organisations-einheit-container/organisations-einheit-container.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..4a76dd254321135bd414b66efc13e5c80f276574 --- /dev/null +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang/organisations-einheit-container/organisations-einheit-container.component.ts @@ -0,0 +1,42 @@ +import { CollaborationListResource } from '@alfa-client/collaboration-shared'; +import { VorgangWithEingangLinkRel, VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; +import { Component, Input, OnDestroy, OnInit } from '@angular/core'; +import { CollaborationService } from 'libs/collaboration-shared/src/lib/collaboration.service'; +import { Observable } from 'rxjs'; +import { CollaborationRequestFormService } from '../../collaboration-request-form/collaboration.request.formservice'; + +@Component({ + selector: 'alfa-organisations-einheit-container', + templateUrl: './organisations-einheit-container.component.html', + providers: [CollaborationRequestFormService], +}) +export class OrganisationsEinheitContainerComponent implements OnInit, OnDestroy { + @Input() public vorgang: VorgangWithEingangResource; + @Input() public collaborationListResource: CollaborationListResource; + + public isFormVisible$: Observable<boolean>; + + public readonly vorgangLinkRel = VorgangWithEingangLinkRel; + + constructor( + public service: CollaborationService, + public formService: CollaborationRequestFormService, + ) {} + + ngOnInit(): void { + this.isFormVisible$ = this.service.isOrganisationsEinheitFormVisible(); + } + + ngOnDestroy(): void { + this.hideForm(); + } + + public hideForm(): void { + this.service.hideOrganisationseinheitForm(); + this.formService.reset(); + } + + public showForm(): void { + this.service.showOrganisationsEinheitForm(); + } +} diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/collaboration-request-form.component.html b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/collaboration-request-form.component.html index bbb5fd59fc99d36e5f449e35d879bdc5b50bde88..231014281929086791b7e4c5265852238182a5ea 100644 --- a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/collaboration-request-form.component.html +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/collaboration-request-form.component.html @@ -1,16 +1,8 @@ -<alfa-organisations-einheit-container - [fieldControl]="formService.form.controls.zustaendigeStelle" -></alfa-organisations-einheit-container> - <form [formGroup]="formService.form" class="mt-4 flex flex-col gap-2"> - <ods-text-editor - label="Titel" - [formControlName]="formServiceClass.FIELD_TITLE" - [isRequired]="true" - ></ods-text-editor> + <ods-text-editor label="Titel" [formControlName]="formServiceClass.FIELD_TITEL" [isRequired]="true"></ods-text-editor> <ods-textarea-editor - label="Nachricht" - [formControlName]="formServiceClass.FIELD_NACHRICHT" + label="Beschreibung" + [formControlName]="formServiceClass.FIELD_BESCHREIBUNG" [isRequired]="true" ></ods-textarea-editor> </form> @@ -27,7 +19,7 @@ variant="outline" text="Abbrechen" dataTestId="collaboration-request-cancel-button" - (clickEmitter)="hide.emit()" + (clickEmitter)="abbrechen.emit()" > <ods-close-icon icon class="fill-primary"></ods-close-icon> </ods-button> diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/collaboration-request-form.component.spec.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/collaboration-request-form.component.spec.ts index 0ec28ea4c355c960aeb9be676a5ef47cd6026814..c6afc4f1d8ce8bbe019c5a6ad1c1a70bf4f91255 100644 --- a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/collaboration-request-form.component.spec.ts +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/collaboration-request-form.component.spec.ts @@ -1,19 +1,10 @@ import { CollaborationListResource } from '@alfa-client/collaboration-shared'; import { CommandLinkRel, CommandResource } from '@alfa-client/command-shared'; import { StateResource, createStateResource } from '@alfa-client/tech-shared'; -import { - dispatchEventFromFixture, - getMockComponent, - mock, - useFromMock, -} from '@alfa-client/test-utils'; +import { dispatchEventFromFixture, getMockComponent, mock, useFromMock } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormBuilder, ReactiveFormsModule } from '@angular/forms'; -import { - ButtonWithSpinnerComponent, - TextEditorComponent, - TextareaEditorComponent, -} from '@ods/component'; +import { ButtonWithSpinnerComponent, TextEditorComponent, TextareaEditorComponent } from '@ods/component'; import { ButtonComponent, CloseIconComponent } from '@ods/system'; import { CollaborationService } from 'libs/collaboration-shared/src/lib/collaboration.service'; import { createCollaborationListResource } from 'libs/collaboration-shared/test/collaboration'; @@ -24,7 +15,6 @@ import { MockComponent } from 'ng-mocks'; import { of } from 'rxjs'; import { CollaborationRequestFormComponent } from './collaboration-request-form.component'; import { CollaborationRequestFormService } from './collaboration.request.formservice'; -import { OrganisationsEinheitContainerComponent } from './organisations-einheit-container/organisations-einheit-container.component'; describe('CollaborationRequestFormComponent', () => { let component: CollaborationRequestFormComponent; @@ -35,14 +25,10 @@ describe('CollaborationRequestFormComponent', () => { let formService: CollaborationRequestFormService; - const stateCommandResource: StateResource<CommandResource> = - createStateResource(createCommandResource()); + const stateCommandResource: StateResource<CommandResource> = createStateResource(createCommandResource()); beforeEach(async () => { - formService = new CollaborationRequestFormService( - new FormBuilder(), - useFromMock(mock(CollaborationService)), - ); + formService = new CollaborationRequestFormService(new FormBuilder(), useFromMock(mock(CollaborationService))); TestBed.overrideComponent(CollaborationRequestFormComponent, { set: { providers: [ @@ -62,7 +48,6 @@ describe('CollaborationRequestFormComponent', () => { MockComponent(CloseIconComponent), MockComponent(TextEditorComponent), MockComponent(TextareaEditorComponent), - MockComponent(OrganisationsEinheitContainerComponent), ], providers: [ { @@ -82,11 +67,11 @@ describe('CollaborationRequestFormComponent', () => { describe('cancel button', () => { it('should emit hideRequestForm', () => { - const emitSpy: jest.SpyInstance = (component.hide.emit = jest.fn()); + component.abbrechen.emit = jest.fn(); dispatchEventFromFixture(fixture, cancelButton, 'clickEmitter'); - expect(emitSpy).toHaveBeenCalled(); + expect(component.abbrechen.emit).toHaveBeenCalled(); }); }); @@ -97,8 +82,10 @@ describe('CollaborationRequestFormComponent', () => { fixture.detectChanges(); - const submitButtonComp: ButtonWithSpinnerComponent = - getMockComponent<ButtonWithSpinnerComponent>(fixture, ButtonWithSpinnerComponent); + const submitButtonComp: ButtonWithSpinnerComponent = getMockComponent<ButtonWithSpinnerComponent>( + fixture, + ButtonWithSpinnerComponent, + ); expect(submitButtonComp.stateResource).toBe(stateCommandResource); }); }); @@ -134,9 +121,7 @@ describe('CollaborationRequestFormComponent', () => { beforeEach(() => { formService.submit = jest .fn() - .mockReturnValue( - of(createStateResource(createCommandResource([CommandLinkRel.EFFECTED_RESOURCE]))), - ); + .mockReturnValue(of(createStateResource(createCommandResource([CommandLinkRel.EFFECTED_RESOURCE])))); }); it('should call formService', () => { @@ -148,11 +133,11 @@ describe('CollaborationRequestFormComponent', () => { }); it('should emit show result', () => { - const showResultSpy: jest.SpyInstance = (component.showResult.emit = jest.fn()); + component.showResult.emit = jest.fn(); component.doSubmit().subscribe(); - expect(showResultSpy).toHaveBeenCalledWith(formService.form.value); + expect(component.showResult.emit).toHaveBeenCalledWith(formService.form.value); }); it('should return value', () => { @@ -165,8 +150,7 @@ describe('CollaborationRequestFormComponent', () => { describe('set collaboration list resource', () => { it('should call set list resource on formService', () => { formService.setListResource = jest.fn(); - const collaborationListResource: CollaborationListResource = - createCollaborationListResource(); + const collaborationListResource: CollaborationListResource = createCollaborationListResource(); component.collaborationListResource = collaborationListResource; diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/collaboration-request-form.component.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/collaboration-request-form.component.ts index d78bb1da55f8ffcb8d3364ce11ef6aff6573aad4..36fabdc2f2ec25a404005de60ec512640d1cd04e 100644 --- a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/collaboration-request-form.component.ts +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/collaboration-request-form.component.ts @@ -8,21 +8,16 @@ import { CollaborationRequestFormService } from './collaboration.request.formser @Component({ selector: 'alfa-collaboration-request-form', templateUrl: './collaboration-request-form.component.html', - providers: [CollaborationRequestFormService], }) export class CollaborationRequestFormComponent { - @Output() public hide: EventEmitter<void> = new EventEmitter<void>(); + @Output() public abbrechen: EventEmitter<void> = new EventEmitter<void>(); @Output() public showResult: EventEmitter<Collaboration> = new EventEmitter<Collaboration>(); - @Input() public set collaborationListResource( - collaborationListResource: CollaborationListResource, - ) { + @Input() public set collaborationListResource(collaborationListResource: CollaborationListResource) { this.formService.setListResource(collaborationListResource); } - public submitInProgress$: Observable<StateResource<CommandResource>> = of( - createEmptyStateResource<CommandResource>(), - ); + public submitInProgress$: Observable<StateResource<CommandResource>> = of(createEmptyStateResource<CommandResource>()); constructor(readonly formService: CollaborationRequestFormService) {} @@ -35,8 +30,6 @@ export class CollaborationRequestFormComponent { doSubmit(): Observable<StateResource<CommandResource>> { return this.formService .submit() - .pipe( - tapOnCommandSuccessfullyDone(() => this.showResult.emit(this.formService.getFormValue())), - ); + .pipe(tapOnCommandSuccessfullyDone(() => this.showResult.emit(this.formService.getFormValue()))); } } diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/collaboration.request.formservice.spec.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/collaboration.request.formservice.spec.ts index 8333c24f140f2ad55fc22d3da7011806b90dccdf..989607ccc531c76d5db317ed591f0d8d60d865f6 100644 --- a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/collaboration.request.formservice.spec.ts +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/collaboration.request.formservice.spec.ts @@ -29,9 +29,22 @@ describe('CollaborationRequestFormService', () => { expect(formService).toBeTruthy(); }); + describe('form', () => { + it('should have initial zustaendigeStelle value', () => { + expect(formService.form.controls[CollaborationRequestFormService.FIELD_ZUSTAENDIGE_STELLE].value).toBeNull(); + }); + + it('should have initial titel value', () => { + expect(formService.form.controls[CollaborationRequestFormService.FIELD_TITEL].value).toBeNull(); + }); + + it('should have initial beschreibung value', () => { + expect(formService.form.controls[CollaborationRequestFormService.FIELD_BESCHREIBUNG].value).toBeNull(); + }); + }); + describe('do submit', () => { - const stateCommandResource: StateResource<CommandResource> = - createStateResource(createCommandResource()); + const stateCommandResource: StateResource<CommandResource> = createStateResource(createCommandResource()); beforeEach(() => { formService.listResource = collaborationListResource; @@ -41,10 +54,7 @@ describe('CollaborationRequestFormService', () => { it('should call service', () => { formService.submit(); - expect(service.create).toHaveBeenCalledWith( - collaborationListResource, - formService.form.value, - ); + expect(service.create).toHaveBeenCalledWith(collaborationListResource, formService.form.value); }); it('should return stateCommandResource', () => { diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/collaboration.request.formservice.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/collaboration.request.formservice.ts index eedf11fea57b5413757b863d50fee87000986a58..3e9334240e76bc7a2fff71ea1f4d22b10f9d253d 100644 --- a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/collaboration.request.formservice.ts +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/collaboration.request.formservice.ts @@ -10,8 +10,8 @@ import { Observable } from 'rxjs'; @Injectable() export class CollaborationRequestFormService extends AbstractFormService<CommandResource> { public static readonly FIELD_ZUSTAENDIGE_STELLE: string = 'zustaendigeStelle'; - public static readonly FIELD_TITLE: string = 'titel'; - public static readonly FIELD_NACHRICHT: string = 'anfrage'; + public static readonly FIELD_TITEL: string = 'titel'; + public static readonly FIELD_BESCHREIBUNG: string = 'beschreibung'; private static readonly PATH_PREFIX: string = 'command.body'; @@ -26,11 +26,9 @@ export class CollaborationRequestFormService extends AbstractFormService<Command protected initForm(): FormGroup { return this.formBuilder.group({ - [CollaborationRequestFormService.FIELD_ZUSTAENDIGE_STELLE]: new FormControl<ResourceUri>( - null, - ), - [CollaborationRequestFormService.FIELD_TITLE]: new FormControl<string>(null), - [CollaborationRequestFormService.FIELD_NACHRICHT]: new FormControl<string>(null), + [CollaborationRequestFormService.FIELD_ZUSTAENDIGE_STELLE]: new FormControl<ResourceUri>(null), + [CollaborationRequestFormService.FIELD_TITEL]: new FormControl<string>(null), + [CollaborationRequestFormService.FIELD_BESCHREIBUNG]: new FormControl<string>(null), }); } diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/organisations-einheit-container/organisations-einheit-container.component.html b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/organisations-einheit-container/organisations-einheit-container.component.html deleted file mode 100644 index 26bf7894a39f4bc7fb5d5d1e07d51dc2cd2976cd..0000000000000000000000000000000000000000 --- a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/organisations-einheit-container/organisations-einheit-container.component.html +++ /dev/null @@ -1,23 +0,0 @@ -<ng-container - *ngIf="organisationsEinheitResource$ | async as organisationsEinheitResource; else searchButton" -> - <div class="flex items-center gap-3"> - <ods-office-icon size="large" class="fill-text" /> - <alfa-organisations-einheit - data-test-id="organisations-einheit-in-collaboration" - [organisationsEinheitResource]="organisationsEinheitResource" - ></alfa-organisations-einheit> - </div> -</ng-container> -<ng-template #searchButton> - <div class="flex items-center gap-3"> - <ods-button - variant="outline" - text="Zuständige Stelle auswählen" - data-test-id="organisations-einheit-search-button" - (clickEmitter)="openSearchDialog()" - > - <ods-search-icon icon /> - </ods-button> - </div> -</ng-template> diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/organisations-einheit-container/organisations-einheit-container.component.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/organisations-einheit-container/organisations-einheit-container.component.ts deleted file mode 100644 index 2bddc100f8d72ccd8560386dd144574e532a58e6..0000000000000000000000000000000000000000 --- a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/organisations-einheit-container/organisations-einheit-container.component.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { - OrganisationsEinheitResource, - OrganisationsEinheitService, -} from '@alfa-client/collaboration-shared'; -import { isNotNull } from '@alfa-client/tech-shared'; -import { OzgcloudDialogService } from '@alfa-client/ui'; -import { DialogConfig } from '@angular/cdk/dialog'; -import { Component, Input, OnInit, ViewContainerRef } from '@angular/core'; -import { AbstractControl } from '@angular/forms'; -import { ResourceUri, getUrl } from '@ngxp/rest'; -import { Observable, tap } from 'rxjs'; -import { SearchOrganisationsEinheitContainerComponent } from '../../../search-organisations-einheit-container/search-organisations-einheit-container.component'; - -const DIALOG_CONFIG: DialogConfig = { - backdropClass: ['backdrop-blur-1', 'bg-greybackdrop'], -}; - -@Component({ - selector: 'alfa-organisations-einheit-container', - templateUrl: './organisations-einheit-container.component.html', - providers: [OrganisationsEinheitService], -}) -export class OrganisationsEinheitContainerComponent implements OnInit { - @Input() public fieldControl: AbstractControl<ResourceUri>; - - public organisationsEinheitResource$: Observable<OrganisationsEinheitResource>; - - constructor( - private readonly dialogService: OzgcloudDialogService, - readonly viewContainerRef: ViewContainerRef, - private readonly service: OrganisationsEinheitService, - ) {} - - ngOnInit(): void { - this.organisationsEinheitResource$ = this.getSelectedResult(); - } - - getSelectedResult(): Observable<OrganisationsEinheitResource> { - return this.service - .getSelectedResult() - .pipe( - tap((organisationsEinheitResource: OrganisationsEinheitResource) => - this.handleResult(organisationsEinheitResource), - ), - ); - } - - handleResult(organisationsEinheitResource: OrganisationsEinheitResource): void { - if (isNotNull(organisationsEinheitResource)) { - this.fieldControl.patchValue(getUrl(organisationsEinheitResource)); - } - } - - public openSearchDialog(): void { - this.dialogService.openInCallingComponentContext<SearchOrganisationsEinheitContainerComponent>( - SearchOrganisationsEinheitContainerComponent, - this.viewContainerRef, - null, //FIXME bitte null nicht als Parameter nehmen - DIALOG_CONFIG, - ); - } -} diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/organisations-einheit-container/organisations-einheit/organisations-einheit.component.html b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/organisations-einheit-container/organisations-einheit/organisations-einheit.component.html deleted file mode 100644 index 57d9280a6f6c3909e5d5c4494a245a803517d7a3..0000000000000000000000000000000000000000 --- a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/organisations-einheit-container/organisations-einheit/organisations-einheit.component.html +++ /dev/null @@ -1,2 +0,0 @@ -<p class="font-bold">{{ name }}</p> -<p>{{ address }}</p> diff --git a/alfa-client/libs/collaboration/src/lib/collaboration.module.ts b/alfa-client/libs/collaboration/src/lib/collaboration.module.ts index 82a66754b9da100acdf4bf900a6669832f24a4ab..d9d38c700855608e944c4960c591c7b6f49e9b56 100644 --- a/alfa-client/libs/collaboration/src/lib/collaboration.module.ts +++ b/alfa-client/libs/collaboration/src/lib/collaboration.module.ts @@ -1,56 +1,54 @@ import { CollaborationSharedModule } from '@alfa-client/collaboration-shared'; import { TechSharedModule } from '@alfa-client/tech-shared'; +import { ZustaendigeStelleModule } from '@alfa-client/zustaendige-stelle'; import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; -import { - ButtonWithSpinnerComponent, - TextEditorComponent, - TextareaEditorComponent, -} from '@ods/component'; +import { ButtonWithSpinnerComponent, TextEditorComponent, TextareaEditorComponent } from '@ods/component'; import { ButtonComponent, CloseIconComponent, - CollaborationIconComponent, - InstantSearchComponent, + ExternalUnitIconComponent, OfficeIconComponent, + PublicAdministrationIconComponent, SaveIconComponent, SearchIconComponent, + UsersIconComponent, } from '@ods/system'; import { CollaborationInVorgangContainerComponent } from './collaboration-in-vorgang-container/collaboration-in-vorgang-container.component'; +import { AnfrageErstellenButtonComponent } from './collaboration-in-vorgang-container/collaboration-in-vorgang/anfrage-erstellen-button/anfrage-erstellen-button.component'; import { CollaborationInVorgangComponent } from './collaboration-in-vorgang-container/collaboration-in-vorgang/collaboration-in-vorgang.component'; +import { ExterneFachstelleContainerComponent } from './collaboration-in-vorgang-container/collaboration-in-vorgang/externe-fachstelle-container/externe-fachstelle-container.component'; +import { OrganisationsEinheitContainerComponent } from './collaboration-in-vorgang-container/collaboration-in-vorgang/organisations-einheit-container/organisations-einheit-container.component'; import { CollaborationRequestFormComponent } from './collaboration-in-vorgang-container/collaboration-request-form/collaboration-request-form.component'; -import { OrganisationsEinheitContainerComponent } from './collaboration-in-vorgang-container/collaboration-request-form/organisations-einheit-container/organisations-einheit-container.component'; -import { OrganisationsEinheitComponent } from './collaboration-in-vorgang-container/collaboration-request-form/organisations-einheit-container/organisations-einheit/organisations-einheit.component'; -import { SearchOrganisationsEinheitContainerComponent } from './search-organisations-einheit-container/search-organisations-einheit-container.component'; -import { SearchOrganisationsEinheitFormComponent } from './search-organisations-einheit-container/search-organisations-einheit-form/search-organisations-einheit-form.component'; @NgModule({ imports: [ CommonModule, ButtonComponent, - OfficeIconComponent, SaveIconComponent, CloseIconComponent, SearchIconComponent, CollaborationSharedModule, - CollaborationIconComponent, + UsersIconComponent, TextEditorComponent, TextareaEditorComponent, FormsModule, ReactiveFormsModule, - InstantSearchComponent, TechSharedModule, ButtonWithSpinnerComponent, + ZustaendigeStelleModule, + OfficeIconComponent, + ExternalUnitIconComponent, + PublicAdministrationIconComponent, ], declarations: [ CollaborationInVorgangContainerComponent, CollaborationInVorgangComponent, CollaborationRequestFormComponent, - SearchOrganisationsEinheitContainerComponent, - SearchOrganisationsEinheitFormComponent, + AnfrageErstellenButtonComponent, OrganisationsEinheitContainerComponent, - OrganisationsEinheitComponent, + ExterneFachstelleContainerComponent, ], exports: [CollaborationInVorgangContainerComponent], }) diff --git a/alfa-client/libs/collaboration/src/lib/search-organisations-einheit-container/search-organisations-einheit-container.component.html b/alfa-client/libs/collaboration/src/lib/search-organisations-einheit-container/search-organisations-einheit-container.component.html deleted file mode 100644 index 3ec530a875705138b08d5e81fc65c2490cb39d1e..0000000000000000000000000000000000000000 --- a/alfa-client/libs/collaboration/src/lib/search-organisations-einheit-container/search-organisations-einheit-container.component.html +++ /dev/null @@ -1,24 +0,0 @@ -<div class="my-32 flex h-screen flex-col gap-2"> - <div class="flex gap-48 py-6 lg:gap-96"> - <h1 class="text-xl font-bold text-primary">Zuständige Stelle auswählen</h1> - <ods-button - variant="icon" - size="fit" - (clickEmitter)="closeDialog()" - dataTestId="close-search-dialog" - > - <ods-close-icon class="fill-primary" icon /> - </ods-button> - </div> - <alfa-search-organisations-einheit-form - *ngIf="organisationsEinheitStateListResource$ | async as organisationsEinheitStateListResource" - data-test-id="search-organisations-einheit" - [organisationsEinheiten]=" - organisationsEinheitStateListResource.resource - | toEmbeddedResources: organisationsEinheitListLinkRel.ORGANISATIONS_EINHEIT_HEADER_LIST - " - (search)="search($event)" - (selectSearchResult)="selectSearchResult($event)" - (clearSearchResult)="clearSearchResult()" - ></alfa-search-organisations-einheit-form> -</div> diff --git a/alfa-client/libs/collaboration/src/lib/search-organisations-einheit-container/search-organisations-einheit-container.component.ts b/alfa-client/libs/collaboration/src/lib/search-organisations-einheit-container/search-organisations-einheit-container.component.ts deleted file mode 100644 index 14a54da18681ed93697757c2cbcd13e81346414c..0000000000000000000000000000000000000000 --- a/alfa-client/libs/collaboration/src/lib/search-organisations-einheit-container/search-organisations-einheit-container.component.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { - OrganisationsEinheitListLinkRel, - OrganisationsEinheitService, -} from '@alfa-client/collaboration-shared'; -import { StateResource } from '@alfa-client/tech-shared'; -import { DialogRef } from '@angular/cdk/dialog'; -import { Component, HostListener, OnInit } from '@angular/core'; -import { - OrganisationsEinheitListResource, - OrganisationsEinheitResource, -} from 'libs/collaboration-shared/src/lib/organisations-einheit.model'; -import { Observable } from 'rxjs'; - -@Component({ - selector: 'alfa-search-organisations-einheit-container', - templateUrl: './search-organisations-einheit-container.component.html', -}) -export class SearchOrganisationsEinheitContainerComponent implements OnInit { - public organisationsEinheitStateListResource$: Observable< - StateResource<OrganisationsEinheitListResource> - >; - - public readonly organisationsEinheitListLinkRel = OrganisationsEinheitListLinkRel; - - constructor( - private readonly service: OrganisationsEinheitService, - private readonly dialogRef: DialogRef, - ) {} - - ngOnInit(): void { - this.organisationsEinheitStateListResource$ = this.service.getSearchResultList(); - } - - @HostListener('document:keydown', ['$event']) onKeyDownHandler(e: KeyboardEvent) { - if (e.key === 'Enter') e.preventDefault(); - } - - public search(searchBy: string): void { - this.service.search(searchBy); - } - - public selectSearchResult(organisationsEinheit: OrganisationsEinheitResource): void { - this.service.selectSearchResult(organisationsEinheit); - this.service.clearSearchResult(); - this.dialogRef.close(); - } - - public clearSearchResult(): void { - this.service.clearSearchResult(); - } - - public closeDialog(): void { - this.clearSearchResult(); - this.dialogRef.close(); - } -} diff --git a/alfa-client/libs/collaboration/src/lib/search-organisations-einheit-container/search-organisations-einheit-form/search-organisations-einheit-form.component.spec.ts b/alfa-client/libs/collaboration/src/lib/search-organisations-einheit-container/search-organisations-einheit-form/search-organisations-einheit-form.component.spec.ts deleted file mode 100644 index 11fa9f5ebd5cfdcca46bf05fd71833602391e270..0000000000000000000000000000000000000000 --- a/alfa-client/libs/collaboration/src/lib/search-organisations-einheit-container/search-organisations-einheit-form/search-organisations-einheit-form.component.spec.ts +++ /dev/null @@ -1,183 +0,0 @@ -import { OrganisationsEinheitResource } from '@alfa-client/collaboration-shared'; -import { EventData, Mock, getMockComponent, mock, triggerEvent } from '@alfa-client/test-utils'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { ReactiveFormsModule } from '@angular/forms'; -import faker from '@faker-js/faker'; -import { InstantSearchComponent } from '@ods/system'; -import { createOrganisationsEinheitResource } from 'libs/collaboration-shared/test/organisations-einheit'; -import { InstantSearchResult } from 'libs/design-system/src/lib/instant-search/instant-search/instant-search.model'; -import { createInstantSearchResult } from 'libs/design-system/src/test/search'; -import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; -import { MockComponent } from 'ng-mocks'; -import { SearchOrganisationsEinheitFormService } from '../search-organisations-einheit.formservice'; -import { SearchOrganisationsEinheitFormComponent } from './search-organisations-einheit-form.component'; - -describe('SearchOrganisationsEinheitFormComponent', () => { - let component: SearchOrganisationsEinheitFormComponent; - let fixture: ComponentFixture<SearchOrganisationsEinheitFormComponent>; - - const searchComp: string = getDataTestIdOf('search'); - - const formService: Mock<SearchOrganisationsEinheitFormService> = mock( - SearchOrganisationsEinheitFormService, - ); - - const instantSearchResult: InstantSearchResult<OrganisationsEinheitResource> = - createInstantSearchResult<OrganisationsEinheitResource>(); - const organisationsEinheitResource: OrganisationsEinheitResource = - createOrganisationsEinheitResource(); - - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [ReactiveFormsModule], - declarations: [ - SearchOrganisationsEinheitFormComponent, - MockComponent(InstantSearchComponent), - ], - providers: [ - { - provide: SearchOrganisationsEinheitFormService, - useValue: formService, - }, - ], - }).compileComponents(); - - fixture = TestBed.createComponent(SearchOrganisationsEinheitFormComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); - - describe('set organisationsEinheiten', () => { - it('should map organisationsEinheitResources', () => { - component.mapOrganisationsEinheitResources = jest.fn(); - - component.organisationsEinheiten = [organisationsEinheitResource]; - - expect(component.mapOrganisationsEinheitResources).toHaveBeenCalledWith([ - organisationsEinheitResource, - ]); - }); - }); - - describe('map organisationsEinheit Resources', () => { - it('should call mapToInstantSearchResult', () => { - component.mapToInstantantSearchResult = jest.fn(); - - component.mapOrganisationsEinheitResources([organisationsEinheitResource]); - - expect(component.mapToInstantantSearchResult).toHaveBeenCalledWith( - organisationsEinheitResource, - ); - }); - - it('should set searchResults', () => { - component.mapToInstantantSearchResult = jest.fn().mockReturnValue(instantSearchResult); - - component.mapOrganisationsEinheitResources([organisationsEinheitResource]); - - expect(component.searchResults).toEqual([instantSearchResult]); - }); - }); - - describe('map to instand search result', () => { - it('should map titel', () => { - const instantSearchResult: InstantSearchResult<OrganisationsEinheitResource> = - component.mapToInstantantSearchResult(organisationsEinheitResource); - - expect(instantSearchResult.title).toBe(organisationsEinheitResource.name); - }); - it('should map description', () => { - const instantSearchResult: InstantSearchResult<OrganisationsEinheitResource> = - component.mapToInstantantSearchResult(organisationsEinheitResource); - - const expectedDescription: string = `${organisationsEinheitResource.anschrift.strasse} ${organisationsEinheitResource.anschrift.hausnummer}, ${organisationsEinheitResource.anschrift.plz} ${organisationsEinheitResource.anschrift.ort}`; - expect(instantSearchResult.description).toBe(expectedDescription); - }); - - it('should map data', () => { - const instantSearchResult: InstantSearchResult<OrganisationsEinheitResource> = - component.mapToInstantantSearchResult(organisationsEinheitResource); - - expect(instantSearchResult.data).toBe(organisationsEinheitResource); - }); - }); - - describe('instant search component', () => { - it('should be called with search results', () => { - component.searchResults = [instantSearchResult]; - - fixture.detectChanges(); - - expect(getInstantSearchComponent().searchResults).toEqual([instantSearchResult]); - }); - - function getInstantSearchComponent(): InstantSearchComponent { - return getMockComponent<InstantSearchComponent>(fixture, InstantSearchComponent); - } - - it('should emit selected search result on searchResultSelected output', () => { - const selectSearchResultSpy: jest.SpyInstance = (component.selectSearchResult.emit = - jest.fn()); - const eventData: EventData<SearchOrganisationsEinheitFormComponent> = { - fixture, - elementSelector: searchComp, - name: 'searchResultSelected', - data: { data: organisationsEinheitResource }, - }; - - triggerEvent(eventData); - - expect(selectSearchResultSpy).toHaveBeenCalledWith(organisationsEinheitResource); - }); - - it('should emit search on searchQueryChanged output', () => { - const searchSpy: jest.SpyInstance = (component.search.emit = jest.fn()); - const searchBy: string = faker.random.word(); - const eventData: EventData<SearchOrganisationsEinheitFormComponent> = { - fixture, - elementSelector: searchComp, - name: 'searchQueryChanged', - data: { searchBy }, - }; - - triggerEvent(eventData); - - expect(searchSpy).toHaveBeenCalledWith(searchBy); - }); - - describe('should emit clear search result', () => { - let clearSearchResultSpy: jest.SpyInstance; - let eventData: EventData<SearchOrganisationsEinheitFormComponent>; - - beforeEach(() => { - clearSearchResultSpy = component.clearSearchResult.emit = jest.fn(); - eventData = { - fixture, - elementSelector: searchComp, - name: 'TBD', - data: { searchBy: faker.random.word() }, - }; - }); - - it('on searchResultClosed output', () => { - eventData = { ...eventData, name: 'searchResultClosed' }; - - triggerEvent(eventData); - - expect(clearSearchResultSpy).toHaveBeenCalledWith(); - }); - - it('on searchQueryCleared output', () => { - eventData = { ...eventData, name: 'searchResultClosed' }; - - triggerEvent(eventData); - - expect(clearSearchResultSpy).toHaveBeenCalled(); - }); - }); - }); -}); diff --git a/alfa-client/libs/collaboration/src/lib/search-organisations-einheit-container/search-organisations-einheit-form/search-organisations-einheit-form.component.ts b/alfa-client/libs/collaboration/src/lib/search-organisations-einheit-container/search-organisations-einheit-form/search-organisations-einheit-form.component.ts deleted file mode 100644 index e144eb1257283beea80b37d9b1d79b1a1fee50ab..0000000000000000000000000000000000000000 --- a/alfa-client/libs/collaboration/src/lib/search-organisations-einheit-container/search-organisations-einheit-form/search-organisations-einheit-form.component.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { OrganisationsEinheitResource } from '@alfa-client/collaboration-shared'; -import { Component, EventEmitter, Input, Output } from '@angular/core'; -import { InstantSearchResult } from '@ods/system'; -import { SearchOrganisationsEinheitFormService } from '../search-organisations-einheit.formservice'; - -@Component({ - selector: 'alfa-search-organisations-einheit-form', - templateUrl: './search-organisations-einheit-form.component.html', - providers: [SearchOrganisationsEinheitFormService], -}) -export class SearchOrganisationsEinheitFormComponent { - @Input() set organisationsEinheiten(organisationsEinheiten: OrganisationsEinheitResource[]) { - this.mapOrganisationsEinheitResources(organisationsEinheiten); - } - - @Output() public search: EventEmitter<string> = new EventEmitter(); - @Output() public selectSearchResult: EventEmitter<OrganisationsEinheitResource> = - new EventEmitter(); - @Output() public clearSearchResult: EventEmitter<string> = new EventEmitter(); - - public searchResults: InstantSearchResult<OrganisationsEinheitResource>[]; - - constructor(public formService: SearchOrganisationsEinheitFormService) {} - - mapOrganisationsEinheitResources(organisationsEinheiten: OrganisationsEinheitResource[]): void { - this.searchResults = organisationsEinheiten.map( - (organisationsEinheiten: OrganisationsEinheitResource) => - this.mapToInstantantSearchResult(organisationsEinheiten), - ); - } - - mapToInstantantSearchResult( - organisationsEinheit: OrganisationsEinheitResource, - ): InstantSearchResult<OrganisationsEinheitResource> { - return <any>{ - title: organisationsEinheit.name, - description: `${organisationsEinheit.anschrift.strasse} ${organisationsEinheit.anschrift.hausnummer}, ${organisationsEinheit.anschrift.plz} ${organisationsEinheit.anschrift.ort}`, - data: organisationsEinheit, - }; - } -} diff --git a/alfa-client/libs/command-shared/src/lib/+state/command.actions.ts b/alfa-client/libs/command-shared/src/lib/+state/command.actions.ts index 7f564e05dbe32dcaac248f9f9d0fb0992bfbf3ba..dd4978878bf075d25ce99fee8d93da96b84787ca 100644 --- a/alfa-client/libs/command-shared/src/lib/+state/command.actions.ts +++ b/alfa-client/libs/command-shared/src/lib/+state/command.actions.ts @@ -29,8 +29,7 @@ import { TypedActionCreatorWithProps, } from '@alfa-client/tech-shared'; import { HttpErrorResponse } from '@angular/common/http'; -import { createAction, props } from '@ngrx/store'; -import { TypedAction } from '@ngrx/store/src/models'; +import { createAction, props, Action } from '@ngrx/store'; import { Resource } from '@ngxp/rest'; import { CommandListResource, @@ -55,8 +54,8 @@ export interface LoadCommandListProps { linkRel: string; successAction: ( commandList: CommandListResource, - ) => LoadCommandListSuccessProps & TypedAction<string>; - failureAction: (apiError: ApiError) => ApiErrorAction & TypedAction<string>; + ) => LoadCommandListSuccessProps & Action<string>; + failureAction: (apiError: ApiError) => ApiErrorAction & Action<string>; } export const loadCommandList: TypedActionCreatorWithProps<LoadCommandListProps> = createAction( diff --git a/alfa-client/libs/command-shared/src/lib/+state/command.effects.spec.ts b/alfa-client/libs/command-shared/src/lib/+state/command.effects.spec.ts index 2ee1199a7ec572ca5c33e21ed788c098f2b95015..41268bf0875988d9772c3ad233b251625eec7281 100644 --- a/alfa-client/libs/command-shared/src/lib/+state/command.effects.spec.ts +++ b/alfa-client/libs/command-shared/src/lib/+state/command.effects.spec.ts @@ -9,7 +9,6 @@ import { SnackBarService } from '@alfa-client/ui'; import { TestBed } from '@angular/core/testing'; import { provideMockActions } from '@ngrx/effects/testing'; import { Action, Store, createAction, props } from '@ngrx/store'; -import { TypedAction } from '@ngrx/store/src/models'; import { provideMockStore } from '@ngrx/store/testing'; import { Resource } from '@ngxp/rest'; import { cold, hot } from 'jest-marbles'; @@ -89,7 +88,7 @@ describe('CommandEffects', () => { props<ApiErrorAction>(), ); - const loadCommandList: TypedAction<string> = CommandActions.loadCommandList({ + const loadCommandList: Action<string> = CommandActions.loadCommandList({ resource, linkRel, successAction: (commandList) => loadSuccess({ commandList }), @@ -134,7 +133,7 @@ describe('CommandEffects', () => { describe('createCommand', () => { const createCommandProps: CreateCommandProps = createCreateCommandProps(); - const createCommandAction: TypedAction<string> = + const createCommandAction: Action<string> = CommandActions.createCommand(createCommandProps); const commandResource: CommandResource = createCommandResource(); @@ -192,7 +191,7 @@ describe('CommandEffects', () => { it('should return pollCreatedCommand action on pending command', () => { const command: CommandResource = createCommandResource([CommandLinkRel.UPDATE]); - const actions: TypedAction<string>[] = effects.handleCreatedCommand( + const actions: Action<string>[] = effects.handleCreatedCommand( createCommandProps, command, ); @@ -219,7 +218,7 @@ describe('CommandEffects', () => { const command: CommandResource = createCommandResource(); - const pollCreateCommandAction: TypedAction<string> = CommandActions.pollCreatedCommand({ + const pollCreateCommandAction: Action<string> = CommandActions.pollCreatedCommand({ command, }); @@ -276,7 +275,7 @@ describe('CommandEffects', () => { it('should return createCommandSuccess action', () => { const command: CommandResource = createCommandResource(); - const actions: TypedAction<string>[] = effects.handleCreateCommandSuccess( + const actions: Action<string>[] = effects.handleCreateCommandSuccess( createCommandProps, command, ); @@ -290,7 +289,7 @@ describe('CommandEffects', () => { it('should return showSnackbar action', () => { const command: CommandResource = createCommandResource(); - const actions: TypedAction<string>[] = effects.handleCreateCommandSuccess( + const actions: Action<string>[] = effects.handleCreateCommandSuccess( createCommandProps, command, ); @@ -306,7 +305,7 @@ describe('CommandEffects', () => { it('should return createCommandSuccess action', () => { const command: CommandResource = createCommandResource([CommandLinkRel.REVOKE]); - const actions: TypedAction<string>[] = effects.handleCreateCommandSuccess( + const actions: Action<string>[] = effects.handleCreateCommandSuccess( createCommandProps, command, ); @@ -319,7 +318,7 @@ describe('CommandEffects', () => { it('should return showRevokeSnackbar action', () => { const command: CommandResource = createCommandResource([CommandLinkRel.REVOKE]); - const actions: TypedAction<string>[] = effects.handleCreateCommandSuccess( + const actions: Action<string>[] = effects.handleCreateCommandSuccess( createCommandProps, command, ); @@ -350,7 +349,7 @@ describe('CommandEffects', () => { errorMessage: CommandErrorMessage.CONCURRENT_MODIFICATION, }; - const actions: TypedAction<string>[] = effects.handleCreateCommandSuccess( + const actions: Action<string>[] = effects.handleCreateCommandSuccess( createCommandProps, command, ); @@ -366,7 +365,7 @@ describe('CommandEffects', () => { describe('showRevokeSnackbar', () => { const command: CommandResource = createCommandResource(); - const showRevokeSnackbarAction: TypedAction<string> = CommandActions.showRevokeSnackbar({ + const showRevokeSnackbarAction: Action<string> = CommandActions.showRevokeSnackbar({ command, }); @@ -385,7 +384,7 @@ describe('CommandEffects', () => { it('should call handle snackbar by command', () => { effects.handleSnackbarByCommand = jest.fn(); - const showSnackbarAction: TypedAction<string> = CommandActions.showSnackbar({ + const showSnackbarAction: Action<string> = CommandActions.showSnackbar({ createCommandProps, command, }); @@ -451,7 +450,7 @@ describe('CommandEffects', () => { describe('revokeCommand', () => { const command: CommandResource = createCommandResource(); - const revokeCommandAction: TypedAction<string> = CommandActions.revokeCommand({ command }); + const revokeCommandAction: Action<string> = CommandActions.revokeCommand({ command }); const getCommand: CommandResource = createCommandResource(); @@ -498,7 +497,7 @@ describe('CommandEffects', () => { it('should return revokeCommandSuccess action', () => { const command: CommandResource = createCommandResource(); - const actions: (CommandProps & TypedAction<string>)[] = effects.handleRevokeCommand(command); + const actions: (CommandProps & Action<string>)[] = effects.handleRevokeCommand(command); expect(actions.length).toBe(1); expect(actions[0].type).toBe(CommandActions.revokeCommandSuccess.type); @@ -508,7 +507,7 @@ describe('CommandEffects', () => { it('should return pollRevokedCommand action on pending command', () => { const command: CommandResource = createCommandResource([CommandLinkRel.UPDATE]); - const actions: (CommandProps & TypedAction<string>)[] = effects.handleRevokeCommand(command); + const actions: (CommandProps & Action<string>)[] = effects.handleRevokeCommand(command); expect(actions.length).toBe(1); expect(actions[0].type).toBe(CommandActions.pollRevokedCommand.type); diff --git a/alfa-client/libs/command-shared/src/lib/+state/command.effects.ts b/alfa-client/libs/command-shared/src/lib/+state/command.effects.ts index 76c42d3899bc776736f109e5af66d73cccd23aa1..ea035ba98f7a5152449039b681d69429d8f5f9a9 100644 --- a/alfa-client/libs/command-shared/src/lib/+state/command.effects.ts +++ b/alfa-client/libs/command-shared/src/lib/+state/command.effects.ts @@ -2,8 +2,7 @@ import { EMPTY_STRING } from '@alfa-client/tech-shared'; import { SnackBarService } from '@alfa-client/ui'; import { Injectable } from '@angular/core'; import { Actions, createEffect, ofType } from '@ngrx/effects'; -import { Store } from '@ngrx/store'; -import { TypedAction } from '@ngrx/store/src/models'; +import { Store, Action } from '@ngrx/store'; import { isEmpty, isEqual, isUndefined } from 'lodash-es'; import { of } from 'rxjs'; import { catchError, delay, map, mergeMap, switchMap, tap } from 'rxjs/operators'; @@ -88,7 +87,7 @@ export class CommandEffects { handleCreatedCommand( createCommandProps: CreateCommandProps, command: CommandResource, - ): TypedAction<string>[] { + ): Action<string>[] { if (isPending(command)) { return [pollCreatedCommand({ createCommandProps, command })]; } @@ -98,7 +97,7 @@ export class CommandEffects { handleCreateCommandSuccess( createCommandProps: CreateCommandProps, command: CommandResource, - ): TypedAction<string>[] { + ): Action<string>[] { if (isRevokeable(command)) { return [createCommandSuccess({ command }), showRevokeSnackbar({ command })]; } @@ -183,7 +182,7 @@ export class CommandEffects { ), ); - handleRevokeCommand(command: CommandResource): (CommandProps & TypedAction<string>)[] { + handleRevokeCommand(command: CommandResource): (CommandProps & Action<string>)[] { if (isPending(command)) { return [pollRevokedCommand({ command })]; } diff --git a/alfa-client/libs/command-shared/src/lib/+state/command.reducer.spec.ts b/alfa-client/libs/command-shared/src/lib/+state/command.reducer.spec.ts index 0f1608566b39496da4c29248ac4d94975df6d5c8..db8bc5cfc9e9395d6e5aad756fa669b7cacaac45 100644 --- a/alfa-client/libs/command-shared/src/lib/+state/command.reducer.spec.ts +++ b/alfa-client/libs/command-shared/src/lib/+state/command.reducer.spec.ts @@ -13,7 +13,7 @@ import { createCommandResource, createCreateCommand } from '../../../test/comman import { CommandResource, CreateCommand } from '../command.model'; import { CommandState, initialState, reducer } from './command.reducer'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import * as CommandActions from '../+state/command.actions'; diff --git a/alfa-client/libs/command-shared/src/lib/command-resource.service.spec.ts b/alfa-client/libs/command-shared/src/lib/command-resource.service.spec.ts index 01af08536ee53c2b081a2da1a34d0823958d5e5c..282d49ecc2c827b47980b536a152681c9df26a3c 100644 --- a/alfa-client/libs/command-shared/src/lib/command-resource.service.spec.ts +++ b/alfa-client/libs/command-shared/src/lib/command-resource.service.spec.ts @@ -42,26 +42,31 @@ describe('CommandResourceService', () => { repository = mock(ResourceRepository); commandService = mock(CommandService); - service = new CommandResourceService( - config, - useFromMock(repository), - useFromMock(commandService), - ); + service = new CommandResourceService(config, useFromMock(repository), useFromMock(commandService)); }); it('should be created', () => { expect(service).toBeTruthy(); }); + describe('doSave', () => { + it('should throw error', () => { + expect(() => service.doSave(configResource, {})).toThrowError('Method not implemented.'); + }); + }); + + describe('doPatch', () => { + it('should throw error', () => { + expect(() => service.doPatch(configResource, {})).toThrowError('Method not implemented.'); + }); + }); + describe('delete', () => { const resourceWithDeleteLinkRel: Resource = createDummyResource([deleteLinkRel]); - const stateResourceWithDeleteLink: StateResource<Resource> = - createStateResource(resourceWithDeleteLinkRel); + const stateResourceWithDeleteLink: StateResource<Resource> = createStateResource(resourceWithDeleteLinkRel); beforeEach(() => { - commandService.createCommandByProps.mockReturnValue( - of(createStateResource(createCommandResource())), - ); + commandService.createCommandByProps.mockReturnValue(of(createStateResource(createCommandResource()))); service.stateResource.next(stateResourceWithDeleteLink); }); diff --git a/alfa-client/libs/command-shared/src/lib/command-resource.service.ts b/alfa-client/libs/command-shared/src/lib/command-resource.service.ts index 9a564442fd23862a0c85f645a6a93573ddca3612..4ec5a90e60890c26a04a3fd2d8aeed14794176d4 100644 --- a/alfa-client/libs/command-shared/src/lib/command-resource.service.ts +++ b/alfa-client/libs/command-shared/src/lib/command-resource.service.ts @@ -11,10 +11,7 @@ import { BehaviorSubject, Observable } from 'rxjs'; import { CommandResource, CreateCommandProps } from './command.model'; import { CommandService } from './command.service'; -export class CommandResourceService<B extends Resource, T extends Resource> extends ResourceService< - B, - T -> { +export class CommandResourceService<B extends Resource, T extends Resource> extends ResourceService<B, T> { deleteStateCommandResource: BehaviorSubject<StateResource<CommandResource>> = new BehaviorSubject< StateResource<CommandResource> >(createEmptyStateResource()); @@ -31,6 +28,10 @@ export class CommandResourceService<B extends Resource, T extends Resource> exte throw new Error('Method not implemented.'); } + doPatch(resource: T, toPatch: unknown): Observable<T> { + throw new Error('Method not implemented.'); + } + public delete(): Observable<StateResource<CommandResource>> { return this.commandService.createCommandByProps(this.buildDeleteCommandProps()); } diff --git a/alfa-client/libs/command-shared/src/lib/command.repository.spec.ts b/alfa-client/libs/command-shared/src/lib/command.repository.spec.ts index 1b90ac82a2d66db52066ddc4ec6af5b775f64f10..babfb0fc4f2041565abaf913d1e9a2ea4d31acdc 100644 --- a/alfa-client/libs/command-shared/src/lib/command.repository.spec.ts +++ b/alfa-client/libs/command-shared/src/lib/command.repository.spec.ts @@ -53,7 +53,7 @@ describe('CommandRepository', () => { }); describe('create command', () => { - const linkRel: string = faker.random.word(); + const linkRel: string = faker.word.sample(); const resource: Resource = toResource({}, [linkRel]); beforeEach(() => { diff --git a/alfa-client/libs/command-shared/src/lib/command.service.spec.ts b/alfa-client/libs/command-shared/src/lib/command.service.spec.ts index 2c736490b76edb56781a732be8c153632e7e6537..12643b4b21ade8dd1d036838c8848eafe6398f8f 100644 --- a/alfa-client/libs/command-shared/src/lib/command.service.spec.ts +++ b/alfa-client/libs/command-shared/src/lib/command.service.spec.ts @@ -96,7 +96,7 @@ describe('CommandService', () => { describe('create command', () => { const resource: Resource = toResource({}); - const linkRel: string = faker.random.word(); + const linkRel: string = faker.word.sample(); beforeEach(() => { repository.createCommand.mockReturnValue(cold('a', { a: commandResourceWithUpdateLink })); diff --git a/alfa-client/libs/command-shared/test/command.ts b/alfa-client/libs/command-shared/test/command.ts index 22dfc484d7137b928ec35e74de5a5902ef42a519..6843ee1d96699bc59ad4aeab4b49f14b63f6cd0b 100644 --- a/alfa-client/libs/command-shared/test/command.ts +++ b/alfa-client/libs/command-shared/test/command.ts @@ -34,7 +34,7 @@ export function createCommand(): Command { body: null, createdAt: faker.date.past(), finishedAt: faker.date.past(), - order: faker.random.word(), + order: faker.word.sample(), status: CommandStatus.FINISHED, errorMessage: null, }; @@ -85,6 +85,6 @@ export function createCreateCommandProps(): CreateCommandProps { resource: createCommandResource(), linkRel: faker.internet.url(), command: createCreateCommand(), - snackBarMessage: faker.random.words(5), + snackBarMessage: faker.word.sample(5), }; } diff --git a/alfa-client/libs/common-lib/.eslintrc.json b/alfa-client/libs/common-lib/.eslintrc.json new file mode 100644 index 0000000000000000000000000000000000000000..6685b2e35bbf3f0d58387f6617c9bd749c0c55f2 --- /dev/null +++ b/alfa-client/libs/common-lib/.eslintrc.json @@ -0,0 +1,45 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "lib", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "lib", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nx/angular-template"], + "rules": {} + }, + { + "files": ["*.json"], + "parser": "jsonc-eslint-parser", + "rules": { + "@nx/dependency-checks": [ + "error", + { + "ignoredFiles": ["{projectRoot}/eslint.config.{js,cjs,mjs}"] + } + ] + } + } + ] +} diff --git a/alfa-client/libs/common-lib/README.md b/alfa-client/libs/common-lib/README.md new file mode 100644 index 0000000000000000000000000000000000000000..f56ea72f2a6f3e405f04f090fb7d2670a8913dcf --- /dev/null +++ b/alfa-client/libs/common-lib/README.md @@ -0,0 +1,7 @@ +# common-lib + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test common-lib` to execute the unit tests. diff --git a/alfa-client/libs/common-lib/jest.config.ts b/alfa-client/libs/common-lib/jest.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..5126e9a7275f05132fe089f9560dd29e561a732e --- /dev/null +++ b/alfa-client/libs/common-lib/jest.config.ts @@ -0,0 +1,21 @@ +export default { + displayName: 'common-lib', + preset: '../../jest.preset.js', + setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'], + coverageDirectory: '../../coverage/libs/common-lib', + transform: { + '^.+\\.(ts|mjs|js|html)$': [ + 'jest-preset-angular', + { + tsconfig: '<rootDir>/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + ], + }, + transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/alfa-client/libs/common-lib/project.json b/alfa-client/libs/common-lib/project.json new file mode 100644 index 0000000000000000000000000000000000000000..8a477e97d512ef3eac6cfe8ff272ed0754b5991c --- /dev/null +++ b/alfa-client/libs/common-lib/project.json @@ -0,0 +1,20 @@ +{ + "name": "common-lib", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/common-lib/src", + "prefix": "lib", + "projectType": "library", + "tags": [], + "targets": { + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "libs/common-lib/jest.config.ts" + } + }, + "lint": { + "executor": "@nx/eslint:lint" + } + } +} diff --git a/alfa-client/libs/common-lib/src/index.ts b/alfa-client/libs/common-lib/src/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..f8f49f20b7993383fbce5faf8a3db0b1524766a0 --- /dev/null +++ b/alfa-client/libs/common-lib/src/index.ts @@ -0,0 +1 @@ +export * from './lib/build-info/build-info.component'; diff --git a/alfa-client/libs/navigation/src/lib/build-info/build-info.component.html b/alfa-client/libs/common-lib/src/lib/build-info/build-info.component.html similarity index 95% rename from alfa-client/libs/navigation/src/lib/build-info/build-info.component.html rename to alfa-client/libs/common-lib/src/lib/build-info/build-info.component.html index 41cce668006927fdd81db4f1c49e8eaca49358cd..097debe503d2855dd2fed9cd631badf65e9f1836 100644 --- a/alfa-client/libs/navigation/src/lib/build-info/build-info.component.html +++ b/alfa-client/libs/common-lib/src/lib/build-info/build-info.component.html @@ -30,6 +30,4 @@ <span data-test-id="build-time">{{ buildTime }}</span> </ng-container> </p> -<p *ngIf="isNotProduction" data-test-id="not-production-text" class="test-environment text-error"> - Achtung Testumgebung -</p> +<p *ngIf="isNotProduction" data-test-id="not-production-text" class="test-environment">Achtung Testumgebung</p> diff --git a/alfa-client/libs/navigation/src/lib/build-info/build-info.component.scss b/alfa-client/libs/common-lib/src/lib/build-info/build-info.component.scss similarity index 98% rename from alfa-client/libs/navigation/src/lib/build-info/build-info.component.scss rename to alfa-client/libs/common-lib/src/lib/build-info/build-info.component.scss index 73f433970c0765f31b0f88b78a30fad26513afdb..1d3adee3ebaa45eb315e04c8fca52fd70950e855 100644 --- a/alfa-client/libs/navigation/src/lib/build-info/build-info.component.scss +++ b/alfa-client/libs/common-lib/src/lib/build-info/build-info.component.scss @@ -61,4 +61,5 @@ p { margin-right: $navigation-height + $header-height; letter-spacing: 0.42em; text-transform: uppercase; + color: theme('colors.error'); } diff --git a/alfa-client/libs/navigation/src/lib/build-info/build-info.component.spec.ts b/alfa-client/libs/common-lib/src/lib/build-info/build-info.component.spec.ts similarity index 97% rename from alfa-client/libs/navigation/src/lib/build-info/build-info.component.spec.ts rename to alfa-client/libs/common-lib/src/lib/build-info/build-info.component.spec.ts index 663ad95f94a684c5b02cae60201ed823b66e4eab..ee6c655e9b27be5f653ac86eb2fbafbcb57400de 100644 --- a/alfa-client/libs/navigation/src/lib/build-info/build-info.component.spec.ts +++ b/alfa-client/libs/common-lib/src/lib/build-info/build-info.component.spec.ts @@ -21,10 +21,10 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { FormatDateWithTimePipe } from '@alfa-client/tech-shared'; import { registerLocaleData } from '@angular/common'; import localeDe from '@angular/common/locales/de'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { FormatDateWithTimePipe } from '@alfa-client/tech-shared'; import { createApiRootResource } from 'libs/api-root-shared/test/api-root'; import { BuildInfoComponent } from './build-info.component'; @@ -47,7 +47,8 @@ describe('BuildInfoComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [BuildInfoComponent, FormatDateWithTimePipe], + imports: [BuildInfoComponent], + declarations: [FormatDateWithTimePipe], }).compileComponents(); }); diff --git a/alfa-client/libs/navigation/src/lib/build-info/build-info.component.ts b/alfa-client/libs/common-lib/src/lib/build-info/build-info.component.ts similarity index 94% rename from alfa-client/libs/navigation/src/lib/build-info/build-info.component.ts rename to alfa-client/libs/common-lib/src/lib/build-info/build-info.component.ts index be8f576c3288bfb1818b1976030e5f0894a10d8d..8d7182c2f837679916ebc9b91ee0dc7ed382ca63 100644 --- a/alfa-client/libs/navigation/src/lib/build-info/build-info.component.ts +++ b/alfa-client/libs/common-lib/src/lib/build-info/build-info.component.ts @@ -21,13 +21,16 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Component, Input } from '@angular/core'; import { ApiRootResource } from '@alfa-client/api-root-shared'; +import { Component, Input } from '@angular/core'; import * as DateUtil from '@alfa-client/tech-shared'; +import { CommonModule } from '@angular/common'; @Component({ selector: 'alfa-build-info', + imports: [CommonModule], + standalone: true, templateUrl: './build-info.component.html', styleUrls: ['./build-info.component.scss'], }) diff --git a/alfa-client/libs/common-lib/src/test-setup.ts b/alfa-client/libs/common-lib/src/test-setup.ts new file mode 100644 index 0000000000000000000000000000000000000000..f7fad5e59f9d4e62a097bbea63040551de396175 --- /dev/null +++ b/alfa-client/libs/common-lib/src/test-setup.ts @@ -0,0 +1,11 @@ +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, +}); diff --git a/alfa-client/libs/common-lib/tailwind.config.js b/alfa-client/libs/common-lib/tailwind.config.js new file mode 100644 index 0000000000000000000000000000000000000000..d9b5f51f460d135ef0a5398164cf2a820caaa020 --- /dev/null +++ b/alfa-client/libs/common-lib/tailwind.config.js @@ -0,0 +1,14 @@ +const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); +const { join } = require('path'); + +const sharedTailwindConfig = require('../../libs/design-system/src/lib/tailwind-preset/tailwind.config.js'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + presets: [sharedTailwindConfig], + content: [join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), ...createGlobPatternsForDependencies(__dirname)], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/alfa-client/libs/common-lib/tsconfig.json b/alfa-client/libs/common-lib/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..7cc6baf2f58ed5ccfba098131996f579979e9f18 --- /dev/null +++ b/alfa-client/libs/common-lib/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "target": "es2022" + } +} diff --git a/alfa-client/libs/common-lib/tsconfig.lib.json b/alfa-client/libs/common-lib/tsconfig.lib.json new file mode 100644 index 0000000000000000000000000000000000000000..4cab05d46338c6e9d4dfe6512fd7eb7f60340d3d --- /dev/null +++ b/alfa-client/libs/common-lib/tsconfig.lib.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [] + }, + "exclude": ["src/**/*.spec.ts", "src/test-setup.ts", "jest.config.ts", "src/**/*.test.ts"], + "include": ["src/**/*.ts"] +} diff --git a/alfa-client/libs/common-lib/tsconfig.lib.prod.json b/alfa-client/libs/common-lib/tsconfig.lib.prod.json new file mode 100644 index 0000000000000000000000000000000000000000..61b523783f299f511f27248a42f86e5f9c29512f --- /dev/null +++ b/alfa-client/libs/common-lib/tsconfig.lib.prod.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": {} +} diff --git a/alfa-client/libs/common-lib/tsconfig.spec.json b/alfa-client/libs/common-lib/tsconfig.spec.json new file mode 100644 index 0000000000000000000000000000000000000000..7870b7c011681fb77d6114001f44d3eeca69975b --- /dev/null +++ b/alfa-client/libs/common-lib/tsconfig.spec.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "target": "es2016", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts"] +} diff --git a/alfa-client/libs/design-component/src/index.ts b/alfa-client/libs/design-component/src/index.ts index 0ed0ab64368e0b3716f3ed6b1ab8d7da0a6fc2d7..600bb7d1db3cc98d375a11d0ebf6b2e7660e62db 100644 --- a/alfa-client/libs/design-component/src/index.ts +++ b/alfa-client/libs/design-component/src/index.ts @@ -1,5 +1,7 @@ export * from './lib/button-with-spinner/button-with-spinner.component'; export * from './lib/download-button/download-button.component'; +export * from './lib/form/button-toggle-group/button-toggle-group.component'; +export * from './lib/form/checkbox-editor/checkbox-editor.component'; export * from './lib/form/file-upload-editor/file-upload-editor.component'; export * from './lib/form/formcontrol-editor.abstract.component'; export * from './lib/form/single-file-upload-editor/single-file-upload-editor.component'; diff --git a/alfa-client/libs/design-component/src/lib/button-with-spinner/button-with-spinner.component.ts b/alfa-client/libs/design-component/src/lib/button-with-spinner/button-with-spinner.component.ts index 2489bb3d94ad7f490abf17231a075dc0050700c2..e8388104a49fcb510c88b01ba98e4ea57fa2135f 100644 --- a/alfa-client/libs/design-component/src/lib/button-with-spinner/button-with-spinner.component.ts +++ b/alfa-client/libs/design-component/src/lib/button-with-spinner/button-with-spinner.component.ts @@ -2,7 +2,6 @@ import { CommandResource, hasCommandError } from '@alfa-client/command-shared'; import { StateResource, createEmptyStateResource, isLoaded } from '@alfa-client/tech-shared'; import { CommonModule } from '@angular/common'; import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; -import { Resource } from '@ngxp/rest'; import { ButtonComponent, ErrorMessageComponent, buttonVariants } from '@ods/system'; import { VariantProps } from 'class-variance-authority'; import { isNil } from 'lodash-es'; @@ -33,7 +32,7 @@ type ButtonVariants = VariantProps<typeof buttonVariants>; export class ButtonWithSpinnerComponent implements OnInit { @Input() text: string = ''; @Input() dataTestId: string = ''; - @Input() stateResource: StateResource<Resource>; + @Input() stateResource: StateResource<unknown>; @Input() variant: ButtonVariants['variant'] = 'primary'; @Input() size: ButtonVariants['size'] = 'medium'; @@ -43,8 +42,8 @@ export class ButtonWithSpinnerComponent implements OnInit { this.stateResource = this.getStateResource(); } - getStateResource(): StateResource<Resource> { - return isNil(this.stateResource) ? createEmptyStateResource<Resource>() : this.stateResource; + getStateResource(): StateResource<unknown> { + return isNil(this.stateResource) ? createEmptyStateResource() : this.stateResource; } get isLoading(): boolean { diff --git a/alfa-client/libs/design-component/src/lib/form/button-toggle-group/button-toggle-group.component.spec.ts b/alfa-client/libs/design-component/src/lib/form/button-toggle-group/button-toggle-group.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..5b489dad32f898338a974820ca98e3b7696aba38 --- /dev/null +++ b/alfa-client/libs/design-component/src/lib/form/button-toggle-group/button-toggle-group.component.spec.ts @@ -0,0 +1,129 @@ +import { QueryList } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ButtonToggleComponent } from '@ods/system'; +import { ButtonToggleGroupComponent } from './button-toggle-group.component'; + +describe('ButtonToggleGroupComponent', () => { + let component: ButtonToggleGroupComponent; + let fixture: ComponentFixture<ButtonToggleGroupComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ButtonToggleGroupComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(ButtonToggleGroupComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + describe('component', () => { + describe('ngAfterContentInit', () => { + beforeEach(() => { + component.passPropsToChild = jest.fn(); + }); + + it('should pass props to children', () => { + const queryList: QueryList<ButtonToggleComponent> = new QueryList(); + queryList.reset([new ButtonToggleComponent(), new ButtonToggleComponent()]); + component.buttonToggles = queryList; + + component.ngAfterContentInit(); + + expect(component.passPropsToChild).toHaveBeenCalledTimes(2); + }); + }); + + describe('passPropsToChild', () => { + const funcOne: () => number = jest.fn().mockReturnValue(1); + const funcTwo: () => number = jest.fn().mockReturnValue(2); + + beforeEach(() => { + component.setFormControlValue = jest.fn().mockReturnValue(funcOne); + component.isValueSelected = jest.fn().mockReturnValue(funcTwo); + }); + + it('should call setFormControlValue', () => { + const buttonToggle = new ButtonToggleComponent(); + buttonToggle.value = 'test'; + + component.passPropsToChild(buttonToggle); + + expect(component.setFormControlValue).toHaveBeenCalledWith('test'); + }); + + it('should set onClick for child', () => { + const buttonToggle = new ButtonToggleComponent(); + + component.passPropsToChild(buttonToggle); + + expect(buttonToggle.onClick).toBe(funcOne); + }); + + it('should call isValueSelected', () => { + const buttonToggle = new ButtonToggleComponent(); + + component.passPropsToChild(buttonToggle); + + expect(component.isValueSelected).toHaveBeenCalled(); + }); + + it('should set isSelected for child', () => { + const buttonToggle = new ButtonToggleComponent(); + + component.passPropsToChild(buttonToggle); + + expect(buttonToggle.isSelected).toBe(funcTwo); + }); + }); + + describe('setFormControlValue', () => { + beforeEach(() => { + component.fieldControl.setValue = jest.fn(); + fixture.detectChanges(); + }); + + it('should return function', () => { + const result: Function = component.setFormControlValue('test'); + + expect(typeof result).toBe('function'); + }); + + it('should set value if values are not equal', () => { + component.setFormControlValue('test')(); + + expect(component.fieldControl.setValue).toHaveBeenCalledWith('test'); + }); + + it('should not set value if values are equal', () => { + component.setFormControlValue(null)(); + + expect(component.fieldControl.setValue).not.toHaveBeenCalled(); + }); + }); + + describe('isValueSelected', () => { + it('should return function', () => { + const result: Function = component.isValueSelected(); + + expect(typeof result).toBe('function'); + }); + + it('should return true', () => { + const result: boolean = component.isValueSelected()(null); + + expect(result).toBe(true); + }); + + it('should return false', () => { + const result: boolean = component.isValueSelected()('whatever'); + + expect(result).toBe(false); + }); + }); + }); +}); diff --git a/alfa-client/libs/design-component/src/lib/form/button-toggle-group/button-toggle-group.component.ts b/alfa-client/libs/design-component/src/lib/form/button-toggle-group/button-toggle-group.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..075a003b1b1cf63ece3d2d7ef93b3bb9e0a4b89c --- /dev/null +++ b/alfa-client/libs/design-component/src/lib/form/button-toggle-group/button-toggle-group.component.ts @@ -0,0 +1,41 @@ +import { CommonModule } from '@angular/common'; +import { AfterContentInit, Component, ContentChildren, QueryList } from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { ButtonToggleComponent } from '@ods/system'; +import { FormControlEditorAbstractComponent } from '../formcontrol-editor.abstract.component'; + +@Component({ + selector: 'ods-button-toggle-group', + standalone: true, + imports: [CommonModule], + template: `<div + class="flex divide-x divide-neutral-300 overflow-hidden rounded-full border border-neutral-300 bg-white dark:divide-neutral-600 dark:border-neutral-600 dark:bg-neutral-700" + role="group" + > + <ng-content></ng-content> + </div>`, +}) +export class ButtonToggleGroupComponent extends FormControlEditorAbstractComponent implements AfterContentInit { + @ContentChildren(ButtonToggleComponent) buttonToggles!: QueryList<ButtonToggleComponent>; + + ngAfterContentInit(): void { + this.buttonToggles.forEach((toggleButton: ButtonToggleComponent) => this.passPropsToChild(toggleButton)); + } + + passPropsToChild(toggleButton: ButtonToggleComponent): void { + toggleButton.onClick = this.setFormControlValue(toggleButton.value); + toggleButton.isSelected = this.isValueSelected(); + } + + setFormControlValue(value: string): () => void { + const formControl: FormControl = this.fieldControl; + return () => { + if (formControl.value !== value) formControl.setValue(value); + }; + } + + isValueSelected(): (value: string) => boolean { + const formControl: FormControl = this.fieldControl; + return (value: string) => formControl.value === value; + } +} diff --git a/alfa-client/libs/design-component/src/lib/form/checkbox-editor/checkbox-editor.component.html b/alfa-client/libs/design-component/src/lib/form/checkbox-editor/checkbox-editor.component.html new file mode 100644 index 0000000000000000000000000000000000000000..aecfd7e8dcaf39151ce1772d111f06068feb5c45 --- /dev/null +++ b/alfa-client/libs/design-component/src/lib/form/checkbox-editor/checkbox-editor.component.html @@ -0,0 +1,15 @@ +<ods-checkbox + [fieldControl]="fieldControl" + [value]="value" + [inputId]="inputId" + [label]="label" + [disabled]="disabled" + [hasError]="hasError" +> + <ods-validation-error + error + [invalidParams]="invalidParams" + [label]="label" + [attr.data-test-id]="(label | convertForDataTest) + '-checkbox-editor-error'" + /> +</ods-checkbox> diff --git a/alfa-client/libs/design-component/src/lib/form/checkbox-editor/checkbox-editor.component.spec.ts b/alfa-client/libs/design-component/src/lib/form/checkbox-editor/checkbox-editor.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..9c80662fb8d43561499969f3931569d0cb542e29 --- /dev/null +++ b/alfa-client/libs/design-component/src/lib/form/checkbox-editor/checkbox-editor.component.spec.ts @@ -0,0 +1,68 @@ +import { getElementFromFixture } from '@alfa-client/test-utils'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { faker } from '@faker-js/faker'; +import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; +import { createInvalidParam } from 'libs/tech-shared/test/error'; +import { CheckboxEditorComponent } from './checkbox-editor.component'; + +describe('CheckboxEditorComponent', () => { + let component: CheckboxEditorComponent; + let fixture: ComponentFixture<CheckboxEditorComponent>; + + const labelText: string = faker.word.noun(); + const errorMessageId: string = getDataTestIdOf(labelText + '-checkbox-editor-error'); + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [CheckboxEditorComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(CheckboxEditorComponent); + component = fixture.componentInstance; + component.label = labelText; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + describe('component', () => { + describe('hasError', () => { + it('should return true', () => { + component.fieldControl.setErrors({ 1: createInvalidParam() }); + + const result: boolean = component.hasError; + + expect(result).toBe(true); + }); + + it('should return false', () => { + component.fieldControl.setErrors(null); + + const result: boolean = component.hasError; + + expect(result).toBe(false); + }); + }); + }); + + describe('template', () => { + describe('error message', () => { + it('should show', () => { + component.fieldControl.setErrors({ 1: createInvalidParam() }); + fixture.detectChanges(); + + const element: HTMLElement = getElementFromFixture(fixture, errorMessageId); + + expect(element).not.toBeEmptyDOMElement(); + }); + + it('should hide', () => { + const element: HTMLElement = getElementFromFixture(fixture, errorMessageId); + + expect(element).toBeEmptyDOMElement(); + }); + }); + }); +}); diff --git a/alfa-client/libs/design-component/src/lib/form/checkbox-editor/checkbox-editor.component.ts b/alfa-client/libs/design-component/src/lib/form/checkbox-editor/checkbox-editor.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..4ed5d7b07e60146f9a3dc471563c855466d888d7 --- /dev/null +++ b/alfa-client/libs/design-component/src/lib/form/checkbox-editor/checkbox-editor.component.ts @@ -0,0 +1,22 @@ +import { TechSharedModule } from '@alfa-client/tech-shared'; +import { Component, Input } from '@angular/core'; +import { CheckboxComponent } from '@ods/system'; +import { FormControlEditorAbstractComponent } from '../formcontrol-editor.abstract.component'; +import { ValidationErrorComponent } from '../validation-error/validation-error.component'; + +@Component({ + selector: 'ods-checkbox-editor', + standalone: true, + imports: [CheckboxComponent, ValidationErrorComponent, TechSharedModule], + templateUrl: './checkbox-editor.component.html', +}) +export class CheckboxEditorComponent extends FormControlEditorAbstractComponent { + @Input() value: string; + @Input() inputId: string; + @Input() label: string; + @Input() disabled: boolean = false; + + get hasError(): boolean { + return this.invalidParams.length > 0; + } +} diff --git a/alfa-client/libs/design-component/src/lib/form/text-editor/text-editor.component.spec.ts b/alfa-client/libs/design-component/src/lib/form/text-editor/text-editor.component.spec.ts index 90050933f1b1efdcd32a4f69238588c7becfafe0..2ebf3900f1747191bc43eaf8c2423c16e3ea736d 100644 --- a/alfa-client/libs/design-component/src/lib/form/text-editor/text-editor.component.spec.ts +++ b/alfa-client/libs/design-component/src/lib/form/text-editor/text-editor.component.spec.ts @@ -1,7 +1,7 @@ import { getElementFromFixture } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { MockComponent } from 'ng-mocks'; import { ValidationErrorComponent } from '../validation-error/validation-error.component'; diff --git a/alfa-client/libs/design-component/src/lib/form/textarea-editor/textarea-editor.component.spec.ts b/alfa-client/libs/design-component/src/lib/form/textarea-editor/textarea-editor.component.spec.ts index 4edd71d78ee59fa5c97ed6bf7ec19eff5f335530..4dcf93c1999b7bda8f8bd3cfa3efa04237d3505f 100644 --- a/alfa-client/libs/design-component/src/lib/form/textarea-editor/textarea-editor.component.spec.ts +++ b/alfa-client/libs/design-component/src/lib/form/textarea-editor/textarea-editor.component.spec.ts @@ -1,6 +1,6 @@ import { getElementFromFixture } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { TextareaEditorComponent } from './textarea-editor.component'; diff --git a/alfa-client/libs/design-system/.storybook/main.ts b/alfa-client/libs/design-system/.storybook/main.ts index fa7cd9a6811d2b526834d3f016ab91974a9a2f40..014ad108623c7560edeb6e130f6fbddf8fa4ed7b 100644 --- a/alfa-client/libs/design-system/.storybook/main.ts +++ b/alfa-client/libs/design-system/.storybook/main.ts @@ -2,18 +2,14 @@ import type { StorybookConfig } from '@storybook/angular'; const config: StorybookConfig = { stories: ['../**/*.@(mdx|stories.@(js|jsx|ts|tsx))'], - addons: [ - '@storybook/addon-essentials', - 'storybook-tailwind-dark-mode', - '@chromatic-com/storybook' - ], + addons: ['@storybook/addon-essentials', '@chromatic-com/storybook'], framework: { name: '@storybook/angular', options: {}, }, - docs: {} + docs: {}, }; export default config; diff --git a/alfa-client/libs/design-system/.storybook/styles.scss b/alfa-client/libs/design-system/.storybook/styles.scss index 070e34c4f9df1c9fd2e82dba14fe52f4133d4290..03c83ce9273f2545d66b17e0eaa90d03164e83fe 100644 --- a/alfa-client/libs/design-system/.storybook/styles.scss +++ b/alfa-client/libs/design-system/.storybook/styles.scss @@ -1,2 +1 @@ @import '../src/lib/tailwind-preset/root.css'; -@import '../../../apps/admin/src/styles.scss'; diff --git a/alfa-client/libs/design-system/src/index.ts b/alfa-client/libs/design-system/src/index.ts index 117e400441f35a9a21750521457c1c7537a808d0..d64022f37b2b81e968b4bed34e2eed7d5741ccae 100644 --- a/alfa-client/libs/design-system/src/index.ts +++ b/alfa-client/libs/design-system/src/index.ts @@ -5,9 +5,12 @@ export * from './lib/bescheid-status-text/bescheid-status-text.component'; export * from './lib/bescheid-wrapper/bescheid-wrapper.component'; export * from './lib/button-card/button-card.component'; export * from './lib/button/button.component'; -export * from './lib/checkbox/checkbox.component'; -export * from './lib/fieldset/fieldset.component'; +export * from './lib/dropdown-menu/dropdown-menu-button/dropdown-menu-button.component'; +export * from './lib/dropdown-menu/dropdown-menu/dropdown-menu.component'; +export * from './lib/form/button-toggle/button-toggle.component'; +export * from './lib/form/checkbox/checkbox.component'; export * from './lib/form/error-message/error-message.component'; +export * from './lib/form/fieldset/fieldset.component'; export * from './lib/form/file-upload-button/file-upload-button.component'; export * from './lib/form/radio-button-card/radio-button-card.component'; export * from './lib/form/text-input/text-input.component'; @@ -16,24 +19,31 @@ export * from './lib/icons/admin-logo-icon/admin-logo-icon.component'; export * from './lib/icons/attachment-icon/attachment-icon.component'; export * from './lib/icons/bescheid-generate-icon/bescheid-generate-icon.component'; export * from './lib/icons/bescheid-upload-icon/bescheid-upload-icon.component'; +export * from './lib/icons/check-icon/check-icon.component'; export * from './lib/icons/close-icon/close-icon.component'; -export * from './lib/icons/collaboration-icon/collaboration-icon.component'; +export * from './lib/icons/edit-icon/edit-icon.component'; +export * from './lib/icons/error-icon/error-icon.component'; export * from './lib/icons/exclamation-icon/exclamation-icon.component'; +export * from './lib/icons/external-unit-icon/external-unit-icon.component'; export * from './lib/icons/file-icon/file-icon.component'; export * from './lib/icons/iconVariants'; export * from './lib/icons/logout-icon/logout-icon.component'; export * from './lib/icons/mailbox-icon/mailbox-icon.component'; export * from './lib/icons/office-icon/office-icon.component'; export * from './lib/icons/orga-unit-icon/orga-unit-icon.component'; +export * from './lib/icons/person-icon/person-icon.component'; +export * from './lib/icons/public-administration-icon/public-administration-icon.component'; export * from './lib/icons/save-icon/save-icon.component'; export * from './lib/icons/search-icon/search-icon.component'; export * from './lib/icons/send-icon/send-icon.component'; export * from './lib/icons/spinner-icon/spinner-icon.component'; export * from './lib/icons/stamp-icon/stamp-icon.component'; +export * from './lib/icons/user-icon/user-icon.component'; +export * from './lib/icons/users-icon/users-icon.component'; export * from './lib/instant-search/instant-search/instant-search.component'; export * from './lib/instant-search/instant-search/instant-search.model'; +export * from './lib/list/list-item/list-item.component'; +export * from './lib/list/list.component'; export * from './lib/navbar/nav-item/nav-item.component'; export * from './lib/navbar/navbar/navbar.component'; -export * from './lib/popup/popup-list-item/popup-list-item.component'; -export * from './lib/popup/popup/popup.component'; export * from './lib/testbtn/testbtn.component'; diff --git a/alfa-client/libs/design-system/src/lib/attachment-header/attachment-header.stories.ts b/alfa-client/libs/design-system/src/lib/attachment-header/attachment-header.stories.ts index 33a3d93237c69b82a28b08efaf36cc92f5970c5e..93e10c31dad435947a911e15fe0b655e8f6bea51 100644 --- a/alfa-client/libs/design-system/src/lib/attachment-header/attachment-header.stories.ts +++ b/alfa-client/libs/design-system/src/lib/attachment-header/attachment-header.stories.ts @@ -1,8 +1,7 @@ import { argsToTemplate, moduleMetadata, type Meta, type StoryObj } from '@storybook/angular'; -import { DownloadButtonComponent } from '../../../../design-component/src/lib/download-button/download-button.component'; - import { AttachmentComponent } from '../attachment/attachment.component'; +import { SaveIconComponent } from '../icons/save-icon/save-icon.component'; import { AttachmentHeaderComponent } from './attachment-header.component'; const meta: Meta<AttachmentHeaderComponent> = { @@ -17,7 +16,7 @@ const meta: Meta<AttachmentHeaderComponent> = { }, decorators: [ moduleMetadata({ - imports: [AttachmentHeaderComponent, AttachmentComponent, DownloadButtonComponent], + imports: [AttachmentHeaderComponent, AttachmentComponent, SaveIconComponent], }), ], excludeStories: /.*Data$/, @@ -39,7 +38,9 @@ export const Default: Story = { render: (args) => ({ props: args, template: `<ods-attachment-header ${argsToTemplate(args)}> - <ods-download-button action-buttons /> + <button action-buttons> + <ods-save-icon size="small" class="fill-text" /> + </button> </ods-attachment-header>`, }), }; diff --git a/alfa-client/libs/design-system/src/lib/attachment-wrapper/attachment-wrapper.stories.ts b/alfa-client/libs/design-system/src/lib/attachment-wrapper/attachment-wrapper.stories.ts index 7d8f0fbec59aeb00afc99d2377c1902abd20c73d..0e1baf1fc903f85c045de1c29c7fed5a108c6022 100644 --- a/alfa-client/libs/design-system/src/lib/attachment-wrapper/attachment-wrapper.stories.ts +++ b/alfa-client/libs/design-system/src/lib/attachment-wrapper/attachment-wrapper.stories.ts @@ -1,9 +1,8 @@ import { moduleMetadata, type Meta, type StoryObj } from '@storybook/angular'; -import { DownloadButtonComponent } from '../../../../design-component/src/lib/download-button/download-button.component'; - import { AttachmentHeaderComponent } from '../attachment-header/attachment-header.component'; import { AttachmentComponent } from '../attachment/attachment.component'; +import { SaveIconComponent } from '../icons/save-icon/save-icon.component'; import { AttachmentWrapperComponent } from './attachment-wrapper.component'; const meta: Meta<AttachmentWrapperComponent> = { @@ -18,12 +17,7 @@ const meta: Meta<AttachmentWrapperComponent> = { }, decorators: [ moduleMetadata({ - imports: [ - AttachmentWrapperComponent, - AttachmentComponent, - DownloadButtonComponent, - AttachmentHeaderComponent, - ], + imports: [AttachmentWrapperComponent, AttachmentComponent, SaveIconComponent, AttachmentHeaderComponent], }), ], excludeStories: /.*Data$/, @@ -37,7 +31,9 @@ export const Default: Story = { render: () => ({ template: `<ods-attachment-wrapper> <ods-attachment-header title="Anhänge"> - <ods-download-button action-buttons /> + <button action-buttons> + <ods-save-icon size="small" class="fill-text" /> + </button> </ods-attachment-header> <ods-attachment caption="Attachment" description="200 kB" fileType="pdf"></ods-attachment> <ods-attachment caption="Second attachment" description="432 kB" fileType="doc"></ods-attachment> diff --git a/alfa-client/libs/design-system/src/lib/checkbox/checkbox.component.spec.ts b/alfa-client/libs/design-system/src/lib/checkbox/checkbox.component.spec.ts deleted file mode 100644 index c25c5efdcce199e3c83dfd6adfceed567f2ea5d3..0000000000000000000000000000000000000000 --- a/alfa-client/libs/design-system/src/lib/checkbox/checkbox.component.spec.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { FormControl } from '@angular/forms'; -import { CheckboxComponent } from './checkbox.component'; - -describe('CheckboxComponent', () => { - let component: CheckboxComponent; - let fixture: ComponentFixture<CheckboxComponent>; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [CheckboxComponent], - }).compileComponents(); - - fixture = TestBed.createComponent(CheckboxComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); - - describe('component', () => { - describe('hasError', () => { - it('should return true', () => { - const formControlWithError = new FormControl(false); - formControlWithError.setErrors({ 1: 'error' }); - component.fieldControl = formControlWithError; - - const result: boolean = component.hasError(); - - expect(result).toBe(true); - }); - - it('should return false', () => { - const formControl = new FormControl(false); - component.fieldControl = formControl; - - const result: boolean = component.hasError(); - - expect(result).toBe(false); - }); - }); - }); -}); diff --git a/alfa-client/libs/design-system/src/lib/checkbox/checkbox.component.ts b/alfa-client/libs/design-system/src/lib/checkbox/checkbox.component.ts deleted file mode 100644 index 8a6ebfc41ac9fa2903387a0474510f080a3ec306..0000000000000000000000000000000000000000 --- a/alfa-client/libs/design-system/src/lib/checkbox/checkbox.component.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { isNotEmpty } from '@alfa-client/tech-shared'; -import { CommonModule } from '@angular/common'; -import { Component, Input } from '@angular/core'; -import { FormControl, ReactiveFormsModule } from '@angular/forms'; - -@Component({ - selector: 'ods-checkbox', - standalone: true, - imports: [CommonModule, ReactiveFormsModule], - template: ` - <div class="flex items-start gap-3 text-start"> - <input - type="checkbox" - class="peer relative box-border size-5 shrink-0 appearance-none rounded-sm border bg-whitetext - outline outline-2 outline-offset-2 outline-transparent hover:border-2 focus-visible:border-background-200 - disabled:border-disabled-dark disabled:bg-disabled disabled:hover:border" - [ngClass]=" - hasError() ? - 'border-error hover:border-error focus-visible:outline-error' - : 'border-primary hover:border-primary-hover focus-visible:outline-focus' - " - [value]="value" - [checked]="fieldControl.value" - [attr.id]="inputId" - [disabled]="disabled" - /> - <label class="leading-5 text-text" [attr.for]="inputId">{{ label }}</label> - <svg - viewBox="0 0 12 9" - xmlns="http://www.w3.org/2000/svg" - class="pointer-events-none absolute hidden size-5 p-1 outline-none peer-checked:block" - [ngClass]="hasError() ? 'fill-error' : 'fill-primary focus-visible:fill-focus'" - > - <path - d="M3.81353 7.10067L0.968732 4.30201L0 5.24832L3.81353 - 9L12 0.946309L11.0381 0L3.81353 7.10067Z" - /> - </svg> - </div> - `, -}) -export class CheckboxComponent { - @Input() fieldControl: FormControl = new FormControl(false); - @Input() value: string; - @Input() inputId: string; - @Input() label: string; - @Input() disabled: boolean = false; - - hasError(): boolean { - return isNotEmpty(this.fieldControl.errors); - } -} diff --git a/alfa-client/libs/design-system/src/lib/popup/popup-list-item/popup-list-item.component.spec.ts b/alfa-client/libs/design-system/src/lib/dropdown-menu/dropdown-menu-button/dropdown-menu-button.component.spec.ts similarity index 65% rename from alfa-client/libs/design-system/src/lib/popup/popup-list-item/popup-list-item.component.spec.ts rename to alfa-client/libs/design-system/src/lib/dropdown-menu/dropdown-menu-button/dropdown-menu-button.component.spec.ts index 3d624f9674b26a1f03a2e024f0139f9eb8230746..2bcb6edef656dfbd88ae821211e204eeae9c1917 100644 --- a/alfa-client/libs/design-system/src/lib/popup/popup-list-item/popup-list-item.component.spec.ts +++ b/alfa-client/libs/design-system/src/lib/dropdown-menu/dropdown-menu-button/dropdown-menu-button.component.spec.ts @@ -1,17 +1,17 @@ import { dispatchEventFromFixture } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { PopupListItemComponent } from './popup-list-item.component'; +import { DropdownMenuButtonComponent } from './dropdown-menu-button.component'; -describe('PopupListItemComponent', () => { - let component: PopupListItemComponent; - let fixture: ComponentFixture<PopupListItemComponent>; +describe('DropdownMenuButtonComponent', () => { + let component: DropdownMenuButtonComponent; + let fixture: ComponentFixture<DropdownMenuButtonComponent>; beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [PopupListItemComponent], + imports: [DropdownMenuButtonComponent], }).compileComponents(); - fixture = TestBed.createComponent(PopupListItemComponent); + fixture = TestBed.createComponent(DropdownMenuButtonComponent); component = fixture.componentInstance; fixture.detectChanges(); }); diff --git a/alfa-client/libs/design-system/src/lib/popup/popup-list-item/popup-list-item.component.ts b/alfa-client/libs/design-system/src/lib/dropdown-menu/dropdown-menu-button/dropdown-menu-button.component.ts similarity index 71% rename from alfa-client/libs/design-system/src/lib/popup/popup-list-item/popup-list-item.component.ts rename to alfa-client/libs/design-system/src/lib/dropdown-menu/dropdown-menu-button/dropdown-menu-button.component.ts index 3bc88c4c30db6091ccf72a4e3658972fe4f117b6..ca2f522f5e5a4afb408f97635d84afef1e25f5ee 100644 --- a/alfa-client/libs/design-system/src/lib/popup/popup-list-item/popup-list-item.component.ts +++ b/alfa-client/libs/design-system/src/lib/dropdown-menu/dropdown-menu-button/dropdown-menu-button.component.ts @@ -2,19 +2,20 @@ import { CommonModule } from '@angular/common'; import { Component, EventEmitter, Input, Output } from '@angular/core'; @Component({ - selector: 'ods-popup-list-item', + selector: 'ods-dropdown-menu-button', standalone: true, imports: [CommonModule], template: `<button - class="flex min-h-12 w-full items-center gap-4 border-2 border-transparent bg-whitetext px-4 py-3 text-start outline-none hover:border-primary focus-visible:border-focus" - role="listitem" + class="flex min-h-12 w-full items-center gap-4 border-2 border-transparent px-4 py-3 + text-start outline-none hover:border-primary focus-visible:border-focus" + role="menuitem" (click)="itemClicked.emit()" > <ng-content select="[icon]" /> <p class="text-text">{{ caption }}</p> </button>`, }) -export class PopupListItemComponent { +export class DropdownMenuButtonComponent { @Input({ required: true }) caption!: string; @Output() itemClicked: EventEmitter<MouseEvent> = new EventEmitter(); diff --git a/alfa-client/libs/design-system/src/lib/popup/popup/popup.component.spec.ts b/alfa-client/libs/design-system/src/lib/dropdown-menu/dropdown-menu/dropdown-menu.component.spec.ts similarity index 80% rename from alfa-client/libs/design-system/src/lib/popup/popup/popup.component.spec.ts rename to alfa-client/libs/design-system/src/lib/dropdown-menu/dropdown-menu/dropdown-menu.component.spec.ts index fe6160acf32b4e63623ac2996b32f6222e377188..4848c4005e5493630f498836b2807519da953cbe 100644 --- a/alfa-client/libs/design-system/src/lib/popup/popup/popup.component.spec.ts +++ b/alfa-client/libs/design-system/src/lib/dropdown-menu/dropdown-menu/dropdown-menu.component.spec.ts @@ -1,19 +1,19 @@ import { getElementFromFixture } from '@alfa-client/test-utils'; import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; -import { PopupComponent } from './popup.component'; +import { DropdownMenuComponent } from './dropdown-menu.component'; -describe('PopupComponent', () => { - let component: PopupComponent; - let fixture: ComponentFixture<PopupComponent>; - const popupButton: string = getDataTestIdOf('popup-button'); +describe('DropdownMenuComponent', () => { + let component: DropdownMenuComponent; + let fixture: ComponentFixture<DropdownMenuComponent>; + const dropdownButton: string = getDataTestIdOf('dropdown-button'); beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [PopupComponent], + imports: [DropdownMenuComponent], }).compileComponents(); - fixture = TestBed.createComponent(PopupComponent); + fixture = TestBed.createComponent(DropdownMenuComponent); component = fixture.componentInstance; fixture.detectChanges(); }); @@ -40,6 +40,24 @@ describe('PopupComponent', () => { }); }); + describe('toggleFocusedButton', () => { + it('should change false to true', () => { + component.isButtonFocused = false; + + component.toggleFocusedButton(); + + expect(component.isButtonFocused).toBe(true); + }); + + it('should change true to false', () => { + component.isButtonFocused = true; + + component.toggleFocusedButton(); + + expect(component.isButtonFocused).toBe(false); + }); + }); + describe('handleButtonClick', () => { beforeEach(() => { component.togglePopup = jest.fn(); @@ -80,12 +98,34 @@ describe('PopupComponent', () => { })); }); + describe('on focus button', () => { + it('should toggle focused button', () => { + component.toggleFocusedButton = jest.fn(); + const buttonElement: HTMLElement = getElementFromFixture(fixture, dropdownButton); + + buttonElement.focus(); + + expect(component.toggleFocusedButton).toHaveBeenCalled(); + }); + }); + + describe('on blur button', () => { + it('should toggle focused button', () => { + component.toggleFocusedButton = jest.fn(); + const buttonElement: HTMLElement = getElementFromFixture(fixture, dropdownButton); + + buttonElement.dispatchEvent(new Event('blur')); + + expect(component.toggleFocusedButton).toHaveBeenCalled(); + }); + }); + describe('aria-expanded', () => { it('should be true if popup is open', () => { component.isPopupOpen = true; fixture.detectChanges(); - const buttonElement: HTMLElement = getElementFromFixture(fixture, popupButton); + const buttonElement: HTMLElement = getElementFromFixture(fixture, dropdownButton); expect(buttonElement.getAttribute('aria-expanded')).toBe('true'); }); @@ -94,7 +134,7 @@ describe('PopupComponent', () => { component.isPopupOpen = false; fixture.detectChanges(); - const buttonElement: HTMLElement = getElementFromFixture(fixture, popupButton); + const buttonElement: HTMLElement = getElementFromFixture(fixture, dropdownButton); expect(buttonElement.getAttribute('aria-expanded')).toBe('false'); }); diff --git a/alfa-client/libs/design-system/src/lib/popup/popup/popup.component.ts b/alfa-client/libs/design-system/src/lib/dropdown-menu/dropdown-menu/dropdown-menu.component.ts similarity index 75% rename from alfa-client/libs/design-system/src/lib/popup/popup/popup.component.ts rename to alfa-client/libs/design-system/src/lib/dropdown-menu/dropdown-menu/dropdown-menu.component.ts index 60adf093640b07510296fab35c0a6e4fbb3650e9..35cc64b06437d36745806052b651115d4d307b99 100644 --- a/alfa-client/libs/design-system/src/lib/popup/popup/popup.component.ts +++ b/alfa-client/libs/design-system/src/lib/dropdown-menu/dropdown-menu/dropdown-menu.component.ts @@ -4,24 +4,28 @@ import { Component, ElementRef, HostListener, Input, ViewChild } from '@angular/ import { twMerge } from 'tailwind-merge'; @Component({ - selector: 'ods-popup', + selector: 'ods-dropdown-menu', standalone: true, imports: [CommonModule, CdkTrapFocus], template: `<div class="relative w-fit"> <button - [ngClass]="[twMerge('w-fit outline-2 outline-offset-2 outline-focus', buttonClass)]" + [ngClass]="[twMerge('block w-fit outline-2 outline-offset-2 outline-focus', buttonClass)]" (click)="handleButtonClick()" [attr.aria-expanded]="isPopupOpen" aria-haspopup="true" [attr.aria-label]="label" - data-test-id="popup-button" + [attr.data-test-id]="buttonTestId" + [class.ods-focused]="isButtonFocused" + (focus)="toggleFocusedButton()" + (blur)="toggleFocusedButton()" #button > <ng-content select="[button-content]" /> </button> - <ul + <div *ngIf="isPopupOpen" - class="absolute max-h-120 min-w-44 max-w-80 animate-fadeIn overflow-y-auto rounded shadow-lg shadow-grayborder focus:outline-none" + class="bg-dropdownBg absolute max-h-120 min-w-44 max-w-80 + animate-fadeIn overflow-y-auto rounded shadow-md focus:outline-none" [ngClass]="alignTo === 'left' ? 'right-0' : 'left-0'" role="menu" aria-modal="true" @@ -30,15 +34,17 @@ import { twMerge } from 'tailwind-merge'; #popupList > <ng-content /> - </ul> + </div> </div>`, }) -export class PopupComponent { +export class DropdownMenuComponent { @Input() alignTo: 'left' | 'right' = 'left'; @Input() label: string = ''; @Input() buttonClass: string = ''; + @Input() buttonTestId: string = 'dropdown-button'; isPopupOpen: boolean = false; + isButtonFocused: boolean = false; readonly twMerge = twMerge; @ViewChild('button') buttonRef: ElementRef<HTMLButtonElement>; @@ -71,6 +77,10 @@ export class PopupComponent { this.isPopupOpen = !this.isPopupOpen; } + toggleFocusedButton(): void { + this.isButtonFocused = !this.isButtonFocused; + } + closePopupAndFocusButton(): void { this.isPopupOpen = false; this.buttonRef.nativeElement.focus(); diff --git a/alfa-client/libs/design-system/src/lib/popup/popup/popup.stories.ts b/alfa-client/libs/design-system/src/lib/dropdown-menu/dropdown-menu/dropdown-menu.stories.ts similarity index 52% rename from alfa-client/libs/design-system/src/lib/popup/popup/popup.stories.ts rename to alfa-client/libs/design-system/src/lib/dropdown-menu/dropdown-menu/dropdown-menu.stories.ts index 015112aabc92eee9b30ec4ab36ab84cce8da850c..c5b38d806a4af5e404f4c8f189fb33c383c9a113 100644 --- a/alfa-client/libs/design-system/src/lib/popup/popup/popup.stories.ts +++ b/alfa-client/libs/design-system/src/lib/dropdown-menu/dropdown-menu/dropdown-menu.stories.ts @@ -8,15 +8,20 @@ import { import { SaveIconComponent } from '../../icons/save-icon/save-icon.component'; import { UserIconComponent } from '../../icons/user-icon/user-icon.component'; -import { PopupListItemComponent } from '../popup-list-item/popup-list-item.component'; -import { PopupComponent } from './popup.component'; +import { DropdownMenuButtonComponent } from '../dropdown-menu-button/dropdown-menu-button.component'; +import { DropdownMenuComponent } from './dropdown-menu.component'; -const meta: Meta<PopupComponent> = { - title: 'Popup/Popup', - component: PopupComponent, +const meta: Meta<DropdownMenuComponent> = { + title: 'Dropdown menu/Dropdown menu', + component: DropdownMenuComponent, decorators: [ moduleMetadata({ - imports: [PopupComponent, PopupListItemComponent, SaveIconComponent, UserIconComponent], + imports: [ + DropdownMenuComponent, + DropdownMenuButtonComponent, + SaveIconComponent, + UserIconComponent, + ], }), componentWrapperDecorator((story) => `<div class="flex justify-center mb-32">${story}</div>`), ], @@ -25,7 +30,7 @@ const meta: Meta<PopupComponent> = { }; export default meta; -type Story = StoryObj<PopupComponent>; +type Story = StoryObj<DropdownMenuComponent>; export const Default: Story = { args: { alignTo: 'left', label: '', buttonClass: '' }, @@ -42,37 +47,37 @@ export const Default: Story = { }, render: (args) => ({ props: args, - template: `<ods-popup ${argsToTemplate(args)}> + template: `<ods-dropdown-menu ${argsToTemplate(args)}> <ods-user-icon button-content /> - <ods-popup-list-item caption="Lorem" /> - <ods-popup-list-item caption="Ipsum" /> - <ods-popup-list-item caption="Dolor" /> - </ods-popup>`, + <ods-dropdown-menu-button caption="Lorem" /> + <ods-dropdown-menu-button caption="Ipsum" /> + <ods-dropdown-menu-button caption="Dolor" /> + </ods-dropdown-menu>`, }), }; export const LongText: Story = { render: (args) => ({ props: args, - template: `<ods-popup ${argsToTemplate(args)}> + template: `<ods-dropdown-menu ${argsToTemplate(args)}> <p button-content>Trigger popup</p> - <ods-popup-list-item caption="Lorem" /> - <ods-popup-list-item caption="Lorem ipsum dolor sit amet" /> - </ods-popup>`, + <ods-dropdown-menu-button caption="Lorem" /> + <ods-dropdown-menu-button caption="Lorem ipsum dolor sit amet" /> + </ods-dropdown-menu>`, }), }; export const ItemsWithIcons: Story = { render: (args) => ({ props: args, - template: `<ods-popup ${argsToTemplate(args)}> + template: `<ods-dropdown-menu ${argsToTemplate(args)}> <p button-content>Trigger popup</p> - <ods-popup-list-item caption="Lorem"> + <ods-dropdown-menu-button caption="Lorem"> <ods-save-icon icon size="small" /> - </ods-popup-list-item> - <ods-popup-list-item caption="Lorem ipsum dolor sit amet"> + </ods-dropdown-menu-button> + <ods-dropdown-menu-button caption="Lorem ipsum dolor sit amet"> <ods-save-icon icon size="small" /> - </ods-popup-list-item> - </ods-popup>`, + </ods-dropdown-menu-button> + </ods-dropdown-menu>`, }), }; diff --git a/alfa-client/libs/design-system/src/lib/form/button-toggle/button-toggle.component.spec.ts b/alfa-client/libs/design-system/src/lib/form/button-toggle/button-toggle.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..f927bf0ee7285e1a792bc92120a94cf14b13cb8d --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/form/button-toggle/button-toggle.component.spec.ts @@ -0,0 +1,87 @@ +import { existsAsHtmlElement, getElementFromFixture, notExistsAsHtmlElement } from '@alfa-client/test-utils'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; +import { ButtonToggleComponent } from './button-toggle.component'; + +describe('ButtonToggleComponent', () => { + let component: ButtonToggleComponent; + let fixture: ComponentFixture<ButtonToggleComponent>; + const checkIconSelector = getDataTestIdOf('toggle-check-icon'); + const buttonToggleSelector = getDataTestIdOf('button-toggle'); + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ButtonToggleComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(ButtonToggleComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + describe('component', () => { + describe('isFocused', () => { + it('should be set to true on focus', () => { + const buttonToggle: HTMLButtonElement = getElementFromFixture(fixture, buttonToggleSelector); + + buttonToggle.focus(); + fixture.detectChanges(); + + expect(component.isFocused).toBe(true); + }); + + it('should be set to false on blue', () => { + component.isFocused = true; + const buttonToggle: HTMLButtonElement = getElementFromFixture(fixture, buttonToggleSelector); + + buttonToggle.dispatchEvent(new Event('blur')); + fixture.detectChanges(); + + expect(component.isFocused).toBe(false); + }); + }); + + describe('isChecked', () => { + it('should call isSelected', () => { + component.isSelected = jest.fn(); + component.value = 'test'; + + component.isChecked; + + expect(component.isSelected).toHaveBeenCalledWith('test'); + }); + + it('should return result of isSelected', () => { + component.isSelected = jest.fn().mockReturnValue(true); + + const result: boolean = component.isChecked; + + expect(result).toBe(true); + }); + }); + }); + + describe('template', () => { + describe('check icon', () => { + it('should show', () => { + component.isSelected = jest.fn().mockReturnValue(true); + + fixture.detectChanges(); + + existsAsHtmlElement(fixture, checkIconSelector); + }); + + it('should hide', () => { + component.isSelected = jest.fn().mockReturnValue(false); + + fixture.detectChanges(); + + notExistsAsHtmlElement(fixture, checkIconSelector); + }); + }); + }); +}); diff --git a/alfa-client/libs/design-system/src/lib/form/button-toggle/button-toggle.component.ts b/alfa-client/libs/design-system/src/lib/form/button-toggle/button-toggle.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..e627770b9cf5f3fa5f3a815d7920c72e72579fee --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/form/button-toggle/button-toggle.component.ts @@ -0,0 +1,35 @@ +import { CommonModule } from '@angular/common'; +import { Component, HostBinding, Input } from '@angular/core'; +import { CheckIconComponent } from '../../icons/check-icon/check-icon.component'; + +@Component({ + selector: 'ods-button-toggle', + standalone: true, + imports: [CommonModule, CheckIconComponent], + template: `<button + class="flex cursor-pointer items-center gap-1 px-3 py-1.5 outline-none hover:bg-neutral-300 focus-visible:bg-neutral-300 dark:hover:bg-neutral-600 dark:focus-visible:bg-neutral-600" + [ngClass]="{ + 'bg-neutral-200 font-bold hover:bg-neutral-200 focus-visible:bg-neutral-200 dark:bg-neutral-900 dark:hover:bg-neutral-800 dark:focus-visible:bg-neutral-800': + isChecked, + }" + [value]="value" + (click)="onClick()" + (focus)="isFocused = true" + (blur)="isFocused = false" + data-test-id="button-toggle" + > + <ods-check-icon size="small" *ngIf="isChecked" data-test-id="toggle-check-icon" /> + <p class="text-sm">{{ label }}</p> + </button>`, +}) +export class ButtonToggleComponent { + @Input({ required: true }) label!: string; + @Input({ required: true }) value!: string; + @Input() onClick: () => void; + @Input() isSelected: (value: string) => boolean = () => false; + + @HostBinding('class.ods-focused') isFocused: boolean = false; + @HostBinding('class.ods-button-toggle-checked') get isChecked() { + return this.isSelected(this.value); + } +} diff --git a/alfa-client/libs/design-system/src/lib/form/button-toggle/button-toggle.stories.ts b/alfa-client/libs/design-system/src/lib/form/button-toggle/button-toggle.stories.ts new file mode 100644 index 0000000000000000000000000000000000000000..4e84e9817b7885c682e27c3be90ef2b4bcd3c84c --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/form/button-toggle/button-toggle.stories.ts @@ -0,0 +1,34 @@ +import { moduleMetadata, type Meta, type StoryObj } from '@storybook/angular'; + +import { ButtonToggleComponent } from './button-toggle.component'; + +const meta: Meta<ButtonToggleComponent> = { + title: 'Button toggle', + component: ButtonToggleComponent, + parameters: { + docs: { + description: { + component: 'A button for toggling state', + }, + }, + }, + decorators: [ + moduleMetadata({ + imports: [ButtonToggleComponent], + }), + ], + excludeStories: /.*Data$/, + tags: ['autodocs'], +}; + +export default meta; +type Story = StoryObj<ButtonToggleComponent>; + +export const Default: Story = { + args: { + label: 'button toggle', + }, + argTypes: { + label: { description: 'Label for button' }, + }, +}; diff --git a/alfa-client/libs/design-system/src/lib/form/checkbox/checkbox.component.spec.ts b/alfa-client/libs/design-system/src/lib/form/checkbox/checkbox.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..dc95166356c3d5f8f1f27b184b6ac32ff68602ee --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/form/checkbox/checkbox.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { CheckboxComponent } from './checkbox.component'; + +describe('CheckboxComponent', () => { + let component: CheckboxComponent; + let fixture: ComponentFixture<CheckboxComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [CheckboxComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(CheckboxComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/alfa-client/libs/design-system/src/lib/form/checkbox/checkbox.component.ts b/alfa-client/libs/design-system/src/lib/form/checkbox/checkbox.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..9cab0abad5aa6845f9a6f622fa7bfde8ca3d35ec --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/form/checkbox/checkbox.component.ts @@ -0,0 +1,51 @@ +import { CommonModule } from '@angular/common'; +import { Component, Input } from '@angular/core'; +import { FormControl, ReactiveFormsModule } from '@angular/forms'; + +@Component({ + selector: 'ods-checkbox', + standalone: true, + imports: [CommonModule, ReactiveFormsModule], + template: ` + <div> + <div class="flex items-start gap-3 text-start"> + <input + type="checkbox" + class="disabled:border-disabled-dark disabled:bg-disabled peer relative box-border size-5 shrink-0 appearance-none rounded-sm + border bg-whitetext outline outline-2 outline-offset-2 outline-transparent + hover:border-2 focus-visible:border-background-200 disabled:hover:border" + [ngClass]=" + hasError ? + 'border-error hover:border-error focus-visible:outline-error' + : 'border-primary hover:border-primary-hover focus-visible:outline-focus' + " + [value]="value" + [checked]="fieldControl.value" + [attr.id]="inputId" + [disabled]="disabled" + /> + <label class="leading-5 text-text" [attr.for]="inputId">{{ label }}</label> + <svg + viewBox="0 0 12 9" + xmlns="http://www.w3.org/2000/svg" + class="pointer-events-none absolute hidden size-5 p-1 outline-none peer-checked:block" + [ngClass]="hasError ? 'fill-error' : 'fill-primary focus-visible:fill-focus'" + > + <path + d="M3.81353 7.10067L0.968732 4.30201L0 5.24832L3.81353 + 9L12 0.946309L11.0381 0L3.81353 7.10067Z" + /> + </svg> + </div> + <ng-content select="[error]" /> + </div> + `, +}) +export class CheckboxComponent { + @Input() fieldControl: FormControl = new FormControl(false); + @Input() value: string; + @Input() inputId: string; + @Input() label: string; + @Input() disabled: boolean = false; + @Input() hasError: boolean = false; +} diff --git a/alfa-client/libs/design-system/src/lib/checkbox/checbox.stories.ts b/alfa-client/libs/design-system/src/lib/form/checkbox/checkbox.stories.ts similarity index 93% rename from alfa-client/libs/design-system/src/lib/checkbox/checbox.stories.ts rename to alfa-client/libs/design-system/src/lib/form/checkbox/checkbox.stories.ts index 2b3954527bc86c75615e36839194754fce3466ef..ce8dd243e62d68c65d58f4298744e5ded9ebedf6 100644 --- a/alfa-client/libs/design-system/src/lib/checkbox/checbox.stories.ts +++ b/alfa-client/libs/design-system/src/lib/form/checkbox/checkbox.stories.ts @@ -26,12 +26,14 @@ export const Default: Story = { label: 'Basic checkbox', inputId: '1', disabled: false, + hasError: false, }, argTypes: { label: { description: 'Checkbox label' }, disabled: { description: 'Disabled state of checkbox' }, inputId: { description: 'Id of checkbox input' }, value: { description: 'Value of checkbox' }, + hasError: { description: 'Has checkbox the error state' }, fieldControl: { description: 'Form control object', table: { type: { summary: 'FormControl' } }, @@ -43,7 +45,7 @@ export const Error: Story = { args: { label: 'Checkbox with error state', inputId: '2', - fieldControl: formControlWithError, + hasError: true, }, }; diff --git a/alfa-client/libs/design-system/src/lib/fieldset/fieldset.component.spec.ts b/alfa-client/libs/design-system/src/lib/form/fieldset/fieldset.component.spec.ts similarity index 100% rename from alfa-client/libs/design-system/src/lib/fieldset/fieldset.component.spec.ts rename to alfa-client/libs/design-system/src/lib/form/fieldset/fieldset.component.spec.ts diff --git a/alfa-client/libs/design-system/src/lib/fieldset/fieldset.component.ts b/alfa-client/libs/design-system/src/lib/form/fieldset/fieldset.component.ts similarity index 100% rename from alfa-client/libs/design-system/src/lib/fieldset/fieldset.component.ts rename to alfa-client/libs/design-system/src/lib/form/fieldset/fieldset.component.ts diff --git a/alfa-client/libs/design-system/src/lib/fieldset/fieldset.stories.ts b/alfa-client/libs/design-system/src/lib/form/fieldset/fieldset.stories.ts similarity index 100% rename from alfa-client/libs/design-system/src/lib/fieldset/fieldset.stories.ts rename to alfa-client/libs/design-system/src/lib/form/fieldset/fieldset.stories.ts diff --git a/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.spec.ts b/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.spec.ts index 7af23db34d07be38195377bce353ee605f92c032..1bf749e49f52d6d81ee9eb86743c161600643af0 100644 --- a/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.spec.ts +++ b/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.spec.ts @@ -1,7 +1,7 @@ import { TechSharedModule } from '@alfa-client/tech-shared'; import { getElementFromFixture } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { FileUploadButtonComponent } from './file-upload-button.component'; diff --git a/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.spec.ts b/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.spec.ts index 082f7135ba559f5e393f7d97311a5624f5d28dea..acbbc88cf3142793495612eed807460ba8f9ba77 100644 --- a/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.spec.ts +++ b/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.spec.ts @@ -2,7 +2,7 @@ import { convertForDataTest } from '@alfa-client/tech-shared'; import { getElementFromFixture } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormControl, ReactiveFormsModule } from '@angular/forms'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { getDataTestIdOf } from '../../../../../tech-shared/test/data-test'; import { TextInputComponent } from './text-input.component'; diff --git a/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.spec.ts b/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.spec.ts index e73b09cb52e462dfe30ec98f401738ff975a0ec8..df42d12be38bee2f29ae12755df5f8abce0d9f0f 100644 --- a/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.spec.ts +++ b/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.spec.ts @@ -2,7 +2,7 @@ import { convertForDataTest } from '@alfa-client/tech-shared'; import { getElementFromFixture } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormControl, ReactiveFormsModule } from '@angular/forms'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { getDataTestIdOf } from '../../../../../tech-shared/test/data-test'; import { TextareaComponent } from './textarea.component'; diff --git a/alfa-client/libs/design-system/src/lib/icons/check-icon/check-icon.component.spec.ts b/alfa-client/libs/design-system/src/lib/icons/check-icon/check-icon.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..05970168c75628b34ca15b071aa01db3bf4d24f6 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/check-icon/check-icon.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { CheckIconComponent } from './check-icon.component'; + +describe('CheckIconComponent', () => { + let component: CheckIconComponent; + let fixture: ComponentFixture<CheckIconComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [CheckIconComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(CheckIconComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/alfa-client/libs/design-system/src/lib/icons/check-icon/check-icon.component.ts b/alfa-client/libs/design-system/src/lib/icons/check-icon/check-icon.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..f2370f2c19e923af43508d89171e86821e79e671 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/check-icon/check-icon.component.ts @@ -0,0 +1,25 @@ +import { CommonModule } from '@angular/common'; +import { Component, Input } from '@angular/core'; +import { twMerge } from 'tailwind-merge'; +import { iconVariants, IconVariants } from '../iconVariants'; + +@Component({ + selector: 'ods-check-icon', + standalone: true, + imports: [CommonModule], + template: `<svg + viewBox="0 0 24 24" + [ngClass]="[twMerge(iconVariants({ size }), 'fill-text', class)]" + aria-hidden="true" + xmlns="http://www.w3.org/2000/svg" + > + <path d="M9.55 18L3.85 12.3L5.275 10.875L9.55 15.15L18.725 5.975L20.15 7.4L9.55 18Z" /> + </svg>`, +}) +export class CheckIconComponent { + @Input() size: IconVariants['size'] = 'medium'; + @Input() class: string = undefined; + + readonly iconVariants = iconVariants; + readonly twMerge = twMerge; +} diff --git a/alfa-client/libs/design-system/src/lib/icons/collaboration-icon/collaboration-icon.stories.ts b/alfa-client/libs/design-system/src/lib/icons/check-icon/check-icon.stories.ts similarity index 64% rename from alfa-client/libs/design-system/src/lib/icons/collaboration-icon/collaboration-icon.stories.ts rename to alfa-client/libs/design-system/src/lib/icons/check-icon/check-icon.stories.ts index dbc1440939f920bb66062062c12ac343a347ddce..ba3854617095d0de7806cd4d9eb327e5ffa1fde2 100644 --- a/alfa-client/libs/design-system/src/lib/icons/collaboration-icon/collaboration-icon.stories.ts +++ b/alfa-client/libs/design-system/src/lib/icons/check-icon/check-icon.stories.ts @@ -1,16 +1,16 @@ import type { Meta, StoryObj } from '@storybook/angular'; -import { CollaborationIconComponent } from './collaboration-icon.component'; +import { CheckIconComponent } from './check-icon.component'; -const meta: Meta<CollaborationIconComponent> = { - title: 'Icons/Collaboration icon', - component: CollaborationIconComponent, +const meta: Meta<CheckIconComponent> = { + title: 'Icons/Check icon', + component: CheckIconComponent, excludeStories: /.*Data$/, tags: ['autodocs'], }; export default meta; -type Story = StoryObj<CollaborationIconComponent>; +type Story = StoryObj<CheckIconComponent>; export const Default: Story = { args: { size: 'medium' }, diff --git a/alfa-client/libs/design-system/src/lib/icons/collaboration-icon/collaboration-icon.component.spec.ts b/alfa-client/libs/design-system/src/lib/icons/collaboration-icon/collaboration-icon.component.spec.ts deleted file mode 100644 index c1a2136a653c2b9dfc52bc039fb0aa1d48ce0733..0000000000000000000000000000000000000000 --- a/alfa-client/libs/design-system/src/lib/icons/collaboration-icon/collaboration-icon.component.spec.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { CollaborationIconComponent } from './collaboration-icon.component'; - -describe('CollaborationIconComponent', () => { - let component: CollaborationIconComponent; - let fixture: ComponentFixture<CollaborationIconComponent>; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [CollaborationIconComponent], - }).compileComponents(); - - fixture = TestBed.createComponent(CollaborationIconComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/alfa-client/libs/design-system/src/lib/icons/edit-icon/edit-icon.component.spec.ts b/alfa-client/libs/design-system/src/lib/icons/edit-icon/edit-icon.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..cd013ced1912306eaa9798977fe6ea95ed13280d --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/edit-icon/edit-icon.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { EditIconComponent } from './edit-icon.component'; + +describe('EditIconComponent', () => { + let component: EditIconComponent; + let fixture: ComponentFixture<EditIconComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [EditIconComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(EditIconComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/alfa-client/libs/design-system/src/lib/icons/edit-icon/edit-icon.component.ts b/alfa-client/libs/design-system/src/lib/icons/edit-icon/edit-icon.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..e767400be6b431d9859b7e9f62b28c7d6955293e --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/edit-icon/edit-icon.component.ts @@ -0,0 +1,27 @@ +import { CommonModule } from '@angular/common'; +import { Component, Input } from '@angular/core'; +import { twMerge } from 'tailwind-merge'; +import { iconVariants, IconVariants } from '../iconVariants'; + +@Component({ + selector: 'ods-edit-icon', + standalone: true, + imports: [CommonModule], + template: `<svg + viewBox="0 0 24 24" + fill="none" + xmlns="http://www.w3.org/2000/svg" + [ngClass]="twMerge(iconVariants({ size }), 'fill-primary', class)" + > + <path + d="M5 19H6.425L16.2 9.225L14.775 7.8L5 17.575V19ZM3 21V16.75L16.2 3.575C16.4 3.39167 16.6208 3.25 16.8625 3.15C17.1042 3.05 17.3583 3 17.625 3C17.8917 3 18.15 3.05 18.4 3.15C18.65 3.25 18.8667 3.4 19.05 3.6L20.425 5C20.625 5.18333 20.7708 5.4 20.8625 5.65C20.9542 5.9 21 6.15 21 6.4C21 6.66667 20.9542 6.92083 20.8625 7.1625C20.7708 7.40417 20.625 7.625 20.425 7.825L7.25 21H3ZM15.475 8.525L14.775 7.8L16.2 9.225L15.475 8.525Z" + /> + </svg>`, +}) +export class EditIconComponent { + @Input() size: IconVariants['size'] = 'medium'; + @Input() class: string = undefined; + + readonly iconVariants = iconVariants; + readonly twMerge = twMerge; +} diff --git a/alfa-client/libs/design-system/src/lib/icons/edit-icon/edit-icon.stories.ts b/alfa-client/libs/design-system/src/lib/icons/edit-icon/edit-icon.stories.ts new file mode 100644 index 0000000000000000000000000000000000000000..96a32144e1ed2aee22ae8688076711b02c26f7df --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/edit-icon/edit-icon.stories.ts @@ -0,0 +1,27 @@ +import type { Meta, StoryObj } from '@storybook/angular'; + +import { EditIconComponent } from './edit-icon.component'; + +const meta: Meta<EditIconComponent> = { + title: 'Icons/Edit icon', + component: EditIconComponent, + excludeStories: /.*Data$/, + tags: ['autodocs'], +}; + +export default meta; +type Story = StoryObj<EditIconComponent>; + +export const Default: Story = { + args: { size: 'medium' }, + argTypes: { + size: { + control: 'select', + options: ['small', 'medium', 'large', 'extra-large', 'full'], + description: 'Size of icon. Property "full" means 100%', + table: { + defaultValue: { summary: 'medium' }, + }, + }, + }, +}; diff --git a/alfa-client/libs/design-system/src/lib/icons/error-icon/error-icon.component.spec.ts b/alfa-client/libs/design-system/src/lib/icons/error-icon/error-icon.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..c6f909f03ce2d522ca5780b5ab4c18ec1af12591 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/error-icon/error-icon.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ErrorIconComponent } from './error-icon.component'; + +describe('ErrorIconComponent', () => { + let component: ErrorIconComponent; + let fixture: ComponentFixture<ErrorIconComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ErrorIconComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(ErrorIconComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/alfa-client/libs/design-system/src/lib/icons/error-icon/error-icon.component.ts b/alfa-client/libs/design-system/src/lib/icons/error-icon/error-icon.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..efe33c3a26a3008fb27082027312eb71f5082764 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/error-icon/error-icon.component.ts @@ -0,0 +1,28 @@ +import { NgClass } from '@angular/common'; +import { Component, Input } from '@angular/core'; +import { twMerge } from 'tailwind-merge'; +import { IconVariants, iconVariants } from '../iconVariants'; + +@Component({ + selector: 'ods-error-icon', + standalone: true, + imports: [NgClass], + template: `<svg + viewBox="0 0 24 24" + [ngClass]="[twMerge(iconVariants({ size }), 'fill-error', class)]" + aria-hidden="true" + fill="inherit" + xmlns="http://www.w3.org/2000/svg" + > + <path + d="M12 17C12.2833 17 12.5208 16.9042 12.7125 16.7125C12.9042 16.5208 13 16.2833 13 16C13 15.7167 12.9042 15.4792 12.7125 15.2875C12.5208 15.0958 12.2833 15 12 15C11.7167 15 11.4792 15.0958 11.2875 15.2875C11.0958 15.4792 11 15.7167 11 16C11 16.2833 11.0958 16.5208 11.2875 16.7125C11.4792 16.9042 11.7167 17 12 17ZM11 13H13V7H11V13ZM12 22C10.6167 22 9.31667 21.7375 8.1 21.2125C6.88333 20.6875 5.825 19.975 4.925 19.075C4.025 18.175 3.3125 17.1167 2.7875 15.9C2.2625 14.6833 2 13.3833 2 12C2 10.6167 2.2625 9.31667 2.7875 8.1C3.3125 6.88333 4.025 5.825 4.925 4.925C5.825 4.025 6.88333 3.3125 8.1 2.7875C9.31667 2.2625 10.6167 2 12 2C13.3833 2 14.6833 2.2625 15.9 2.7875C17.1167 3.3125 18.175 4.025 19.075 4.925C19.975 5.825 20.6875 6.88333 21.2125 8.1C21.7375 9.31667 22 10.6167 22 12C22 13.3833 21.7375 14.6833 21.2125 15.9C20.6875 17.1167 19.975 18.175 19.075 19.075C18.175 19.975 17.1167 20.6875 15.9 21.2125C14.6833 21.7375 13.3833 22 12 22ZM12 20C14.2333 20 16.125 19.225 17.675 17.675C19.225 16.125 20 14.2333 20 12C20 9.76667 19.225 7.875 17.675 6.325C16.125 4.775 14.2333 4 12 4C9.76667 4 7.875 4.775 6.325 6.325C4.775 7.875 4 9.76667 4 12C4 14.2333 4.775 16.125 6.325 17.675C7.875 19.225 9.76667 20 12 20Z" + /> + </svg>`, +}) +export class ErrorIconComponent { + @Input() size: IconVariants['size'] = 'medium'; + @Input() class: string = undefined; + + readonly iconVariants = iconVariants; + readonly twMerge = twMerge; +} diff --git a/alfa-client/libs/design-system/src/lib/icons/error-icon/error-icon.stories.ts b/alfa-client/libs/design-system/src/lib/icons/error-icon/error-icon.stories.ts new file mode 100644 index 0000000000000000000000000000000000000000..5f77738047aac37b720323278ea04d31ecf3772e --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/error-icon/error-icon.stories.ts @@ -0,0 +1,27 @@ +import type { Meta, StoryObj } from '@storybook/angular'; + +import { ErrorIconComponent } from './error-icon.component'; + +const meta: Meta<ErrorIconComponent> = { + title: 'Icons/Error icon', + component: ErrorIconComponent, + excludeStories: /.*Data$/, + tags: ['autodocs'], +}; + +export default meta; +type Story = StoryObj<ErrorIconComponent>; + +export const Default: Story = { + args: { size: 'medium' }, + argTypes: { + size: { + control: 'select', + options: ['small', 'medium', 'large', 'extra-large', 'full'], + description: 'Size of icon. Property "full" means 100%', + table: { + defaultValue: { summary: 'medium' }, + }, + }, + }, +}; diff --git a/alfa-client/libs/design-system/src/lib/icons/external-unit-icon/external-unit-icon.component.html b/alfa-client/libs/design-system/src/lib/icons/external-unit-icon/external-unit-icon.component.html new file mode 100644 index 0000000000000000000000000000000000000000..222b4d34db4bf54889b13e78a5c2a9b161dc55b7 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/external-unit-icon/external-unit-icon.component.html @@ -0,0 +1,67 @@ +<svg width="45" height="37" viewBox="0 0 45 37" fill="none" xmlns="http://www.w3.org/2000/svg"> + <g [ngClass]="[twMerge('fill-primary', class)]"> + <path + d="M9.13165 9.58598H8.85322V8.76559C8.85322 8.61465 8.72877 8.49214 8.57479 8.49214C8.42081 8.49214 8.29636 8.61465 8.29636 8.76559V9.85943C8.29636 10.0104 8.42081 10.1329 8.57479 10.1329H9.13169C9.28567 10.1329 9.41012 10.0104 9.41012 9.85943C9.41012 9.70849 9.28563 9.58598 9.13165 9.58598Z" + /> + <path + d="M3.56334 16.6978H2.44898C2.29492 16.6978 2.17041 16.8203 2.17041 16.9712V18.6121C2.17041 18.763 2.29492 18.8855 2.44898 18.8855H3.56331C3.71737 18.8855 3.84188 18.763 3.84188 18.6121V16.9712C3.84191 16.8203 3.7174 16.6978 3.56334 16.6978ZM3.28473 18.3386H2.72759V17.2447H3.28477L3.28473 18.3386Z" + /> + <path + d="M3.84191 13.69C3.84191 13.5391 3.7174 13.4166 3.56334 13.4166H2.44898C2.29492 13.4166 2.17041 13.5391 2.17041 13.69V15.3309C2.17041 15.4818 2.29492 15.6043 2.44898 15.6043H3.56331C3.71737 15.6043 3.84188 15.4818 3.84188 15.3309L3.84191 13.69ZM3.28473 15.0574H2.72759V13.9635H3.28477L3.28473 15.0574Z" + /> + <path + d="M4.40016 12.0495C4.40016 11.8985 4.27565 11.776 4.12159 11.776H1.05715V11.5026C1.05715 11.3516 0.932633 11.2291 0.778574 11.2291C0.624514 11.2291 0.5 11.3516 0.5 11.5026V20.8005C0.5 21.2528 0.874979 21.6209 1.33575 21.6209H3.56444C4.02521 21.6209 4.40019 21.2528 4.40019 20.8005C4.40019 20.3482 4.02521 19.9801 3.56444 19.9801C3.51625 19.9801 3.46833 19.9842 3.42125 19.9924C3.22932 19.6525 2.86296 19.4332 2.45011 19.4332C2.03726 19.4332 1.6709 19.6525 1.47897 19.9924C1.4319 19.9842 1.38397 19.9801 1.33579 19.9801C1.23745 19.9801 1.14467 19.9998 1.05721 20.0304V12.323H4.12165C4.27561 12.323 4.40016 12.2005 4.40016 12.0495ZM1.33572 20.5271C1.38893 20.5271 1.4399 20.5421 1.48671 20.5716C1.56278 20.62 1.65833 20.6288 1.74247 20.5952C1.8266 20.5618 1.88843 20.4902 1.90935 20.4035C1.96786 20.1543 2.19018 19.9801 2.45008 19.9801C2.70998 19.9801 2.93204 20.1543 2.99081 20.4035C3.0117 20.4902 3.07353 20.5618 3.1577 20.5952C3.24183 20.6288 3.33709 20.6201 3.41345 20.5716C3.5951 20.4568 3.84301 20.5973 3.84301 20.8005C3.84301 20.9512 3.71821 21.074 3.56444 21.074H1.33572C1.18196 21.074 1.05715 20.9512 1.05715 20.8005C1.05715 20.6498 1.18196 20.5271 1.33572 20.5271Z" + /> + <path + d="M12.4807 20.525H5.23751C5.08345 20.525 4.95894 20.6476 4.95894 20.7986V21.3458C4.95894 21.4968 5.08345 21.6194 5.23751 21.6194C5.39157 21.6194 5.51608 21.4968 5.51608 21.3458V21.0722H12.2021V21.3458C12.2021 21.4968 12.3266 21.6194 12.4807 21.6194C12.6347 21.6194 12.7593 21.4968 12.7593 21.3458V20.7986C12.7593 20.6476 12.6347 20.525 12.4807 20.525Z" + /> + <path + d="M5.23751 19.9765C5.39157 19.9765 5.51608 19.854 5.51608 19.703V9.03772C5.51608 8.88677 5.39157 8.76426 5.23751 8.76426C5.08345 8.76426 4.95894 8.88677 4.95894 9.03772V19.703C4.95891 19.854 5.08345 19.9765 5.23751 19.9765Z" + /> + <path + d="M12.4816 8.49214C12.3275 8.49214 12.203 8.61466 12.203 8.7656V19.7044C12.203 19.8553 12.3275 19.9778 12.4816 19.9778C12.6357 19.9778 12.7602 19.8553 12.7602 19.7044V8.7656C12.7602 8.61466 12.6357 8.49214 12.4816 8.49214Z" + /> + <path + d="M16.9258 11.2291C16.7717 11.2291 16.6472 11.3516 16.6472 11.5026V11.776H13.5828C13.4287 11.776 13.3042 11.8985 13.3042 12.0495C13.3042 12.2004 13.4287 12.3229 13.5828 12.3229H16.6472V20.0304C16.5595 19.9998 16.4667 19.9801 16.3686 19.9801C16.3205 19.9801 16.2725 19.9842 16.2254 19.9924C16.0335 19.6525 15.6672 19.4331 15.2543 19.4331C14.8415 19.4331 14.4751 19.6525 14.2832 19.9924C14.2361 19.9842 14.1882 19.9801 14.14 19.9801C13.6792 19.9801 13.3042 20.3482 13.3042 20.8005C13.3042 21.2528 13.6792 21.6209 14.14 21.6209H16.3687C16.8294 21.6209 17.2044 21.2528 17.2044 20.8005V11.5026C17.2044 11.3516 17.0798 11.2291 16.9258 11.2291ZM16.3686 21.074H14.1399C13.9862 21.074 13.8613 20.9512 13.8613 20.8006C13.8613 20.6499 13.9862 20.5271 14.1399 20.5271C14.1931 20.5271 14.2441 20.5421 14.2909 20.5717C14.3672 20.6201 14.4625 20.6288 14.5467 20.5952C14.6308 20.5618 14.6926 20.4902 14.7135 20.4035C14.772 20.1544 14.9943 19.9802 15.2542 19.9802C15.5142 19.9802 15.7362 20.1544 15.795 20.4035C15.8159 20.4902 15.8777 20.5618 15.9618 20.5952C16.046 20.6289 16.1412 20.6201 16.2176 20.5717C16.3995 20.4568 16.6471 20.5974 16.6471 20.8006C16.6472 20.9512 16.5224 21.074 16.3686 21.074Z" + /> + <path + d="M13.1829 7.71134L9.00411 5.25012C8.9158 5.19788 8.80549 5.19788 8.71718 5.25012L4.53841 7.71134C4.40665 7.78899 4.36375 7.95692 4.44315 8.08655C4.52225 8.21589 4.69303 8.258 4.82538 8.18007L8.86066 5.80335L12.8959 8.18007C12.9408 8.2066 12.9904 8.21916 13.0391 8.21916C13.1338 8.21916 13.2261 8.17186 13.2782 8.08652C13.3575 7.95692 13.3146 7.78903 13.1829 7.71134Z" + /> + <path + d="M13.8734 18.6121C13.8734 18.763 13.9979 18.8855 14.152 18.8855H15.2663C15.4204 18.8855 15.5449 18.763 15.5449 18.6121V16.9712C15.5449 16.8203 15.4204 16.6978 15.2663 16.6978H14.152C13.9979 16.6978 13.8734 16.8203 13.8734 16.9712V18.6121ZM14.4306 17.2447H14.9878V18.3386H14.4306V17.2447Z" + /> + <path + d="M14.152 15.6043H15.2663C15.4204 15.6043 15.5449 15.4818 15.5449 15.3309V13.69C15.5449 13.5391 15.4204 13.4166 15.2663 13.4166H14.152C13.9979 13.4166 13.8734 13.5391 13.8734 13.69V15.3309C13.8734 15.4818 13.9979 15.6043 14.152 15.6043ZM14.4306 13.9635H14.9878V15.0574H14.4306V13.9635Z" + /> + <path + d="M8.64818 18.4117C8.59777 18.4636 8.56742 18.532 8.56742 18.6058C8.56742 18.6769 8.59777 18.748 8.64818 18.8C8.70082 18.8492 8.77041 18.8793 8.84589 18.8793C8.91829 18.8793 8.9904 18.8492 9.04359 18.8C9.09371 18.748 9.12435 18.6769 9.12435 18.6058C9.12435 18.532 9.09371 18.4636 9.04359 18.4117C8.94055 18.3105 8.74816 18.3105 8.64818 18.4117Z" + /> + <path + d="M6.62596 15.3309C6.62596 15.4818 6.75047 15.6043 6.90453 15.6043H8.01886C8.17292 15.6043 8.29743 15.4818 8.29743 15.3309V13.69C8.29743 13.5391 8.17292 13.4166 8.01886 13.4166H6.90453C6.75047 13.4166 6.62596 13.5391 6.62596 13.69V15.3309ZM7.18314 13.9635H7.74032V15.0574H7.18314V13.9635Z" + /> + <path + d="M9.69306 13.4166C9.539 13.4166 9.41449 13.5391 9.41449 13.69V15.3309C9.41449 15.4818 9.539 15.6043 9.69306 15.6043H10.8074C10.9614 15.6043 11.086 15.4818 11.086 15.3309V13.69C11.086 13.5391 10.9614 13.4166 10.8074 13.4166H9.69306ZM10.5288 15.0574H9.97163V13.9635H10.5288V15.0574Z" + /> + <path + d="M8.85464 7.40016C7.62579 7.40016 6.62596 8.38164 6.62596 9.58793C6.62596 10.7942 7.62579 11.7757 8.85464 11.7757C10.0835 11.7757 11.0833 10.7942 11.0833 9.58793C11.0833 8.38164 10.0835 7.40016 8.85464 7.40016ZM8.85464 11.2287C7.9328 11.2287 7.18314 10.4928 7.18314 9.5879C7.18314 8.68298 7.9328 7.94708 8.85464 7.94708C9.77649 7.94708 10.5261 8.68298 10.5261 9.5879C10.5261 10.4928 9.77649 11.2287 8.85464 11.2287Z" + /> + <path + d="M6.07367 16.9712C6.07367 17.1222 6.19819 17.2447 6.35225 17.2447H7.188V19.7059C7.188 19.8569 7.31251 19.9794 7.46657 19.9794C7.62063 19.9794 7.74515 19.8569 7.74515 19.7059V17.2447H9.97383V19.7059C9.97383 19.8569 10.0983 19.9794 10.2524 19.9794C10.4065 19.9794 10.531 19.8569 10.531 19.7059V17.2447H11.3667C11.5208 17.2447 11.6453 17.1222 11.6453 16.9712C11.6453 16.8203 11.5208 16.6978 11.3667 16.6978H6.35221C6.19819 16.6978 6.07367 16.8203 6.07367 16.9712Z" + /> + <path + d="M21.1445 28V27.1651C21.1445 26.5194 21.481 25.9821 22.1541 25.5532C22.8271 25.1244 23.6984 24.9099 24.7679 24.9099C24.9151 24.9099 25.0813 24.9181 25.2663 24.9345C25.4514 24.951 25.6413 24.9746 25.8359 25.0053C25.7352 25.285 25.6563 25.562 25.5991 25.8361C25.542 26.1102 25.5134 26.3844 25.5134 26.6587V28H21.1445ZM27.514 28V26.7447C27.514 26.295 27.6382 25.8839 27.8866 25.5114C28.135 25.139 28.5014 24.8169 28.9858 24.545C29.4704 24.2733 30.0349 24.0695 30.6793 23.9336C31.3237 23.7976 32.0351 23.7296 32.8136 23.7296C33.6071 23.7296 34.3261 23.7976 34.9704 23.9336C35.6148 24.0695 36.1793 24.2733 36.6639 24.545C37.1483 24.8169 37.5138 25.139 37.7602 25.5114C38.0065 25.8839 38.1297 26.295 38.1297 26.7447V28H27.514ZM40.1302 28V26.6652C40.1302 26.3661 40.106 26.0775 40.0577 25.7993C40.0094 25.521 39.9281 25.257 39.8138 25.0073C40.0357 24.9753 40.2353 24.951 40.4126 24.9345C40.5898 24.9181 40.7544 24.9099 40.9062 24.9099C41.9778 24.9099 42.8446 25.1202 43.5065 25.5407C44.1682 25.9613 44.4991 26.5028 44.4991 27.1651V28H40.1302ZM28.3101 27.1416H37.3335V26.8239C37.3743 26.1501 36.9855 25.609 36.1668 25.2006C35.3482 24.7922 34.2332 24.588 32.8218 24.588C31.4241 24.588 30.3125 24.7922 29.4871 25.2006C28.6616 25.609 28.2693 26.1522 28.3101 26.8303V27.1416ZM24.7411 23.9871C24.3618 23.9871 24.0384 23.8447 23.7709 23.5597C23.5035 23.2748 23.3698 22.9309 23.3698 22.5279C23.3698 22.1317 23.5054 21.7931 23.7764 21.5119C24.0475 21.2307 24.3746 21.0901 24.7579 21.0901C25.1349 21.0901 25.4605 21.2307 25.7348 21.5119C26.009 21.7931 26.1461 22.138 26.1461 22.5465C26.1461 22.9304 26.0127 23.2665 25.7459 23.5547C25.4793 23.843 25.1444 23.9871 24.7411 23.9871ZM40.8945 23.9871C40.5253 23.9871 40.2035 23.8424 39.9293 23.553C39.655 23.2637 39.5179 22.9241 39.5179 22.5343C39.5179 22.1339 39.6556 21.7931 39.9309 21.5119C40.2062 21.2307 40.5325 21.0901 40.9099 21.0901C41.2979 21.0901 41.6257 21.2307 41.8932 21.5119C42.1605 21.7931 42.2942 22.1358 42.2942 22.5401C42.2942 22.9372 42.1613 23.2776 41.8956 23.5614C41.6298 23.8452 41.2961 23.9871 40.8945 23.9871ZM32.829 22.8927C32.1846 22.8927 31.6344 22.6549 31.1785 22.1792C30.7225 21.7036 30.4946 21.1261 30.4946 20.4465C30.4946 19.7534 30.7208 19.1724 31.1732 18.7035C31.6258 18.2345 32.1753 18 32.8218 18C33.4812 18 34.0339 18.2338 34.48 18.7013C34.926 19.1687 35.149 19.7479 35.149 20.439C35.149 21.1163 34.9267 21.6946 34.4821 22.1739C34.0375 22.6531 33.4864 22.8927 32.829 22.8927ZM32.8414 22.0344C33.2611 22.0344 33.6145 21.8802 33.9017 21.5718C34.1888 21.2635 34.3324 20.8815 34.3324 20.4259C34.3324 19.9847 34.1884 19.6132 33.9004 19.3111C33.6123 19.0093 33.2559 18.8584 32.8311 18.8584C32.4098 18.8584 32.0512 19.0098 31.7552 19.3128C31.4592 19.6156 31.3112 19.9902 31.3112 20.4367C31.3112 20.8796 31.4579 21.2565 31.7512 21.5677C32.0446 21.8788 32.408 22.0344 32.8414 22.0344Z" + /> + </g> + <g [ngClass]="[twMerge('stroke-primary', class)]"> + <path + d="M7.76319 23.4211C7.77138 26.1365 8.70174 28.7709 10.3957 30.8753C12.0897 32.9797 14.4426 34.424 17.0533 34.9621C19.6641 35.5001 22.3712 35.0986 24.7135 33.826C25.8548 33.206 26.875 32.3978 27.7381 31.4423M4.54687 28.2841L7.4063 23.2109L12.3942 26.1609" + stroke-width="2" + stroke-linejoin="round" + /> + <path + d="M33.5608 12.7737C33.5526 10.0582 32.6223 7.42389 30.9283 5.31947C29.2343 3.21505 26.8815 1.77077 24.2707 1.23273C21.6599 0.694683 18.9528 1.09616 16.6105 2.36875C15.4692 2.98879 14.449 3.79695 13.5859 4.75251M36.7772 7.91068L33.9177 12.9838L28.9298 10.0338" + stroke-width="2" + stroke-linejoin="round" + /> + </g> +</svg> diff --git a/alfa-client/libs/design-system/src/lib/icons/external-unit-icon/external-unit-icon.component.spec.ts b/alfa-client/libs/design-system/src/lib/icons/external-unit-icon/external-unit-icon.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..69cdb1bba2d29d6a4543da14b957aca1405374b0 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/external-unit-icon/external-unit-icon.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ExternalUnitIconComponent } from './external-unit-icon.component'; + +describe('ExternalUnitIconComponent', () => { + let component: ExternalUnitIconComponent; + let fixture: ComponentFixture<ExternalUnitIconComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ExternalUnitIconComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(ExternalUnitIconComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/alfa-client/libs/design-system/src/lib/icons/external-unit-icon/external-unit-icon.component.ts b/alfa-client/libs/design-system/src/lib/icons/external-unit-icon/external-unit-icon.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..f06c60b0f95fc9070c6096ed88bda3e7997005e2 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/external-unit-icon/external-unit-icon.component.ts @@ -0,0 +1,15 @@ +import { CommonModule } from '@angular/common'; +import { Component, Input } from '@angular/core'; +import { twMerge } from 'tailwind-merge'; + +@Component({ + selector: 'ods-external-unit-icon', + standalone: true, + imports: [CommonModule], + templateUrl: './external-unit-icon.component.html', +}) +export class ExternalUnitIconComponent { + @Input() class: string = undefined; + + readonly twMerge = twMerge; +} diff --git a/alfa-client/libs/design-system/src/lib/icons/external-unit-icon/external-unit-icon.stories.ts b/alfa-client/libs/design-system/src/lib/icons/external-unit-icon/external-unit-icon.stories.ts new file mode 100644 index 0000000000000000000000000000000000000000..6718fd2fdca463fc995dd228c4b21d8a5d772f68 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/external-unit-icon/external-unit-icon.stories.ts @@ -0,0 +1,15 @@ +import type { Meta, StoryObj } from '@storybook/angular'; + +import { ExternalUnitIconComponent } from './external-unit-icon.component'; + +const meta: Meta<ExternalUnitIconComponent> = { + title: 'Icons/External unit icon', + component: ExternalUnitIconComponent, + excludeStories: /.*Data$/, + tags: ['autodocs'], +}; + +export default meta; +type Story = StoryObj<ExternalUnitIconComponent>; + +export const Default: Story = {}; diff --git a/alfa-client/libs/design-system/src/lib/icons/mailbox-icon/mailbox-icon.component.ts b/alfa-client/libs/design-system/src/lib/icons/mailbox-icon/mailbox-icon.component.ts index 84f8f446e56ed21aa7d1dfd2119a673b850897e9..07b28d630504aa66112c1af5fe9c030a273f1533 100644 --- a/alfa-client/libs/design-system/src/lib/icons/mailbox-icon/mailbox-icon.component.ts +++ b/alfa-client/libs/design-system/src/lib/icons/mailbox-icon/mailbox-icon.component.ts @@ -15,14 +15,12 @@ import { IconVariants, iconVariants } from '../iconVariants'; > <path d="M20 4H4C2.89543 4 2 4.89543 2 6V18C2 19.1046 2.89543 20 4 20H20C21.1046 20 22 19.1046 22 18V6C22 4.89543 21.1046 4 20 4Z" - stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" /> <path d="M22 7L13.03 12.7C12.7213 12.8934 12.3643 12.996 12 12.996C11.6357 12.996 11.2787 12.8934 10.97 12.7L2 7" - stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" diff --git a/alfa-client/libs/design-system/src/lib/icons/person-icon/person-icon.component.spec.ts b/alfa-client/libs/design-system/src/lib/icons/person-icon/person-icon.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..652bfa8bc67ef5656971452b96f76272c06ecbdc --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/person-icon/person-icon.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { PersonIconComponent } from './person-icon.component'; + +describe('PersonIconComponent', () => { + let component: PersonIconComponent; + let fixture: ComponentFixture<PersonIconComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [PersonIconComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(PersonIconComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/alfa-client/libs/design-system/src/lib/icons/person-icon/person-icon.component.ts b/alfa-client/libs/design-system/src/lib/icons/person-icon/person-icon.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..54a353e5f0ff022713350d113556d0953fdeeed3 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/person-icon/person-icon.component.ts @@ -0,0 +1,33 @@ +import { NgClass } from '@angular/common'; +import { Component, Input } from '@angular/core'; +import { twMerge } from 'tailwind-merge'; + +import { IconVariants, iconVariants } from '../iconVariants'; + +@Component({ + selector: 'ods-person-icon', + standalone: true, + imports: [NgClass], + template: `<svg + xmlns="http://www.w3.org/2000/svg" + [ngClass]="[twMerge(iconVariants({ size }), 'stroke-gray-600', class)]" + aria-hidden="true" + viewBox="0 0 24 24" + fill="none" + > + <path + d="M20.4 22.8v-2.4a4.8 4.8 0 00-4.8-4.8H8.4a4.8 4.8 0 00-4.8 4.8v2.4m8.4-12a4.8 4.8 0 100-9.6 4.8 4.8 0 000 9.6z" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="2" + fill="none" + /> + </svg>`, +}) +export class PersonIconComponent { + @Input() size: IconVariants['size'] = 'small'; + @Input() class: string = undefined; + + public readonly iconVariants = iconVariants; + public readonly twMerge = twMerge; +} diff --git a/alfa-client/libs/design-system/src/lib/icons/person-icon/person-icon.stories.ts b/alfa-client/libs/design-system/src/lib/icons/person-icon/person-icon.stories.ts new file mode 100644 index 0000000000000000000000000000000000000000..61ef6271736032c9a31a5695d62303bc77fdd373 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/person-icon/person-icon.stories.ts @@ -0,0 +1,27 @@ +import type { Meta, StoryObj } from '@storybook/angular'; + +import { PersonIconComponent } from './person-icon.component'; + +const meta: Meta<PersonIconComponent> = { + title: 'Icons/Person icon', + component: PersonIconComponent, + excludeStories: /.*Data$/, + tags: ['autodocs'], +}; + +export default meta; +type Story = StoryObj<PersonIconComponent>; + +export const Default: Story = { + args: { size: 'large' }, + argTypes: { + size: { + control: 'select', + options: ['small', 'medium', 'large', 'extra-large', 'full'], + description: 'Size of icon. Property "full" means 100%', + table: { + defaultValue: { summary: 'small' }, + }, + }, + }, +}; diff --git a/alfa-client/libs/design-system/src/lib/icons/public-administration-icon/public-administration-icon.component.html b/alfa-client/libs/design-system/src/lib/icons/public-administration-icon/public-administration-icon.component.html new file mode 100644 index 0000000000000000000000000000000000000000..45ef2a2964157d80fff9cd0ff873d4f40aeb83d7 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/public-administration-icon/public-administration-icon.component.html @@ -0,0 +1,112 @@ +<svg width="44" height="44" viewBox="0 0 44 38" fill="none" xmlns="http://www.w3.org/2000/svg"> + <g [ngClass]="[twMerge('fill-primary', class)]"> + <path + d="M8.81083 9.89993H8.52662V9.04961C8.52662 8.89316 8.39959 8.76618 8.24241 8.76618C8.08523 8.76618 7.9582 8.89316 7.9582 9.04961V10.1834C7.9582 10.3398 8.08523 10.4668 8.24241 10.4668H8.81086C8.96804 10.4668 9.09507 10.3398 9.09507 10.1834C9.09507 10.0269 8.96801 9.89993 8.81083 9.89993Z" + /> + <path + d="M3.12693 17.2713H1.98944C1.83218 17.2713 1.70508 17.3983 1.70508 17.5547V19.2554C1.70508 19.4119 1.83218 19.5388 1.98944 19.5388H3.1269C3.28415 19.5388 3.41125 19.4119 3.41125 19.2554V17.5547C3.41129 17.3983 3.28419 17.2713 3.12693 17.2713ZM2.84254 18.972H2.27383V17.8382H2.84257L2.84254 18.972Z" + /> + <path + d="M3.41129 14.1538C3.41129 13.9973 3.28419 13.8703 3.12693 13.8703H1.98944C1.83218 13.8703 1.70508 13.9973 1.70508 14.1538V15.8545C1.70508 16.0109 1.83218 16.1379 1.98944 16.1379H3.1269C3.28415 16.1379 3.41125 16.0109 3.41125 15.8545L3.41129 14.1538ZM2.84254 15.571H2.27383V14.4372H2.84257L2.84254 15.571Z" + /> + <path + d="M3.98112 12.4533C3.98112 12.2969 3.85402 12.1699 3.69676 12.1699H0.568712V11.8865C0.568712 11.73 0.441614 11.603 0.284356 11.603C0.127099 11.603 0 11.73 0 11.8865V21.5237C0 21.9926 0.382763 22.3741 0.853102 22.3741H3.12805C3.59839 22.3741 3.98115 21.9926 3.98115 21.5237C3.98115 21.0549 3.59839 20.6734 3.12805 20.6734C3.07887 20.6734 3.02995 20.6776 2.98189 20.6861C2.78598 20.3338 2.41201 20.1065 1.99059 20.1065C1.56917 20.1065 1.19521 20.3338 0.999296 20.6861C0.951242 20.6776 0.902322 20.6734 0.853135 20.6734C0.752763 20.6734 0.658055 20.6938 0.568779 20.7255V12.7368H3.69683C3.85399 12.7368 3.98112 12.6098 3.98112 12.4533ZM0.853069 21.2403C0.907387 21.2403 0.959406 21.2559 1.00719 21.2865C1.08484 21.3367 1.18238 21.3457 1.26826 21.3109C1.35413 21.2763 1.41725 21.202 1.43861 21.1122C1.49833 20.854 1.72527 20.6734 1.99056 20.6734C2.25586 20.6734 2.48253 20.854 2.54251 21.1122C2.56384 21.202 2.62695 21.2763 2.71286 21.3109C2.79874 21.3458 2.89598 21.3367 2.97393 21.2865C3.15934 21.1675 3.41241 21.3131 3.41241 21.5237C3.41241 21.6799 3.28501 21.8072 3.12805 21.8072H0.853069C0.696111 21.8072 0.568712 21.6799 0.568712 21.5237C0.568712 21.3676 0.696111 21.2403 0.853069 21.2403Z" + /> + <path + d="M12.2294 21.2381H4.83585C4.6786 21.2381 4.5515 21.3652 4.5515 21.5217V22.0889C4.5515 22.2454 4.6786 22.3725 4.83585 22.3725C4.99311 22.3725 5.12021 22.2454 5.12021 22.0889V21.8053H11.945V22.0889C11.945 22.2454 12.0721 22.3725 12.2294 22.3725C12.3866 22.3725 12.5137 22.2454 12.5137 22.0889V21.5217C12.5138 21.3652 12.3866 21.2381 12.2294 21.2381Z" + /> + <path + d="M4.83585 20.6696C4.99311 20.6696 5.12021 20.5427 5.12021 20.3862V9.33167C5.12021 9.17522 4.99311 9.04823 4.83585 9.04823C4.6786 9.04823 4.5515 9.17522 4.5515 9.33167V20.3862C4.55146 20.5427 4.6786 20.6696 4.83585 20.6696Z" + /> + <path + d="M12.2303 8.76618C12.073 8.76618 11.9459 8.89317 11.9459 9.04962V20.3876C11.9459 20.544 12.073 20.671 12.2303 20.671C12.3876 20.671 12.5147 20.544 12.5147 20.3876V9.04962C12.5147 8.89317 12.3876 8.76618 12.2303 8.76618Z" + /> + <path + d="M16.7668 11.603C16.6095 11.603 16.4824 11.73 16.4824 11.8865V12.1699H13.3543C13.1971 12.1699 13.07 12.2969 13.07 12.4533C13.07 12.6098 13.1971 12.7368 13.3543 12.7368H16.4824V20.7255C16.3928 20.6938 16.2981 20.6734 16.198 20.6734C16.1489 20.6734 16.0999 20.6776 16.0519 20.6861C15.856 20.3338 15.482 20.1065 15.0606 20.1065C14.6392 20.1065 14.2652 20.3338 14.0693 20.6861C14.0212 20.6776 13.9723 20.6734 13.9231 20.6734C13.4528 20.6734 13.07 21.0549 13.07 21.5237C13.07 21.9925 13.4528 22.3741 13.9231 22.3741H16.1981C16.6684 22.3741 17.0512 21.9925 17.0512 21.5237V11.8865C17.0511 11.73 16.924 11.603 16.7668 11.603ZM16.198 21.8072H13.9231C13.7661 21.8072 13.6387 21.68 13.6387 21.5238C13.6387 21.3676 13.7661 21.2403 13.9231 21.2403C13.9774 21.2403 14.0294 21.2559 14.0772 21.2865C14.1551 21.3367 14.2524 21.3458 14.3382 21.3109C14.4241 21.2763 14.4872 21.2021 14.5086 21.1122C14.5683 20.854 14.7952 20.6734 15.0605 20.6734C15.3258 20.6734 15.5525 20.854 15.6125 21.1122C15.6338 21.2021 15.6969 21.2763 15.7828 21.3109C15.8687 21.3458 15.9659 21.3367 16.0438 21.2865C16.2295 21.1675 16.4823 21.3132 16.4823 21.5238C16.4824 21.68 16.355 21.8072 16.198 21.8072Z" + /> + <path + d="M12.9462 7.95689L8.68064 5.40584C8.5905 5.3517 8.4779 5.3517 8.38775 5.40584L4.12224 7.95689C3.98775 8.03737 3.94396 8.21143 4.025 8.34579C4.10575 8.47985 4.28007 8.5235 4.41516 8.44272L8.53422 5.97926L12.6533 8.44272C12.6991 8.47022 12.7497 8.48324 12.7994 8.48324C12.8961 8.48324 12.9902 8.43421 13.0434 8.34576C13.1244 8.21143 13.0806 8.0374 12.9462 7.95689Z" + /> + <path + d="M13.651 19.2554C13.651 19.4119 13.7781 19.5388 13.9354 19.5388H15.0728C15.2301 19.5388 15.3572 19.4119 15.3572 19.2554V17.5547C15.3572 17.3983 15.2301 17.2713 15.0728 17.2713H13.9354C13.7781 17.2713 13.651 17.3983 13.651 17.5547V19.2554ZM14.2198 17.8382H14.7885V18.972H14.2198V17.8382Z" + /> + <path + d="M13.9354 16.1379H15.0728C15.2301 16.1379 15.3572 16.0109 15.3572 15.8545V14.1538C15.3572 13.9973 15.2301 13.8703 15.0728 13.8703H13.9354C13.7781 13.8703 13.651 13.9973 13.651 14.1538V15.8545C13.651 16.0109 13.7781 16.1379 13.9354 16.1379ZM14.2198 14.4372H14.7885V15.571H14.2198V14.4372Z" + /> + <path + d="M8.31732 19.0477C8.26586 19.1015 8.23489 19.1724 8.23489 19.2489C8.23489 19.3226 8.26586 19.3963 8.31732 19.4502C8.37105 19.5012 8.44209 19.5324 8.51913 19.5324C8.59304 19.5324 8.66665 19.5012 8.72094 19.4502C8.7721 19.3964 8.80337 19.3226 8.80337 19.2489C8.80337 19.1724 8.7721 19.1016 8.72094 19.0477C8.61576 18.9428 8.41938 18.9428 8.31732 19.0477Z" + /> + <path + d="M6.25312 15.8545C6.25312 16.0109 6.38022 16.1379 6.53748 16.1379H7.67493C7.83219 16.1379 7.95929 16.0109 7.95929 15.8545V14.1538C7.95929 13.9973 7.83219 13.8703 7.67493 13.8703H6.53748C6.38022 13.8703 6.25312 13.9973 6.25312 14.1538V15.8545ZM6.82187 14.4372H7.39061V15.571H6.82187V14.4372Z" + /> + <path + d="M9.38389 13.8703C9.22663 13.8703 9.09953 13.9973 9.09953 14.1538V15.8545C9.09953 16.0109 9.22663 16.1379 9.38389 16.1379H10.5213C10.6786 16.1379 10.8057 16.0109 10.8057 15.8545V14.1538C10.8057 13.9973 10.6786 13.8703 10.5213 13.8703H9.38389ZM10.237 15.571H9.66825V14.4372H10.237V15.571Z" + /> + <path + d="M8.52807 7.63435C7.27371 7.63435 6.25312 8.65165 6.25312 9.90196C6.25312 11.1523 7.27371 12.1696 8.52807 12.1696C9.78243 12.1696 10.803 11.1523 10.803 9.90196C10.803 8.65165 9.78243 7.63435 8.52807 7.63435ZM8.52807 11.6026C7.58709 11.6026 6.82187 10.8399 6.82187 9.90192C6.82187 8.96398 7.58709 8.20123 8.52807 8.20123C9.46905 8.20123 10.2343 8.96398 10.2343 9.90192C10.2343 10.8399 9.46905 11.6026 8.52807 11.6026Z" + /> + <path + d="M5.68937 17.5547C5.68937 17.7112 5.81647 17.8381 5.97373 17.8381H6.82683V20.3892C6.82683 20.5456 6.95393 20.6726 7.11118 20.6726C7.26844 20.6726 7.39554 20.5456 7.39554 20.3892V17.8381H9.67049V20.3892C9.67049 20.5456 9.79759 20.6726 9.95485 20.6726C10.1121 20.6726 10.2392 20.5456 10.2392 20.3892V17.8381H11.0923C11.2496 17.8381 11.3767 17.7112 11.3767 17.5547C11.3767 17.3983 11.2496 17.2713 11.0923 17.2713H5.97369C5.81647 17.2713 5.68937 17.3983 5.68937 17.5547Z" + /> + <path + d="M35.76 19.0093H35.4758V18.159C35.4758 18.0025 35.3488 17.8756 35.1916 17.8756C35.0345 17.8756 34.9074 18.0025 34.9074 18.159V19.2927C34.9074 19.4492 35.0345 19.5762 35.1916 19.5762H35.7601C35.9173 19.5762 36.0443 19.4492 36.0443 19.2927C36.0443 19.1363 35.9172 19.0093 35.76 19.0093Z" + /> + <path + d="M30.0761 26.3806H28.9387C28.7814 26.3806 28.6543 26.5076 28.6543 26.6641V28.3648C28.6543 28.5212 28.7814 28.6482 28.9387 28.6482H30.0761C30.2334 28.6482 30.3605 28.5212 30.3605 28.3648V26.6641C30.3605 26.5076 30.2334 26.3806 30.0761 26.3806ZM29.7918 28.0813H29.223V26.9476H29.7918L29.7918 28.0813Z" + /> + <path + d="M30.3605 23.2631C30.3605 23.1067 30.2334 22.9797 30.0761 22.9797H28.9387C28.7814 22.9797 28.6543 23.1067 28.6543 23.2631V24.9638C28.6543 25.1203 28.7814 25.2473 28.9387 25.2473H30.0761C30.2334 25.2473 30.3605 25.1203 30.3605 24.9638L30.3605 23.2631ZM29.7918 24.6804H29.223V23.5466H29.7918L29.7918 24.6804Z" + /> + <path + d="M30.9303 21.5627C30.9303 21.4063 30.8032 21.2793 30.646 21.2793H27.5179V20.9958C27.5179 20.8394 27.3908 20.7124 27.2336 20.7124C27.0763 20.7124 26.9492 20.8394 26.9492 20.9958V30.6331C26.9492 31.1019 27.332 31.4835 27.8023 31.4835H30.0773C30.5476 31.4835 30.9304 31.1019 30.9304 30.6331C30.9304 30.1643 30.5476 29.7828 30.0773 29.7828C30.0281 29.7828 29.9792 29.787 29.9311 29.7955C29.7352 29.4432 29.3612 29.2159 28.9398 29.2159C28.5184 29.2159 28.1444 29.4432 27.9485 29.7955C27.9005 29.787 27.8515 29.7828 27.8024 29.7828C27.702 29.7828 27.6073 29.8032 27.518 29.8349V21.8462H30.6461C30.8032 21.8462 30.9303 21.7192 30.9303 21.5627ZM27.8023 30.3497C27.8566 30.3497 27.9086 30.3653 27.9564 30.3959C28.0341 30.446 28.1316 30.4551 28.2175 30.4203C28.3034 30.3857 28.3665 30.3114 28.3878 30.2216C28.4475 29.9633 28.6745 29.7828 28.9398 29.7828C29.2051 29.7828 29.4317 29.9633 29.4917 30.2216C29.5131 30.3114 29.5762 30.3857 29.6621 30.4203C29.748 30.4551 29.8452 30.4461 29.9231 30.3959C30.1086 30.2768 30.3616 30.4225 30.3616 30.6331C30.3616 30.7893 30.2342 30.9166 30.0773 30.9166H27.8023C27.6453 30.9166 27.5179 30.7893 27.5179 30.6331C27.5179 30.4769 27.6453 30.3497 27.8023 30.3497Z" + /> + <path + d="M39.1786 30.3475H31.7851C31.6278 30.3475 31.5007 30.4746 31.5007 30.6311V31.1983C31.5007 31.3548 31.6278 31.4818 31.7851 31.4818C31.9423 31.4818 32.0694 31.3548 32.0694 31.1983V30.9147H38.8942V31.1983C38.8942 31.3548 39.0213 31.4818 39.1786 31.4818C39.3359 31.4818 39.463 31.3548 39.463 31.1983V30.6311C39.463 30.4746 39.3359 30.3475 39.1786 30.3475Z" + /> + <path + d="M31.7851 29.779C31.9423 29.779 32.0694 29.652 32.0694 29.4956V18.441C32.0694 18.2846 31.9423 18.1576 31.7851 18.1576C31.6278 18.1576 31.5007 18.2846 31.5007 18.441V29.4956C31.5007 29.652 31.6278 29.779 31.7851 29.779Z" + /> + <path + d="M39.1795 17.8756C39.0223 17.8756 38.8952 18.0025 38.8952 18.159V29.497C38.8952 29.6534 39.0223 29.7804 39.1795 29.7804C39.3368 29.7804 39.4639 29.6534 39.4639 29.497V18.159C39.4639 18.0025 39.3368 17.8756 39.1795 17.8756Z" + /> + <path + d="M43.716 20.7124C43.5587 20.7124 43.4316 20.8394 43.4316 20.9958V21.2793H40.3036C40.1463 21.2793 40.0192 21.4063 40.0192 21.5627C40.0192 21.7192 40.1463 21.8462 40.3036 21.8462H43.4316V29.8349C43.342 29.8031 43.2473 29.7827 43.1473 29.7827C43.0981 29.7827 43.0492 29.787 43.0011 29.7955C42.8052 29.4432 42.4312 29.2158 42.0098 29.2158C41.5884 29.2158 41.2144 29.4432 41.0185 29.7955C40.9704 29.787 40.9215 29.7827 40.8723 29.7827C40.402 29.7827 40.0192 30.1643 40.0192 30.6331C40.0192 31.1019 40.402 31.4834 40.8723 31.4834H43.1473C43.6176 31.4834 44.0004 31.1019 44.0004 30.6331V20.9959C44.0003 20.8394 43.8732 20.7124 43.716 20.7124ZM43.1472 30.9166H40.8723C40.7153 30.9166 40.5879 30.7893 40.5879 30.6332C40.5879 30.477 40.7153 30.3497 40.8723 30.3497C40.9266 30.3497 40.9786 30.3653 41.0264 30.3959C41.1043 30.4461 41.2016 30.4551 41.2875 30.4203C41.3733 30.3857 41.4365 30.3114 41.4578 30.2216C41.5175 29.9634 41.7444 29.7828 42.0097 29.7828C42.2751 29.7828 42.5017 29.9634 42.5617 30.2216C42.583 30.3114 42.6461 30.3857 42.732 30.4203C42.8179 30.4552 42.9151 30.4461 42.9931 30.3959C43.1787 30.2769 43.4315 30.4226 43.4315 30.6332C43.4316 30.7893 43.3042 30.9166 43.1472 30.9166Z" + /> + <path + d="M39.8954 17.0663L35.6299 14.5152C35.5397 14.4611 35.4271 14.4611 35.337 14.5152L31.0715 17.0663C30.937 17.1467 30.8932 17.3208 30.9742 17.4552C31.055 17.5892 31.2293 17.6329 31.3644 17.5521L35.4834 15.0886L39.6025 17.5521C39.6483 17.5796 39.6989 17.5926 39.7486 17.5926C39.8453 17.5926 39.9395 17.5436 39.9926 17.4551C40.0737 17.3208 40.0299 17.1468 39.8954 17.0663Z" + /> + <path + d="M40.6003 28.3648C40.6003 28.5212 40.7273 28.6482 40.8846 28.6482H42.0221C42.1793 28.6482 42.3064 28.5212 42.3064 28.3648V26.6641C42.3064 26.5076 42.1793 26.3806 42.0221 26.3806H40.8846C40.7273 26.3806 40.6003 26.5076 40.6003 26.6641V28.3648ZM41.169 26.9476H41.7377V28.0813H41.169V26.9476Z" + /> + <path + d="M40.8846 25.2473H42.0221C42.1793 25.2473 42.3064 25.1203 42.3064 24.9638V23.2631C42.3064 23.1067 42.1793 22.9797 42.0221 22.9797H40.8846C40.7273 22.9797 40.6003 23.1067 40.6003 23.2631V24.9638C40.6003 25.1203 40.7273 25.2473 40.8846 25.2473ZM41.169 23.5466H41.7377V24.6804H41.169V23.5466Z" + /> + <path + d="M35.2665 28.1571C35.2151 28.2109 35.1841 28.2818 35.1841 28.3583C35.1841 28.432 35.2151 28.5057 35.2665 28.5596C35.3203 28.6106 35.3913 28.6418 35.4684 28.6418C35.5423 28.6418 35.6159 28.6106 35.6702 28.5596C35.7213 28.5057 35.7526 28.432 35.7526 28.3583C35.7526 28.2818 35.7213 28.2109 35.6702 28.1571C35.565 28.0522 35.3686 28.0522 35.2665 28.1571Z" + /> + <path + d="M33.2023 24.9638C33.2023 25.1203 33.3294 25.2473 33.4867 25.2473H34.6242C34.7814 25.2473 34.9085 25.1203 34.9085 24.9638V23.2631C34.9085 23.1067 34.7814 22.9797 34.6242 22.9797H33.4867C33.3294 22.9797 33.2023 23.1067 33.2023 23.2631V24.9638ZM33.7711 23.5466H34.3398V24.6804H33.7711V23.5466Z" + /> + <path + d="M36.3331 22.9797C36.1759 22.9797 36.0488 23.1067 36.0488 23.2631V24.9638C36.0488 25.1203 36.1759 25.2473 36.3331 25.2473H37.4706C37.6278 25.2473 37.7549 25.1203 37.7549 24.9638V23.2631C37.7549 23.1067 37.6278 22.9797 37.4706 22.9797H36.3331ZM37.1862 24.6804H36.6175V23.5466H37.1862V24.6804Z" + /> + <path + d="M35.4773 16.7437C34.2229 16.7437 33.2023 17.761 33.2023 19.0113C33.2023 20.2616 34.2229 21.2789 35.4773 21.2789C36.7316 21.2789 37.7522 20.2616 37.7522 19.0113C37.7522 17.761 36.7316 16.7437 35.4773 16.7437ZM35.4773 20.712C34.5363 20.712 33.7711 19.9492 33.7711 19.0113C33.7711 18.0734 34.5363 17.3106 35.4773 17.3106C36.4183 17.3106 37.1835 18.0734 37.1835 19.0113C37.1835 19.9492 36.4183 20.712 35.4773 20.712Z" + /> + <path + d="M32.6386 26.6641C32.6386 26.8205 32.7657 26.9475 32.9229 26.9475H33.776V29.4986C33.776 29.655 33.9031 29.782 34.0604 29.782C34.2177 29.782 34.3448 29.655 34.3448 29.4986V26.9475H36.6197V29.4986C36.6197 29.655 36.7468 29.782 36.9041 29.782C37.0613 29.782 37.1884 29.655 37.1884 29.4986V26.9475H38.0415C38.1988 26.9475 38.3259 26.8205 38.3259 26.6641C38.3259 26.5076 38.1988 26.3806 38.0415 26.3806H32.9229C32.7657 26.3806 32.6386 26.5076 32.6386 26.6641Z" + /> + </g> + <g [ngClass]="[twMerge('stroke-primary', class)]"> + <path + d="M7.41198 24.2393C7.42035 27.0539 8.37002 29.7843 10.0992 31.9656C11.8283 34.1468 14.23 35.6438 16.895 36.2014C19.5599 36.7591 22.3233 36.343 24.7142 35.024C25.8791 34.3813 26.9205 33.5436 27.8015 32.5532M4.12891 29.2798L7.04768 24.0215L12.1392 27.0791" + stroke-width="2" + stroke-linejoin="round" + /> + <path + d="M33.745 13.2033C33.7367 10.3888 32.787 7.65832 31.0578 5.4771C29.3287 3.29588 26.927 1.7989 24.262 1.24122C21.5971 0.683541 18.8337 1.09967 16.4428 2.4187C15.2779 3.06137 14.2365 3.89902 13.3555 4.88946M37.0281 8.16288L34.1093 13.4212L29.0178 10.3635" + stroke-width="2" + stroke-linejoin="round" + /> + </g> +</svg> diff --git a/alfa-client/libs/design-system/src/lib/icons/public-administration-icon/public-administration-icon.component.spec.ts b/alfa-client/libs/design-system/src/lib/icons/public-administration-icon/public-administration-icon.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..af3252cb43e04538d31228d8ff3f6186b459dfdd --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/public-administration-icon/public-administration-icon.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { PublicAdministrationIconComponent } from './public-administration-icon.component'; + +describe('PublicAdministrationIconComponent', () => { + let component: PublicAdministrationIconComponent; + let fixture: ComponentFixture<PublicAdministrationIconComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [PublicAdministrationIconComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(PublicAdministrationIconComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/alfa-client/libs/design-system/src/lib/icons/public-administration-icon/public-administration-icon.component.ts b/alfa-client/libs/design-system/src/lib/icons/public-administration-icon/public-administration-icon.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..2d09979eea5219f1d993e05a4cb8989002c8ab5a --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/public-administration-icon/public-administration-icon.component.ts @@ -0,0 +1,15 @@ +import { CommonModule } from '@angular/common'; +import { Component, Input } from '@angular/core'; +import { twMerge } from 'tailwind-merge'; + +@Component({ + selector: 'ods-public-administration-icon', + standalone: true, + imports: [CommonModule], + templateUrl: './public-administration-icon.component.html', +}) +export class PublicAdministrationIconComponent { + @Input() class: string = undefined; + + readonly twMerge = twMerge; +} diff --git a/alfa-client/libs/design-system/src/lib/icons/public-administration-icon/public-administration-icon.stories.ts b/alfa-client/libs/design-system/src/lib/icons/public-administration-icon/public-administration-icon.stories.ts new file mode 100644 index 0000000000000000000000000000000000000000..c68129b3c4607671a7898891fb89c9d4690ffe6c --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/public-administration-icon/public-administration-icon.stories.ts @@ -0,0 +1,15 @@ +import type { Meta, StoryObj } from '@storybook/angular'; + +import { PublicAdministrationIconComponent } from './public-administration-icon.component'; + +const meta: Meta<PublicAdministrationIconComponent> = { + title: 'Icons/Public administration icon', + component: PublicAdministrationIconComponent, + excludeStories: /.*Data$/, + tags: ['autodocs'], +}; + +export default meta; +type Story = StoryObj<PublicAdministrationIconComponent>; + +export const Default: Story = {}; diff --git a/alfa-client/libs/design-system/src/lib/icons/settings-icon/settings-icon.component.spec.ts b/alfa-client/libs/design-system/src/lib/icons/settings-icon/settings-icon.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..5327d1e498e727626a7061518a15bcfdb45c49d3 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/settings-icon/settings-icon.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { SettingsIconComponent } from './settings-icon.component'; + +describe('SettingsIconComponent', () => { + let component: SettingsIconComponent; + let fixture: ComponentFixture<SettingsIconComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SettingsIconComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(SettingsIconComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/alfa-client/libs/design-system/src/lib/icons/settings-icon/settings-icon.component.ts b/alfa-client/libs/design-system/src/lib/icons/settings-icon/settings-icon.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..72f83d3644b562fc6d7be857cc39b0a68a52ae6a --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/settings-icon/settings-icon.component.ts @@ -0,0 +1,27 @@ +import { NgClass } from '@angular/common'; +import { Component, Input } from '@angular/core'; +import { IconVariants, iconVariants } from '@ods/system'; +import { twMerge } from 'tailwind-merge'; + +@Component({ + selector: 'ods-settings-icon', + standalone: true, + imports: [NgClass], + template: `<svg + viewBox="0 0 24 24" + fill="none" + xmlns="http://www.w3.org/2000/svg" + [ngClass]="twMerge(iconVariants({ size }), 'fill-neutral-500', class)" + > + <path + d="M 10.490234 2 C 10.011234 2 9.6017656 2.3385938 9.5097656 2.8085938 L 9.1757812 4.5234375 C 8.3550224 4.8338012 7.5961042 5.2674041 6.9296875 5.8144531 L 5.2851562 5.2480469 C 4.8321563 5.0920469 4.33375 5.2793594 4.09375 5.6933594 L 2.5859375 8.3066406 C 2.3469375 8.7216406 2.4339219 9.2485 2.7949219 9.5625 L 4.1132812 10.708984 C 4.0447181 11.130337 4 11.559284 4 12 C 4 12.440716 4.0447181 12.869663 4.1132812 13.291016 L 2.7949219 14.4375 C 2.4339219 14.7515 2.3469375 15.278359 2.5859375 15.693359 L 4.09375 18.306641 C 4.33275 18.721641 4.8321562 18.908906 5.2851562 18.753906 L 6.9296875 18.1875 C 7.5958842 18.734206 8.3553934 19.166339 9.1757812 19.476562 L 9.5097656 21.191406 C 9.6017656 21.661406 10.011234 22 10.490234 22 L 13.509766 22 C 13.988766 22 14.398234 21.661406 14.490234 21.191406 L 14.824219 19.476562 C 15.644978 19.166199 16.403896 18.732596 17.070312 18.185547 L 18.714844 18.751953 C 19.167844 18.907953 19.66625 18.721641 19.90625 18.306641 L 21.414062 15.691406 C 21.653063 15.276406 21.566078 14.7515 21.205078 14.4375 L 19.886719 13.291016 C 19.955282 12.869663 20 12.440716 20 12 C 20 11.559284 19.955282 11.130337 19.886719 10.708984 L 21.205078 9.5625 C 21.566078 9.2485 21.653063 8.7216406 21.414062 8.3066406 L 19.90625 5.6933594 C 19.66725 5.2783594 19.167844 5.0910937 18.714844 5.2460938 L 17.070312 5.8125 C 16.404116 5.2657937 15.644607 4.8336609 14.824219 4.5234375 L 14.490234 2.8085938 C 14.398234 2.3385937 13.988766 2 13.509766 2 L 10.490234 2 z M 12 8 C 14.209 8 16 9.791 16 12 C 16 14.209 14.209 16 12 16 C 9.791 16 8 14.209 8 12 C 8 9.791 9.791 8 12 8 z" + /> + </svg>`, +}) +export class SettingsIconComponent { + @Input() size: IconVariants['size'] = 'medium'; + @Input() class: string = undefined; + + protected readonly iconVariants = iconVariants; + protected readonly twMerge = twMerge; +} diff --git a/alfa-client/libs/design-system/src/lib/icons/user-icon/user-icon.component.ts b/alfa-client/libs/design-system/src/lib/icons/user-icon/user-icon.component.ts index 90c01e353f6029d459584e6fcdafa425c6e6d9be..a3a53a9097b2984aea8449cf1671b5f860ac5da4 100644 --- a/alfa-client/libs/design-system/src/lib/icons/user-icon/user-icon.component.ts +++ b/alfa-client/libs/design-system/src/lib/icons/user-icon/user-icon.component.ts @@ -10,13 +10,13 @@ import { IconVariants, iconVariants } from '../iconVariants'; imports: [CommonModule, ExclamationIconComponent], template: ` <svg - viewBox="0 0 47 47" + viewBox="0 0 112 112" fill="none" xmlns="http://www.w3.org/2000/svg" [ngClass]="[twMerge(iconVariants({ size }), 'fill-ozggray-300', class)]" > <path - d="M23.5 3.91663C12.69 3.91663 3.91669 12.69 3.91669 23.5C3.91669 34.31 12.69 43.0833 23.5 43.0833C34.31 43.0833 43.0834 34.31 43.0834 23.5C43.0834 12.69 34.31 3.91663 23.5 3.91663ZM23.5 9.79163C26.7509 9.79163 29.375 12.4158 29.375 15.6666C29.375 18.9175 26.7509 21.5416 23.5 21.5416C20.2492 21.5416 17.625 18.9175 17.625 15.6666C17.625 12.4158 20.2492 9.79163 23.5 9.79163ZM23.5 37.6C18.6042 37.6 14.2763 35.0933 11.75 31.2941C11.8088 27.397 19.5834 25.2625 23.5 25.2625C27.3971 25.2625 35.1913 27.397 35.25 31.2941C32.7238 35.0933 28.3959 37.6 23.5 37.6Z" + d="M56 0.970734C25.6239 0.970734 0.970886 25.6239 0.970886 56C0.970886 86.3761 25.6239 111.029 56 111.029C86.3761 111.029 111.029 86.3761 111.029 56C111.029 25.6239 86.3761 0.970734 56 0.970734ZM56 17.4795C65.135 17.4795 72.5087 24.8534 72.5087 33.9881C72.5087 43.1232 65.135 50.4969 56 50.4969C46.8652 50.4969 39.4912 43.1232 39.4912 33.9881C39.4912 24.8534 46.8652 17.4795 56 17.4795ZM56 95.621C42.2428 95.621 30.0814 88.5772 22.9825 77.9014C23.1477 66.9506 44.9943 60.9526 56 60.9526C66.9508 60.9526 88.8525 66.9506 89.0175 77.9014C81.9189 88.5772 69.7575 95.621 56 95.621Z" /> </svg> `, diff --git a/alfa-client/libs/design-system/src/lib/icons/users-icon/users-icon.component.spec.ts b/alfa-client/libs/design-system/src/lib/icons/users-icon/users-icon.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..b12f0a04fd5c34a508c040a28ff59772577af746 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/users-icon/users-icon.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { UsersIconComponent } from './users-icon.component'; + +describe('UsersIconComponent', () => { + let component: UsersIconComponent; + let fixture: ComponentFixture<UsersIconComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [UsersIconComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(UsersIconComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/alfa-client/libs/design-system/src/lib/icons/collaboration-icon/collaboration-icon.component.ts b/alfa-client/libs/design-system/src/lib/icons/users-icon/users-icon.component.ts similarity index 95% rename from alfa-client/libs/design-system/src/lib/icons/collaboration-icon/collaboration-icon.component.ts rename to alfa-client/libs/design-system/src/lib/icons/users-icon/users-icon.component.ts index 8565574eac373499fcedaea5b514e7f616b344e1..d7cc5a858b275dc0e33c1caecbf3ac265c89e818 100644 --- a/alfa-client/libs/design-system/src/lib/icons/collaboration-icon/collaboration-icon.component.ts +++ b/alfa-client/libs/design-system/src/lib/icons/users-icon/users-icon.component.ts @@ -4,7 +4,7 @@ import { twMerge } from 'tailwind-merge'; import { IconVariants, iconVariants } from '../iconVariants'; @Component({ - selector: 'ods-collaboration-icon', + selector: 'ods-users-icon', standalone: true, imports: [CommonModule], template: `<svg @@ -44,7 +44,7 @@ import { IconVariants, iconVariants } from '../iconVariants'; /> </svg>`, }) -export class CollaborationIconComponent { +export class UsersIconComponent { @Input() size: IconVariants['size'] = 'medium'; @Input() class: string = undefined; diff --git a/alfa-client/libs/design-system/src/lib/icons/users-icon/users-icon.stories.ts b/alfa-client/libs/design-system/src/lib/icons/users-icon/users-icon.stories.ts new file mode 100644 index 0000000000000000000000000000000000000000..702d6b13e5e6ff34a2da6549618f3c71891f6e96 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/users-icon/users-icon.stories.ts @@ -0,0 +1,27 @@ +import type { Meta, StoryObj } from '@storybook/angular'; + +import { UsersIconComponent } from './users-icon.component'; + +const meta: Meta<UsersIconComponent> = { + title: 'Icons/Users icon', + component: UsersIconComponent, + excludeStories: /.*Data$/, + tags: ['autodocs'], +}; + +export default meta; +type Story = StoryObj<UsersIconComponent>; + +export const Default: Story = { + args: { size: 'medium' }, + argTypes: { + size: { + control: 'select', + options: ['small', 'medium', 'large', 'extra-large', 'full'], + description: 'Size of icon. Property "full" means 100%', + table: { + defaultValue: { summary: 'medium' }, + }, + }, + }, +}; diff --git a/alfa-client/libs/design-system/src/lib/instant-search/instant-search/instant-search.component.spec.ts b/alfa-client/libs/design-system/src/lib/instant-search/instant-search/instant-search.component.spec.ts index 72cc13e7708a00114b96193a07e83a855f0c628c..b83a6e167dbaabae7a8a6e4b6595086ff48bde93 100644 --- a/alfa-client/libs/design-system/src/lib/instant-search/instant-search/instant-search.component.spec.ts +++ b/alfa-client/libs/design-system/src/lib/instant-search/instant-search/instant-search.component.spec.ts @@ -1,12 +1,6 @@ import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; import { EventEmitter } from '@angular/core'; -import { - ComponentFixture, - TestBed, - discardPeriodicTasks, - fakeAsync, - tick, -} from '@angular/core/testing'; +import { ComponentFixture, TestBed, discardPeriodicTasks, fakeAsync, tick } from '@angular/core/testing'; import { Resource } from '@ngxp/rest'; import { Subscription } from 'rxjs'; import { InstantSearchComponent } from './instant-search.component'; @@ -184,16 +178,13 @@ describe('InstantSearchComponent', () => { }); describe('on null or undefined', () => { - it.each([null, undefined])( - 'should not call setSearchResults for %s', - (searchResults: InstantSearchResult<Resource>[]) => { - component.setSearchResults = jest.fn(); + it.each([null, undefined])('should not call setSearchResults for %s', (searchResults: InstantSearchResult<Resource>[]) => { + component.setSearchResults = jest.fn(); - component.searchResults = searchResults; + component.searchResults = searchResults; - expect(component.setSearchResults).not.toHaveBeenCalled(); - }, - ); + expect(component.setSearchResults).not.toHaveBeenCalled(); + }); }); }); @@ -274,11 +265,11 @@ describe('InstantSearchComponent', () => { }); it('should call hideResults', () => { - component.hideResults = jest.fn(); + component.searchClosed.emit = jest.fn(); component.handleEscape(event); - expect(component.hideResults).toHaveBeenCalled(); + expect(component.searchClosed.emit).toHaveBeenCalled(); }); }); @@ -362,17 +353,13 @@ describe('InstantSearchComponent', () => { it('should return text for one result', () => { const result: string = component.buildAriaLiveText(1); - expect(result).toBe( - 'Ein Suchergebnis für Eingabe test. Nutze Pfeiltaste nach unten, um das zu erreichen.', - ); + expect(result).toBe('Ein Suchergebnis für Eingabe test. Nutze Pfeiltaste nach unten, um das zu erreichen.'); }); it('should return text for many results', () => { const result: string = component.buildAriaLiveText(4); - expect(result).toBe( - '4 Suchergebnisse für Eingabe test. Nutze Pfeiltaste nach unten, um diese zu erreichen.', - ); + expect(result).toBe('4 Suchergebnisse für Eingabe test. Nutze Pfeiltaste nach unten, um diese zu erreichen.'); }); it('should return text for no results', () => { @@ -396,14 +383,6 @@ describe('InstantSearchComponent', () => { expect(component.areResultsVisible).toBe(false); }); - - it('should emit searchResultClosed event', () => { - component.searchResultClosed.emit = jest.fn(); - - component.hideResults(); - - expect(component.searchResultClosed.emit).toHaveBeenCalled(); - }); }); describe('onKeydownHandler', () => { diff --git a/alfa-client/libs/design-system/src/lib/instant-search/instant-search/instant-search.component.ts b/alfa-client/libs/design-system/src/lib/instant-search/instant-search/instant-search.component.ts index 80a889a7bfa1211c008d3891cfb80d98d811448e..8b23822f25beea96c9bdf42a52c4eba075c50b9d 100644 --- a/alfa-client/libs/design-system/src/lib/instant-search/instant-search/instant-search.component.ts +++ b/alfa-client/libs/design-system/src/lib/instant-search/instant-search/instant-search.component.ts @@ -15,7 +15,7 @@ import { import { FormControl } from '@angular/forms'; import { Resource } from '@ngxp/rest'; import { isEqual, isUndefined } from 'lodash-es'; -import { Subscription, debounceTime, distinctUntilChanged, filter } from 'rxjs'; +import { Subscription, debounceTime, filter } from 'rxjs'; import { AriaLiveRegionComponent } from '../../aria-live-region/aria-live-region.component'; import { SearchFieldComponent } from '../search-field/search-field.component'; import { SearchResultHeaderComponent } from '../search-result-header/search-result-header.component'; @@ -50,12 +50,7 @@ import { InstantSearchQuery, InstantSearchResult } from './instant-search.model' containerClass="absolute z-50 mt-3 max-h-[calc(50vh)] w-full overflow-y-auto" id="results" > - <ods-search-result-header - *ngIf="headerText" - [text]="headerText" - [count]="results.length" - header - /> + <ods-search-result-header *ngIf="headerText" [text]="headerText" [count]="results.length" header /> <ods-search-result-item *ngFor="let result of results; let i = index" [title]="result.title" @@ -79,12 +74,9 @@ export class InstantSearchComponent implements OnInit, OnDestroy { } } - @Output() searchResultSelected: EventEmitter<InstantSearchResult<Resource>> = new EventEmitter< - InstantSearchResult<Resource> - >(); - @Output() searchResultClosed: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>(); - @Output() searchQueryChanged: EventEmitter<InstantSearchQuery> = - new EventEmitter<InstantSearchQuery>(); + @Output() searchClosed: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>(); + @Output() searchResultSelected: EventEmitter<InstantSearchResult<Resource>> = new EventEmitter<InstantSearchResult<Resource>>(); + @Output() searchQueryChanged: EventEmitter<InstantSearchQuery> = new EventEmitter<InstantSearchQuery>(); @Output() searchQueryCleared: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>(); readonly FIRST_ITEM_INDEX: number = 0; @@ -107,8 +99,8 @@ export class InstantSearchComponent implements OnInit, OnDestroy { this.formControlSubscription = this.control.valueChanges .pipe( debounceTime(InstantSearchComponent.DEBOUNCE_TIME_IN_MILLIS), + filter((value) => Boolean(value)), filter((value: string) => value.length >= this.PREVIEW_SEARCH_STRING_MIN_LENGTH), - distinctUntilChanged(), ) .subscribe((searchBy: string) => { this.searchQueryChanged.emit({ searchBy }); @@ -146,6 +138,7 @@ export class InstantSearchComponent implements OnInit, OnDestroy { handleEscape(e: KeyboardEvent): void { e.preventDefault(); this.hideResults(); + this.searchClosed.emit(); } setFocusOnResultItem(index: number): void { @@ -201,7 +194,6 @@ export class InstantSearchComponent implements OnInit, OnDestroy { hideResults(): void { this.areResultsVisible = false; this.focusedResult = undefined; - this.searchResultClosed.emit(); } isLastItemOrOutOfArray(index: number, arrayLength: number): boolean { @@ -224,7 +216,7 @@ export class InstantSearchComponent implements OnInit, OnDestroy { return e.key === 'Escape'; } - onItemClicked(searchResult: InstantSearchResult<Resource>, index: number) { + onItemClicked(searchResult: InstantSearchResult<Resource>, index: number): void { this.searchResultSelected.emit(searchResult); this.focusedResult = index; this.hideResults(); diff --git a/alfa-client/libs/design-system/src/lib/list/list-item/list-item.component.spec.ts b/alfa-client/libs/design-system/src/lib/list/list-item/list-item.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..0aef13978f11b606c0be0d6e0dbb6c297e8149e0 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/list/list-item/list-item.component.spec.ts @@ -0,0 +1,40 @@ +import { getElementFromFixture } from '@alfa-client/test-utils'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { provideRouter } from '@angular/router'; +import { faker } from '@faker-js/faker'; +import { getDataTestClassOf } from 'libs/tech-shared/test/data-test'; +import { ListItemComponent } from './list-item.component'; + +describe('ListItemComponent', () => { + let component: ListItemComponent; + let fixture: ComponentFixture<ListItemComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ListItemComponent], + providers: [provideRouter([])], + }).compileComponents(); + + fixture = TestBed.createComponent(ListItemComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + describe('input', () => { + describe('routerLink', () => { + it('should set href attribute', () => { + component.path = faker.system.filePath(); + const resultingLink: string = 'http://localhost' + component.path; + const linkElement: HTMLLinkElement = getElementFromFixture(fixture, getDataTestClassOf('list-item-link')); + + fixture.detectChanges(); + + expect(linkElement.href).toBe(resultingLink); + }); + }); + }); +}); diff --git a/alfa-client/libs/design-system/src/lib/list/list-item/list-item.component.ts b/alfa-client/libs/design-system/src/lib/list/list-item/list-item.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..e99fef42c4db3be62e2f83901fc30eb32df0017e --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/list/list-item/list-item.component.ts @@ -0,0 +1,21 @@ +import { CommonModule } from '@angular/common'; +import { Component, Input } from '@angular/core'; +import { RouterLink } from '@angular/router'; + +@Component({ + selector: 'ods-list-item', + standalone: true, + imports: [CommonModule, RouterLink], + template: `<li> + <a + [routerLink]="path" + data-test-class="list-item-link" + class="flex flex-col items-start justify-between gap-6 border-primary-600/50 px-6 py-4 hover:bg-background-150 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus lg:flex-row" + ><ng-content + /></a> + </li>`, + styles: [':host { @apply block w-full }'], +}) +export class ListItemComponent { + @Input() path: string; +} diff --git a/alfa-client/libs/design-system/src/lib/list/list.component.spec.ts b/alfa-client/libs/design-system/src/lib/list/list.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..35076e4e0ed34c166da97e496571c43c642f14a0 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/list/list.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ListComponent } from './list.component'; + +describe('ListComponent', () => { + let component: ListComponent; + let fixture: ComponentFixture<ListComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ListComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(ListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/alfa-client/libs/design-system/src/lib/list/list.component.ts b/alfa-client/libs/design-system/src/lib/list/list.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..c4e903c1990ebc67a3bcb51f7e3596d0391c011e --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/list/list.component.ts @@ -0,0 +1,15 @@ +import { CommonModule } from '@angular/common'; +import { Component } from '@angular/core'; +import { ListItemComponent } from './list-item/list-item.component'; + +@Component({ + selector: 'ods-list', + standalone: true, + imports: [CommonModule, ListItemComponent], + template: ` + <ul class="divide-y divide-gray-300 rounded-md bg-background-50 text-text shadow-sm ring-1 ring-gray-300 empty:hidden"> + <ng-content /> + </ul> + `, +}) +export class ListComponent {} diff --git a/alfa-client/libs/design-system/src/lib/list/list.stories.ts b/alfa-client/libs/design-system/src/lib/list/list.stories.ts new file mode 100644 index 0000000000000000000000000000000000000000..85aca93322bcbf330f47e08610814dc3f0fedbf7 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/list/list.stories.ts @@ -0,0 +1,42 @@ +import { APP_BASE_HREF } from '@angular/common'; +import { importProvidersFrom } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { applicationConfig, moduleMetadata, type Meta, type StoryObj } from '@storybook/angular'; +import { ListItemComponent } from './list-item/list-item.component'; +import { ListComponent } from './list.component'; + +const meta: Meta<ListComponent> = { + title: 'List', + component: ListComponent, + excludeStories: /.*Data$/, + tags: ['autodocs'], + decorators: [ + applicationConfig({ + providers: [importProvidersFrom(RouterModule.forRoot([]))], + }), + moduleMetadata({ + imports: [ListItemComponent], + providers: [ + { + provide: APP_BASE_HREF, + useValue: '/', + }, + ], + }), + ], +}; + +export default meta; +type Story = StoryObj<ListComponent>; + +export const Default: Story = { + args: {}, + render: () => ({ + template: ` + <ods-list> + <ods-list-item path="/pfad/1">List Item 1</ods-list-item> + <ods-list-item path="/pfad/2">List Item 2</ods-list-item> + <ods-list-item path="/pfad/3">List Item 3</ods-list-item> + </ods-list>`, + }), +}; diff --git a/alfa-client/libs/design-system/src/lib/navbar/nav-item/nav-item.component.spec.ts b/alfa-client/libs/design-system/src/lib/navbar/nav-item/nav-item.component.spec.ts index 71b3e7c98f8e23d30f056ef4ad65544794294196..220af3f589fc2bb8ad7eea2817af77a01ccf98e5 100644 --- a/alfa-client/libs/design-system/src/lib/navbar/nav-item/nav-item.component.spec.ts +++ b/alfa-client/libs/design-system/src/lib/navbar/nav-item/nav-item.component.spec.ts @@ -1,3 +1,4 @@ +import { convertForDataTest, TechSharedModule } from '@alfa-client/tech-shared'; import { getElementFromFixture, Mock, mock } from '@alfa-client/test-utils'; import { importProvidersFrom } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; @@ -13,7 +14,7 @@ describe('NavItemComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [NavItemComponent], + imports: [NavItemComponent, TechSharedModule], providers: [ { provide: Router, @@ -36,27 +37,23 @@ describe('NavItemComponent', () => { describe('caption', () => { it('should set link text', () => { component.caption = 'Test caption'; - fixture.detectChanges(); + const testId: string = 'caption-' + convertForDataTest(component.caption); - const captionElement: HTMLParagraphElement = getElementFromFixture( - fixture, - getDataTestIdOf('link-caption'), - ); + fixture.detectChanges(); + const captionElement: HTMLParagraphElement = getElementFromFixture(fixture, getDataTestIdOf(testId)); expect(captionElement.innerHTML).toBe('Test caption'); }); }); - describe('to', () => { + describe('path', () => { it('should set href', () => { - component.to = '/'; - fixture.detectChanges(); + component.path = 'pfad'; + const testId: string = 'link-path-' + convertForDataTest(component.path); - const linkElement: HTMLAnchorElement = getElementFromFixture( - fixture, - getDataTestIdOf('link-to-/'), - ); + fixture.detectChanges(); + const linkElement: HTMLAnchorElement = getElementFromFixture(fixture, getDataTestIdOf(testId)); expect(linkElement).toHaveProperty('href'); }); }); diff --git a/alfa-client/libs/design-system/src/lib/navbar/nav-item/nav-item.component.ts b/alfa-client/libs/design-system/src/lib/navbar/nav-item/nav-item.component.ts index 14acc1a1b2c6f3c6ca800bc30710d5a7adf48cdc..0bf2f5580404c802a94c8f25d167638a9a5bf901 100644 --- a/alfa-client/libs/design-system/src/lib/navbar/nav-item/nav-item.component.ts +++ b/alfa-client/libs/design-system/src/lib/navbar/nav-item/nav-item.component.ts @@ -1,3 +1,4 @@ +import { TechSharedModule } from '@alfa-client/tech-shared'; import { CommonModule } from '@angular/common'; import { Component, HostBinding, Input } from '@angular/core'; import { RouterLink, RouterLinkActive } from '@angular/router'; @@ -5,24 +6,22 @@ import { RouterLink, RouterLinkActive } from '@angular/router'; @Component({ selector: 'ods-nav-item', standalone: true, - imports: [CommonModule, RouterLink, RouterLinkActive], + imports: [CommonModule, RouterLink, RouterLinkActive, TechSharedModule], template: `<a - [routerLink]="to" + [routerLink]="path" routerLinkActive="bg-selected-light border-selected" - [ngClass]="[ - 'flex min-h-8 items-center gap-2 rounded-2xl px-4 py-2', - 'border border-transparent hover:border-primary', - 'outline-2 outline-offset-4 outline-focus focus-visible:border-background-200', - ]" - [attr.data-test-id]="'link-to-' + to" + class="flex min-h-8 items-center gap-2 rounded-2xl border border-transparent + px-4 py-2 outline-2 outline-offset-2 outline-focus hover:border-primary + focus-visible:border-background-200 focus-visible:outline" + [attr.data-test-id]="'link-path-' + path | convertForDataTest" > <ng-content select="[icon]" /> - <p class="text-left text-sm text-text" data-test-id="link-caption">{{ caption }}</p> + <p class="text-left text-sm text-text" [attr.data-test-id]="'caption-' + caption | convertForDataTest">{{ caption }}</p> </a>`, }) export class NavItemComponent { @Input({ required: true }) caption!: string; - @Input() to: string; + @Input() path: string; - @HostBinding('attr.role') role = 'menuitem'; + @HostBinding('attr.role') role: string = 'menuitem'; } diff --git a/alfa-client/libs/design-system/src/lib/navbar/navbar/navbar.stories.ts b/alfa-client/libs/design-system/src/lib/navbar/navbar/navbar.stories.ts index fa5b213b2e0f14fe9de3643ce21e123f042df68c..8ae3842b6143820d0340035f9522a285610018d6 100644 --- a/alfa-client/libs/design-system/src/lib/navbar/navbar/navbar.stories.ts +++ b/alfa-client/libs/design-system/src/lib/navbar/navbar/navbar.stories.ts @@ -34,10 +34,10 @@ export const Default: Story = { args: {}, render: () => ({ template: `<ods-navbar> - <ods-nav-item caption="First link" to="/"><ods-office-icon icon /></ods-nav-item> - <ods-nav-item caption="Second link" to="/second"><ods-office-icon icon /></ods-nav-item> + <ods-nav-item caption="First link" path="/"><ods-office-icon icon /></ods-nav-item> + <ods-nav-item caption="Second link" path="/second"><ods-office-icon icon /></ods-nav-item> <hr /> - <ods-nav-item caption="Third link" to="/third"><ods-office-icon icon /></ods-nav-item> + <ods-nav-item caption="Third link" path="/third"><ods-office-icon icon /></ods-nav-item> </ods-navbar>`, }), }; diff --git a/alfa-client/libs/design-system/src/lib/popup/popup-list-item/popup-list-item.stories.ts b/alfa-client/libs/design-system/src/lib/popup/popup-list-item/popup-list-item.stories.ts deleted file mode 100644 index a28201314e94cc47b348fd9082f158ec06326174..0000000000000000000000000000000000000000 --- a/alfa-client/libs/design-system/src/lib/popup/popup-list-item/popup-list-item.stories.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { moduleMetadata, type Meta, type StoryObj } from '@storybook/angular'; - -import { PopupListItemComponent } from './popup-list-item.component'; - -const meta: Meta<PopupListItemComponent> = { - title: 'Popup/Popup list item', - component: PopupListItemComponent, - decorators: [ - moduleMetadata({ - imports: [PopupListItemComponent], - }), - ], - excludeStories: /.*Data$/, - tags: ['autodocs'], -}; - -export default meta; -type Story = StoryObj<PopupListItemComponent>; - -export const Default: Story = { - args: { - caption: 'List item', - }, -}; diff --git a/alfa-client/libs/design-system/src/lib/tailwind-preset/root.css b/alfa-client/libs/design-system/src/lib/tailwind-preset/root.css index 49ba05caeaf723693a01b5dbb9be991b4196afec..b0c20faa76cbf242aa6a1e2d2a9c27258b2b63bc 100644 --- a/alfa-client/libs/design-system/src/lib/tailwind-preset/root.css +++ b/alfa-client/libs/design-system/src/lib/tailwind-preset/root.css @@ -36,6 +36,7 @@ --color-doc: 219 63% 54%; --color-modal-bg: 0 0% 100%; + --color-dropdown-bg: 0 0% 98%; } .dark { @@ -69,6 +70,7 @@ --color-doc: 219 63% 54%; --color-modal-bg: 0 0% 26%; + --color-dropdown-bg: 0 0% 26%; } .bescheid-dialog-backdrop { @@ -78,3 +80,11 @@ .blur-dialog-backdrop { @apply bg-gray-400 bg-opacity-75 backdrop-blur-sm transition-opacity dark:bg-gray-500 dark:bg-opacity-75; } + +.heading-1 { + @apply text-3xl font-medium text-text; +} + +.heading-2 { + @apply py-4 text-2xl font-medium text-text; +} diff --git a/alfa-client/libs/design-system/src/lib/tailwind-preset/tailwind.config.js b/alfa-client/libs/design-system/src/lib/tailwind-preset/tailwind.config.js index 588bdac521f0d439cd3df6cd7d3ec1228156298a..88f03501ec468c7aea37ab033a35ce86c7d57280 100644 --- a/alfa-client/libs/design-system/src/lib/tailwind-preset/tailwind.config.js +++ b/alfa-client/libs/design-system/src/lib/tailwind-preset/tailwind.config.js @@ -6,10 +6,7 @@ const { join } = require('path'); /** @type {import('tailwindcss').Config} */ module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], + content: [join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), ...createGlobPatternsForDependencies(__dirname)], darkMode: 'class', theme: { extend: { @@ -106,6 +103,7 @@ module.exports = { }, mainbg: 'hsl(var(--color-mainbg) / <alpha-value>)', modalBg: 'hsl(var(--color-modal-bg) / <alpha-value>)', + dropdownBg: 'hsl(var(--color-dropdown-bg) / <alpha-value>)', primary: { 600: 'hsl(var(--color-primary-600) / <alpha-value>)', DEFAULT: 'hsl(var(--color-primary-600) / <alpha-value>)', diff --git a/alfa-client/libs/design-system/src/test/search.ts b/alfa-client/libs/design-system/src/test/search.ts index 93b65de204918bfae7d639ba89d32f30e9c385f3..de7d3a027286458ce8e33e63cb0612546fd5ad6d 100644 --- a/alfa-client/libs/design-system/src/test/search.ts +++ b/alfa-client/libs/design-system/src/test/search.ts @@ -3,5 +3,5 @@ import { Resource } from '@ngxp/rest'; import { InstantSearchResult } from '../lib/instant-search/instant-search/instant-search.model'; export function createInstantSearchResult<T extends Resource>(data?: T): InstantSearchResult<T> { - return { title: faker.random.word(), description: faker.random.words(3), data }; + return { title: faker.word.sample(), description: faker.word.sample(3), data }; } diff --git a/alfa-client/libs/environment-shared/test/environment.ts b/alfa-client/libs/environment-shared/test/environment.ts index a20e21858ab97031ca1929457e67534cf2268ef7..de7f1c09bfbe835b4c4c03cf118aba07140f12f0 100644 --- a/alfa-client/libs/environment-shared/test/environment.ts +++ b/alfa-client/libs/environment-shared/test/environment.ts @@ -29,9 +29,9 @@ const environment: Environment = { production: false, remoteHost: faker.internet.url(), authServer: faker.internet.url(), - realm: faker.random.word(), - clientId: faker.datatype.uuid(), - processorNames: [faker.name.findName()], + realm: faker.word.sample(), + clientId: faker.string.uuid(), + processorNames: [faker.person.fullName()], }; export function createEnvironment(): Environment { diff --git a/alfa-client/libs/forwarding-shared/test/forwarding.ts b/alfa-client/libs/forwarding-shared/test/forwarding.ts index 5be388a1d11942af948b1f40f005e0819ac699f0..3556146679aa0710a2339a3e9bba75028a3f1869 100644 --- a/alfa-client/libs/forwarding-shared/test/forwarding.ts +++ b/alfa-client/libs/forwarding-shared/test/forwarding.ts @@ -33,12 +33,12 @@ import { export function createForwarding(): Forwarding { return { - errorMessage: faker.random.words(15), + errorMessage: faker.word.sample(15), createdAt: faker.date.past(), sentAt: faker.date.past(), - createdBy: faker.name.findName(), - createdByName: faker.name.findName(), - zustaendigeStelle: faker.random.words(5), + createdBy: faker.person.fullName(), + createdByName: faker.person.fullName(), + zustaendigeStelle: faker.word.sample(5), }; } diff --git a/alfa-client/libs/hint-shared/src/lib/+state/hint.selectors.spec.ts b/alfa-client/libs/hint-shared/src/lib/+state/hint.selectors.spec.ts index 089d388d83aa3ba8fba808650bac4f05e5c7e08e..2903a67670d831b52dd9943c477d703116a2bd04 100644 --- a/alfa-client/libs/hint-shared/src/lib/+state/hint.selectors.spec.ts +++ b/alfa-client/libs/hint-shared/src/lib/+state/hint.selectors.spec.ts @@ -22,17 +22,15 @@ describe('Hint Selectors', () => { }); describe('hasNoOrganisationsEinheitId', () => { - const getHasUserNoOrganisationsEinheitIdSpy: jest.SpyInstance< - boolean, - [hintList: HintListResource] - > = jest.spyOn(HintUtil, 'hasUserNoOrganisationsEinheitIdHint'); + const getHasUserNoOrganisationsEinheitIdSpy: jest.SpyInstance<boolean, [hintList: HintListResource]> = jest.spyOn( + HintUtil, + 'hasUserNoOrganisationsEinheitIdHint', + ); it('should return stateResource with hint if exist', () => { getHasUserNoOrganisationsEinheitIdSpy.mockReturnValue(true); - const result: boolean = HintSelectors.hasUserNoOrganisationsEinheitIdHint.projector( - state.HintState, - ); + const result: boolean = HintSelectors.hasUserNoOrganisationsEinheitIdHint.projector(state.HintState); expect(result).toBeTruthy(); }); @@ -40,9 +38,7 @@ describe('Hint Selectors', () => { it('should return emptyStateResource if not exist', () => { getHasUserNoOrganisationsEinheitIdSpy.mockReturnValue(false); - const result: boolean = HintSelectors.hasUserNoOrganisationsEinheitIdHint.projector( - state.HintState, - ); + const result: boolean = HintSelectors.hasUserNoOrganisationsEinheitIdHint.projector(state.HintState); expect(result).toBeFalsy(); }); @@ -50,7 +46,7 @@ describe('Hint Selectors', () => { it('should return emptyStateResource if resource is null', () => { const result: boolean = HintSelectors.hasUserNoOrganisationsEinheitIdHint.projector({ ...state.HintState, - hintList: createEmptyListResource(), + hintList: createEmptyListResource<HintListResource>(), }); expect(result).toBeFalsy(); diff --git a/alfa-client/libs/hint-shared/test/hint.ts b/alfa-client/libs/hint-shared/test/hint.ts index c4aadd8d6654a695728fc4e067efdb9840b2fe39..2d8f4cd88732abaeaeb6204910ad05a67d996ee9 100644 --- a/alfa-client/libs/hint-shared/test/hint.ts +++ b/alfa-client/libs/hint-shared/test/hint.ts @@ -5,7 +5,7 @@ import { HintListLinkRel } from '../src/lib/hint.linkrel'; import { Hint, HintListResource, HintResource } from '../src/lib/hint.model'; export function createHint(): Hint { - return { code: faker.random.alphaNumeric() }; + return { code: faker.string.alphanumeric() }; } export function createHintResource(linkRelations: string[] = []): HintResource { diff --git a/alfa-client/libs/historie-shared/src/lib/+state/historie.effects.ts b/alfa-client/libs/historie-shared/src/lib/+state/historie.effects.ts index c324c86a470784c8dd62b3fe595321b6b484aba6..bc9434931a2f0f577eaafe1c02e8b5b68ab8aa85 100644 --- a/alfa-client/libs/historie-shared/src/lib/+state/historie.effects.ts +++ b/alfa-client/libs/historie-shared/src/lib/+state/historie.effects.ts @@ -23,7 +23,8 @@ */ import { Injectable } from '@angular/core'; import { VorgangService } from '@alfa-client/vorgang-shared'; -import { Actions, concatLatestFrom, createEffect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; +import { concatLatestFrom } from '@ngrx/operators'; import { of } from 'rxjs'; import { catchError, map, switchMap } from 'rxjs/operators'; import { HistorieService } from './historie.service'; diff --git a/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-attachment/historie-item-attachment.component.spec.ts b/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-attachment/historie-item-attachment.component.spec.ts index bce1c5ac373f1417c3312507ad490824708ab813..4edc4ace40075c137a96d4f568df18b9b0fe8258 100644 --- a/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-attachment/historie-item-attachment.component.spec.ts +++ b/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-attachment/historie-item-attachment.component.spec.ts @@ -38,7 +38,7 @@ describe('HistorieItemAttachmentComponent', () => { beforeEach(() => { fixture = TestBed.createComponent(HistorieItemAttachmentComponent); component = fixture.componentInstance; - component.attachments = faker.datatype.uuid(); + component.attachments = faker.string.uuid(); fixture.detectChanges(); }); @@ -48,15 +48,15 @@ describe('HistorieItemAttachmentComponent', () => { describe('build attachment text', () => { it('should return text for single attachment', () => { - const text: string = component.buildAttachmentText(faker.datatype.uuid()); + const text: string = component.buildAttachmentText(faker.string.uuid()); expect(text).toBe('Es existiert ein Anhang zu diesem Eintrag.'); }); it('should return text for multiple attachment', () => { const text: string = component.buildAttachmentText([ - faker.datatype.uuid(), - faker.datatype.uuid(), + faker.string.uuid(), + faker.string.uuid(), ]); expect(text).toBe(`Es existieren 2 Anhänge zu diesem Eintrag.`); diff --git a/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-bescheid/historie-item-bescheid.component.spec.ts b/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-bescheid/historie-item-bescheid.component.spec.ts index cacfc75a964b0449dcefdce1c077336098c4bf3a..633fe00dceee402b917627e10abacf2b56f33f8a 100644 --- a/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-bescheid/historie-item-bescheid.component.spec.ts +++ b/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-bescheid/historie-item-bescheid.component.spec.ts @@ -5,7 +5,7 @@ import { notExistsAsHtmlElement, } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { createBescheid } from 'libs/bescheid-shared/src/test/bescheid'; import { createCommandResource } from 'libs/command-shared/test/command'; import { getDataTestClassOf } from 'libs/tech-shared/test/data-test'; diff --git a/alfa-client/libs/kommentar-shared/test/kommentar.ts b/alfa-client/libs/kommentar-shared/test/kommentar.ts index ebe80dc1f95dd9f7c42edbbdff4097da867ea906..e5d8c6a6a5eed0eeb1a75e7205e975a7c5959a18 100644 --- a/alfa-client/libs/kommentar-shared/test/kommentar.ts +++ b/alfa-client/libs/kommentar-shared/test/kommentar.ts @@ -29,9 +29,9 @@ import { Kommentar, KommentarListResource, KommentarResource } from '../src/lib/ export function createKommentar(): Kommentar { return { - text: faker.random.words(10), + text: faker.word.sample(10), createdAt: faker.date.past(), - createdBy: faker.random.words(2), + createdBy: faker.word.sample(2), attachments: [], }; } diff --git a/alfa-client/libs/loesch-anforderung-shared/src/lib/+state/loesch-anforderung.effects.spec.ts b/alfa-client/libs/loesch-anforderung-shared/src/lib/+state/loesch-anforderung.effects.spec.ts index bd4000d3c06e395b24cf02f835d7c45b7a8589bc..84992a3f5b354a9941e70d5d99498451eefd5265 100644 --- a/alfa-client/libs/loesch-anforderung-shared/src/lib/+state/loesch-anforderung.effects.spec.ts +++ b/alfa-client/libs/loesch-anforderung-shared/src/lib/+state/loesch-anforderung.effects.spec.ts @@ -24,7 +24,7 @@ import { LoeschAnforderungResource } from '../loesch-anforderung.model'; import { LoeschAnforderungEffects } from './loesch-anforderung.effects'; import { LoeschAnforderungRepository } from './loesch-anforderung.repository'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import * as CommandActions from '../../../../command-shared/src/lib/+state/command.actions'; import * as VorgangActions from '../../../../vorgang-shared/src/lib/+state/vorgang.actions'; diff --git a/alfa-client/libs/loesch-anforderung-shared/src/lib/+state/loesch-anforderung.reducer.spec.ts b/alfa-client/libs/loesch-anforderung-shared/src/lib/+state/loesch-anforderung.reducer.spec.ts index 518f2d056a131f9430f4369037a736548183a35c..c8d31d8b9aef35ffd3bb3bc769b32623e4618fdf 100644 --- a/alfa-client/libs/loesch-anforderung-shared/src/lib/+state/loesch-anforderung.reducer.spec.ts +++ b/alfa-client/libs/loesch-anforderung-shared/src/lib/+state/loesch-anforderung.reducer.spec.ts @@ -7,7 +7,6 @@ import { } from '@alfa-client/tech-shared'; import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; import { Action } from '@ngrx/store'; -import { TypedAction } from '@ngrx/store/src/models'; import { createCommand, createCommandResource } from 'libs/command-shared/test/command'; import { createLoeschAnforderungResource } from 'libs/loesch-anforderung-shared/test/loesch-anforderung'; import { createApiError } from 'libs/tech-shared/test/error'; @@ -224,7 +223,7 @@ describe('LoeschAnforderung Reducer', () => { describe('Vorgang', () => { const vorgangWithEingang: VorgangWithEingangResource = createVorgangWithEingangResource(); - const action: TypedAction<string> = VorgangActions.loadVorgangWithEingangSuccess({ + const action: Action<string> = VorgangActions.loadVorgangWithEingangSuccess({ vorgangWithEingang, }); @@ -273,7 +272,7 @@ describe('LoeschAnforderung Reducer', () => { describe('Navigation', () => { it('should clear loeschenAnfordernCommand', () => { - const action: TypedAction<string> = NavigationActions.updateCurrentRouteData({ + const action: Action<string> = NavigationActions.updateCurrentRouteData({ routeData: createRouteData(), }); @@ -287,7 +286,7 @@ describe('LoeschAnforderung Reducer', () => { }); it('should clear loeschAnforderung', () => { - const action: TypedAction<string> = NavigationActions.updateCurrentRouteData({ + const action: Action<string> = NavigationActions.updateCurrentRouteData({ routeData: createRouteData(), }); @@ -301,7 +300,7 @@ describe('LoeschAnforderung Reducer', () => { }); it('should clear vorgangLoeschenCommand', () => { - const action: TypedAction<string> = NavigationActions.updateCurrentRouteData({ + const action: Action<string> = NavigationActions.updateCurrentRouteData({ routeData: createRouteData(), }); @@ -315,7 +314,7 @@ describe('LoeschAnforderung Reducer', () => { }); it('should clear loeschAnforderungZuruecknehmenCommand', () => { - const action: TypedAction<string> = NavigationActions.updateCurrentRouteData({ + const action: Action<string> = NavigationActions.updateCurrentRouteData({ routeData: createRouteData(), }); diff --git a/alfa-client/libs/loesch-anforderung-shared/src/lib/loesch-anforderung.service.spec.ts b/alfa-client/libs/loesch-anforderung-shared/src/lib/loesch-anforderung.service.spec.ts index d446062a056c0d70f31a24934102afc4aeeafdc9..a1e254e28c1880dae9e577377fa78364e6b80a02 100644 --- a/alfa-client/libs/loesch-anforderung-shared/src/lib/loesch-anforderung.service.spec.ts +++ b/alfa-client/libs/loesch-anforderung-shared/src/lib/loesch-anforderung.service.spec.ts @@ -1,5 +1,5 @@ import { HttpStatusCode } from '@angular/common/http'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { CommandResource } from '@alfa-client/command-shared'; import { NavigationService } from '@alfa-client/navigation-shared'; import { StateResource, createStateResource } from '@alfa-client/tech-shared'; diff --git a/alfa-client/libs/navigation-shared/src/lib/navigation.service.spec.ts b/alfa-client/libs/navigation-shared/src/lib/navigation.service.spec.ts index 3e145df00f98d92bea93280ca06fedb67a4fae90..9352facb64aceeb52f8ce199c338f54ff5dd882d 100644 --- a/alfa-client/libs/navigation-shared/src/lib/navigation.service.spec.ts +++ b/alfa-client/libs/navigation-shared/src/lib/navigation.service.spec.ts @@ -21,9 +21,9 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { ActivatedRoute, Params, Router, UrlSegment } from '@angular/router'; import { AppService } from '@alfa-client/app-shared'; import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; +import { ActivatedRoute, Params, Router, UrlSegment } from '@angular/router'; import { ResourceUri } from '@ngxp/rest'; import { OAuthService } from 'angular-oauth2-oidc'; import { of } from 'rxjs'; @@ -272,10 +272,18 @@ describe('NavigationService', () => { describe('navigate', () => { const navigationRoute: string = 'dummyNavigationRoute'; - it('should call router with given navigationRoute', () => { + it('should call router with given navigationRoute and queryParams', () => { + const queryParams: Params = { uri: 'some-uri' }; + + service.navigate(navigationRoute, queryParams); + + expect(router.navigate).toHaveBeenCalledWith([navigationRoute], { queryParams }); + }); + + it('should call router with given navigationRoute and without queryParams', () => { service.navigate(navigationRoute); - expect(router.navigate).toHaveBeenCalledWith([navigationRoute]); + expect(router.navigate).toHaveBeenCalledWith([navigationRoute], { queryParams: undefined }); }); }); diff --git a/alfa-client/libs/navigation-shared/src/lib/navigation.service.ts b/alfa-client/libs/navigation-shared/src/lib/navigation.service.ts index f026dc54b49dd0be9457230bfdfdadbb9978112e..4d17176a8489f2a47596f9e8187670f287151058 100644 --- a/alfa-client/libs/navigation-shared/src/lib/navigation.service.ts +++ b/alfa-client/libs/navigation-shared/src/lib/navigation.service.ts @@ -21,22 +21,22 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { + decodeUrlFromEmbedding, + isEmptyObject, + isNotNil, + isNotNull, + isNotUndefined, +} from '@alfa-client/tech-shared'; import { Injectable } from '@angular/core'; import { ActivatedRoute, NavigationEnd, - Params, PRIMARY_OUTLET, + Params, Router, UrlSegment, } from '@angular/router'; -import { - decodeUrlFromEmbedding, - isEmptyObject, - isNotNil, - isNotNull, - isNotUndefined, -} from '@alfa-client/tech-shared'; import { ResourceUri } from '@ngxp/rest'; import { OAuthService } from 'angular-oauth2-oidc'; import { has, isNil, isUndefined } from 'lodash-es'; @@ -220,8 +220,8 @@ export class NavigationService { ); } - navigate(navigationRoute: string): void { - this.router.navigate([navigationRoute]); + navigate(navigationRoute: string, queryParams?: Params): void { + this.router.navigate([navigationRoute], { queryParams }); } public navigateToVorgang(linkUri: ResourceUri): void { diff --git a/alfa-client/libs/navigation/src/lib/navigation.module.ts b/alfa-client/libs/navigation/src/lib/navigation.module.ts index 0a98c2c4232b12ea4f7e1004d30f8828bdd0769f..1622cf215a88c546c52288e1ffdda3c1d28075b2 100644 --- a/alfa-client/libs/navigation/src/lib/navigation.module.ts +++ b/alfa-client/libs/navigation/src/lib/navigation.module.ts @@ -21,26 +21,20 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { CommonModule } from '@angular/common'; -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; import { UiModule } from '@alfa-client/ui'; import { UserAssistanceModule } from '@alfa-client/user-assistance'; import { UserProfileModule } from '@alfa-client/user-profile'; import { UserSettingsModule } from '@alfa-client/user-settings'; import { VorgangSharedUiModule } from '@alfa-client/vorgang-shared-ui'; -import { BuildInfoComponent } from './build-info/build-info.component'; +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; import { HeaderContainerComponent } from './header-container/header-container.component'; import { HeaderLogoComponent } from './header-container/header/header-logo/header-logo.component'; import { HeaderComponent } from './header-container/header/header.component'; @NgModule({ - declarations: [ - BuildInfoComponent, - HeaderComponent, - HeaderContainerComponent, - HeaderLogoComponent, - ], + declarations: [HeaderComponent, HeaderContainerComponent, HeaderLogoComponent], imports: [ CommonModule, UiModule, @@ -50,6 +44,6 @@ import { HeaderComponent } from './header-container/header/header.component'; UserSettingsModule, UserAssistanceModule, ], - exports: [BuildInfoComponent, HeaderContainerComponent], + exports: [HeaderContainerComponent], }) export class NavigationModule {} diff --git a/alfa-client/libs/postfach-shared/src/lib/+state/postfach.effects.spec.ts b/alfa-client/libs/postfach-shared/src/lib/+state/postfach.effects.spec.ts index ee2af0f933130d76147da5433ecc5925d76abd2e..307989cbb8a397a3e5c0566e2bcbc685abd4ce68 100644 --- a/alfa-client/libs/postfach-shared/src/lib/+state/postfach.effects.spec.ts +++ b/alfa-client/libs/postfach-shared/src/lib/+state/postfach.effects.spec.ts @@ -29,7 +29,6 @@ import { Mock, mock } from '@alfa-client/test-utils'; import { Messages, SnackBarService } from '@alfa-client/ui'; import { provideMockActions } from '@ngrx/effects/testing'; import { Action } from '@ngrx/store'; -import { TypedAction } from '@ngrx/store/src/models'; import { provideMockStore } from '@ngrx/store/testing'; import { hot } from 'jasmine-marbles'; import { createBinaryFileListResource } from 'libs/binary-file-shared/test/binary-file'; @@ -71,7 +70,7 @@ describe('PostfachEffects', () => { ...createApiError(), issues: [{ ...createIssue(), messageCode: MessageCode.USER_MANAGER_SERVICE_UNAVAILABLE }], }; - const action: ApiErrorAction & TypedAction<string> = PostfachActions.downloadAsPdfFailed({ + const action: ApiErrorAction & Action<string> = PostfachActions.downloadAsPdfFailed({ apiError, }); @@ -91,7 +90,7 @@ describe('PostfachEffects', () => { ...createApiError(), issues: [{ ...createIssue(), messageCode: 'nonMatchingMessageCode' }], }; - const action: ApiErrorAction & TypedAction<string> = PostfachActions.downloadAsPdfFailed({ + const action: ApiErrorAction & Action<string> = PostfachActions.downloadAsPdfFailed({ apiError, }); @@ -106,7 +105,7 @@ describe('PostfachEffects', () => { describe('loadAttachmentList', () => { const postfachNachricht: PostfachMailResource = createPostfachMailResource(); - const action: PostfachNachrichtProps & TypedAction<string> = PostfachActions.loadAttachmentList( + const action: PostfachNachrichtProps & Action<string> = PostfachActions.loadAttachmentList( { postfachNachricht }, ); const props: LoadBinaryFileListProps = <any>{}; diff --git a/alfa-client/libs/postfach-shared/src/lib/+state/postfach.facade.ts b/alfa-client/libs/postfach-shared/src/lib/+state/postfach.facade.ts index 28b3ee2c08cb7816f79f19b4e0c01c7e983988a1..372c0bedaf78eef9ccea8e4a04467172983e71bb 100644 --- a/alfa-client/libs/postfach-shared/src/lib/+state/postfach.facade.ts +++ b/alfa-client/libs/postfach-shared/src/lib/+state/postfach.facade.ts @@ -33,8 +33,7 @@ import { } from '@alfa-client/tech-shared'; import { VorgangHeaderLinkRel, VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; import { Injectable } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { TypedAction } from '@ngrx/store/src/models'; +import { Store, Action } from '@ngrx/store'; import { getUrl } from '@ngxp/rest'; import { Observable } from 'rxjs'; import { PostfachMailResource } from '../postfach.model'; @@ -76,7 +75,7 @@ export class PostfachFacade { return `${vorgangWithEingang.nummer}_${formatFullDateWithoutSeperator(new Date())}_Nachrichten.pdf`; } - createFailureAction(apiError: ApiError): ApiErrorAction & TypedAction<string> { + createFailureAction(apiError: ApiError): ApiErrorAction & Action<string> { return PostfachActions.downloadAsPdfFailed({ apiError }); } diff --git a/alfa-client/libs/postfach-shared/src/lib/+state/postfach.reducer.spec.ts b/alfa-client/libs/postfach-shared/src/lib/+state/postfach.reducer.spec.ts index 8044aff1e9583ac280b8c567a57aa3e8899d8aaf..446d2cb4452857bff5a4cafbee0de875f0400442 100644 --- a/alfa-client/libs/postfach-shared/src/lib/+state/postfach.reducer.spec.ts +++ b/alfa-client/libs/postfach-shared/src/lib/+state/postfach.reducer.spec.ts @@ -32,7 +32,7 @@ import { createEmptyStateResource, createStateResource, } from '@alfa-client/tech-shared'; -import { TypedAction } from '@ngrx/store/src/models'; +import { Action } from '@ngrx/store'; import { createBinaryFileListResource } from 'libs/binary-file-shared/test/binary-file'; import { createPostfachMailResource } from 'libs/postfach-shared/test/postfach'; import { createApiError } from 'libs/tech-shared/test/error'; @@ -54,7 +54,7 @@ describe('Postfach Reducer', () => { describe('isDownloadPdfInProgress', () => { describe('on "startDownloadAsPdf" action', () => { it('should set to true', () => { - const action: TypedAction<string> = PostfachActions.startDownloadAsPdf(); + const action: Action<string> = PostfachActions.startDownloadAsPdf(); const state: PostfachState = postfachReducer(initialPostfachState, action); @@ -64,7 +64,7 @@ describe('Postfach Reducer', () => { describe('on "downloadAsPdfSuccess" action', () => { it('should set to false', () => { - const action: TypedAction<string> = PostfachActions.downloadAsPdfSuccess(); + const action: Action<string> = PostfachActions.downloadAsPdfSuccess(); const state: PostfachState = postfachReducer( { ...initialPostfachState, isDownloadPdfInProgress: true }, @@ -77,7 +77,7 @@ describe('Postfach Reducer', () => { describe('on "downloadAsPdfFailed" action', () => { it('should set to false', () => { - const action: ApiErrorAction & TypedAction<string> = PostfachActions.downloadAsPdfFailed({ + const action: ApiErrorAction & Action<string> = PostfachActions.downloadAsPdfFailed({ apiError: createApiError(), }); @@ -95,7 +95,7 @@ describe('Postfach Reducer', () => { describe('on "loadAttachmentList" action', () => { it('should set loading', () => { const postfachNachricht: PostfachMailResource = createPostfachMailResource(); - const action: PostfachNachrichtProps & TypedAction<string> = + const action: PostfachNachrichtProps & Action<string> = PostfachActions.loadAttachmentList({ postfachNachricht }); const state: PostfachState = postfachReducer(initialPostfachState, action); @@ -107,7 +107,7 @@ describe('Postfach Reducer', () => { describe('on "loadAttachmentListSuccess" action', () => { it('should create stateResource', () => { const binaryFileList: BinaryFileListResource = createBinaryFileListResource(); - const action: LoadBinaryFileListSuccessProps & TypedAction<string> = + const action: LoadBinaryFileListSuccessProps & Action<string> = PostfachActions.loadAttachmentListSuccess({ binaryFileList }); const state: PostfachState = postfachReducer(initialPostfachState, action); @@ -119,7 +119,7 @@ describe('Postfach Reducer', () => { describe('on "loadAttachmentListFailure" action', () => { it('should create error stateResource', () => { const apiError: ApiError = createApiError(); - const action: ApiErrorAction & TypedAction<string> = + const action: ApiErrorAction & Action<string> = PostfachActions.loadAttachmentListFailure({ apiError }); const state: PostfachState = postfachReducer(initialPostfachState, action); @@ -130,7 +130,7 @@ describe('Postfach Reducer', () => { describe('on "clearAttachmentList" action', () => { it('should create empty stateResource', () => { - const action: TypedAction<string> = PostfachActions.clearAttachmentList(); + const action: Action<string> = PostfachActions.clearAttachmentList(); const state: PostfachState = postfachReducer( { diff --git a/alfa-client/libs/postfach-shared/src/lib/postfach.message-code.ts b/alfa-client/libs/postfach-shared/src/lib/postfach.message-code.ts index 36043a9b2b15c5fa1ffb26c50cfe1e5c2d02b993..e86c0cdd8649d25dd556228b50eaae88e34ce223 100644 --- a/alfa-client/libs/postfach-shared/src/lib/postfach.message-code.ts +++ b/alfa-client/libs/postfach-shared/src/lib/postfach.message-code.ts @@ -24,11 +24,13 @@ export enum PostfachNachrichtMessageCode { PROCESSING_FAILED = 'postfachnachricht.server.processing_failed', CONNECTION_FAILED = 'postfachnachricht.server.connection_failed', + NOT_CONFIGURED = 'postfachnachricht.server.service_not_configured', } export const postfachNachrichtMessageCodeMessages = { [PostfachNachrichtMessageCode.CONNECTION_FAILED]: - 'Verbindungsfehler: Die Verbindung zum Zielserver des Osi-Postfachs ist nicht zustandegekommen.', + 'Verbindungsfehler: Die Verbindung zum Zielserver des Postfachs ist nicht zustandegekommen.', [PostfachNachrichtMessageCode.PROCESSING_FAILED]: - 'Fehlerhafte Verarbeitung: Die Nachricht wurde an das Osi-Postfach geschickt, konnte dort aber nicht richtig verarbeitet werden.', + 'Fehlerhafte Verarbeitung: Die Nachricht wurde an das Postfach geschickt, konnte dort aber nicht richtig verarbeitet werden.', + [PostfachNachrichtMessageCode.NOT_CONFIGURED]: 'Die Nachricht konnte nicht gesendet werden. Es ist kein Postfach konfiguriert.', }; diff --git a/alfa-client/libs/postfach-shared/src/lib/postfach.util.spec.ts b/alfa-client/libs/postfach-shared/src/lib/postfach.util.spec.ts index eda2f5a8457a672f23b86a2e159afd535bdc5d63..e96aa252379a9b65ebfa37c329ecfed9407e55b3 100644 --- a/alfa-client/libs/postfach-shared/src/lib/postfach.util.spec.ts +++ b/alfa-client/libs/postfach-shared/src/lib/postfach.util.spec.ts @@ -92,33 +92,25 @@ describe('PostfachUtil', () => { }); describe('getMessageCodeMessage', () => { - it( - 'should return message for messageCode ' + PostfachNachrichtMessageCode.CONNECTION_FAILED, - () => { - var result = getMessageCodeMessage({ - ...createPostfachMailResource(), - messageCode: PostfachNachrichtMessageCode.CONNECTION_FAILED, - }); - - expect(result).toEqual( - 'Verbindungsfehler: Die Verbindung zum Zielserver des Osi-Postfachs ist nicht zustandegekommen.', - ); - }, - ); - - it( - 'should return message for messageCode ' + PostfachNachrichtMessageCode.PROCESSING_FAILED, - () => { - var result = getMessageCodeMessage({ - ...createPostfachMailResource(), - messageCode: PostfachNachrichtMessageCode.PROCESSING_FAILED, - }); - - expect(result).toEqual( - 'Fehlerhafte Verarbeitung: Die Nachricht wurde an das Osi-Postfach geschickt, konnte dort aber nicht richtig verarbeitet werden.', - ); - }, - ); + it('should return message for messageCode ' + PostfachNachrichtMessageCode.CONNECTION_FAILED, () => { + var result = getMessageCodeMessage({ + ...createPostfachMailResource(), + messageCode: PostfachNachrichtMessageCode.CONNECTION_FAILED, + }); + + expect(result).toEqual('Verbindungsfehler: Die Verbindung zum Zielserver des Postfachs ist nicht zustandegekommen.'); + }); + + it('should return message for messageCode ' + PostfachNachrichtMessageCode.PROCESSING_FAILED, () => { + var result = getMessageCodeMessage({ + ...createPostfachMailResource(), + messageCode: PostfachNachrichtMessageCode.PROCESSING_FAILED, + }); + + expect(result).toEqual( + 'Fehlerhafte Verarbeitung: Die Nachricht wurde an das Postfach geschickt, konnte dort aber nicht richtig verarbeitet werden.', + ); + }); }); describe('getPostfacNachrichtenCount', () => { @@ -153,9 +145,7 @@ describe('PostfachUtil', () => { }); it('should return SINGLE on one existing resources', () => { - var listResource: PostfachMailListResource = createListResource([ - createPostfachMailResource(), - ]); + var listResource: PostfachMailListResource = createListResource([createPostfachMailResource()]); var count: PostfachNachrichtenCount = getPostfachNachrichtenCount(listResource); @@ -170,9 +160,7 @@ describe('PostfachUtil', () => { expect(count).toBe(PostfachNachrichtenCount.MULTIPLE); }); - function createListResource( - postfachMailResources: PostfachMailResource[], - ): PostfachMailListResource { + function createListResource(postfachMailResources: PostfachMailResource[]): PostfachMailListResource { return toResource({}, [], { [PostfachMailListLinkRel.POSTFACH_MAIL_LIST]: postfachMailResources, }); diff --git a/alfa-client/libs/postfach-shared/test/postfach.ts b/alfa-client/libs/postfach-shared/test/postfach.ts index 0ca6f2c9f377754a92d123e1692ae567597fa410..ebc1fc81237950e37da85019f8686a49b1b82009 100644 --- a/alfa-client/libs/postfach-shared/test/postfach.ts +++ b/alfa-client/libs/postfach-shared/test/postfach.ts @@ -41,15 +41,15 @@ import { export function createPostfachMail(): PostfachMail { return { - subject: faker.random.words(3), + subject: faker.word.sample(3), createdAt: faker.date.past(), direction: Direction.OUT, - mailBody: faker.random.words(30), + mailBody: faker.word.sample(30), replyOption: ReplyOption.POSSIBLE, sentAt: faker.date.past(), sentSuccessful: false, messageCode: PostfachNachrichtMessageCode.CONNECTION_FAILED, - attachments: faker.datatype.uuid(), + attachments: faker.string.uuid(), }; } @@ -89,15 +89,15 @@ export function createEmptyPostfachSettings(): PostfachSettings { export class PostfachTestFactory { public static POSTFACH_NACHRICHT: PostfachMail = { - subject: faker.random.words(3), + subject: faker.word.sample(3), createdAt: faker.date.past(), direction: Direction.OUT, - mailBody: faker.random.words(30), + mailBody: faker.word.sample(30), replyOption: ReplyOption.POSSIBLE, sentAt: faker.date.past(), sentSuccessful: false, messageCode: PostfachNachrichtMessageCode.CONNECTION_FAILED, - attachments: faker.datatype.uuid(), + attachments: faker.string.uuid(), }; public static POSTFACH_NACHRICHT_RESOURCE: PostfachMailResource = toResource( diff --git a/alfa-client/libs/postfach/src/lib/postfach-mail-button-container/postfach-mail-button-container.component.spec.ts b/alfa-client/libs/postfach/src/lib/postfach-mail-button-container/postfach-mail-button-container.component.spec.ts index ff10996f5a08bcb16c51b9fafc0a0b5ec736e549..4e7ebc37b4a0c63476e0755906960c07a1b6ff17 100644 --- a/alfa-client/libs/postfach/src/lib/postfach-mail-button-container/postfach-mail-button-container.component.spec.ts +++ b/alfa-client/libs/postfach/src/lib/postfach-mail-button-container/postfach-mail-button-container.component.spec.ts @@ -38,7 +38,7 @@ import { DialogService } from '@alfa-client/ui'; import { VorgangHeaderLinkRel, VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; import { getEmpfaenger } from '@alfa-client/vorgang-shared-ui'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { createCommandResource } from 'libs/command-shared/test/command'; import { createPostfachMailListResource } from 'libs/postfach-shared/test/postfach'; import { createApiError } from 'libs/tech-shared/test/error'; @@ -194,7 +194,7 @@ describe('PostfachMailButtonContainerComponent', () => { }); it('should set empfänger', () => { - const empfanger: string = faker.name.firstName(); + const empfanger: string = faker.person.firstName(); getEmpfaengerMock.mockReturnValue(empfanger); const dialogData: PostfachMailFormDialogData = component.buildDialogData( diff --git a/alfa-client/libs/postfach/src/lib/postfach-mail-button-container/postfach-mail-button/postfach-mail-button.component.spec.ts b/alfa-client/libs/postfach/src/lib/postfach-mail-button-container/postfach-mail-button/postfach-mail-button.component.spec.ts index de10ce4ce6160fa782dff5d789f87b167ffde60a..c146e7e16650418d5abf2dbe2b2b207f08a5cdc0 100644 --- a/alfa-client/libs/postfach/src/lib/postfach-mail-button-container/postfach-mail-button/postfach-mail-button.component.spec.ts +++ b/alfa-client/libs/postfach/src/lib/postfach-mail-button-container/postfach-mail-button/postfach-mail-button.component.spec.ts @@ -22,7 +22,7 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { PostfachMailListLinkRel } from '@alfa-client/postfach-shared'; import { EMPTY_STRING, HasLinkPipe, createStateResource } from '@alfa-client/tech-shared'; import { diff --git a/alfa-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/outgoing-mail/postfach-nachricht-edit-button-container/postfach-nachricht-edit-button-container.component.spec.ts b/alfa-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/outgoing-mail/postfach-nachricht-edit-button-container/postfach-nachricht-edit-button-container.component.spec.ts index a7eaeaab39408e2db221bf4156d3b812cbcfd8b6..0ce59b078febc573156142a45cc2d7219f738f5f 100644 --- a/alfa-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/outgoing-mail/postfach-nachricht-edit-button-container/postfach-nachricht-edit-button-container.component.spec.ts +++ b/alfa-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/outgoing-mail/postfach-nachricht-edit-button-container/postfach-nachricht-edit-button-container.component.spec.ts @@ -4,7 +4,7 @@ import { Mock, dispatchEventFromFixture, getMockComponent, mock } from '@alfa-cl import { DialogService, OzgcloudIconComponent } from '@alfa-client/ui'; import { getEmpfaenger } from '@alfa-client/vorgang-shared-ui'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { createPostfachMailResource } from 'libs/postfach-shared/test/postfach'; import { PostfachMailFormComponent } from 'libs/postfach/src/lib/postfach-mail-form/postfach-mail-form.component'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; @@ -103,7 +103,7 @@ describe('PostfachNachrichtEditButtonContainerComponent', () => { }); it('should set empfänger', () => { - const empfanger: string = faker.name.firstName(); + const empfanger: string = faker.person.firstName(); getEmpfaengerMock.mockReturnValue(empfanger); const dialogData: PostfachMailFormDialogData = component.buildDialogData(); diff --git a/alfa-client/libs/resource-redirect-shared/.eslintrc.json b/alfa-client/libs/resource-redirect-shared/.eslintrc.json new file mode 100644 index 0000000000000000000000000000000000000000..243c51741f65cc7afb3a7d85531c24afdcab5e56 --- /dev/null +++ b/alfa-client/libs/resource-redirect-shared/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "alfa", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "alfa", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nx/angular-template"], + "rules": {} + } + ] +} diff --git a/alfa-client/libs/resource-redirect-shared/README.md b/alfa-client/libs/resource-redirect-shared/README.md new file mode 100644 index 0000000000000000000000000000000000000000..fb7bd17a7b0de755ee41a4baf2d7b381c646d38e --- /dev/null +++ b/alfa-client/libs/resource-redirect-shared/README.md @@ -0,0 +1,7 @@ +# resource-redirect-shared + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test resource-redirect-shared` to execute the unit tests. diff --git a/alfa-client/libs/resource-redirect-shared/jest.config.ts b/alfa-client/libs/resource-redirect-shared/jest.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..5f5416cd232f2295dc3b0651a88a73fe4bd2b125 --- /dev/null +++ b/alfa-client/libs/resource-redirect-shared/jest.config.ts @@ -0,0 +1,23 @@ +/* eslint-disable */ +export default { + displayName: 'resource-redirect-shared', + preset: '../../jest.preset.js', + setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'], + globals: {}, + coverageDirectory: '../../coverage/libs/resource-redirect-shared', + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], + transform: { + '^.+.(ts|mjs|js|html)$': [ + 'jest-preset-angular', + { + tsconfig: '<rootDir>/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + ], + }, + transformIgnorePatterns: ['node_modules/(?!.*.mjs$)'], +}; diff --git a/alfa-client/libs/resource-redirect-shared/project.json b/alfa-client/libs/resource-redirect-shared/project.json new file mode 100644 index 0000000000000000000000000000000000000000..bc5ab7022b5c2451a172119c4d63192c87e6d46d --- /dev/null +++ b/alfa-client/libs/resource-redirect-shared/project.json @@ -0,0 +1,22 @@ +{ + "name": "resource-redirect-shared", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "libs/resource-redirect-shared/src", + "prefix": "alfa", + "tags": [], + "targets": { + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/libs/resource-redirect-shared"], + "options": { + "tsConfig": "libs/resource-redirect-shared/tsconfig.spec.json", + "jestConfig": "libs/resource-redirect-shared/jest.config.ts" + } + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"] + } + } +} diff --git a/alfa-client/libs/resource-redirect-shared/src/index.ts b/alfa-client/libs/resource-redirect-shared/src/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..0fddcd8bb9c2da9870a37ff64a1d22e6fbf47937 --- /dev/null +++ b/alfa-client/libs/resource-redirect-shared/src/index.ts @@ -0,0 +1,2 @@ +export * from './lib/resource-redirect-shared.module'; +export * from './lib/resource-redirect.service'; diff --git a/alfa-client/libs/resource-redirect-shared/src/lib/resource-linkrel.ts b/alfa-client/libs/resource-redirect-shared/src/lib/resource-linkrel.ts new file mode 100644 index 0000000000000000000000000000000000000000..b29d9cb7e4fae12057f20b46928254748967ed88 --- /dev/null +++ b/alfa-client/libs/resource-redirect-shared/src/lib/resource-linkrel.ts @@ -0,0 +1,3 @@ +export enum ResourceLinkRel { + VORGANG = 'vorgang', +} diff --git a/alfa-client/libs/resource-redirect-shared/src/lib/resource-redirect-shared.module.spec.ts b/alfa-client/libs/resource-redirect-shared/src/lib/resource-redirect-shared.module.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..20513fcbeffe5a87e7b3cf38530e82fb9793c0cf --- /dev/null +++ b/alfa-client/libs/resource-redirect-shared/src/lib/resource-redirect-shared.module.spec.ts @@ -0,0 +1,14 @@ +import { ResourceRedirectSharedModule } from '@alfa-client/resource-redirect-shared'; +import { TestBed } from '@angular/core/testing'; + +describe('ResourceRedirectSharedModule', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [ResourceRedirectSharedModule], + }).compileComponents(); + }); + + it('should create', () => { + expect(ResourceRedirectSharedModule).toBeDefined(); + }); +}); diff --git a/alfa-client/libs/resource-redirect-shared/src/lib/resource-redirect-shared.module.ts b/alfa-client/libs/resource-redirect-shared/src/lib/resource-redirect-shared.module.ts new file mode 100644 index 0000000000000000000000000000000000000000..256e6ccd43670ceb3d9e267a0844304c40b80b30 --- /dev/null +++ b/alfa-client/libs/resource-redirect-shared/src/lib/resource-redirect-shared.module.ts @@ -0,0 +1,7 @@ +import { TechSharedModule } from '@alfa-client/tech-shared'; +import { NgModule } from '@angular/core'; + +@NgModule({ + imports: [TechSharedModule], +}) +export class ResourceRedirectSharedModule {} diff --git a/alfa-client/libs/resource-redirect-shared/src/lib/resource-redirect.service.spec.ts b/alfa-client/libs/resource-redirect-shared/src/lib/resource-redirect.service.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..af57548e97be941f72b6e57cb287649c6b6baecd --- /dev/null +++ b/alfa-client/libs/resource-redirect-shared/src/lib/resource-redirect.service.spec.ts @@ -0,0 +1,167 @@ +import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared'; +import { NavigationService } from '@alfa-client/navigation-shared'; +import { ResourceRedirectService } from '@alfa-client/resource-redirect-shared'; +import { + ResourceRepository, + StateResource, + createEmptyStateResource, + createStateResource, + toResourceUri, +} from '@alfa-client/tech-shared'; +import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; +import { Messages, SnackBarService } from '@alfa-client/ui'; +import { Resource, ResourceUri } from '@ngxp/rest'; +import { of, throwError } from 'rxjs'; +import { createApiRootResource } from '../../../api-root-shared/test/api-root'; +import { createDummyResource } from '../../../tech-shared/test/resource'; +import { ResourceLinkRel } from './resource-linkrel'; + +describe('ResourceRedirectService', () => { + let service: ResourceRedirectService; + let apiRootService: Mock<ApiRootService>; + let repository: Mock<ResourceRepository>; + let snackbarService: Mock<SnackBarService>; + let navigationService: Mock<NavigationService>; + + const resourceUri: ResourceUri = 'some-uri'; + + beforeEach(() => { + apiRootService = mock(ApiRootService); + repository = mock(ResourceRepository); + snackbarService = mock(SnackBarService); + navigationService = mock(NavigationService); + + service = new ResourceRedirectService( + useFromMock(apiRootService), + useFromMock(repository), + useFromMock(snackbarService), + useFromMock(navigationService), + ); + }); + + describe('redirectToResource', () => { + it('should call getResolvedResource', () => { + const resource: Resource = createDummyResource([ResourceLinkRel.VORGANG]); + service.getResolvedResource = jest.fn().mockReturnValue(of(resource)); + + service.redirectToResource(resourceUri); + + expect(service.getResolvedResource).toHaveBeenCalled(); + }); + + it('should call navigateToResource on success', () => { + const resource: Resource = createDummyResource([ResourceLinkRel.VORGANG]); + service.getResolvedResource = jest.fn().mockReturnValue(of(resource)); + service.navigateToResource = jest.fn(); + + service.redirectToResource(resourceUri); + + expect(service.navigateToResource).toHaveBeenCalled(); + }); + + it('should call handleResolveError on error', () => { + service.getResolvedResource = jest.fn().mockReturnValue(throwError(() => new Error('some error'))); + service.handleResolveError = jest.fn(); + + service.redirectToResource(resourceUri); + + expect(service.handleResolveError).toHaveBeenCalled(); + }); + }); + + describe('getResolvedResource', () => { + it('should call apiRootService getApiRoot', () => { + const apiRoot: StateResource<ApiRootResource> = createStateResource(createApiRootResource()); + apiRootService.getApiRoot.mockReturnValue(of(apiRoot)); + + service.getResolvedResource(resourceUri).subscribe(() => { + expect(apiRootService.getApiRoot).toHaveBeenCalled(); + }); + }); + + it('should return null observable on empty api root resource', () => { + apiRootService.getApiRoot.mockReturnValue(of(createEmptyStateResource())); + + service.getResolvedResource(resourceUri).subscribe((resolvedResource: Resource) => { + expect(resolvedResource).toBeNull(); + }); + }); + + it('should call repository getResource with result from buildResolveUri', () => { + const apiRoot: StateResource<ApiRootResource> = createStateResource(createApiRootResource([ApiRootLinkRel.RESOURCE])); + apiRootService.getApiRoot.mockReturnValue(of(apiRoot)); + service.buildResolveUri = jest.fn().mockReturnValue('some-uri'); + + service.getResolvedResource(resourceUri).subscribe(() => { + expect(repository.getResource).toHaveBeenCalledWith('some-uri'); + }); + }); + + it('should return null observable on repository error', () => { + const apiRoot: StateResource<ApiRootResource> = createStateResource(createApiRootResource([ApiRootLinkRel.RESOURCE])); + apiRootService.getApiRoot.mockReturnValue(of(apiRoot)); + repository.getResource.mockReturnValue(throwError(() => new Error('some error'))); + + service.getResolvedResource(resourceUri).subscribe((resolvedResource: Resource) => { + expect(resolvedResource).toBeNull(); + }); + }); + + it('should return resolved resource', () => { + const resource: Resource = createDummyResource([ResourceLinkRel.VORGANG]); + const apiRoot: StateResource<ApiRootResource> = createStateResource(createApiRootResource([ApiRootLinkRel.RESOURCE])); + apiRootService.getApiRoot.mockReturnValue(of(apiRoot)); + repository.getResource.mockReturnValue(of(resource)); + + service.getResolvedResource(resourceUri).subscribe((resolvedResource: Resource) => { + expect(resolvedResource).toEqual(resource); + }); + }); + }); + + describe('buildResolveUri', () => { + it('should build resolve uri', () => { + const apiRootResource: ApiRootResource = createApiRootResource([ApiRootLinkRel.RESOURCE]); + const resolveUri: ResourceUri = service.buildResolveUri(apiRootResource, resourceUri); + + expect(resolveUri).toBeDefined(); + }); + + it('should throw error on missing resource uri', () => { + const apiRootResource: ApiRootResource = createApiRootResource(); + + expect(() => service.buildResolveUri(apiRootResource, resourceUri)).toThrow(); + }); + }); + + describe('handleResolveError', () => { + it('should call snackbarService showInfo', () => { + service.handleResolveError(); + + expect(snackbarService.showInfo).toHaveBeenCalledWith(Messages.HTTP_STATUS_RESOURCE_NOT_FOUND); + }); + + it('should call navigationService navigateToVorgangList', () => { + service.handleResolveError(); + + expect(navigationService.navigateToVorgangList).toHaveBeenCalled(); + }); + }); + + describe('navigateToResource', () => { + it('should call navigationService navigateToVorgang', () => { + const resource: Resource = createDummyResource([ResourceLinkRel.VORGANG]); + const resourceUri: ResourceUri = toResourceUri(resource, ResourceLinkRel.VORGANG); + + service.navigateToResource(resource); + + expect(navigationService.navigateToVorgang).toHaveBeenCalledWith(resourceUri); + }); + + it('should not call navigationService on missing resource', () => { + service.navigateToResource(createDummyResource()); + + expect(navigationService.navigateToVorgang).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/alfa-client/libs/resource-redirect-shared/src/lib/resource-redirect.service.ts b/alfa-client/libs/resource-redirect-shared/src/lib/resource-redirect.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..a07508e0d0d73bd38329590059db15448e80b755 --- /dev/null +++ b/alfa-client/libs/resource-redirect-shared/src/lib/resource-redirect.service.ts @@ -0,0 +1,55 @@ +import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared'; +import { NavigationService } from '@alfa-client/navigation-shared'; +import { ResourceRepository, StateResource, isLoaded, toResourceUri } from '@alfa-client/tech-shared'; +import { Messages, SnackBarService } from '@alfa-client/ui'; +import { Injectable } from '@angular/core'; +import { Resource, ResourceUri, getUrl, hasLink } from '@ngxp/rest'; +import { Observable, first, switchMap } from 'rxjs'; +import { filter } from 'rxjs/operators'; +import { ResourceLinkRel } from './resource-linkrel'; + +@Injectable({ providedIn: 'root' }) +export class ResourceRedirectService { + private readonly PARAM_URI_PLACEHOLDER: string = '{uri}'; + + constructor( + private apiRootService: ApiRootService, + private repository: ResourceRepository, + private snackbarService: SnackBarService, + private navigationService: NavigationService, + ) {} + + public redirectToResource(resourceUri: ResourceUri): void { + this.getResolvedResource(resourceUri) + .pipe(first()) + .subscribe({ + next: (resource: Resource) => this.navigateToResource(resource), + error: () => this.handleResolveError(), + }); + } + + getResolvedResource(resourceUri: string): Observable<Resource> { + return this.apiRootService.getApiRoot().pipe( + filter(isLoaded), + switchMap((apiRoot: StateResource<ApiRootResource>) => + this.repository.getResource<Resource>(this.buildResolveUri(apiRoot.resource, resourceUri)), + ), + ); + } + + buildResolveUri(apiRootResource: ApiRootResource, resourceUri: ResourceUri): ResourceUri { + return getUrl(apiRootResource, ApiRootLinkRel.RESOURCE).replace(this.PARAM_URI_PLACEHOLDER, encodeURIComponent(resourceUri)); + } + + navigateToResource(resource: Resource): void { + if (hasLink(resource, ResourceLinkRel.VORGANG)) { + const vorgangUri: ResourceUri = toResourceUri(resource, ResourceLinkRel.VORGANG); + this.navigationService.navigateToVorgang(vorgangUri); + } + } + + handleResolveError(): void { + this.snackbarService.showInfo(Messages.HTTP_STATUS_RESOURCE_NOT_FOUND); + this.navigationService.navigateToVorgangList(); + } +} diff --git a/alfa-client/libs/resource-redirect-shared/src/test-setup.ts b/alfa-client/libs/resource-redirect-shared/src/test-setup.ts new file mode 100644 index 0000000000000000000000000000000000000000..f7fad5e59f9d4e62a097bbea63040551de396175 --- /dev/null +++ b/alfa-client/libs/resource-redirect-shared/src/test-setup.ts @@ -0,0 +1,11 @@ +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, +}); diff --git a/alfa-client/libs/resource-redirect-shared/tsconfig.json b/alfa-client/libs/resource-redirect-shared/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..7cc6baf2f58ed5ccfba098131996f579979e9f18 --- /dev/null +++ b/alfa-client/libs/resource-redirect-shared/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "target": "es2022" + } +} diff --git a/alfa-client/libs/resource-redirect-shared/tsconfig.lib.json b/alfa-client/libs/resource-redirect-shared/tsconfig.lib.json new file mode 100644 index 0000000000000000000000000000000000000000..1cc2d08ae0a5326f0b4f68921f77e265c7b9f2f4 --- /dev/null +++ b/alfa-client/libs/resource-redirect-shared/tsconfig.lib.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "target": "es2015", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [], + "lib": ["dom", "es2018"] + }, + "exclude": ["src/test-setup.ts", "**/*.spec.ts", "jest.config.ts"], + "include": ["**/*.ts"] +} diff --git a/alfa-client/libs/resource-redirect-shared/tsconfig.spec.json b/alfa-client/libs/resource-redirect-shared/tsconfig.spec.json new file mode 100644 index 0000000000000000000000000000000000000000..3a690070a7f5e48080dd36522d6a0db384d940aa --- /dev/null +++ b/alfa-client/libs/resource-redirect-shared/tsconfig.spec.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"], + "target": "ES2022", + "useDefineForClassFields": false + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts", "jest.config.ts"] +} diff --git a/alfa-client/libs/resource-redirect/.eslintrc.json b/alfa-client/libs/resource-redirect/.eslintrc.json new file mode 100644 index 0000000000000000000000000000000000000000..243c51741f65cc7afb3a7d85531c24afdcab5e56 --- /dev/null +++ b/alfa-client/libs/resource-redirect/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "alfa", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "alfa", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nx/angular-template"], + "rules": {} + } + ] +} diff --git a/alfa-client/libs/resource-redirect/README.md b/alfa-client/libs/resource-redirect/README.md new file mode 100644 index 0000000000000000000000000000000000000000..0a136c5a9e89c41f65db0d361b5a22246fb4b310 --- /dev/null +++ b/alfa-client/libs/resource-redirect/README.md @@ -0,0 +1,7 @@ +# resource-redirect + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test resource-redirect` to execute the unit tests. diff --git a/alfa-client/libs/resource-redirect/jest.config.ts b/alfa-client/libs/resource-redirect/jest.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..b6b14e2a28ee8fa74596ebd24877c7539cf3fccd --- /dev/null +++ b/alfa-client/libs/resource-redirect/jest.config.ts @@ -0,0 +1,23 @@ +/* eslint-disable */ +export default { + displayName: 'resource-redirect', + preset: '../../jest.preset.js', + setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'], + globals: {}, + coverageDirectory: '../../coverage/libs/resource-redirect', + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], + transform: { + '^.+.(ts|mjs|js|html)$': [ + 'jest-preset-angular', + { + tsconfig: '<rootDir>/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + ], + }, + transformIgnorePatterns: ['node_modules/(?!.*.mjs$)'], +}; diff --git a/alfa-client/libs/resource-redirect/project.json b/alfa-client/libs/resource-redirect/project.json new file mode 100644 index 0000000000000000000000000000000000000000..499fa861a271efac4aa55fa3f4c11ebd053816ae --- /dev/null +++ b/alfa-client/libs/resource-redirect/project.json @@ -0,0 +1,22 @@ +{ + "name": "resource-redirect", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "libs/resource-redirect/src", + "prefix": "alfa", + "tags": [], + "targets": { + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/libs/resource-redirect"], + "options": { + "tsConfig": "libs/resource-redirect/tsconfig.spec.json", + "jestConfig": "libs/resource-redirect/jest.config.ts" + } + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"] + } + } +} diff --git a/alfa-client/libs/resource-redirect/src/index.ts b/alfa-client/libs/resource-redirect/src/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..e4a766253a2782eff7d0ecfda2de2d801841f432 --- /dev/null +++ b/alfa-client/libs/resource-redirect/src/index.ts @@ -0,0 +1,2 @@ +export * from './lib/resource-redirect.module'; +export * from './lib/resource-redirect/resource-redirect.component'; diff --git a/alfa-client/libs/resource-redirect/src/lib/resource-redirect.module.spec.ts b/alfa-client/libs/resource-redirect/src/lib/resource-redirect.module.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..e05228ea76680c16b381cbb8f2d0028704e11d16 --- /dev/null +++ b/alfa-client/libs/resource-redirect/src/lib/resource-redirect.module.spec.ts @@ -0,0 +1,14 @@ +import { ResourceRedirectModule } from '@alfa-client/resource-redirect'; +import { TestBed } from '@angular/core/testing'; + +describe('ResourceRedirectModule', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [ResourceRedirectModule], + }).compileComponents(); + }); + + it('should create', () => { + expect(ResourceRedirectModule).toBeDefined(); + }); +}); diff --git a/alfa-client/libs/resource-redirect/src/lib/resource-redirect.module.ts b/alfa-client/libs/resource-redirect/src/lib/resource-redirect.module.ts new file mode 100644 index 0000000000000000000000000000000000000000..d90f3d0714637282aa4694cf8e941cdd9b33425a --- /dev/null +++ b/alfa-client/libs/resource-redirect/src/lib/resource-redirect.module.ts @@ -0,0 +1,9 @@ +import { ResourceRedirectSharedModule } from '@alfa-client/resource-redirect-shared'; +import { NgModule } from '@angular/core'; +import { ResourceRedirectComponent } from './resource-redirect/resource-redirect.component'; + +@NgModule({ + imports: [ResourceRedirectSharedModule, ResourceRedirectComponent], + exports: [ResourceRedirectComponent], +}) +export class ResourceRedirectModule {} diff --git a/alfa-client/libs/resource-redirect/src/lib/resource-redirect/resource-redirect.component.spec.ts b/alfa-client/libs/resource-redirect/src/lib/resource-redirect/resource-redirect.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..b56eb80fb1e8f017d8d4568ac348f1269c652528 --- /dev/null +++ b/alfa-client/libs/resource-redirect/src/lib/resource-redirect/resource-redirect.component.spec.ts @@ -0,0 +1,67 @@ +import { ResourceRedirectComponent } from '@alfa-client/resource-redirect'; +import { ResourceRedirectService } from '@alfa-client/resource-redirect-shared'; +import { Mock, mock } from '@alfa-client/test-utils'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ActivatedRoute } from '@angular/router'; +import { Observable, of } from 'rxjs'; + +describe('ResourceRedirectComponent', () => { + let component: ResourceRedirectComponent; + let fixture: ComponentFixture<ResourceRedirectComponent>; + let resourceRedirectService: Mock<ResourceRedirectService>; + + const initActivatedRoute = (queryParamKey?: string): { queryParamMap: Observable<Map<string, string>> } => ({ + queryParamMap: of(new Map(queryParamKey ? [[queryParamKey, 'some-uri']] : [])), + }); + + const createComponentWithQueryParam = (queryParamKey?: string): void => { + TestBed.configureTestingModule({ + imports: [ResourceRedirectComponent], + providers: [ + { provide: ActivatedRoute, useValue: initActivatedRoute(queryParamKey) }, + { provide: ResourceRedirectService, useValue: resourceRedirectService }, + ], + }); + + fixture = TestBed.createComponent(ResourceRedirectComponent); + component = fixture.componentInstance; + }; + + beforeEach(() => { + TestBed.resetTestingModule(); + + resourceRedirectService = mock(ResourceRedirectService); + }); + + it('should create', () => { + createComponentWithQueryParam(); + + expect(component).toBeTruthy(); + }); + + describe('ngOnInit', () => { + it('should call resource service redirectToResource', () => { + createComponentWithQueryParam('uri'); + + component.ngOnInit(); + + expect(resourceRedirectService.redirectToResource).toHaveBeenCalledWith('some-uri'); + }); + + it('should not call resource service redirectToResource with other query param', () => { + createComponentWithQueryParam('some-other-param'); + + component.ngOnInit(); + + expect(resourceRedirectService.redirectToResource).not.toHaveBeenCalled(); + }); + + it('should not call resource service redirectToResource without uri param', () => { + createComponentWithQueryParam(); + + component.ngOnInit(); + + expect(resourceRedirectService.redirectToResource).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/alfa-client/libs/resource-redirect/src/lib/resource-redirect/resource-redirect.component.ts b/alfa-client/libs/resource-redirect/src/lib/resource-redirect/resource-redirect.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..37274fc2dd8dd16574e7de19234ba5fdf55e06ed --- /dev/null +++ b/alfa-client/libs/resource-redirect/src/lib/resource-redirect/resource-redirect.component.ts @@ -0,0 +1,26 @@ +import { ResourceRedirectService } from '@alfa-client/resource-redirect-shared'; +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, ParamMap } from '@angular/router'; +import { ResourceUri } from '@ngxp/rest'; + +@Component({ + standalone: true, + template: '', +}) +export class ResourceRedirectComponent implements OnInit { + private readonly PARAM_URI: string = 'uri'; + + constructor( + private route: ActivatedRoute, + private resourceRedirectService: ResourceRedirectService, + ) {} + + ngOnInit(): void { + this.route.queryParamMap.subscribe((queryParams: ParamMap) => { + const resourceUri: ResourceUri = queryParams.get(this.PARAM_URI); + if (resourceUri) { + this.resourceRedirectService.redirectToResource(resourceUri); + } + }); + } +} diff --git a/alfa-client/libs/resource-redirect/src/test-setup.ts b/alfa-client/libs/resource-redirect/src/test-setup.ts new file mode 100644 index 0000000000000000000000000000000000000000..f7fad5e59f9d4e62a097bbea63040551de396175 --- /dev/null +++ b/alfa-client/libs/resource-redirect/src/test-setup.ts @@ -0,0 +1,11 @@ +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, +}); diff --git a/alfa-client/libs/resource-redirect/tsconfig.json b/alfa-client/libs/resource-redirect/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..7cc6baf2f58ed5ccfba098131996f579979e9f18 --- /dev/null +++ b/alfa-client/libs/resource-redirect/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "target": "es2022" + } +} diff --git a/alfa-client/libs/resource-redirect/tsconfig.lib.json b/alfa-client/libs/resource-redirect/tsconfig.lib.json new file mode 100644 index 0000000000000000000000000000000000000000..1cc2d08ae0a5326f0b4f68921f77e265c7b9f2f4 --- /dev/null +++ b/alfa-client/libs/resource-redirect/tsconfig.lib.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "target": "es2015", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [], + "lib": ["dom", "es2018"] + }, + "exclude": ["src/test-setup.ts", "**/*.spec.ts", "jest.config.ts"], + "include": ["**/*.ts"] +} diff --git a/alfa-client/libs/resource-redirect/tsconfig.spec.json b/alfa-client/libs/resource-redirect/tsconfig.spec.json new file mode 100644 index 0000000000000000000000000000000000000000..3a690070a7f5e48080dd36522d6a0db384d940aa --- /dev/null +++ b/alfa-client/libs/resource-redirect/tsconfig.spec.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"], + "target": "ES2022", + "useDefineForClassFields": false + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts", "jest.config.ts"] +} diff --git a/alfa-client/libs/tech-shared/src/lib/date.util.spec.ts b/alfa-client/libs/tech-shared/src/lib/date.util.spec.ts index f9277c5ac4d3b76a1b15e66a0bc718c558c1b497..a644c427af0ec0c5e2769f9224887808a3ab9076 100644 --- a/alfa-client/libs/tech-shared/src/lib/date.util.spec.ts +++ b/alfa-client/libs/tech-shared/src/lib/date.util.spec.ts @@ -38,7 +38,7 @@ import { sortByGermanDateStr, } from './date.util'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import * as dateFns from 'date-fns'; diff --git a/alfa-client/libs/tech-shared/src/lib/interceptor/http-binary-file.interceptor.ts b/alfa-client/libs/tech-shared/src/lib/interceptor/http-binary-file.interceptor.ts index f71c08b76ea28f1af0ee28ec6e01e6510994b45c..7364689a2bae46f7317f7dd5f1f5757ee8078579 100644 --- a/alfa-client/libs/tech-shared/src/lib/interceptor/http-binary-file.interceptor.ts +++ b/alfa-client/libs/tech-shared/src/lib/interceptor/http-binary-file.interceptor.ts @@ -21,14 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { - HttpErrorResponse, - HttpEvent, - HttpHandler, - HttpInterceptor, - HttpRequest, - HttpResponseBase, -} from '@angular/common/http'; +import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponseBase } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Observable, throwError } from 'rxjs'; import { catchError } from 'rxjs/operators'; diff --git a/alfa-client/libs/tech-shared/src/lib/interceptor/http-xsrf.interceptor.ts b/alfa-client/libs/tech-shared/src/lib/interceptor/http-xsrf.interceptor.ts index b7bc5aa087526edd757c5dc66365f93040bcc8ec..5a87d1c96c2126a0c58b2231a995153921756f9e 100644 --- a/alfa-client/libs/tech-shared/src/lib/interceptor/http-xsrf.interceptor.ts +++ b/alfa-client/libs/tech-shared/src/lib/interceptor/http-xsrf.interceptor.ts @@ -21,13 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { - HttpEvent, - HttpHandler, - HttpInterceptor, - HttpRequest, - HttpXsrfTokenExtractor, -} from '@angular/common/http'; +import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpXsrfTokenExtractor } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { addRequestHeader, existRequestHeader, isChangingDataRequest } from '../http.util'; diff --git a/alfa-client/libs/tech-shared/src/lib/ngrx/actions.ts b/alfa-client/libs/tech-shared/src/lib/ngrx/actions.ts index 907ccaf7749c9f9cb7438addf98a0da8b56de6dc..7accfef653e7ab1dc311ed755f6099345d02878c 100644 --- a/alfa-client/libs/tech-shared/src/lib/ngrx/actions.ts +++ b/alfa-client/libs/tech-shared/src/lib/ngrx/actions.ts @@ -22,15 +22,14 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { Action, ActionCreator } from '@ngrx/store'; -import { TypedAction } from '@ngrx/store/src/models'; import { ResourceUri } from '@ngxp/rest'; import { ApiError } from '../tech.model'; export const EMPTY_ACTION: Action = {} as Action; export interface TypedActionCreatorWithProps<T> - extends ActionCreator<string, (props: T) => T & TypedAction<string>> {} -export interface TypedActionCreator extends ActionCreator<string, () => TypedAction<string>> {} + extends ActionCreator<string, (props: T) => T & Action<string>> {} +export interface TypedActionCreator extends ActionCreator<string, () => Action<string>> {} export interface ApiErrorAction { //TODO rename ApiErrorProps diff --git a/alfa-client/libs/tech-shared/src/lib/pipe/get-url.pipe.spec.ts b/alfa-client/libs/tech-shared/src/lib/pipe/get-url.pipe.spec.ts index 7387cf4d9b4d7279a9b8bddecedc0b48a670f6b7..c73a48e6e35b7530f98c6514c9a48ba318f8a8f1 100644 --- a/alfa-client/libs/tech-shared/src/lib/pipe/get-url.pipe.spec.ts +++ b/alfa-client/libs/tech-shared/src/lib/pipe/get-url.pipe.spec.ts @@ -1,4 +1,4 @@ -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { Resource, ResourceUri } from '@ngxp/rest'; import { GetUrlPipe } from './get-url.pipe'; diff --git a/alfa-client/libs/tech-shared/src/lib/resource/api-resource.service.spec.ts b/alfa-client/libs/tech-shared/src/lib/resource/api-resource.service.spec.ts index 977db3428026e075b535d45b53e6cdd9865579fb..e4421c2c22364a7a444d5796929194b2ca4bba61 100644 --- a/alfa-client/libs/tech-shared/src/lib/resource/api-resource.service.spec.ts +++ b/alfa-client/libs/tech-shared/src/lib/resource/api-resource.service.spec.ts @@ -1,11 +1,9 @@ import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; import { fakeAsync, tick } from '@angular/core/testing'; import { Resource } from '@ngxp/rest'; -import { Observable, of, throwError } from 'rxjs'; +import { Observable, of } from 'rxjs'; import { singleCold, singleHot } from '../../../test//marbles'; -import { createProblemDetail } from '../../../test/error'; import { createDummyResource } from '../../../test/resource'; -import { ProblemDetail } from '../tech.model'; import { ApiResourceService } from './api-resource.service'; import { LinkRelationName, ResourceServiceConfig, SaveResourceData } from './resource.model'; import { ResourceRepository } from './resource.repository'; @@ -70,22 +68,52 @@ describe('ApiResourceService', () => { expect(saved).toBeObservable(singleCold(createStateResource(loadedResource))); }); - it('should call handleError', () => { - service.stateResource.next(createStateResource(createDummyResource([config.edit.linkRel]))); - const errorResponse: ProblemDetail = createProblemDetail(); - repository.save.mockReturnValue(throwError(() => errorResponse)); - service.handleError = jest.fn(); + it('should update state resource subject', fakeAsync(() => { + service.stateResource.next(createStateResource(resourceWithEditLinkRel)); + repository.save.mockReturnValue(of(loadedResource)); + + service.save(dummyToSave).subscribe(); + tick(); + + expect(service.stateResource.value).toEqual(createStateResource(loadedResource)); + })); + }); + + describe('patch', () => { + const dummyToPatch: unknown = {}; + const loadedResource: Resource = createDummyResource(); + + const resourceWithEditLinkRel: Resource = createDummyResource([editLinkRel]); + + it('should call repository', fakeAsync(() => { + service.stateResource.next(createStateResource(resourceWithEditLinkRel)); + repository.patch.mockReturnValue(of(loadedResource)); - service.save(<any>{}).subscribe(); + service.patch(dummyToPatch).subscribe(); + tick(); - expect(service.handleError).toHaveBeenCalledWith(errorResponse); + const expectedSaveResourceData: SaveResourceData<Resource> = { + resource: resourceWithEditLinkRel, + linkRel: editLinkRel, + toSave: dummyToPatch, + }; + expect(repository.patch).toHaveBeenCalledWith(expectedSaveResourceData); + })); + + it('should return patched object', () => { + service.stateResource.next(createStateResource(resourceWithEditLinkRel)); + repository.patch.mockReturnValue(singleHot(loadedResource)); + + const saved: Observable<StateResource<Resource>> = service.patch(dummyToPatch); + + expect(saved).toBeObservable(singleCold(createStateResource(loadedResource))); }); it('should update state resource subject', fakeAsync(() => { service.stateResource.next(createStateResource(resourceWithEditLinkRel)); - repository.save.mockReturnValue(of(loadedResource)); + repository.patch.mockReturnValue(of(loadedResource)); - service.save(dummyToSave).subscribe(); + service.patch(dummyToPatch).subscribe(); tick(); expect(service.stateResource.value).toEqual(createStateResource(loadedResource)); diff --git a/alfa-client/libs/tech-shared/src/lib/resource/api-resource.service.ts b/alfa-client/libs/tech-shared/src/lib/resource/api-resource.service.ts index d19c4a6fdc52813b270661c560bf76bed7f3ba24..f27414058aae8584e3ce77dd8668735232c33acd 100644 --- a/alfa-client/libs/tech-shared/src/lib/resource/api-resource.service.ts +++ b/alfa-client/libs/tech-shared/src/lib/resource/api-resource.service.ts @@ -4,10 +4,7 @@ import { ResourceServiceConfig } from './resource.model'; import { ResourceRepository } from './resource.repository'; import { ResourceService } from './resource.service'; -export class ApiResourceService<B extends Resource, T extends Resource> extends ResourceService< - B, - T -> { +export class ApiResourceService<B extends Resource, T extends Resource> extends ResourceService<B, T> { constructor( protected config: ResourceServiceConfig<B>, protected repository: ResourceRepository, @@ -22,4 +19,12 @@ export class ApiResourceService<B extends Resource, T extends Resource> extends toSave, }); } + + doPatch(resource: T, toPatch: unknown): Observable<T> { + return <Observable<T>>this.repository.patch({ + resource, + linkRel: this.config.edit.linkRel, + toSave: toPatch, + }); + } } diff --git a/alfa-client/libs/tech-shared/src/lib/resource/list-resource.service.spec.ts b/alfa-client/libs/tech-shared/src/lib/resource/list-resource.service.spec.ts index 9983f8acf61e11a6c642761e7b0d6e8e3351c253..0864617da8cadf79db67003fb5fcae343da2ee68 100644 --- a/alfa-client/libs/tech-shared/src/lib/resource/list-resource.service.spec.ts +++ b/alfa-client/libs/tech-shared/src/lib/resource/list-resource.service.spec.ts @@ -1,32 +1,17 @@ import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; import { fakeAsync, tick } from '@angular/core/testing'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { Resource, ResourceUri } from '@ngxp/rest'; import { cold } from 'jest-marbles'; import { DummyLinkRel, DummyListLinkRel } from 'libs/tech-shared/test/dummy'; -import { - createDummyListResource, - createDummyResource, - createFilledDummyListResource, -} from 'libs/tech-shared/test/resource'; +import { createDummyListResource, createDummyResource, createFilledDummyListResource } from 'libs/tech-shared/test/resource'; import { BehaviorSubject, Observable, of } from 'rxjs'; import { singleCold, singleHot } from '../../../test/marbles'; +import { EMPTY_ARRAY } from '../tech.util'; import { ResourceListService } from './list-resource.service'; -import { - CreateResourceData, - LinkRelationName, - ListItemResource, - ListResourceServiceConfig, -} from './resource.model'; +import { CreateResourceData, LinkRelationName, ListItemResource, ListResourceServiceConfig } from './resource.model'; import { ResourceRepository } from './resource.repository'; -import { - ListResource, - StateResource, - createEmptyStateResource, - createStateResource, -} from './resource.util'; - -import { EMPTY_ARRAY } from '../tech.util'; +import { ListResource, StateResource, createEmptyStateResource, createStateResource } from './resource.util'; import * as ResourceUtil from './resource.util'; @@ -42,9 +27,9 @@ describe('ListResourceService', () => { const baseResource: Resource = createDummyResource(); const baseStateResource: StateResource<Resource> = createStateResource(baseResource); - const baseResourceSubj: BehaviorSubject<StateResource<Resource>> = new BehaviorSubject< - StateResource<Resource> - >(baseStateResource); + const baseResourceSubj: BehaviorSubject<StateResource<Resource>> = new BehaviorSubject<StateResource<Resource>>( + baseStateResource, + ); beforeEach(() => { config = { @@ -63,8 +48,7 @@ describe('ListResourceService', () => { }); describe('getList', () => { - const listStateResource: StateResource<ListResource> = - createStateResource(createDummyListResource()); + const listStateResource: StateResource<ListResource> = createStateResource(createDummyListResource()); let isInvalidResourceCombinationSpy: jest.SpyInstance; @@ -73,9 +57,7 @@ describe('ListResourceService', () => { service.handleNullConfigResource = jest.fn(); service.handleChanges = jest.fn(); - isInvalidResourceCombinationSpy = jest - .spyOn(ResourceUtil, 'isInvalidResourceCombination') - .mockReturnValue(true); + isInvalidResourceCombinationSpy = jest.spyOn(ResourceUtil, 'isInvalidResourceCombination').mockReturnValue(true); }); it('should handle config resource changed', fakeAsync(() => { @@ -104,15 +86,12 @@ describe('ListResourceService', () => { const apiRootStateResource$: Observable<StateResource<Resource>> = service.getList(); - expect(apiRootStateResource$).toBeObservable( - cold('a', { a: createEmptyStateResource(true) }), - ); + expect(apiRootStateResource$).toBeObservable(cold('a', { a: createEmptyStateResource(true) })); }); }); describe('handle changes', () => { - const listStateResource: StateResource<ListResource> = - createStateResource(createDummyListResource()); + const listStateResource: StateResource<ListResource> = createStateResource(createDummyListResource()); const changedConfigResource: Resource = createDummyResource(); describe('on different config resource', () => { @@ -127,8 +106,7 @@ describe('ListResourceService', () => { }); describe('on same config resource', () => { - const listStateResource: StateResource<ListResource> = - createStateResource(createDummyListResource()); + const listStateResource: StateResource<ListResource> = createStateResource(createDummyListResource()); beforeEach(() => { service.baseResource = baseResource; @@ -210,8 +188,7 @@ describe('ListResourceService', () => { it('should keep current current list resource on unstable state resource', () => { jest.spyOn(ResourceUtil, 'isStateResoureStable').mockReturnValue(false); - const currentListStateResource: StateResource<ListResource> = - createStateResource(createDummyListResource()); + const currentListStateResource: StateResource<ListResource> = createStateResource(createDummyListResource()); service.listResource.next(currentListStateResource); const configResuorceWithoutLink: Resource = createDummyListResource(); @@ -224,7 +201,7 @@ describe('ListResourceService', () => { }); describe('load list resource', () => { - const linkRel: string = faker.name.firstName(); + const linkRel: string = faker.person.firstName(); const loadedListResource: ListResource = createDummyListResource(); const resource: Resource = createDummyResource(); @@ -318,18 +295,6 @@ describe('ListResourceService', () => { resourceRepository.getResource.mockReturnValue(of(loadedResource)); }); - it('should throw error if listResource is not valid', () => { - service.listResource.next(createEmptyStateResource()); - - expect(() => service.select(selfHref)).toThrowError('No list resource available.'); - }); - - it('should throw error if uri not exists in list resource', () => { - expect(() => service.select('uriNotExistsInListResource')).toThrowError( - 'No entry match with given uri.', - ); - }); - it('should set resource loading', () => { service.setSelectedResourceLoading = jest.fn(); @@ -375,8 +340,7 @@ describe('ListResourceService', () => { describe('getSelected', () => { it('should return selected resource', (done) => { - const dummyStateResource: StateResource<Resource> = - createStateResource(createDummyResource()); + const dummyStateResource: StateResource<Resource> = createStateResource(createDummyResource()); service.getSelected().subscribe((selected) => { expect(selected).toEqual(dummyStateResource); @@ -411,10 +375,7 @@ describe('ListResourceService', () => { service.prev(); - expect(resourceRepository.getListResource).toHaveBeenCalledWith( - listResource, - service.prevLink, - ); + expect(resourceRepository.getListResource).toHaveBeenCalledWith(listResource, service.prevLink); }); it('should update listResource', () => { @@ -443,10 +404,7 @@ describe('ListResourceService', () => { service.next(); - expect(resourceRepository.getListResource).toHaveBeenCalledWith( - listResourceWithPrevLink, - service.nextLink, - ); + expect(resourceRepository.getListResource).toHaveBeenCalledWith(listResourceWithPrevLink, service.nextLink); }); it('should update listResource', () => { @@ -485,9 +443,7 @@ describe('ListResourceService', () => { describe('get items', () => { const listResourceItems: ListItemResource[] = [createDummyResource()]; - const stateListResource: StateResource<ListResource> = createStateResource( - createFilledDummyListResource(listResourceItems), - ); + const stateListResource: StateResource<ListResource> = createStateResource(createFilledDummyListResource(listResourceItems)); let getListSpy: jest.SpyInstance; beforeEach(() => { diff --git a/alfa-client/libs/tech-shared/src/lib/resource/list-resource.service.ts b/alfa-client/libs/tech-shared/src/lib/resource/list-resource.service.ts index 631e1c685eba0e9f96e5a4e1d97e1314a1cb7e9f..4bb6beecc38df96224fa5adf1b4ede5ed4729039 100644 --- a/alfa-client/libs/tech-shared/src/lib/resource/list-resource.service.ts +++ b/alfa-client/libs/tech-shared/src/lib/resource/list-resource.service.ts @@ -1,15 +1,6 @@ import { Resource, ResourceUri, getUrl, hasLink } from '@ngxp/rest'; import { isEqual, isNull } from 'lodash-es'; -import { - BehaviorSubject, - Observable, - combineLatest, - filter, - first, - map, - startWith, - tap, -} from 'rxjs'; +import { BehaviorSubject, Observable, combineLatest, filter, first, map, startWith, tap } from 'rxjs'; import { isNotNull, isNotUndefined } from '../tech.util'; import { CreateResourceData, ListItemResource, ListResourceServiceConfig } from './resource.model'; import { ResourceRepository } from './resource.repository'; @@ -31,21 +22,13 @@ import { * T = Type of listresource * I = Type of items in listresource */ -export class ResourceListService< - B extends Resource, - T extends ListResource, - I extends ListItemResource, -> { +export class ResourceListService<B extends Resource, T extends ListResource, I extends ListItemResource> { readonly nextLink: string = 'next'; readonly prevLink: string = 'prev'; - readonly listResource: BehaviorSubject<StateResource<T>> = new BehaviorSubject( - createEmptyStateResource(), - ); + readonly listResource: BehaviorSubject<StateResource<T>> = new BehaviorSubject(createEmptyStateResource()); - readonly selectedResource: BehaviorSubject<StateResource<I>> = new BehaviorSubject( - createEmptyStateResource(), - ); + readonly selectedResource: BehaviorSubject<StateResource<I>> = new BehaviorSubject(createEmptyStateResource()); baseResource: B = null; @@ -56,7 +39,9 @@ export class ResourceListService< public getList(): Observable<StateResource<T>> { return combineLatest([this.listResource.asObservable(), this.getConfigResource()]).pipe( - tap(([stateResource, configResource]) => this.handleChanges(stateResource, configResource)), + tap(([stateResource, configResource]) => { + this.handleChanges(stateResource, configResource); + }), tap(([, configResource]) => this.handleNullConfigResource(configResource)), filter(([stateResource]) => !isInvalidResourceCombination(stateResource, this.baseResource)), mapToFirst<T, B>(), @@ -109,9 +94,7 @@ export class ResourceListService< public create(toCreate: unknown): Observable<Resource> { this.verifyBeforeCreation(); - return this.repository.createResource( - this.buildCreateResourceData(toCreate, this.config.createLinkRel), - ); + return this.repository.createResource(this.buildCreateResourceData(toCreate, this.config.createLinkRel)); } private verifyBeforeCreation(): void { @@ -132,7 +115,6 @@ export class ResourceListService< } public select(uri: ResourceUri): void { - this.verifyBeforeSelection(uri); this.setSelectedResourceLoading(); this.repository .getResource(uri) @@ -156,10 +138,7 @@ export class ResourceListService< } existsUriInList(uri: ResourceUri): boolean { - const listResources: Resource[] = getEmbeddedResources( - this.listResource.value, - this.config.listLinkRel, - ); + const listResources: Resource[] = getEmbeddedResources(this.listResource.value, this.config.listLinkRel); return isNotUndefined(listResources.find((resource) => getUrl(resource) === uri)); } @@ -234,10 +213,7 @@ export class ResourceListService< return this.getList().pipe( filter((listStateResource: StateResource<T>) => !listStateResource.loading), map((listStateResource: StateResource<T>) => - getEmbeddedResources<ListItemResource>( - listStateResource, - this.config.listResourceListLinkRel, - ), + getEmbeddedResources<ListItemResource>(listStateResource, this.config.listResourceListLinkRel), ), ); } diff --git a/alfa-client/libs/tech-shared/src/lib/resource/resource-search.service.spec.ts b/alfa-client/libs/tech-shared/src/lib/resource/resource-search.service.spec.ts index 1c1d30cbcd83ef02da378247d4e2792ff750d3a0..709cf8035431d6b24fffa0395a123f32604fd05e 100644 --- a/alfa-client/libs/tech-shared/src/lib/resource/resource-search.service.spec.ts +++ b/alfa-client/libs/tech-shared/src/lib/resource/resource-search.service.spec.ts @@ -1,6 +1,6 @@ import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; import { fakeAsync, tick } from '@angular/core/testing'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { Resource } from '@ngxp/rest'; import { DummyLinkRel } from 'libs/tech-shared/test/dummy'; import { createDummyListResource, createDummyResource } from 'libs/tech-shared/test/resource'; @@ -29,7 +29,7 @@ describe('ResourceSearchService', () => { const listResource: ListResource = createDummyListResource(); const stateListResource: StateResource<ListResource> = createStateResource(listResource); - const searchBy: string = faker.random.words(2); + const searchBy: string = faker.word.sample(2); beforeEach(() => { config = { diff --git a/alfa-client/libs/tech-shared/src/lib/resource/resource.repository.spec.ts b/alfa-client/libs/tech-shared/src/lib/resource/resource.repository.spec.ts index 2c8c97bfd4304f4bad5545a11cbe97dcb8a7258f..6670a414e1f9e8ec801a5fb1d6da9120d63ad7e3 100644 --- a/alfa-client/libs/tech-shared/src/lib/resource/resource.repository.spec.ts +++ b/alfa-client/libs/tech-shared/src/lib/resource/resource.repository.spec.ts @@ -13,7 +13,7 @@ describe('ResourceRepository', () => { let repository: ResourceRepository; let resourceFactory = mock(ResourceFactory); - let resourceWrapper = { get: jest.fn(), post: jest.fn(), put: jest.fn(), delete: jest.fn() }; + let resourceWrapper = { get: jest.fn(), post: jest.fn(), put: jest.fn(), patch: jest.fn(), delete: jest.fn() }; beforeEach(() => { resourceFactory.from.mockReturnValue(resourceWrapper); @@ -42,9 +42,7 @@ describe('ResourceRepository', () => { it('should call get url without parameter', () => { repository.getListResource(baseResource, listLinkRel); - expect(repository.getUrlWithoutParameter).toHaveBeenCalledWith( - getUrl(baseResource, listLinkRel), - ); + expect(repository.getUrlWithoutParameter).toHaveBeenCalledWith(getUrl(baseResource, listLinkRel)); }); it('should call resourceFactory with uri', () => { @@ -131,7 +129,7 @@ describe('ResourceRepository', () => { expect(resourceFactory.from).toHaveBeenCalledWith(resource); }); - it('should call resourceWrapper with linkel and object to create', () => { + it('should call resourceWrapper with linkRel and object to create', () => { repository.createResource(createResourceData); expect(resourceWrapper.post).toHaveBeenCalledWith(linkRel, toCreate); @@ -162,7 +160,7 @@ describe('ResourceRepository', () => { expect(resourceFactory.from).toHaveBeenCalledWith(resource); }); - it('should call resourceWrapper with linkel and object to save', () => { + it('should call resourceWrapper with linkRel and object to save', () => { repository.save(saveResourceData); expect(resourceWrapper.put).toHaveBeenCalledWith(linkRel, toSave); @@ -175,8 +173,39 @@ describe('ResourceRepository', () => { }); }); + describe('patch', () => { + const toPatch: unknown = {}; + const linkRel: string = DummyLinkRel.DUMMY; + const resource: Resource = createDummyResource([linkRel]); + const patchResourceData: SaveResourceData<Resource> = { toSave: toPatch, linkRel, resource }; + + const patchedResource: Resource = createDummyResource(); + + beforeEach(() => { + resourceWrapper.patch.mockReturnValue(singleCold(patchedResource)); + }); + + it('should call resourceFactory with resource', () => { + repository.patch(patchResourceData); + + expect(resourceFactory.from).toHaveBeenCalledWith(resource); + }); + + it('should call resourceWrapper with linkRel and object to patch', () => { + repository.patch(patchResourceData); + + expect(resourceWrapper.patch).toHaveBeenCalledWith(linkRel, toPatch); + }); + + it('should return value', () => { + const result: Observable<Resource> = repository.patch(patchResourceData); + + expect(result).toBeObservable(singleHot(patchedResource)); + }); + }); + describe('delete', () => { - const deleteLinkRel: LinkRelationName = faker.random.word(); + const deleteLinkRel: LinkRelationName = faker.word.sample(); const resourceToDelete: Resource = createDummyResource([deleteLinkRel]); const deletedResource: Resource = createDummyResource(); @@ -191,7 +220,7 @@ describe('ResourceRepository', () => { expect(resourceFactory.from).toHaveBeenCalledWith(resourceToDelete); }); - it('should call resourceWrapper with linkel', () => { + it('should call resourceWrapper with linkRel', () => { repository.delete(resourceToDelete, deleteLinkRel); expect(resourceWrapper.delete).toHaveBeenCalledWith(deleteLinkRel); @@ -207,7 +236,7 @@ describe('ResourceRepository', () => { describe('search', () => { const linkRel: string = DummyLinkRel.DUMMY; const dummyResource: Resource = createDummyResource([linkRel]); - const searchBy: string = faker.random.word(); + const searchBy: string = faker.word.sample(); const searchUrl: string = faker.internet.url(); @@ -218,10 +247,7 @@ describe('ResourceRepository', () => { repository.search(dummyResource, linkRel, searchBy); - expect(repository.buildSearchUri).toHaveBeenCalledWith( - new URL(getUrl(dummyResource, linkRel)), - searchBy, - ); + expect(repository.buildSearchUri).toHaveBeenCalledWith(new URL(getUrl(dummyResource, linkRel)), searchBy); }); it('should call resourceFactory', () => { @@ -252,7 +278,7 @@ describe('ResourceRepository', () => { describe('build search uri', () => { const url: URL = new URL('http://test/searchit?searchBy={searchBy}'); - const searchBy: string = faker.random.word(); + const searchBy: string = faker.word.sample(); it('should return uri contains searchBy param', () => { const searchUri: ResourceUri = repository.buildSearchUri(url, searchBy); diff --git a/alfa-client/libs/tech-shared/src/lib/resource/resource.repository.ts b/alfa-client/libs/tech-shared/src/lib/resource/resource.repository.ts index b0fcb3995f0961983b8caef53160762ad3fc4416..fe199d6e0f55c932f385ecfa4d3dac96dd930230 100644 --- a/alfa-client/libs/tech-shared/src/lib/resource/resource.repository.ts +++ b/alfa-client/libs/tech-shared/src/lib/resource/resource.repository.ts @@ -23,9 +23,7 @@ export class ResourceRepository { } public createResource(createResourceData: CreateResourceData<Resource>): Observable<Resource> { - return this.resourceFactory - .from(createResourceData.resource) - .post(createResourceData.linkRel, createResourceData.toCreate); + return this.resourceFactory.from(createResourceData.resource).post(createResourceData.linkRel, createResourceData.toCreate); } public getResource<T>(uri: ResourceUri): Observable<T> { @@ -33,9 +31,11 @@ export class ResourceRepository { } public save(saveResourceData: SaveResourceData<Resource>): Observable<Resource> { - return this.resourceFactory - .from(saveResourceData.resource) - .put(saveResourceData.linkRel, saveResourceData.toSave); + return this.resourceFactory.from(saveResourceData.resource).put(saveResourceData.linkRel, saveResourceData.toSave); + } + + public patch(patchResourceData: SaveResourceData<Resource>): Observable<Resource> { + return this.resourceFactory.from(patchResourceData.resource).patch(patchResourceData.linkRel, patchResourceData.toSave); } public delete(resource: Resource, linkRel: LinkRelationName): Observable<Resource> { @@ -43,9 +43,7 @@ export class ResourceRepository { } public search<T>(resource: Resource, linkRel: LinkRelationName, searchBy: string): Observable<T> { - return this.resourceFactory - .fromId(this.buildSearchUri(new URL(getUrl(resource, linkRel)), searchBy)) - .get(); + return this.resourceFactory.fromId(this.buildSearchUri(new URL(getUrl(resource, linkRel)), searchBy)).get(); } buildSearchUri(url: URL, searchBy: string): ResourceUri { diff --git a/alfa-client/libs/tech-shared/src/lib/resource/resource.service.itcase.spec.ts b/alfa-client/libs/tech-shared/src/lib/resource/resource.service.itcase.spec.ts index cff64cc4e17979a6d14e59a8f017e1b7cd2c9076..a0afdb1c5477ca12525706db4bc11f0def17821d 100644 --- a/alfa-client/libs/tech-shared/src/lib/resource/resource.service.itcase.spec.ts +++ b/alfa-client/libs/tech-shared/src/lib/resource/resource.service.itcase.spec.ts @@ -1,6 +1,6 @@ import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; import { fakeAsync, tick } from '@angular/core/testing'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { Resource, getUrl } from '@ngxp/rest'; import { BehaviorSubject, of } from 'rxjs'; import { createDummyResource } from '../../../test/resource'; @@ -14,9 +14,9 @@ describe.skip('FIXME: mocking.ts issue due to module test | ResourceService ITCa let config: ResourceServiceConfig<Resource>; let repository: Mock<ResourceRepository>; - const getLinkRel: LinkRelationName = faker.random.word(); - const editLinkRel: LinkRelationName = faker.random.word(); - const deleteLinkRel: LinkRelationName = faker.random.word(); + const getLinkRel: LinkRelationName = faker.word.sample(); + const editLinkRel: LinkRelationName = faker.word.sample(); + const deleteLinkRel: LinkRelationName = faker.word.sample(); const configResource: Resource = createDummyResource([getLinkRel, editLinkRel]); const configStateResource: StateResource<Resource> = createStateResource(configResource); diff --git a/alfa-client/libs/tech-shared/src/lib/resource/resource.service.spec.ts b/alfa-client/libs/tech-shared/src/lib/resource/resource.service.spec.ts index 61f1ae622b0c4621da50136718665d0c5a94756e..1a7c4254c31475dde3488c115c80245b758d0145 100644 --- a/alfa-client/libs/tech-shared/src/lib/resource/resource.service.spec.ts +++ b/alfa-client/libs/tech-shared/src/lib/resource/resource.service.spec.ts @@ -12,12 +12,7 @@ import { ProblemDetail } from '../tech.model'; import { LinkRelationName, ResourceServiceConfig } from './resource.model'; import { ResourceRepository } from './resource.repository'; import { ResourceService } from './resource.service'; -import { - StateResource, - createEmptyStateResource, - createErrorStateResource, - createStateResource, -} from './resource.util'; +import { StateResource, createEmptyStateResource, createErrorStateResource, createStateResource } from './resource.util'; import * as ResourceUtil from './resource.util'; @@ -62,9 +57,7 @@ describe('ResourceService', () => { service.stateResource.next(stateResource); service.handleResourceChanges = jest.fn(); - isInvalidResourceCombinationSpy = jest - .spyOn(ResourceUtil, 'isInvalidResourceCombination') - .mockReturnValue(true); + isInvalidResourceCombinationSpy = jest.spyOn(ResourceUtil, 'isInvalidResourceCombination').mockReturnValue(true); }); it('should handle config resource changed', fakeAsync(() => { @@ -82,15 +75,11 @@ describe('ResourceService', () => { })); it('should return initial value', () => { - service.stateResource.asObservable = jest - .fn() - .mockReturnValue(singleHot(stateResource, '-a')); + service.stateResource.asObservable = jest.fn().mockReturnValue(singleHot(stateResource, '-a')); const apiRootStateResource$: Observable<StateResource<Resource>> = service.get(); - expect(apiRootStateResource$).toBeObservable( - cold('a', { a: createEmptyStateResource(true) }), - ); + expect(apiRootStateResource$).toBeObservable(cold('a', { a: createEmptyStateResource(true) })); }); }); @@ -167,10 +156,7 @@ describe('ResourceService', () => { it('should update stateresource by configresource', () => { service.handleResourceChanges(stateResource, configResource); - expect(service.updateStateResourceByConfigResource).toHaveBeenCalledWith( - stateResource, - configResource, - ); + expect(service.updateStateResourceByConfigResource).toHaveBeenCalledWith(stateResource, configResource); }); }); @@ -235,10 +221,7 @@ describe('ResourceService', () => { }); it('should return true if configresource has no get link', () => { - const shouldClear: boolean = service.shouldClearStateResource( - dummyStateResource, - createDummyResource(), - ); + const shouldClear: boolean = service.shouldClearStateResource(dummyStateResource, createDummyResource()); expect(shouldClear).toBeTruthy(); }); @@ -246,19 +229,13 @@ describe('ResourceService', () => { describe('on empty stateresource', () => { it('should return false', () => { - const shouldClear: boolean = service.shouldClearStateResource( - createEmptyStateResource(), - null, - ); + const shouldClear: boolean = service.shouldClearStateResource(createEmptyStateResource(), null); expect(shouldClear).toBeFalsy(); }); it('should return false if configresource has no get link', () => { - const shouldClear: boolean = service.shouldClearStateResource( - createEmptyStateResource(), - createDummyResource(), - ); + const shouldClear: boolean = service.shouldClearStateResource(createEmptyStateResource(), createDummyResource()); expect(shouldClear).toBeFalsy(); }); @@ -306,9 +283,7 @@ describe('ResourceService', () => { service.loadResource(configResourceWithGetLinkRel); - expect(service.doLoadResource).toHaveBeenCalledWith( - getUrl(configResourceWithGetLinkRel, config.getLinkRel), - ); + expect(service.doLoadResource).toHaveBeenCalledWith(getUrl(configResourceWithGetLinkRel, config.getLinkRel)); }); }); @@ -394,9 +369,7 @@ describe('ResourceService', () => { it('should do save', fakeAsync(() => { const stateResource: StateResource<Resource> = createStateResource(resourceWithEditLinkRel); service.stateResource.next(stateResource); - const doSaveMock: jest.Mock = (service.doSave = jest.fn()).mockReturnValue( - of(loadedResource), - ); + const doSaveMock: jest.Mock = (service.doSave = jest.fn()).mockReturnValue(of(loadedResource)); service.save(dummyToSave).subscribe(); tick(); @@ -435,16 +408,62 @@ describe('ResourceService', () => { })); }); + describe('patch', () => { + const dummyToPatch: unknown = {}; + const loadedResource: Resource = createDummyResource(); + + const resourceWithEditLinkRel: Resource = createDummyResource([editLinkRel]); + + it('should do patch', fakeAsync(() => { + const stateResource: StateResource<Resource> = createStateResource(resourceWithEditLinkRel); + service.stateResource.next(stateResource); + const doPatchMock: jest.Mock = (service.doPatch = jest.fn()).mockReturnValue(of(loadedResource)); + + service.patch(dummyToPatch).subscribe(); + tick(); + + expect(doPatchMock).toHaveBeenCalledWith(resourceWithEditLinkRel, dummyToPatch); + })); + + it('should return patched object', () => { + service.stateResource.next(createStateResource(resourceWithEditLinkRel)); + service.doPatch = jest.fn().mockReturnValue(singleHot(loadedResource)); + + const patched: Observable<StateResource<Resource>> = service.patch(dummyToPatch); + + expect(patched).toBeObservable(singleCold(createStateResource(loadedResource))); + }); + + it('should call handleError', () => { + service.stateResource.next(createStateResource(createDummyResource([config.edit.linkRel]))); + const errorResponse: ProblemDetail = createProblemDetail(); + service.doPatch = jest.fn().mockReturnValue(throwError(() => errorResponse)); + service.handleError = jest.fn(); + + service.patch(<any>{}).subscribe(); + + expect(service.handleError).toHaveBeenCalledWith(errorResponse); + }); + + it('should update state resource subject', fakeAsync(() => { + service.stateResource.next(createStateResource(resourceWithEditLinkRel)); + service.doPatch = jest.fn().mockReturnValue(of(loadedResource)); + + service.patch(dummyToPatch).subscribe(); + tick(); + + expect(service.stateResource.value).toEqual(createStateResource(loadedResource)); + })); + }); + describe('handleError', () => { it('should return error stateresource on problem unprocessable entity', (done: jest.DoneCallback) => { const error: ProblemDetail = createProblemDetail(); - service - .handleError(<HttpErrorResponse>(<any>error)) - .subscribe((responseError: StateResource<unknown>) => { - expect(responseError).toEqual(createErrorStateResource(error)); - done(); - }); + service.handleError(<HttpErrorResponse>(<any>error)).subscribe((responseError: StateResource<unknown>) => { + expect(responseError).toEqual(createErrorStateResource(error)); + done(); + }); }); it('should rethrow error', () => { @@ -503,10 +522,7 @@ describe('ResourceService', () => { }); }); -export class DummyResourceService<B extends Resource, T extends Resource> extends ResourceService< - B, - T -> { +export class DummyResourceService<B extends Resource, T extends Resource> extends ResourceService<B, T> { constructor( protected config: ResourceServiceConfig<B>, protected repository: ResourceRepository, @@ -517,4 +533,8 @@ export class DummyResourceService<B extends Resource, T extends Resource> extend doSave(resource: T, toSave: unknown): Observable<T> { return of(resource); } + + doPatch(resource: T, toPatch: unknown): Observable<T> { + return of(resource); + } } diff --git a/alfa-client/libs/tech-shared/src/lib/resource/resource.service.ts b/alfa-client/libs/tech-shared/src/lib/resource/resource.service.ts index 6c9eb0a56f13fb81555b915c436119b742b2ec45..1b5ea7e05416786b91861e5f79a247501076fed3 100644 --- a/alfa-client/libs/tech-shared/src/lib/resource/resource.service.ts +++ b/alfa-client/libs/tech-shared/src/lib/resource/resource.service.ts @@ -1,19 +1,7 @@ import { HttpErrorResponse } from '@angular/common/http'; import { getUrl, hasLink, Resource, ResourceUri } from '@ngxp/rest'; import { isEqual, isNull } from 'lodash-es'; -import { - BehaviorSubject, - catchError, - combineLatest, - filter, - first, - map, - Observable, - of, - startWith, - tap, - throwError, -} from 'rxjs'; +import { BehaviorSubject, catchError, combineLatest, filter, first, map, Observable, of, startWith, tap, throwError } from 'rxjs'; import { isUnprocessableEntity } from '../http.util'; import { HttpError } from '../tech.model'; import { isNotNull } from '../tech.util'; @@ -35,9 +23,7 @@ import { * T = Type of the resource which is working on */ export abstract class ResourceService<B extends Resource, T extends Resource> { - readonly stateResource: BehaviorSubject<StateResource<T>> = new BehaviorSubject( - createEmptyStateResource(), - ); + readonly stateResource: BehaviorSubject<StateResource<T>> = new BehaviorSubject(createEmptyStateResource()); configResource: B = null; @@ -48,12 +34,8 @@ export abstract class ResourceService<B extends Resource, T extends Resource> { public get(): Observable<StateResource<T>> { return combineLatest([this.stateResource.asObservable(), this.getConfigResource()]).pipe( - tap(([stateResource, configResource]) => - this.handleResourceChanges(stateResource, configResource), - ), - filter( - ([stateResource]) => !isInvalidResourceCombination(stateResource, this.configResource), - ), + tap(([stateResource, configResource]) => this.handleResourceChanges(stateResource, configResource)), + filter(([stateResource]) => !isInvalidResourceCombination(stateResource, this.configResource)), mapToFirst<T, B>(), startWith(createEmptyStateResource<T>(true)), ); @@ -61,10 +43,7 @@ export abstract class ResourceService<B extends Resource, T extends Resource> { private getConfigResource(): Observable<B> { return this.config.resource.pipe( - filter( - (configStateResource: StateResource<B>) => - !configStateResource.loading && !configStateResource.reload, - ), + filter((configStateResource: StateResource<B>) => !configStateResource.loading && !configStateResource.reload), mapToResource<B>(), ); } @@ -93,10 +72,7 @@ export abstract class ResourceService<B extends Resource, T extends Resource> { } shouldClearStateResource(stateResource: StateResource<T>, configResource: B): boolean { - return ( - (isNull(configResource) || this.hasNotGetLink(configResource)) && - !this.isStateResourceEmpty(stateResource) - ); + return (isNull(configResource) || this.hasNotGetLink(configResource)) && !this.isStateResourceEmpty(stateResource); } private hasNotGetLink(configResource: B): boolean { @@ -145,7 +121,16 @@ export abstract class ResourceService<B extends Resource, T extends Resource> { public save(toSave: unknown): Observable<StateResource<T>> { const previousResource: T = this.stateResource.value.resource; - return this.doSave(previousResource, toSave).pipe( + return this.handleSave(this.doSave(previousResource, toSave)); + } + + public patch(toPatch: unknown): Observable<StateResource<T>> { + const previousResource: T = this.stateResource.value.resource; + return this.handleSave(this.doPatch(previousResource, toPatch)); + } + + private handleSave(response$: Observable<T>): Observable<StateResource<T>> { + return response$.pipe( tap((loadedResource: T) => this.stateResource.next(createStateResource(loadedResource))), map(() => this.stateResource.value), catchError((errorResponse: HttpErrorResponse) => this.handleError(errorResponse)), @@ -161,6 +146,8 @@ export abstract class ResourceService<B extends Resource, T extends Resource> { abstract doSave(resource: T, toSave: unknown): Observable<T>; + abstract doPatch(resource: T, toPatch: unknown): Observable<T>; + public refresh(): void { this.stateResource.next({ ...this.stateResource.value, reload: true }); } diff --git a/alfa-client/libs/tech-shared/src/lib/resource/resource.util.ts b/alfa-client/libs/tech-shared/src/lib/resource/resource.util.ts index 17394d5b91f600d6882f82fca324a97cdb046449..4691f7998807aa6e0e35dbcea7d84a5fd4a09885 100644 --- a/alfa-client/libs/tech-shared/src/lib/resource/resource.util.ts +++ b/alfa-client/libs/tech-shared/src/lib/resource/resource.util.ts @@ -85,7 +85,7 @@ export function doOnValidStateResource( if (isValidStateResource(stateResource)) actionOnValid(); } -export function isValidStateResource(stateResource: StateResource<Resource>): boolean { +export function isValidStateResource(stateResource: StateResource<unknown>): boolean { return stateResource.loaded && isNotNull(stateResource.resource); } diff --git a/alfa-client/libs/tech-shared/src/lib/service/formservice.abstract.spec.ts b/alfa-client/libs/tech-shared/src/lib/service/formservice.abstract.spec.ts index 35fd33e57c839f74868240d50a5af8d47773fe79..d525b273f7de7b9f8e79b596c4ff58b128e23796 100644 --- a/alfa-client/libs/tech-shared/src/lib/service/formservice.abstract.spec.ts +++ b/alfa-client/libs/tech-shared/src/lib/service/formservice.abstract.spec.ts @@ -27,17 +27,16 @@ import { Resource } from '@ngxp/rest'; import { cold } from 'jest-marbles'; import { createInvalidParam, createProblemDetail } from 'libs/tech-shared/test/error'; import { Observable, of } from 'rxjs'; -import { AbstractFormService } from './formservice.abstract'; - +import { createCommandResource } from '../../../../command-shared/test/command'; import { + StateResource, createEmptyStateResource, createErrorStateResource, createStateResource, - StateResource, } from '../resource/resource.util'; import { InvalidParam, ProblemDetail } from '../tech.model'; +import { AbstractFormService } from './formservice.abstract'; -import { createCommandResource } from '../../../../command-shared/test/command'; import * as ValidationUtil from '../validation/tech.validation.util'; describe('AbstractFormService', () => { @@ -53,8 +52,7 @@ describe('AbstractFormService', () => { describe('submit', () => { describe('with ProblemDetail', () => { - const stateResourceWithError: StateResource<ProblemDetail> = - createErrorStateResource(createProblemDetail()); + const stateResourceWithError: StateResource<ProblemDetail> = createErrorStateResource(createProblemDetail()); beforeEach(() => { TestFormService.SUBMIT_OBSERVABLE = () => of(stateResourceWithError); @@ -76,8 +74,7 @@ describe('AbstractFormService', () => { }); it('should call after submit operator function', (done) => { - const commandStateResource: StateResource<CommandResource> = - createStateResource(createCommandResource()); + const commandStateResource: StateResource<CommandResource> = createStateResource(createCommandResource()); const afterSubmit = () => of(commandStateResource); formService.handleResponse = jest.fn(); @@ -88,8 +85,7 @@ describe('AbstractFormService', () => { }); it('should pass through as default after submit', (done) => { - const commandStateResource: StateResource<CommandResource> = - createStateResource(createCommandResource()); + const commandStateResource: StateResource<CommandResource> = createStateResource(createCommandResource()); TestFormService.SUBMIT_OBSERVABLE = () => of(commandStateResource); formService.handleResponse = jest.fn(); @@ -145,11 +141,7 @@ describe('AbstractFormService', () => { formService.setErrorByProblemDetail(problemDetail); - expect(setInvalidParamValidationErrorSpy).toHaveBeenCalledWith( - formService.form, - invalidParam, - TestFormService.PATH_PREFIX, - ); + expect(setInvalidParamValidationErrorSpy).toHaveBeenCalledWith(formService.form, invalidParam, TestFormService.PATH_PREFIX); }); }); @@ -162,6 +154,32 @@ describe('AbstractFormService', () => { expect(formService.form.value).toEqual(formValue); }); }); + + describe('reset', () => { + it('should reset form', () => { + formService.form.reset = jest.fn(); + + formService.reset(); + + expect(formService.form.reset).toHaveBeenCalled(); + }); + }); + + describe('isInvalid', () => { + it('should return false on valid state', () => { + const isInvalid: boolean = formService.isInvalid(); + + expect(isInvalid).toBeFalsy(); + }); + + it('should return true on invalid state', () => { + formService.form.controls[TestFormService.FIELD].setErrors({ required: true }); + + const isInvalid: boolean = formService.isInvalid(); + + expect(isInvalid).toBeTruthy(); + }); + }); }); class TestFormService extends AbstractFormService { diff --git a/alfa-client/libs/tech-shared/src/lib/service/formservice.abstract.ts b/alfa-client/libs/tech-shared/src/lib/service/formservice.abstract.ts index 4f225d54b0b1d97d031eb854263bee095aeed03f..e14057ca1213095531293412d81b4952f80e5e1d 100644 --- a/alfa-client/libs/tech-shared/src/lib/service/formservice.abstract.ts +++ b/alfa-client/libs/tech-shared/src/lib/service/formservice.abstract.ts @@ -45,9 +45,7 @@ export abstract class AbstractFormService<T extends Resource = Resource> { protected abstract initForm(): UntypedFormGroup; - public submit( - afterSubmit: OperatorFunction<StateResource<T>, StateResource<T>> = identity, - ): Observable<StateResource<T>> { + public submit(afterSubmit: OperatorFunction<StateResource<T>, StateResource<T>> = identity): Observable<StateResource<T>> { return this.doSubmit().pipe( afterSubmit, map((result) => this.handleResponse(result)), @@ -100,4 +98,12 @@ export abstract class AbstractFormService<T extends Resource = Resource> { public isPatch(): boolean { return !isNil(this.source); } + + public reset(): void { + this.form.reset(); + } + + public isInvalid(): boolean { + return this.form.invalid; + } } diff --git a/alfa-client/libs/tech-shared/src/lib/tech.model.ts b/alfa-client/libs/tech-shared/src/lib/tech.model.ts index 869313d09ddd0b5c7703f80ea79f23bf72403e07..da754a64f4682e35b5770d23a7c06840db56551a 100644 --- a/alfa-client/libs/tech-shared/src/lib/tech.model.ts +++ b/alfa-client/libs/tech-shared/src/lib/tech.model.ts @@ -89,6 +89,7 @@ export enum ContentType { IMAGES_ALL = 'images/*', APPLICATION_ALL = 'application/*', APPLICATION_OCTET_STREAM = 'application/octet-stream', + APPLICATION_ZIP = 'application/zip', } export interface GetRequestOptions { diff --git a/alfa-client/libs/tech-shared/src/lib/tech.util.spec.ts b/alfa-client/libs/tech-shared/src/lib/tech.util.spec.ts index 6184389586142f4acbdc09bb20ffe793ac3424ff..a1ec45853c07d2839d0fe91b362a8f1ea6328ffb 100644 --- a/alfa-client/libs/tech-shared/src/lib/tech.util.spec.ts +++ b/alfa-client/libs/tech-shared/src/lib/tech.util.spec.ts @@ -114,7 +114,7 @@ describe('TechUtil', () => { describe('get first letter', () => { it('should return on valid string value', () => { - const value: string = `e ${faker.random.word()}`; + const value: string = `e ${faker.word.sample()}`; expect(getFirstLetter(value)).toBe('e'); }); @@ -130,13 +130,13 @@ describe('TechUtil', () => { describe('isNotEmpty', () => { it('should return true on filled string', () => { - const result: boolean = isNotEmpty(faker.random.word()); + const result: boolean = isNotEmpty(faker.word.sample()); expect(result).toBeTruthy(); }); it('should return true if array contains elements', () => { - const result: boolean = isNotEmpty(faker.helpers.arrayElement()); + const result: boolean = isNotEmpty([1]); expect(result).toBeTruthy(); }); @@ -168,7 +168,7 @@ describe('TechUtil', () => { describe('isNotNil', () => { it('should return true if value is filled string', () => { - const result: boolean = isNotNil(faker.random.word()); + const result: boolean = isNotNil(faker.word.sample()); expect(result).toBeTruthy(); }); @@ -188,7 +188,7 @@ describe('TechUtil', () => { describe('isNotNulll', () => { it('should return true if value is filled string', () => { - const result: boolean = isNotNull(faker.random.word()); + const result: boolean = isNotNull(faker.word.sample()); expect(result).toBeTruthy(); }); diff --git a/alfa-client/libs/tech-shared/src/lib/validation/tech.validation.util.spec.ts b/alfa-client/libs/tech-shared/src/lib/validation/tech.validation.util.spec.ts index bb2e5b51d1be004bced187df35871e16a00d738a..8fe4f8250d41843f8f7a6c62ffff3077a42ba0b7 100644 --- a/alfa-client/libs/tech-shared/src/lib/validation/tech.validation.util.spec.ts +++ b/alfa-client/libs/tech-shared/src/lib/validation/tech.validation.util.spec.ts @@ -279,7 +279,7 @@ describe('ValidationUtils', () => { }); describe('getMessageForInvalidParam', () => { - const label: string = faker.random.word(); + const label: string = faker.word.sample(); it('should return undefined reason', () => { const invalidParam: InvalidParam = createInvalidParam(); diff --git a/alfa-client/libs/tech-shared/test/dummy.ts b/alfa-client/libs/tech-shared/test/dummy.ts index 33e1ab1611c9df963f722a8c340641e10e0c2d33..5eb5d3f6fb787bd42180b1b61a773079a6bcf7f4 100644 --- a/alfa-client/libs/tech-shared/test/dummy.ts +++ b/alfa-client/libs/tech-shared/test/dummy.ts @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -class Dummy {} +export class Dummy {} export function createDummy(): Dummy { return new Dummy(); diff --git a/alfa-client/libs/tech-shared/test/error.ts b/alfa-client/libs/tech-shared/test/error.ts index 3f80af06d43d07792780eaf023c378bcfd697345..9c498c336a44cf38b5afc024497ddf4fad79f005 100644 --- a/alfa-client/libs/tech-shared/test/error.ts +++ b/alfa-client/libs/tech-shared/test/error.ts @@ -35,16 +35,16 @@ import { ValidationMessageCode } from '../src/lib/validation/tech.validation.mes export function createIssueParam(): IssueParam { return { - name: faker.random.word(), - value: faker.random.word(), + name: faker.word.sample(), + value: faker.word.sample(), }; } export function createIssue(): Issue { return { - field: faker.random.word(), - message: faker.random.words(10), - messageCode: faker.random.words(5), + field: faker.word.sample(), + message: faker.word.sample(10), + messageCode: faker.word.sample(5), parameters: [createIssueParam()], }; } @@ -66,26 +66,26 @@ export function createProblemDetail( ): ProblemDetail { return { status: HttpStatusCode.UnprocessableEntity, - title: faker.random.word(), - type: faker.random.word(), + title: faker.word.sample(), + type: faker.word.sample(), instance: faker.internet.url(), - detail: faker.random.word(), + detail: faker.word.sample(), invalidParams: invalidParams, }; } export function createInvalidParam(): InvalidParam { return { - name: faker.random.word(), + name: faker.word.sample(), reason: ValidationMessageCode.FIELD_EMPTY, - value: faker.random.words(10), + value: faker.word.sample(10), constraintParameters: [createInvalidParamConstraintParameter()], }; } export function createInvalidParamConstraintParameter(): ConstraintParameter { return { - name: faker.random.word(), - value: faker.random.word(), + name: faker.word.sample(), + value: faker.word.sample(), }; } diff --git a/alfa-client/libs/tech-shared/test/file.ts b/alfa-client/libs/tech-shared/test/file.ts index 3f0fd180a866e86a1f9c2747bfae8b876a19950c..35024a18879d4175d298980afea6ee08e2433d56 100644 --- a/alfa-client/libs/tech-shared/test/file.ts +++ b/alfa-client/libs/tech-shared/test/file.ts @@ -1,5 +1,5 @@ import { faker } from '@faker-js/faker'; export function createFile(): File { - return <any>{ name: faker.datatype.string(10), type: 'image/png', size: 512 }; + return <any>{ name: faker.string.sample(10), type: 'image/png', size: 512 }; } diff --git a/alfa-client/libs/tech-shared/test/ngrx.ts b/alfa-client/libs/tech-shared/test/ngrx.ts index 526b345e5b8d10646ef4d1f62fd72d01837a3b90..30a026628328a3cdb5f43f76f178088ef325a37c 100644 --- a/alfa-client/libs/tech-shared/test/ngrx.ts +++ b/alfa-client/libs/tech-shared/test/ngrx.ts @@ -1,3 +1,3 @@ -import { TypedAction } from '@ngrx/store/src/models'; +import { Action } from '@ngrx/store'; -export const DUMMY_ACTION: TypedAction<string> = { type: 'Dummy Action' }; +export const DUMMY_ACTION: Action<string> = { type: 'Dummy Action' }; diff --git a/alfa-client/libs/tech-shared/test/resource.ts b/alfa-client/libs/tech-shared/test/resource.ts index cf93fb97578b9e4f707014f4441d746b86a740be..8cbc924738e6ad45987eb74abe6792489979478b 100644 --- a/alfa-client/libs/tech-shared/test/resource.ts +++ b/alfa-client/libs/tech-shared/test/resource.ts @@ -70,14 +70,11 @@ export function createDummyResources(linkRelations: string[] = []): Resource[] { return times(10, () => toResource(createDummyResource(), [...linkRelations])); } -export function createEmptyListResource(linkRelations: string[] = []): ListResource { +export function createEmptyListResource<T extends ListResource>(linkRelations: string[] = []): T { return toResource({}, [...linkRelations]); } -export function createFilledDummyListResource( - resources: Resource[], - linkRelations: string[] = [], -): ListResource { +export function createFilledDummyListResource(resources: Resource[], linkRelations: string[] = []): ListResource { return toResource({}, [...linkRelations], { [DummyListLinkRel.LIST]: resources, }); diff --git a/alfa-client/libs/ui/src/lib/assets/delete_finally.svg b/alfa-client/libs/ui/src/lib/assets/delete_finally.svg index 37d3c9eac065773b24fa8dfaa85559920528dcde..9c84c6bfb5d89f3d8843e2575f3c769fadbb5046 100644 --- a/alfa-client/libs/ui/src/lib/assets/delete_finally.svg +++ b/alfa-client/libs/ui/src/lib/assets/delete_finally.svg @@ -1,15 +1,15 @@ -<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M17.4866 13V3.11101H12.1905L7.49777 8.05811L7.49777 13H5.5V8.05811C5.5 7.49738 5.71112 6.95968 6.0868 6.56365L10.7796 1.61654C11.1541 1.22173 11.6615 1 12.1905 1H17.4866C18.5899 1 19.4844 1.94513 19.4844 3.11101V13H17.4866Z" fill="#202020"/> -<path d="M7.5 20C7.5 19.4477 7.94772 19 8.5 19V19C9.05228 19 9.5 19.4477 9.5 20V20C9.5 20.5523 9.05228 21 8.5 21V21C7.94772 21 7.5 20.5523 7.5 20V20Z" fill="#202020"/> -<path d="M7.5 20C7.5 19.4477 7.94772 19 8.5 19V19C9.05228 19 9.5 19.4477 9.5 20V20C9.5 20.5523 9.05228 21 8.5 21V21C7.94772 21 7.5 20.5523 7.5 20V20Z" fill="#202020"/> -<path d="M11.5 21C11.5 20.4477 11.9477 20 12.5 20V20C13.0523 20 13.5 20.4477 13.5 21V22C13.5 22.5523 13.0523 23 12.5 23V23C11.9477 23 11.5 22.5523 11.5 22V21Z" fill="#202020"/> -<path d="M11.5 21C11.5 20.4477 11.9477 20 12.5 20V20C13.0523 20 13.5 20.4477 13.5 21V22C13.5 22.5523 13.0523 23 12.5 23V23C11.9477 23 11.5 22.5523 11.5 22V21Z" fill="#202020"/> -<path d="M11.5 13C11.5 12.4477 11.9477 12 12.5 12V12C13.0523 12 13.5 12.4477 13.5 13V17C13.5 17.5523 13.0523 18 12.5 18V18C11.9477 18 11.5 17.5523 11.5 17V13Z" fill="#202020"/> -<path d="M11.5 13C11.5 12.4477 11.9477 12 12.5 12V12C13.0523 12 13.5 12.4477 13.5 13V17C13.5 17.5523 13.0523 18 12.5 18V18C11.9477 18 11.5 17.5523 11.5 17V13Z" fill="#202020"/> -<path d="M7.5 15C7.5 14.4477 7.94772 14 8.5 14V14C9.05228 14 9.5 14.4477 9.5 15V16C9.5 16.5523 9.05228 17 8.5 17V17C7.94772 17 7.5 16.5523 7.5 16V15Z" fill="#202020"/> -<path d="M7.5 15C7.5 14.4477 7.94772 14 8.5 14V14C9.05228 14 9.5 14.4477 9.5 15V16C9.5 16.5523 9.05228 17 8.5 17V17C7.94772 17 7.5 16.5523 7.5 16V15Z" fill="#202020"/> -<path d="M15.5 20C15.5 19.4477 15.9477 19 16.5 19V19C17.0523 19 17.5 19.4477 17.5 20V21C17.5 21.5523 17.0523 22 16.5 22V22C15.9477 22 15.5 21.5523 15.5 21V20Z" fill="#202020"/> -<path d="M15.5 20C15.5 19.4477 15.9477 19 16.5 19V19C17.0523 19 17.5 19.4477 17.5 20V21C17.5 21.5523 17.0523 22 16.5 22V22C15.9477 22 15.5 21.5523 15.5 21V20Z" fill="#202020"/> -<path d="M15.5 15C15.5 14.4477 15.9477 14 16.5 14V14C17.0523 14 17.5 14.4477 17.5 15V16C17.5 16.5523 17.0523 17 16.5 17V17C15.9477 17 15.5 16.5523 15.5 16V15Z" fill="#202020"/> -<path d="M15.5 15C15.5 14.4477 15.9477 14 16.5 14V14C17.0523 14 17.5 14.4477 17.5 15V16C17.5 16.5523 17.0523 17 16.5 17V17C15.9477 17 15.5 16.5523 15.5 16V15Z" fill="#202020"/> +<svg width="25" height="24" viewBox="0 0 25 24" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M17.4866 13V3.11101H12.1905L7.49777 8.05811L7.49777 13H5.5V8.05811C5.5 7.49738 5.71112 6.95968 6.0868 6.56365L10.7796 1.61654C11.1541 1.22173 11.6615 1 12.1905 1H17.4866C18.5899 1 19.4844 1.94513 19.4844 3.11101V13H17.4866Z"/> +<path d="M7.5 20C7.5 19.4477 7.94772 19 8.5 19V19C9.05228 19 9.5 19.4477 9.5 20V20C9.5 20.5523 9.05228 21 8.5 21V21C7.94772 21 7.5 20.5523 7.5 20V20Z"/> +<path d="M7.5 20C7.5 19.4477 7.94772 19 8.5 19V19C9.05228 19 9.5 19.4477 9.5 20V20C9.5 20.5523 9.05228 21 8.5 21V21C7.94772 21 7.5 20.5523 7.5 20V20Z"/> +<path d="M11.5 21C11.5 20.4477 11.9477 20 12.5 20V20C13.0523 20 13.5 20.4477 13.5 21V22C13.5 22.5523 13.0523 23 12.5 23V23C11.9477 23 11.5 22.5523 11.5 22V21Z"/> +<path d="M11.5 21C11.5 20.4477 11.9477 20 12.5 20V20C13.0523 20 13.5 20.4477 13.5 21V22C13.5 22.5523 13.0523 23 12.5 23V23C11.9477 23 11.5 22.5523 11.5 22V21Z"/> +<path d="M11.5 13C11.5 12.4477 11.9477 12 12.5 12V12C13.0523 12 13.5 12.4477 13.5 13V17C13.5 17.5523 13.0523 18 12.5 18V18C11.9477 18 11.5 17.5523 11.5 17V13Z"/> +<path d="M11.5 13C11.5 12.4477 11.9477 12 12.5 12V12C13.0523 12 13.5 12.4477 13.5 13V17C13.5 17.5523 13.0523 18 12.5 18V18C11.9477 18 11.5 17.5523 11.5 17V13Z"/> +<path d="M7.5 15C7.5 14.4477 7.94772 14 8.5 14V14C9.05228 14 9.5 14.4477 9.5 15V16C9.5 16.5523 9.05228 17 8.5 17V17C7.94772 17 7.5 16.5523 7.5 16V15Z"/> +<path d="M7.5 15C7.5 14.4477 7.94772 14 8.5 14V14C9.05228 14 9.5 14.4477 9.5 15V16C9.5 16.5523 9.05228 17 8.5 17V17C7.94772 17 7.5 16.5523 7.5 16V15Z"/> +<path d="M15.5 20C15.5 19.4477 15.9477 19 16.5 19V19C17.0523 19 17.5 19.4477 17.5 20V21C17.5 21.5523 17.0523 22 16.5 22V22C15.9477 22 15.5 21.5523 15.5 21V20Z"/> +<path d="M15.5 20C15.5 19.4477 15.9477 19 16.5 19V19C17.0523 19 17.5 19.4477 17.5 20V21C17.5 21.5523 17.0523 22 16.5 22V22C15.9477 22 15.5 21.5523 15.5 21V20Z"/> +<path d="M15.5 15C15.5 14.4477 15.9477 14 16.5 14V14C17.0523 14 17.5 14.4477 17.5 15V16C17.5 16.5523 17.0523 17 16.5 17V17C15.9477 17 15.5 16.5523 15.5 16V15Z"/> +<path d="M15.5 15C15.5 14.4477 15.9477 14 16.5 14V14C17.0523 14 17.5 14.4477 17.5 15V16C17.5 16.5523 17.0523 17 16.5 17V17C15.9477 17 15.5 16.5523 15.5 16V15Z"/> </svg> diff --git a/alfa-client/libs/ui/src/lib/interceptor/http-connection-timeout.interceptor.ts b/alfa-client/libs/ui/src/lib/interceptor/http-connection-timeout.interceptor.ts index 3fb027d251d8830c197a362da4f04a7118234b38..a6570136c96740aea02caa42dd2c4b9758b78dd5 100644 --- a/alfa-client/libs/ui/src/lib/interceptor/http-connection-timeout.interceptor.ts +++ b/alfa-client/libs/ui/src/lib/interceptor/http-connection-timeout.interceptor.ts @@ -21,14 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { - HttpErrorResponse, - HttpEvent, - HttpHandler, - HttpInterceptor, - HttpRequest, - HttpXsrfTokenExtractor, -} from '@angular/common/http'; +import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpXsrfTokenExtractor } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { addRequestHeader, diff --git a/alfa-client/libs/ui/src/lib/ui/back-button/back-button.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/back-button/back-button.component.spec.ts index 4e90d76c66ed69088cd5b40760d2aff4f17dda7e..651106fe06762e5bf41e42b86c0210ade1a1ce87 100644 --- a/alfa-client/libs/ui/src/lib/ui/back-button/back-button.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/back-button/back-button.component.spec.ts @@ -3,7 +3,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MatIcon } from '@angular/material/icon'; import { MatTooltipModule } from '@angular/material/tooltip'; import { RouterTestingModule } from '@angular/router/testing'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { MockModule } from 'ng-mocks'; import { BackButtonComponent } from './back-button.component'; diff --git a/alfa-client/libs/ui/src/lib/ui/basic-dialog/basic-dialog.component.scss b/alfa-client/libs/ui/src/lib/ui/basic-dialog/basic-dialog.component.scss index 51b84d53b61eb690cbabea688c48e6a43dc95680..93fdb1c5d97c7836e297598dff871cdb2bd95ca6 100644 --- a/alfa-client/libs/ui/src/lib/ui/basic-dialog/basic-dialog.component.scss +++ b/alfa-client/libs/ui/src/lib/ui/basic-dialog/basic-dialog.component.scss @@ -1,11 +1,11 @@ @use 'sass:map'; @use '@angular/material' as mat; -$primaryPalette: mat.define-palette(mat.$blue-palette, 800, 500, 900); +$primaryPalette: mat.m2-define-palette(mat.$m2-blue-palette, 800, 500, 900); button, h1 { - color: mat.get-color-from-palette($primaryPalette); + color: mat.m2-get-color-from-palette($primaryPalette); } ozgcloud-stroked-button-with-spinner { diff --git a/alfa-client/libs/ui/src/lib/ui/button-toggle-group/button-toggle-group.component.html b/alfa-client/libs/ui/src/lib/ui/button-toggle-group/button-toggle-group.component.html deleted file mode 100644 index 68b79b7c386d6c3a92a3222437f99f681eddff4a..0000000000000000000000000000000000000000 --- a/alfa-client/libs/ui/src/lib/ui/button-toggle-group/button-toggle-group.component.html +++ /dev/null @@ -1,3 +0,0 @@ -<mat-button-toggle-group #group="matButtonToggleGroup" name="groupOfButtonToggles" value="alle"> - <ng-content></ng-content> -</mat-button-toggle-group> diff --git a/alfa-client/libs/ui/src/lib/ui/button-toggle-group/button-toggle-group.component.scss b/alfa-client/libs/ui/src/lib/ui/button-toggle-group/button-toggle-group.component.scss deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/alfa-client/libs/ui/src/lib/ui/button-toggle-group/button-toggle-group.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/button-toggle-group/button-toggle-group.component.spec.ts deleted file mode 100644 index 21fd42246c2d0c975ec2c1876fa952cd074fdeb3..0000000000000000000000000000000000000000 --- a/alfa-client/libs/ui/src/lib/ui/button-toggle-group/button-toggle-group.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { MatButtonToggleGroup } from '@angular/material/button-toggle'; -import { ButtonToggleGroupComponent } from './button-toggle-group.component'; - -describe('ButtonToggleGroupComponent', () => { - let component: ButtonToggleGroupComponent; - let fixture: ComponentFixture<ButtonToggleGroupComponent>; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ButtonToggleGroupComponent], - imports: [MatButtonToggleGroup], - }).compileComponents(); - - fixture = TestBed.createComponent(ButtonToggleGroupComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/alfa-client/libs/ui/src/lib/ui/button-toggle-group/button-toggle-group.component.ts b/alfa-client/libs/ui/src/lib/ui/button-toggle-group/button-toggle-group.component.ts deleted file mode 100644 index 6619434fc208df22859b0f1e23f4b17f57a7a291..0000000000000000000000000000000000000000 --- a/alfa-client/libs/ui/src/lib/ui/button-toggle-group/button-toggle-group.component.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { - AfterContentInit, - Component, - ContentChildren, - Input, - QueryList, - ViewChild, -} from '@angular/core'; -import { MatButtonToggleGroup } from '@angular/material/button-toggle'; -import { ButtonToggleComponent } from '../button-toggle/button-toggle.component'; - -@Component({ - selector: 'ozgcloud-button-toggle-group', - templateUrl: './button-toggle-group.component.html', - styleUrls: ['./button-toggle-group.component.scss'], -}) -export class ButtonToggleGroupComponent implements AfterContentInit { - @Input() name: string; - @Input() default: string; - - @ViewChild('group', { static: true }) buttonToggleGroup: MatButtonToggleGroup; - - @ContentChildren(ButtonToggleComponent) componentAInstances: QueryList<ButtonToggleComponent>; - - ngAfterContentInit(): void { - this.addButtonsToGroup(); - } - - addButtonsToGroup(): void { - this.componentAInstances.forEach( - (component) => (component.matButtonToggle.buttonToggleGroup = this.buttonToggleGroup), - ); - } -} diff --git a/alfa-client/libs/ui/src/lib/ui/button-toggle/_button-toogle.theme.scss b/alfa-client/libs/ui/src/lib/ui/button-toggle/_button-toogle.theme.scss deleted file mode 100644 index 24882f2b5523fb6cdab480c1e15425f2272546c0..0000000000000000000000000000000000000000 --- a/alfa-client/libs/ui/src/lib/ui/button-toggle/_button-toogle.theme.scss +++ /dev/null @@ -1,9 +0,0 @@ -ozgcloud-button-toggle { - .mat-button-toggle-standalone.mat-button-toggle-appearance-standard, - .mat-button-toggle-appearance-standard { - border-radius: 20px; - .mat-button-toggle-label-content { - line-height: 2rem; - } - } -} diff --git a/alfa-client/libs/ui/src/lib/ui/button-toggle/button-toggle.component.html b/alfa-client/libs/ui/src/lib/ui/button-toggle/button-toggle.component.html deleted file mode 100644 index 76ed2304e23b54997a856e8d4e3396ae4172437c..0000000000000000000000000000000000000000 --- a/alfa-client/libs/ui/src/lib/ui/button-toggle/button-toggle.component.html +++ /dev/null @@ -1,3 +0,0 @@ -<mat-button-toggle [value]="value" #buttonToggle="matButtonToggle"> - <ng-content></ng-content> -</mat-button-toggle> diff --git a/alfa-client/libs/ui/src/lib/ui/button-toggle/button-toggle.component.scss b/alfa-client/libs/ui/src/lib/ui/button-toggle/button-toggle.component.scss deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/alfa-client/libs/ui/src/lib/ui/button-toggle/button-toggle.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/button-toggle/button-toggle.component.spec.ts deleted file mode 100644 index a1e682930d310bd5cbc30f33a082f3b35ca83ca1..0000000000000000000000000000000000000000 --- a/alfa-client/libs/ui/src/lib/ui/button-toggle/button-toggle.component.spec.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { MatButtonToggle } from '@angular/material/button-toggle'; -import { MatRipple } from '@angular/material/core'; -import { ButtonToggleComponent } from './button-toggle.component'; - -describe('ButtonToggleComponent', () => { - let component: ButtonToggleComponent; - let fixture: ComponentFixture<ButtonToggleComponent>; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ButtonToggleComponent], - imports: [MatButtonToggle, MatRipple], - }).compileComponents(); - - fixture = TestBed.createComponent(ButtonToggleComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/alfa-client/libs/ui/src/lib/ui/button-toggle/button-toggle.component.ts b/alfa-client/libs/ui/src/lib/ui/button-toggle/button-toggle.component.ts deleted file mode 100644 index 9d8b7710e13eb279e87ab8cfc3e156f936cbcbe0..0000000000000000000000000000000000000000 --- a/alfa-client/libs/ui/src/lib/ui/button-toggle/button-toggle.component.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Component, Input, OnInit, ViewChild } from '@angular/core'; -import { MatButtonToggle, MatButtonToggleGroup } from '@angular/material/button-toggle'; - -@Component({ - selector: 'ozgcloud-button-toggle', - templateUrl: './button-toggle.component.html', - styleUrls: ['./button-toggle.component.scss'], -}) -export class ButtonToggleComponent implements OnInit { - @Input() value: string; - @Input() buttonToggleGroup: MatButtonToggleGroup; - - @ViewChild('buttonToggle', { static: true }) matButtonToggle: MatButtonToggle; - - ngOnInit(): void { - this.matButtonToggle.buttonToggleGroup = this.buttonToggleGroup; - } -} diff --git a/alfa-client/libs/ui/src/lib/ui/editor/date-editor/date-editor.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/editor/date-editor/date-editor.component.spec.ts index 24020a5412e79d4e0c21e5c016d3aa6804d613d9..73025beb23bc169de09b21eb73c98b96739b1709 100644 --- a/alfa-client/libs/ui/src/lib/ui/editor/date-editor/date-editor.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/editor/date-editor/date-editor.component.spec.ts @@ -30,7 +30,7 @@ import { MatFormFieldModule } from '@angular/material/form-field'; import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { MockComponent } from 'ng-mocks'; import { ValidationErrorComponent } from '../../validation-error/validation-error.component'; import { DateEditorComponent } from './date-editor.component'; diff --git a/alfa-client/libs/ui/src/lib/ui/expansion-panel/_expansion-panel.theme.scss b/alfa-client/libs/ui/src/lib/ui/expansion-panel/_expansion-panel.theme.scss index ba505ad18cce11ca6b59ad4fecbf9e0f17b8be62..45d45fd6b2ad7fa9060df2bf3f27ce6d0afc11a1 100644 --- a/alfa-client/libs/ui/src/lib/ui/expansion-panel/_expansion-panel.theme.scss +++ b/alfa-client/libs/ui/src/lib/ui/expansion-panel/_expansion-panel.theme.scss @@ -25,11 +25,11 @@ @use '@angular/material' as mat; @mixin expansion-panel($theme) { - $color-config: mat.get-color-config($theme); + $color-config: mat.m2-get-color-config($theme); $primary-palette: map.get($color-config, 'primary'); ozgcloud-expansion-panel h3 { - color: mat.get-color-from-palette($primary-palette); + color: mat.m2-get-color-from-palette($primary-palette); } } @@ -65,6 +65,6 @@ alfa-expansion-panel-with-user { .dark ozgcloud-expansion-panel { h3 { - color: mat.get-color-from-palette($primaryPalette, lighter); + color: mat.m2-get-color-from-palette($primaryPalette, lighter); } } diff --git a/alfa-client/libs/ui/src/lib/ui/messages.ts b/alfa-client/libs/ui/src/lib/ui/messages.ts index 49891db3e6afb98e20be5f33e612a2054bb2f41b..9e9757cace91a29221e4b8cf5b4b6a90fb532d12 100644 --- a/alfa-client/libs/ui/src/lib/ui/messages.ts +++ b/alfa-client/libs/ui/src/lib/ui/messages.ts @@ -25,4 +25,5 @@ export enum Messages { HTTP_STATUS_FORBIDDEN = 'Die Aktion konnte wegen fehlender Berechtigungen nicht durchgeführt werden.', HTTP_USER_MANAGER_SERVICE_UNAVAILABLE = 'Der UserManager ist zurzeit leider nicht verfügbar.', HTTP_STATUS_VORGANG_NOT_FOUND = 'Der aufgerufene Vorgang wurde nicht gefunden.', + HTTP_STATUS_RESOURCE_NOT_FOUND = 'Die aufgerufene Ressource wurde nicht gefunden.', } diff --git a/alfa-client/libs/ui/src/lib/ui/notification/internal-server-error-dialog/internal-server-error-dialog.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/notification/internal-server-error-dialog/internal-server-error-dialog.component.spec.ts index e36771e50e4be57cb20e5aa2322cf3b4711bd539..08a527d01c9c13bc854ccce126205416bb85dd5e 100644 --- a/alfa-client/libs/ui/src/lib/ui/notification/internal-server-error-dialog/internal-server-error-dialog.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/notification/internal-server-error-dialog/internal-server-error-dialog.component.spec.ts @@ -79,7 +79,7 @@ describe('InternalServerErrorDialogComponent', () => { }); it('should be visible', () => { - const exceptionId = faker.datatype.uuid(); + const exceptionId = faker.string.uuid(); dialogData = { error: { ...{ issues: [createIssue()] }, id: exceptionId } }; fixture.detectChanges(); diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-dialog/ozgcloud-dialog.service.spec.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-dialog/ozgcloud-dialog.service.spec.ts index 8fac9311bbcd78efbdd449922e9901f6cd97aa45..bc8f22e304e830e201a66bfb6211141b3c49d707 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-dialog/ozgcloud-dialog.service.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-dialog/ozgcloud-dialog.service.spec.ts @@ -1,7 +1,6 @@ -import { TestBed } from '@angular/core/testing'; - import { Mock, mock } from '@alfa-client/test-utils'; import { Dialog, DialogConfig } from '@angular/cdk/dialog'; +import { TestBed } from '@angular/core/testing'; import { OzgcloudDialogService } from './ozgcloud-dialog.service'; describe('OzgcloudDialogService', () => { @@ -70,19 +69,13 @@ describe('OzgcloudDialogService', () => { it('should open dialog with custom config', () => { service.openInCallingComponentContext(component, viewContainerRef, null, dialogConfig); - expect(dialog.open).toHaveBeenCalledWith( - component, - dialogConfigWithOwnConfigAndViewContainerRef, - ); + expect(dialog.open).toHaveBeenCalledWith(component, dialogConfigWithOwnConfigAndViewContainerRef); }); it('should open dialog without data and custom config', () => { service.openInCallingComponentContext(component, viewContainerRef); - expect(dialog.open).toHaveBeenCalledWith( - component, - dialogConfigWithOutDataAndWithViewContainerRef, - ); + expect(dialog.open).toHaveBeenCalledWith(component, dialogConfigWithOutDataAndWithViewContainerRef); }); }); @@ -104,4 +97,19 @@ describe('OzgcloudDialogService', () => { }); }); }); + + describe('open full screen dialog', () => { + it('should call openInCallingComponentContext', () => { + service.openInCallingComponentContext = jest.fn(); + + service.openFullScreenDialog(component, viewContainerRef, dialogData); + + expect(service.openInCallingComponentContext).toHaveBeenCalledWith( + component, + viewContainerRef, + dialogData, + service.GREY_BLUR_CONFIG, + ); + }); + }); }); diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-dialog/ozgcloud-dialog.service.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-dialog/ozgcloud-dialog.service.ts index 3c9383b4a60f1293b42ee00b3acc3fa90a54abaf..ca7bf24afd1e3f7fb1f4ba918cc6e3fe768aca33 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-dialog/ozgcloud-dialog.service.ts +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-dialog/ozgcloud-dialog.service.ts @@ -13,29 +13,36 @@ export class OzgcloudDialogService { disableClose: true, }; + readonly GREY_BLUR_CONFIG: DialogConfig = { + backdropClass: ['backdrop-blur-1', 'bg-greybackdrop'], + disableClose: true, + }; + constructor(private dialog: Dialog) {} public openWizard<T, D>(component: ComponentType<T>, data?: D): DialogRef<T> { - return this.openDialog<T>( - component, - this.buildDialogConfigWithData<D>(data, this.WIZARD_DIALOG_CONFIG), - ); + return this.openDialog<T>(component, this.buildDialogConfigWithData<D>(data, this.WIZARD_DIALOG_CONFIG)); } public open<T, D = unknown>(component: ComponentType<T>, data?: D): DialogRef<T> { return this.openDialog(component, this.buildDialogConfigWithData(data)); } + public openFullScreenDialog<T, D = unknown>( + component: ComponentType<T>, + viewContainerRef: ViewContainerRef, + data?: D, + ): DialogRef<T> { + return this.openInCallingComponentContext(component, viewContainerRef, data, this.GREY_BLUR_CONFIG); + } + public openInCallingComponentContext<T, D = unknown>( component: ComponentType<T>, viewContainerRef: ViewContainerRef, data?: D, dialogConfig?: DialogConfig, ): DialogRef<T> { - return this.openDialog( - component, - this.buildDialogConfigWithData(data, { viewContainerRef, ...dialogConfig }), - ); + return this.openDialog(component, this.buildDialogConfigWithData(data, { viewContainerRef, ...dialogConfig })); } private buildDialogConfigWithData<D>(data: D, dialogConfig?: DialogConfig): DialogConfig | null { diff --git a/alfa-client/libs/ui/src/lib/ui/ui.module.ts b/alfa-client/libs/ui/src/lib/ui/ui.module.ts index 3344655723a5b0f505918ac3cae9e9b77e966839..1de739a67321cc119503aa79f7ec17eb25e1fe33 100644 --- a/alfa-client/libs/ui/src/lib/ui/ui.module.ts +++ b/alfa-client/libs/ui/src/lib/ui/ui.module.ts @@ -60,8 +60,6 @@ import { SnackbarInfoComponent } from '../snackbar/snackbar-info/snackbar-info.c import { AccordionComponent } from './accordion/accordion.component'; import { BackButtonComponent } from './back-button/back-button.component'; import { BasicDialogComponent } from './basic-dialog/basic-dialog.component'; -import { ButtonToggleGroupComponent } from './button-toggle-group/button-toggle-group.component'; -import { ButtonToggleComponent } from './button-toggle/button-toggle.component'; import { DownloadButtonComponent } from './download-button/download-button.component'; import { AutocompleteEditorComponent } from './editor/autocomplete-editor/autocomplete-editor.component'; import { CheckboxEnumEditorComponent } from './editor/checkbox-enum-editor/checkbox-enum-editor.component'; @@ -125,8 +123,6 @@ import { ValidationErrorComponent } from './validation-error/validation-error.co AppIconComponent, SlideToggleComponent, BackButtonComponent, - ButtonToggleGroupComponent, - ButtonToggleComponent, OzgcloudIconButtonPrimaryComponent, OzgcloudIconComponent, OzgcloudRoutingButtonComponent, @@ -228,8 +224,6 @@ import { ValidationErrorComponent } from './validation-error/validation-error.co AppIconComponent, SlideToggleComponent, BackButtonComponent, - ButtonToggleGroupComponent, - ButtonToggleComponent, OzgcloudIconComponent, OzgcloudRoutingButtonComponent, OzgcloudSvgIconComponent, diff --git a/alfa-client/libs/user-profile-shared/test/user-profile.ts b/alfa-client/libs/user-profile-shared/test/user-profile.ts index 63293b5774526a0ba38506faae677e3469286043..a886a2c1413906bfa1a6201722fa1d735804670a 100644 --- a/alfa-client/libs/user-profile-shared/test/user-profile.ts +++ b/alfa-client/libs/user-profile-shared/test/user-profile.ts @@ -34,8 +34,8 @@ import { export function createUserProfile(): UserProfile { return { createdAt: faker.date.past(), - firstName: faker.name.findName(), - lastName: faker.name.findName(), + firstName: faker.person.fullName(), + lastName: faker.person.fullName(), }; } diff --git a/alfa-client/libs/user-profile/src/lib/user-icon/user-icon.component.html b/alfa-client/libs/user-profile/src/lib/user-icon/user-icon.component.html index 7c3ff6344729ceebe6372394587f6d6e09370a5d..7a98824324074be871ce9304c8c5a4e6a52b3941 100644 --- a/alfa-client/libs/user-profile/src/lib/user-icon/user-icon.component.html +++ b/alfa-client/libs/user-profile/src/lib/user-icon/user-icon.component.html @@ -27,29 +27,26 @@ <div [matTooltipDisabled]="disableTooltip" data-test-class="user-profile-icon" - [class.initials]="!!userProfileStateResource.resource || userProfileStateResource.error" - class="user-profile" + class="relative flex size-9 items-center justify-center overflow-hidden rounded-full text-lg text-white" + [class.bg-ozggray-900]="userProfileStateResource.resource || errorMessageCode === messageCode.RESOURCE_NOT_FOUND" [matTooltip]="tooltip" > <ng-container *ngIf="userProfileStateResource.resource; else noUser"> <span data-test-class="user-profile-assigned">{{ initials }}</span> </ng-container> <ng-template #noUser> - <mat-icon *ngIf="!userProfileStateResource.error" data-test-class="user-profile-unassigned" - >account_circle_outline</mat-icon - > - <span - *ngIf="errorMessageCode === messageCode.RESOURCE_NOT_FOUND" - data-test-class="user-profile-user-not-found" - >!</span - > - <mat-icon + <ods-user-icon + *ngIf="!userProfileStateResource.error" + data-test-class="user-profile-unassigned" + class="size-9 fill-ozggray-800" + style="--mdc-icon-button-icon-size: 36px" + /> + <span *ngIf="errorMessageCode === messageCode.RESOURCE_NOT_FOUND" data-test-class="user-profile-user-not-found">!</span> + <ods-error-icon *ngIf="errorMessageCode === messageCode.SERVICE_UNAVAILABLE" - class="unavailable" data-test-class="user-profile-service-unavailable" - >error_outline</mat-icon - > + style="--mdc-icon-button-icon-size: 42px" + /> </ng-template> - <div class="picture"></div> </div> </ozgcloud-spinner> diff --git a/alfa-client/libs/user-profile/src/lib/user-icon/user-icon.component.spec.ts b/alfa-client/libs/user-profile/src/lib/user-icon/user-icon.component.spec.ts index c2c4f8ef4539fc85530fc656c9733dd514894cf4..aa76e9f608e2b1e804711b30e755ff9ecfbaf938 100644 --- a/alfa-client/libs/user-profile/src/lib/user-icon/user-icon.component.spec.ts +++ b/alfa-client/libs/user-profile/src/lib/user-icon/user-icon.component.spec.ts @@ -31,15 +31,12 @@ import { } from '@alfa-client/tech-shared'; import { getElementFromFixture } from '@alfa-client/test-utils'; import { SpinnerComponent } from '@alfa-client/ui'; -import { - NO_NAME_MESSAGE, - UserProfileResource, - userProfileMessage, -} from '@alfa-client/user-profile-shared'; +import { NO_NAME_MESSAGE, UserProfileResource, userProfileMessage } from '@alfa-client/user-profile-shared'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MatIcon } from '@angular/material/icon'; import { MatTooltipModule } from '@angular/material/tooltip'; import { faker } from '@faker-js/faker'; +import { ErrorIconComponent, UserIconComponent as OdsUserIconComponent } from '@ods/system'; import { getDataTestClassOf } from 'libs/tech-shared/test/data-test'; import { createUserProfileResource } from 'libs/user-profile-shared/test/user-profile'; import { MockComponent, MockModule } from 'ng-mocks'; @@ -64,6 +61,8 @@ describe('UserIconComponent', () => { MatIcon, MockComponent(SpinnerComponent), MockModule(MatTooltipModule), + MockComponent(ErrorIconComponent), + MockComponent(OdsUserIconComponent), ], }); }); @@ -183,9 +182,7 @@ describe('UserIconComponent', () => { describe('on unexpected error', () => { it('should return empty string on non existing messageCode issue', () => { - component.userProfileStateResource = createErrorStateResource( - createApiErrorWithMessageCode(faker.random.word()), - ); + component.userProfileStateResource = createErrorStateResource(createApiErrorWithMessageCode(faker.word.sample())); const tooltip = component.getErrorTooltip(); diff --git a/alfa-client/libs/user-profile/src/lib/user-icon/user-icon.component.ts b/alfa-client/libs/user-profile/src/lib/user-icon/user-icon.component.ts index 2a5c2244d1530041467669e723103a3f8925df02..1ee555b5938fecb134728e2af33df7bd911f326d 100644 --- a/alfa-client/libs/user-profile/src/lib/user-icon/user-icon.component.ts +++ b/alfa-client/libs/user-profile/src/lib/user-icon/user-icon.component.ts @@ -21,30 +21,17 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { ApiError, MessageCode, StateResource, createEmptyStateResource, hasStateResourceError } from '@alfa-client/tech-shared'; +import { UserProfileResource, getUserName, getUserNameInitials, userProfileMessage } from '@alfa-client/user-profile-shared'; import { Component, Input, SimpleChanges } from '@angular/core'; -import { - ApiError, - createEmptyStateResource, - hasStateResourceError, - MessageCode, - StateResource, -} from '@alfa-client/tech-shared'; -import { - getUserName, - getUserNameInitials, - userProfileMessage, - UserProfileResource, -} from '@alfa-client/user-profile-shared'; import { isUndefined } from 'lodash-es'; @Component({ selector: 'alfa-user-icon', templateUrl: './user-icon.component.html', - styleUrls: ['./user-icon.component.scss'], }) export class UserIconComponent { - @Input() userProfileStateResource: StateResource<UserProfileResource> = - createEmptyStateResource<UserProfileResource>(); + @Input() userProfileStateResource: StateResource<UserProfileResource> = createEmptyStateResource<UserProfileResource>(); @Input() disableTooltip: boolean = false; readonly messageCode = MessageCode; diff --git a/alfa-client/libs/user-profile/src/lib/user-profile-in-vorgang-container/user-profile-in-vorgang/_user-profile-in-vorgang.theme.scss b/alfa-client/libs/user-profile/src/lib/user-profile-in-vorgang-container/user-profile-in-vorgang/_user-profile-in-vorgang.theme.scss index 1b0eb8d65a7a5e03744ebe3bbdfcd300f3a35d5b..b70dda727183b1b53b6c5496f590165e9b946a35 100644 --- a/alfa-client/libs/user-profile/src/lib/user-profile-in-vorgang-container/user-profile-in-vorgang/_user-profile-in-vorgang.theme.scss +++ b/alfa-client/libs/user-profile/src/lib/user-profile-in-vorgang-container/user-profile-in-vorgang/_user-profile-in-vorgang.theme.scss @@ -25,19 +25,19 @@ @use '@angular/material' as mat; @mixin user-profile-icon($theme) { - $color-config: mat.get-color-config($theme); + $color-config: mat.m2-get-color-config($theme); $primary: map.get($color-config, 'primary'); alfa-user-profile-in-vorgang-container { .user-profile-button { &:focus-within { .user-profile-icon { - box-shadow: 0 0 0 2px mat.get-color-from-palette($primary); + box-shadow: 0 0 0 2px mat.m2-get-color-from-palette($primary); } } .user-profile-icon { - box-shadow: 0 0 0 1px mat.get-color-from-palette($primary); + box-shadow: 0 0 0 1px mat.m2-get-color-from-palette($primary); } } } diff --git a/alfa-client/libs/user-profile/src/lib/user-profile.module.ts b/alfa-client/libs/user-profile/src/lib/user-profile.module.ts index fe2547f6551c42cbb2da5564357dddd5b6c56ae0..c6cdcd1a5af3d8b040e7e48cc333c62dfcfe3abd 100644 --- a/alfa-client/libs/user-profile/src/lib/user-profile.module.ts +++ b/alfa-client/libs/user-profile/src/lib/user-profile.module.ts @@ -21,12 +21,13 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { CommonModule } from '@angular/common'; -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; import { TechSharedModule } from '@alfa-client/tech-shared'; import { UiModule } from '@alfa-client/ui'; import { UserProfileSharedModule } from '@alfa-client/user-profile-shared'; +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { ErrorIconComponent, UserIconComponent as OdsUserIconComponent } from '@ods/system'; import { AssignUserProfileButtonContainerComponent } from './assign-user-profile-button-container/assign-user-profile-button-container.component'; import { LinkWithUserNameTooltipContainerComponent } from './link-with-user-name-tooltip-container/link-with-user-name-tooltip-container.component'; import { LinkWithUserNameTooltipComponent } from './link-with-user-name-tooltip-container/link-with-user-name-tooltip/link-with-user-name-tooltip.component'; @@ -48,7 +49,15 @@ import { UserProfileSearchComponent } from './user-profile-search-container/user import { UserProfileComponent } from './user-profile/user-profile.component'; @NgModule({ - imports: [CommonModule, TechSharedModule, UiModule, UserProfileSharedModule, RouterModule], + imports: [ + CommonModule, + TechSharedModule, + UiModule, + UserProfileSharedModule, + RouterModule, + OdsUserIconComponent, + ErrorIconComponent, + ], declarations: [ UserIconComponent, UserProfileInVorgangContainerComponent, diff --git a/alfa-client/libs/user-settings-shared/src/index.ts b/alfa-client/libs/user-settings-shared/src/index.ts index eaddff3023e818f059fdb1c33ee13ce0436f988f..413ed3e4414ba88ec6b7d3f44371b8fe0fbcf6ed 100644 --- a/alfa-client/libs/user-settings-shared/src/index.ts +++ b/alfa-client/libs/user-settings-shared/src/index.ts @@ -21,6 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +export * from '../test/user-settings'; export * from './lib/+state/user-settings.actions'; export * from './lib/+state/user-settings.facade'; export * from './lib/+state/user-settings.models'; @@ -30,3 +31,4 @@ export * from './lib/user-settings-shared.module'; export * from './lib/user-settings.linkrel'; export * from './lib/user-settings.model'; export * from './lib/user-settings.service'; +export * from './lib/user-settings.util'; diff --git a/alfa-client/libs/user-settings-shared/src/lib/+state/user-settings.effects.ts b/alfa-client/libs/user-settings-shared/src/lib/+state/user-settings.effects.ts index 604bdd307c52631ef40a60205e5eaf95606eddcc..9b157ffb0e14bc51a780d9da5e73f1140e072571 100644 --- a/alfa-client/libs/user-settings-shared/src/lib/+state/user-settings.effects.ts +++ b/alfa-client/libs/user-settings-shared/src/lib/+state/user-settings.effects.ts @@ -23,7 +23,8 @@ */ import { Injectable } from '@angular/core'; import { getApiErrorFromHttpErrorResponse } from '@alfa-client/tech-shared'; -import { Actions, concatLatestFrom, createEffect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; +import { concatLatestFrom } from '@ngrx/operators'; import { of } from 'rxjs'; import { catchError, map, switchMap } from 'rxjs/operators'; import { UserSettingsRepository } from '../user-settings.repository'; diff --git a/alfa-client/libs/user-settings-shared/src/lib/user-settings.model.ts b/alfa-client/libs/user-settings-shared/src/lib/user-settings.model.ts index c9cbd96900720d290a6d77f98f9194fee3a2c313..ff7e9475c62651cc97212b39ebea960eaebc0e96 100644 --- a/alfa-client/libs/user-settings-shared/src/lib/user-settings.model.ts +++ b/alfa-client/libs/user-settings-shared/src/lib/user-settings.model.ts @@ -23,13 +23,25 @@ */ import { Resource } from '@ngxp/rest'; -export enum NotificationsSendFor { - NONE = 'NONE', - ALL = 'ALL', +export enum UserNotificationsTypes { + NOTIFICATIONS_SEND_FOR = 'notificationsSendFor', + VORGANGE_CREATED = 'vorgangCreated', + VORGANG_ASSIGNED_TO_USER = 'vorgangAssignedToUser', + POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER = 'postfachNachrichtFromAntragsteller', + WIEDERVORLAGE_DUE_TODAY = 'wiedervorlageDueToday', } -export interface UserSettings { - notificationsSendFor: string; +export enum NotificationSendForTypes { + ALL = 'ALL', + NONE = 'NONE', } +export type UserSettings = Partial<{ + [UserNotificationsTypes.NOTIFICATIONS_SEND_FOR]: NotificationSendForTypes; + [UserNotificationsTypes.VORGANGE_CREATED]: boolean; + [UserNotificationsTypes.VORGANG_ASSIGNED_TO_USER]: boolean; + [UserNotificationsTypes.POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER]: boolean; + [UserNotificationsTypes.WIEDERVORLAGE_DUE_TODAY]: boolean; +}>; + export interface UserSettingsResource extends UserSettings, Resource {} diff --git a/alfa-client/libs/user-settings-shared/src/lib/user-settings.service.ts b/alfa-client/libs/user-settings-shared/src/lib/user-settings.service.ts index 57c852f96077aa864686a02b55e46b24184f727f..9ff5a5b444f825dc06cbb1ed1201c1f39d6f6d47 100644 --- a/alfa-client/libs/user-settings-shared/src/lib/user-settings.service.ts +++ b/alfa-client/libs/user-settings-shared/src/lib/user-settings.service.ts @@ -21,15 +21,15 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Injectable } from '@angular/core'; import { createEmptyStateResource, doIfLoadingRequired, StateResource, } from '@alfa-client/tech-shared'; import { UserProfileService } from '@alfa-client/user-profile-shared'; -import { combineLatest, Observable } from 'rxjs'; -import { map, startWith, tap } from 'rxjs/operators'; +import { Injectable } from '@angular/core'; +import { combineLatest, Observable, startWith, tap } from 'rxjs'; +import { map } from 'rxjs/operators'; import { UserSettingsFacade } from './+state/user-settings.facade'; import { UserSettings, UserSettingsResource } from './user-settings.model'; diff --git a/alfa-client/libs/user-settings-shared/src/lib/user-settings.util.spec.ts b/alfa-client/libs/user-settings-shared/src/lib/user-settings.util.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..af11512a6a81f217e1c4d7887b04d16059a78688 --- /dev/null +++ b/alfa-client/libs/user-settings-shared/src/lib/user-settings.util.spec.ts @@ -0,0 +1,15 @@ +import { UserSettings, UserSettingsResource } from '@alfa-client/user-settings-shared'; +import { toResource } from '../../../tech-shared/test/resource'; +import { createUserSettings } from '../../test/user-settings'; +import { mapUserSettingsResourceToUserSettings } from './user-settings.util'; + +describe('mapUserSettingsResourceToUserSettings', () => { + it('should remove resource attributes', () => { + const userSettings: UserSettings = createUserSettings(); + const userSettingsResource: UserSettingsResource = toResource(userSettings); + + const result: UserSettings = mapUserSettingsResourceToUserSettings(userSettingsResource); + + expect(result).toEqual(userSettings); + }); +}); diff --git a/alfa-client/libs/user-settings-shared/src/lib/user-settings.util.ts b/alfa-client/libs/user-settings-shared/src/lib/user-settings.util.ts new file mode 100644 index 0000000000000000000000000000000000000000..0e6a1b7556b55b221fef3601ce4c35d627160b35 --- /dev/null +++ b/alfa-client/libs/user-settings-shared/src/lib/user-settings.util.ts @@ -0,0 +1,8 @@ +import { UserSettings, UserSettingsResource } from '@alfa-client/user-settings-shared'; + +export function mapUserSettingsResourceToUserSettings( + resource: UserSettingsResource, +): UserSettings { + const { _links, _embedded, ...userSettings } = resource; + return <UserSettings>userSettings; +} diff --git a/alfa-client/libs/user-settings-shared/test/user-settings.ts b/alfa-client/libs/user-settings-shared/test/user-settings.ts index 5e787b1be075b6784b619a3abbe5eda8d1a4f91c..e0a8ac3c89531e67479b35f64a6a9129e731e4da 100644 --- a/alfa-client/libs/user-settings-shared/test/user-settings.ts +++ b/alfa-client/libs/user-settings-shared/test/user-settings.ts @@ -23,7 +23,8 @@ */ import { toResource } from 'libs/tech-shared/test/resource'; import { - NotificationsSendFor, + NotificationSendForTypes, + UserNotificationsTypes, UserSettings, UserSettingsResource, } from '../src/lib/user-settings.model'; @@ -32,8 +33,20 @@ export function createUserSettingsResource(linkRelations: string[] = []): UserSe return toResource(createUserSettings(), linkRelations); } -export function createUserSettings(): UserSettings { +export function createUserSettings(value: boolean = true): UserSettings { return { - notificationsSendFor: NotificationsSendFor.ALL, + [UserNotificationsTypes.VORGANGE_CREATED]: value, + [UserNotificationsTypes.VORGANG_ASSIGNED_TO_USER]: value, + [UserNotificationsTypes.POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER]: value, + [UserNotificationsTypes.WIEDERVORLAGE_DUE_TODAY]: value, + [UserNotificationsTypes.NOTIFICATIONS_SEND_FOR]: mapBooleanToNotificationSendFor(value), }; } + +export function mapBooleanToNotificationSendFor(value: boolean): NotificationSendForTypes { + return value ? NotificationSendForTypes.ALL : NotificationSendForTypes.NONE; +} + +export function mapNotificationSendForToBoolean(value: NotificationSendForTypes): boolean { + return value === NotificationSendForTypes.ALL; +} diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings-container.component.html b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings-container.component.html index 9d321332c8895df4b94c7d2b8cc199a5a0bbbfe2..c970ebd39aad35cca530c1ea2bf79d1930522b89 100644 --- a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings-container.component.html +++ b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings-container.component.html @@ -23,4 +23,4 @@ unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<alfa-user-settings [apiRoot]="apiRoot$ | async" class="mat-typography"></alfa-user-settings> +<alfa-user-settings [apiRoot]="apiRoot$ | async"></alfa-user-settings> diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-darkmode-container/user-settings-darkmode-container.component.html b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-darkmode-container/user-settings-darkmode-container.component.html similarity index 100% rename from alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-darkmode-container/user-settings-darkmode-container.component.html rename to alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-darkmode-container/user-settings-darkmode-container.component.html diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-darkmode-container/user-settings-darkmode-container.component.scss b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-darkmode-container/user-settings-darkmode-container.component.scss similarity index 100% rename from alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-darkmode-container/user-settings-darkmode-container.component.scss rename to alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-darkmode-container/user-settings-darkmode-container.component.scss diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-darkmode-container/user-settings-darkmode-container.component.spec.ts b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-darkmode-container/user-settings-darkmode-container.component.spec.ts similarity index 100% rename from alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-darkmode-container/user-settings-darkmode-container.component.spec.ts rename to alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-darkmode-container/user-settings-darkmode-container.component.spec.ts index 5ae103c6a3ca8a318ac3f45268d7c2d75585763a..636b5468a0f5b98d2fc404441a96f902685ebf88 100644 --- a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-darkmode-container/user-settings-darkmode-container.component.spec.ts +++ b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-darkmode-container/user-settings-darkmode-container.component.spec.ts @@ -21,9 +21,9 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { ComponentFixture, TestBed } from '@angular/core/testing'; import { AppService } from '@alfa-client/app-shared'; import { mock } from '@alfa-client/test-utils'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MockComponent } from 'ng-mocks'; import { BehaviorSubject } from 'rxjs'; import { UserSettingsDarkmodeContainerComponent } from './user-settings-darkmode-container.component'; diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-darkmode-container/user-settings-darkmode-container.component.ts b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-darkmode-container/user-settings-darkmode-container.component.ts similarity index 100% rename from alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-darkmode-container/user-settings-darkmode-container.component.ts rename to alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-darkmode-container/user-settings-darkmode-container.component.ts index 5039d964cba91f75633f185a45369f6286d25c20..c138988340f762f5ebbf35f777ae066d67618ca1 100644 --- a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-darkmode-container/user-settings-darkmode-container.component.ts +++ b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-darkmode-container/user-settings-darkmode-container.component.ts @@ -21,9 +21,9 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { AppService, localStorageDark } from '@alfa-client/app-shared'; import { DOCUMENT } from '@angular/common'; import { Component, Inject, OnInit, Renderer2 } from '@angular/core'; -import { AppService, localStorageDark } from '@alfa-client/app-shared'; import { Observable } from 'rxjs'; @Component({ diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-darkmode-container/user-settings-darkmode/user-settings-darkmode.component.html b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-darkmode-container/user-settings-darkmode/user-settings-darkmode.component.html similarity index 100% rename from alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-darkmode-container/user-settings-darkmode/user-settings-darkmode.component.html rename to alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-darkmode-container/user-settings-darkmode/user-settings-darkmode.component.html diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-darkmode-container/user-settings-darkmode/user-settings-darkmode.component.scss b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-darkmode-container/user-settings-darkmode/user-settings-darkmode.component.scss similarity index 100% rename from alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-darkmode-container/user-settings-darkmode/user-settings-darkmode.component.scss rename to alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-darkmode-container/user-settings-darkmode/user-settings-darkmode.component.scss diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-darkmode-container/user-settings-darkmode/user-settings-darkmode.component.spec.ts b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-darkmode-container/user-settings-darkmode/user-settings-darkmode.component.spec.ts similarity index 100% rename from alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-darkmode-container/user-settings-darkmode/user-settings-darkmode.component.spec.ts rename to alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-darkmode-container/user-settings-darkmode/user-settings-darkmode.component.spec.ts diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-darkmode-container/user-settings-darkmode/user-settings-darkmode.component.ts b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-darkmode-container/user-settings-darkmode/user-settings-darkmode.component.ts similarity index 100% rename from alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-darkmode-container/user-settings-darkmode/user-settings-darkmode.component.ts rename to alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-darkmode-container/user-settings-darkmode/user-settings-darkmode.component.ts diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-dropdown.component.html b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-dropdown.component.html new file mode 100644 index 0000000000000000000000000000000000000000..46b6f0f815b6cb0fdfe06eee789e6ad2a1d6d754 --- /dev/null +++ b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-dropdown.component.html @@ -0,0 +1,7 @@ +<div class="menu-container w-72 p-4" (click)="$event.stopPropagation()"> + <alfa-user-settings-darkmode-container class="mb-3 block" /> + <alfa-user-settings-email-benachrichtigung-container + *ngIf="apiRoot.resource | hasLink: apiRootLinkRel.CURRENT_USER" + data-test-id="email-benachrichtigung-toggle" + /> +</div> diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-dropdown.component.spec.ts b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-dropdown.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..6b61efad3b9289424500fcda873e676ccb12499a --- /dev/null +++ b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-dropdown.component.spec.ts @@ -0,0 +1,31 @@ +import { createEmptyStateResource, HasLinkPipe } from '@alfa-client/tech-shared'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { MockComponent } from 'ng-mocks'; +import { UserSettingsDarkmodeContainerComponent } from './user-settings-darkmode-container/user-settings-darkmode-container.component'; +import { UserSettingsDropdownComponent } from './user-settings-dropdown.component'; +import { UserSettingsEmailBenachrichtigungContainerComponent } from './user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component'; + +describe('UserSettingsDropdownComponent', () => { + let component: UserSettingsDropdownComponent; + let fixture: ComponentFixture<UserSettingsDropdownComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [UserSettingsDropdownComponent], + declarations: [ + MockComponent(UserSettingsDarkmodeContainerComponent), + MockComponent(UserSettingsEmailBenachrichtigungContainerComponent), + HasLinkPipe, + ], + }).compileComponents(); + + fixture = TestBed.createComponent(UserSettingsDropdownComponent); + component = fixture.componentInstance; + component.apiRoot = createEmptyStateResource(); + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-dropdown.component.ts b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-dropdown.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..04bb934d03fb86357ae83e7182145c47679648ad --- /dev/null +++ b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-dropdown.component.ts @@ -0,0 +1,12 @@ +import { ApiRootLinkRel, ApiRootResource } from '@alfa-client/api-root-shared'; +import { StateResource } from '@alfa-client/tech-shared'; +import { Component, Input } from '@angular/core'; + +@Component({ + selector: 'alfa-user-settings-dropdown', + templateUrl: './user-settings-dropdown.component.html', +}) +export class UserSettingsDropdownComponent { + @Input() apiRoot: StateResource<ApiRootResource>; + readonly apiRootLinkRel = ApiRootLinkRel; +} diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component.html b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component.html similarity index 95% rename from alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component.html rename to alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component.html index ca5108e414a5dc65071051bdcacf9eeb7505cb13..78d046c50c3cacb5be3061837e45da25b50d601f 100644 --- a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component.html +++ b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component.html @@ -25,6 +25,6 @@ --> <alfa-user-settings-email-benachrichtigung [userSettings]="userSettings$ | async" - (valueChanged)="changeNotificationsSendFor($event)" + (valueChanged)="changeUserSettings($event)" > </alfa-user-settings-email-benachrichtigung> diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component.spec.ts b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component.spec.ts similarity index 82% rename from alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component.spec.ts rename to alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component.spec.ts index 25b285ff3eb86bf18d04a549292eee9690b46b35..e2009c3eb44f7e2f83e687d23d8fa078a4b82ea1 100644 --- a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component.spec.ts +++ b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component.spec.ts @@ -21,9 +21,10 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { ComponentFixture, TestBed } from '@angular/core/testing'; import { mock } from '@alfa-client/test-utils'; -import { NotificationsSendFor, UserSettingsService } from '@alfa-client/user-settings-shared'; +import { UserSettingsFacade, UserSettingsService } from '@alfa-client/user-settings-shared'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { createUserSettings } from 'libs/user-settings-shared/test/user-settings'; import { MockComponent } from 'ng-mocks'; import { UserSettingsEmailBenachrichtigungContainerComponent } from './user-settings-email-benachrichtigung-container.component'; import { UserSettingsEmailBenachrichtigungComponent } from './user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component'; @@ -32,7 +33,10 @@ describe('UserSettingsEmailBenachrichtigungContainerComponent', () => { let component: UserSettingsEmailBenachrichtigungContainerComponent; let fixture: ComponentFixture<UserSettingsEmailBenachrichtigungContainerComponent>; + const userSettings = createUserSettings(); + const userSettingsService = { ...mock(UserSettingsService), setUserSettings: jest.fn() }; + const userSettingsFacade = mock(UserSettingsFacade); beforeEach(async () => { await TestBed.configureTestingModule({ @@ -45,6 +49,10 @@ describe('UserSettingsEmailBenachrichtigungContainerComponent', () => { provide: UserSettingsService, useValue: userSettingsService, }, + { + provide: UserSettingsFacade, + useValue: userSettingsFacade, + }, ], }).compileComponents(); @@ -65,21 +73,11 @@ describe('UserSettingsEmailBenachrichtigungContainerComponent', () => { }); }); - describe('change notifications send for', () => { - it('should call service with ALL', () => { - component.changeNotificationsSendFor(true); - - expect(userSettingsService.setUserSettings).toHaveBeenCalledWith({ - notificationsSendFor: NotificationsSendFor.ALL, - }); - }); - - it('should call service with NONE', () => { - component.changeNotificationsSendFor(false); + describe('changeUserSettings', () => { + it('should forward call to service setUserSettings', () => { + component.changeUserSettings(userSettings); - expect(userSettingsService.setUserSettings).toHaveBeenCalledWith({ - notificationsSendFor: NotificationsSendFor.NONE, - }); + expect(userSettingsService.setUserSettings).toHaveBeenCalledWith(userSettings); }); }); }); diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component.ts b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component.ts similarity index 72% rename from alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component.ts rename to alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component.ts index 6d0aae2e294f836c7bd4cb3aeb558215ac8e2085..e4f8188072ec8c7dc724696d5cf715a2a0adcd4f 100644 --- a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component.ts +++ b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component.ts @@ -21,20 +21,14 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Component } from '@angular/core'; import { StateResource } from '@alfa-client/tech-shared'; -import { - NotificationsSendFor, - UserSettings, - UserSettingsResource, - UserSettingsService, -} from '@alfa-client/user-settings-shared'; +import { UserSettings, UserSettingsResource, UserSettingsService } from '@alfa-client/user-settings-shared'; +import { Component } from '@angular/core'; import { Observable } from 'rxjs'; @Component({ selector: 'alfa-user-settings-email-benachrichtigung-container', templateUrl: './user-settings-email-benachrichtigung-container.component.html', - styleUrls: ['./user-settings-email-benachrichtigung-container.component.scss'], }) export class UserSettingsEmailBenachrichtigungContainerComponent { userSettings$: Observable<StateResource<UserSettingsResource>>; @@ -45,13 +39,7 @@ export class UserSettingsEmailBenachrichtigungContainerComponent { this.userSettings$ = this.userSettingsService.getUserSettings(); } - changeNotificationsSendFor(toggleValue: boolean): void { - this.userSettingsService.setUserSettings(this.createUserSettings(toggleValue)); - } - - private createUserSettings(toggleValue: boolean): UserSettings { - const notificationsSendFor: NotificationsSendFor = - toggleValue ? NotificationsSendFor.ALL : NotificationsSendFor.NONE; - return { notificationsSendFor }; + changeUserSettings(userSettings: UserSettings): void { + this.userSettingsService.setUserSettings(userSettings); } } diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component.html b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component.html new file mode 100644 index 0000000000000000000000000000000000000000..988e06dcbe077007f4d9e5839fce495040a744be --- /dev/null +++ b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component.html @@ -0,0 +1,66 @@ +<!-- + + 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. + +--> +<ng-container *ngIf="userSettings.resource | hasLink: userSettingsLinkRel.EDIT"> + <h2 class="mb-2 text-base font-bold text-text">E-Mail Benachrichtigungen</h2> + <ozgcloud-slide-toggle + [checked]=" + isChecked(UserNotifications.VORGANGE_CREATED) || + isChecked(UserNotifications.NOTIFICATIONS_SEND_FOR) + " + (valueChanged)="emitSettingsForVorgangCreated($event)" + data-test-id="email-benachrichtigung-neuer-Vorgang" + label="Neuer Vorgang im Alfa" + toolTip="E-Mail-Benachrichtigung bei Eingang eines Antrags" + > + </ozgcloud-slide-toggle> + <ozgcloud-slide-toggle + [checked]="isChecked(UserNotifications.POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER)" + (valueChanged)="emitSettings(UserNotifications.POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER, $event)" + data-test-id="email-benachrichtigung-neue-Nachricht-Antragsteller" + label="Neue Nachricht vom Antragsteller" + toolTip="E-Mail-Benachrichtigung bei neu eingegangener Nachricht des Antragstellers bei einem mir zugewiesenen Vorgang" + *ngIf="resourceHasKey(UserNotifications.POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER)" + > + </ozgcloud-slide-toggle> + <ozgcloud-slide-toggle + [checked]="isChecked(UserNotifications.VORGANG_ASSIGNED_TO_USER)" + (valueChanged)="emitSettings(UserNotifications.VORGANG_ASSIGNED_TO_USER, $event)" + data-test-id="email-benachrichtigung-neuer-Vorgang-Assigned" + label="Vorgang wurde mir zugewiesen" + toolTip="E-Mail-Benachrichtigung bei fälliger Wiedervorlage eines mir zugewiesenen Vorgangs" + *ngIf="resourceHasKey(UserNotifications.VORGANG_ASSIGNED_TO_USER)" + > + </ozgcloud-slide-toggle> + <ozgcloud-slide-toggle + [checked]="isChecked(UserNotifications.WIEDERVORLAGE_DUE_TODAY)" + (valueChanged)="emitSettings(UserNotifications.WIEDERVORLAGE_DUE_TODAY, $event)" + data-test-id="email-benachrichtigung-Faellige-Wiedervorlage" + label="Fällige Wiedervorlage" + toolTip=" E-Mail-Benachrichtigung bei Zuweisung eines Vorgangs an mich" + *ngIf="resourceHasKey(UserNotifications.WIEDERVORLAGE_DUE_TODAY)" + > + </ozgcloud-slide-toggle> +</ng-container> diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component.scss b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component.scss similarity index 100% rename from alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component.scss rename to alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component.scss diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component.spec.ts b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..c99bdf35fe1103ef96c66a6f92770ed0c8d35828 --- /dev/null +++ b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component.spec.ts @@ -0,0 +1,275 @@ +/* + * 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 { createStateResource, HasLinkPipe } from '@alfa-client/tech-shared'; +import { + existsAsHtmlElement, + Mock, + mock, + notExistsAsHtmlElement, + useFromMock, +} from '@alfa-client/test-utils'; +import { + NotificationSendForTypes, + UserNotificationsTypes, + UserSettingsLinkRel, +} from '@alfa-client/user-settings-shared'; +import { EventEmitter } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; +import { toResource } from 'libs/tech-shared/test/resource'; +import { SlideToggleComponent } from 'libs/ui/src/lib/ui/slide-toggle/slide-toggle.component'; +import { UserSettings } from 'libs/user-settings-shared/src/lib/user-settings.model'; +import { + createUserSettings, + createUserSettingsResource, +} from 'libs/user-settings-shared/test/user-settings'; +import { MockComponent } from 'ng-mocks'; +import { UserSettingsEmailBenachrichtigungComponent } from './user-settings-email-benachrichtigung.component'; + +describe('UserSettingsEmailBenachrichtigungComponent', () => { + let component: UserSettingsEmailBenachrichtigungComponent; + let fixture: ComponentFixture<UserSettingsEmailBenachrichtigungComponent>; + + const vorgangCreatedToggle: string = getDataTestIdOf('email-benachrichtigung-neuer-Vorgang'); + const postfachNachrichtFromAntragstellerToggle: string = getDataTestIdOf( + 'email-benachrichtigung-neue-Nachricht-Antragsteller', + ); + const vorgangAssignedToUserToggle: string = getDataTestIdOf( + 'email-benachrichtigung-neuer-Vorgang-Assigned', + ); + const wiedervorlageDueTodayToggle: string = getDataTestIdOf( + 'email-benachrichtigung-Faellige-Wiedervorlage', + ); + + const valueChangedEmitter: Mock<EventEmitter<UserSettings>> = { + ...mock(EventEmitter), + emit: jest.fn(), + }; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ + HasLinkPipe, + UserSettingsEmailBenachrichtigungComponent, + MockComponent(SlideToggleComponent), + ], + }).compileComponents(); + + fixture = TestBed.createComponent(UserSettingsEmailBenachrichtigungComponent); + component = fixture.componentInstance; + component.userSettings = createStateResource( + createUserSettingsResource([UserSettingsLinkRel.EDIT]), + ); + component.valueChanged = useFromMock(valueChangedEmitter); + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + describe('component', () => { + describe('isChecked', () => { + it('should return false if notificationType is not in resource', () => { + component.resourceHasKey = jest.fn().mockReturnValue(false); + + const result: boolean = component.isChecked(UserNotificationsTypes.VORGANGE_CREATED); + + expect(result).toEqual(false); + }); + + it('should return true if notificationType is true in resource', () => { + component.resourceHasKey = jest.fn().mockReturnValue(true); + component.userSettings.resource[UserNotificationsTypes.VORGANGE_CREATED] = true; + + const result: boolean = component.isChecked(UserNotificationsTypes.VORGANGE_CREATED); + + expect(result).toEqual(true); + }); + + it('should return false if notificationType is false in resource', () => { + component.resourceHasKey = jest.fn().mockReturnValue(true); + component.userSettings.resource[UserNotificationsTypes.VORGANGE_CREATED] = false; + + const result: boolean = component.isChecked(UserNotificationsTypes.VORGANGE_CREATED); + + expect(result).toEqual(false); + }); + + it('should call return true if notificationsSendFor is ALL', () => { + component.userSettings.resource[UserNotificationsTypes.NOTIFICATIONS_SEND_FOR] = + NotificationSendForTypes.ALL; + + const result: boolean = component.isChecked(UserNotificationsTypes.NOTIFICATIONS_SEND_FOR); + + expect(result).toEqual(true); + }); + + it('should call return false if notificationsSendFor is NONE', () => { + component.userSettings.resource[UserNotificationsTypes.NOTIFICATIONS_SEND_FOR] = + NotificationSendForTypes.NONE; + + const result: boolean = component.isChecked(UserNotificationsTypes.NOTIFICATIONS_SEND_FOR); + + expect(result).toEqual(false); + }); + }); + + describe('resourceHasKey', () => { + it('should return true if notificationType is in resource', () => { + component.userSettings.resource[UserNotificationsTypes.VORGANGE_CREATED] = true; + + const result: boolean = component.resourceHasKey(UserNotificationsTypes.VORGANGE_CREATED); + + expect(result).toEqual(true); + }); + + it('should return true if notificationType is in resource', () => { + delete component.userSettings.resource[UserNotificationsTypes.VORGANGE_CREATED]; + + const result: boolean = component.resourceHasKey(UserNotificationsTypes.VORGANGE_CREATED); + + expect(result).toEqual(false); + }); + }); + + describe('emitSettingsForVorgangCreated', () => { + it('should emit valueChanged with vorgangCreated and notificationsSendFor true if parameter is true', () => { + const settings = createUserSettings(false); + component.userSettings.resource = toResource(settings); + + component.emitSettingsForVorgangCreated(true); + + expect(valueChangedEmitter.emit).toBeCalledWith({ + ...settings, + [UserNotificationsTypes.VORGANGE_CREATED]: true, + [UserNotificationsTypes.NOTIFICATIONS_SEND_FOR]: NotificationSendForTypes.ALL, + }); + }); + + it('should emit valueChanged with vorgangCreated and notificationsSendFor false if parameter is false', () => { + const settings = createUserSettings(true); + component.userSettings.resource = toResource(settings); + + component.emitSettingsForVorgangCreated(false); + + expect(valueChangedEmitter.emit).toBeCalledWith({ + ...settings, + [UserNotificationsTypes.VORGANGE_CREATED]: false, + [UserNotificationsTypes.NOTIFICATIONS_SEND_FOR]: NotificationSendForTypes.NONE, + }); + }); + }); + + describe('emitSettings', () => { + it('should emit valueChanged with vorgangCreated and notificationsSendFor true if parameter is true', () => { + const settings = createUserSettings(false); + component.userSettings.resource = toResource(settings); + + component.emitSettings(UserNotificationsTypes.WIEDERVORLAGE_DUE_TODAY, true); + + expect(valueChangedEmitter.emit).toBeCalledWith({ + ...settings, + [UserNotificationsTypes.WIEDERVORLAGE_DUE_TODAY]: true, + }); + }); + + it('should emit valueChanged with vorgangCreated and notificationsSendFor false if parameter is false', () => { + const settings = createUserSettings(true); + component.userSettings.resource = toResource(settings); + + component.emitSettings(UserNotificationsTypes.WIEDERVORLAGE_DUE_TODAY, false); + + expect(valueChangedEmitter.emit).toBeCalledWith({ + ...settings, + [UserNotificationsTypes.WIEDERVORLAGE_DUE_TODAY]: false, + }); + }); + }); + }); + + describe('template', () => { + it('should not be empty if edit link in userSettings', () => { + existsAsHtmlElement(fixture, vorgangCreatedToggle); + }); + + it('should be empty if edit link not in userSettings', () => { + delete component.userSettings.resource._links[UserSettingsLinkRel.EDIT]; + + fixture.detectChanges(); + + existsAsHtmlElement(fixture, vorgangCreatedToggle); + }); + + describe('notification toggle', () => { + describe('mit Label "Neuer Vorgang im Alfa"', () => { + it('exists as HtmlElement', () => { + existsAsHtmlElement(fixture, vorgangCreatedToggle); + }); + }); + + describe('mit Label "Neue Nachricht vom Antragsteller"', () => { + it('exists as HtmlElement if corresponding key is in userSettings', () => { + existsAsHtmlElement(fixture, postfachNachrichtFromAntragstellerToggle); + }); + + it('not exists as HtmlElement if corresponding key is not in userSettings', () => { + delete component.userSettings.resource.postfachNachrichtFromAntragsteller; + + fixture.detectChanges(); + + notExistsAsHtmlElement(fixture, postfachNachrichtFromAntragstellerToggle); + }); + }); + + describe('mit Label "Vorgang wurde mir zugewiesen"', () => { + it('exists as HtmlElement if corresponding key is in userSettings', () => { + existsAsHtmlElement(fixture, vorgangAssignedToUserToggle); + }); + + it('not exists as HtmlElement if postfachNachrichtFromAntragsteller not in userSettings', () => { + delete component.userSettings.resource.vorgangAssignedToUser; + + fixture.detectChanges(); + + notExistsAsHtmlElement(fixture, vorgangAssignedToUserToggle); + }); + }); + + describe('mit Label "Fällige Wiedervorlage"', () => { + it('exists as HtmlElement if corresponding key is in userSettings', () => { + existsAsHtmlElement(fixture, wiedervorlageDueTodayToggle); + }); + + it('not exists as HtmlElement if corresponding key is not in userSettings', () => { + delete component.userSettings.resource.wiedervorlageDueToday; + + fixture.detectChanges(); + + notExistsAsHtmlElement(fixture, wiedervorlageDueTodayToggle); + }); + }); + }); + }); +}); diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component.ts b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component.ts similarity index 55% rename from alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component.ts rename to alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component.ts index 7770c34f1ef8f4cdf2003b6f51803ac914598a21..d84f9782c6cb557d797f8581e68c0d42a6439b63 100644 --- a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component.ts +++ b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-dropdown/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component.ts @@ -21,14 +21,17 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Component, EventEmitter, Input, Output } from '@angular/core'; import { createEmptyStateResource, StateResource } from '@alfa-client/tech-shared'; import { - NotificationsSendFor, + mapBooleanToNotificationSendFor, + mapNotificationSendForToBoolean, + mapUserSettingsResourceToUserSettings, + UserNotificationsTypes, UserSettings, UserSettingsLinkRel, UserSettingsResource, } from '@alfa-client/user-settings-shared'; +import { Component, EventEmitter, Input, Output } from '@angular/core'; @Component({ selector: 'alfa-user-settings-email-benachrichtigung', @@ -39,11 +42,39 @@ export class UserSettingsEmailBenachrichtigungComponent { @Input() userSettings: StateResource<UserSettingsResource> = createEmptyStateResource<UserSettingsResource>(); - @Output() valueChanged: EventEmitter<boolean> = new EventEmitter(); + @Output() valueChanged: EventEmitter<UserSettings> = new EventEmitter(); + readonly UserNotifications = UserNotificationsTypes; readonly userSettingsLinkRel = UserSettingsLinkRel; - public isChecked(userSettings: UserSettings): boolean { - return userSettings.notificationsSendFor === NotificationsSendFor.ALL; + public isChecked(notificationType: UserNotificationsTypes): boolean { + if (!this.resourceHasKey(notificationType)) { + return false; + } + + if (notificationType === UserNotificationsTypes.NOTIFICATIONS_SEND_FOR) { + return mapNotificationSendForToBoolean(this.userSettings.resource[notificationType]); + } + + return this.userSettings.resource[notificationType]; + } + + public resourceHasKey(notificationType: UserNotificationsTypes): boolean { + return this.userSettings.resource[notificationType] !== undefined; + } + + public emitSettingsForVorgangCreated(value: boolean): void { + this.valueChanged.emit({ + ...mapUserSettingsResourceToUserSettings(this.userSettings.resource), + [UserNotificationsTypes.VORGANGE_CREATED]: value, + [UserNotificationsTypes.NOTIFICATIONS_SEND_FOR]: mapBooleanToNotificationSendFor(value), + }); + } + + public emitSettings(type: UserNotificationsTypes, value: boolean): void { + this.valueChanged.emit({ + ...mapUserSettingsResourceToUserSettings(this.userSettings.resource), + [type]: value, + }); } } diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component.html b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component.html deleted file mode 100644 index 2ba838cdb5bf7ce62c19a46dc40064719c2ede8c..0000000000000000000000000000000000000000 --- a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component.html +++ /dev/null @@ -1,36 +0,0 @@ -<!-- - - 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. - ---> -<ng-container *ngIf="userSettings.resource"> - <ozgcloud-slide-toggle - *ngIf="userSettings.resource | hasLink: userSettingsLinkRel.EDIT" - data-test-id="email-benachrichtigung" - label="Benachrichtigung per E-Mail" - toolTip="Benachrichtigung per E-Mail bei Eingang eines Antrags" - [checked]="isChecked(userSettings.resource)" - (valueChanged)="valueChanged.emit($event)" - > - </ozgcloud-slide-toggle> -</ng-container> diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component.spec.ts b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component.spec.ts deleted file mode 100644 index fd32e05adb6c76b0efbb232c0e0206447f164340..0000000000000000000000000000000000000000 --- a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component.spec.ts +++ /dev/null @@ -1,137 +0,0 @@ -/* - * 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 { EventEmitter } from '@angular/core'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { - createEmptyStateResource, - createStateResource, - HasLinkPipe, -} from '@alfa-client/tech-shared'; -import { - dispatchEventFromFixture, - getElementFromFixture, - Mock, - mock, - useFromMock, -} from '@alfa-client/test-utils'; -import { UserSettingsLinkRel } from '@alfa-client/user-settings-shared'; -import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; -import { SlideToggleComponent } from 'libs/ui/src/lib/ui/slide-toggle/slide-toggle.component'; -import { - NotificationsSendFor, - UserSettings, -} from 'libs/user-settings-shared/src/lib/user-settings.model'; -import { - createUserSettings, - createUserSettingsResource, -} from 'libs/user-settings-shared/test/user-settings'; -import { MockComponent } from 'ng-mocks'; -import { UserSettingsEmailBenachrichtigungComponent } from './user-settings-email-benachrichtigung.component'; - -describe('UserSettingsEmailBenachrichtigungComponent', () => { - let component: UserSettingsEmailBenachrichtigungComponent; - let fixture: ComponentFixture<UserSettingsEmailBenachrichtigungComponent>; - - const notificationSensForToggle: string = getDataTestIdOf('email-benachrichtigung'); - - const valueChangedEmitter: Mock<EventEmitter<boolean>> = { - ...mock(EventEmitter), - emit: jest.fn(), - }; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ - HasLinkPipe, - UserSettingsEmailBenachrichtigungComponent, - MockComponent(SlideToggleComponent), - ], - }).compileComponents(); - - fixture = TestBed.createComponent(UserSettingsEmailBenachrichtigungComponent); - component = fixture.componentInstance; - component.userSettings = createEmptyStateResource(); - component.valueChanged = useFromMock(valueChangedEmitter); - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); - - describe('toggle', () => { - it('should be active if notificationsSendFor is ALL', () => { - const userSettings: UserSettings = { - ...createUserSettings(), - notificationsSendFor: NotificationsSendFor.ALL, - }; - - const result: boolean = component.isChecked(userSettings); - - expect(result).toBeTruthy(); - }); - - it('should be not active if notificationsSendFor is NONE', () => { - const userSettings: UserSettings = { - ...createUserSettings(), - notificationsSendFor: NotificationsSendFor.NONE, - }; - - const result: boolean = component.isChecked(userSettings); - - expect(result).toBeFalsy(); - }); - - it('should emit value if toggled', () => { - component.userSettings = createStateResource( - createUserSettingsResource([UserSettingsLinkRel.EDIT]), - ); - fixture.detectChanges(); - - dispatchEventFromFixture(fixture, notificationSensForToggle, 'valueChanged'); - - expect(component.valueChanged.emit).toHaveBeenCalled(); - }); - - it('should hide if edit link is missing', () => { - component.userSettings = createStateResource(createUserSettingsResource()); - fixture.detectChanges(); - - const element = getElementFromFixture(fixture, notificationSensForToggle); - - expect(element).not.toBeInTheDocument(); - }); - - it('should show if edit link exist', () => { - component.userSettings = createStateResource( - createUserSettingsResource([UserSettingsLinkRel.EDIT]), - ); - fixture.detectChanges(); - - const element = getElementFromFixture(fixture, notificationSensForToggle); - - expect(element).toBeInTheDocument(); - }); - }); -}); diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-menu-button/user-settings-menu-button.component.html b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-menu-button/user-settings-menu-button.component.html deleted file mode 100644 index b13bac6befba485ab93860d409d3f1b79492ebec..0000000000000000000000000000000000000000 --- a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-menu-button/user-settings-menu-button.component.html +++ /dev/null @@ -1,31 +0,0 @@ -<!-- - - 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. - ---> -<ozgcloud-icon-button-with-spinner - icon="settings" - toolTip="Einstellungen" - data-test-id="menu-button" - [matMenuTriggerFor]="matMenuTriggerFor" -></ozgcloud-icon-button-with-spinner> diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-menu-button/user-settings-menu-button.component.spec.ts b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-menu-button/user-settings-menu-button.component.spec.ts deleted file mode 100644 index f8b7705dc59130dfb436934aed1b3a225b409845..0000000000000000000000000000000000000000 --- a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-menu-button/user-settings-menu-button.component.spec.ts +++ /dev/null @@ -1,49 +0,0 @@ -/* - * 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 { IconButtonWithSpinnerComponent } from '@alfa-client/ui'; -import { MockComponent } from 'ng-mocks'; -import { UserSettingsMenuButtonComponent } from './user-settings-menu-button.component'; - -describe('UserSettingsMenuButtonComponent', () => { - let component: UserSettingsMenuButtonComponent; - let fixture: ComponentFixture<UserSettingsMenuButtonComponent>; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ - UserSettingsMenuButtonComponent, - MockComponent(IconButtonWithSpinnerComponent), - ], - }).compileComponents(); - - fixture = TestBed.createComponent(UserSettingsMenuButtonComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings.component.html b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings.component.html index 23880a22fb1b6ebb371a9923d4631b2ae87a4e0c..47dd429e66112c65294868ea062488f4ff074cb6 100644 --- a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings.component.html +++ b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings.component.html @@ -23,18 +23,10 @@ unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<alfa-user-settings-menu-button - [matMenuTriggerFor]="settingsMenu.matMenu" - data-test-id="menu-button" -></alfa-user-settings-menu-button> - -<!-- TODO Das Menu in eine eigene Componente auslagern um die Technik zu kapseln --> -<ozgcloud-menu #settingsMenu> - <div class="menu-container" (click)="$event.stopPropagation()"> - <alfa-user-settings-email-benachrichtigung-container - *ngIf="apiRoot.resource | hasLink: apiRootLinkRel.CURRENT_USER" - data-test-id="email-benachrichtigung-toggle" - ></alfa-user-settings-email-benachrichtigung-container> - <alfa-user-settings-darkmode-container></alfa-user-settings-darkmode-container> - </div> -</ozgcloud-menu> +<ods-dropdown-menu + buttonClass="p-2 rounded-full focus:outline-none focus:bg-zinc-200 hover:bg-zinc-100" + buttonTestId="user-settings-button" +> + <ods-settings-icon button-content /> + <alfa-user-settings-dropdown [apiRoot]="apiRoot" /> +</ods-dropdown-menu> diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings.component.spec.ts b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings.component.spec.ts index 532ef326b84d75b6f720d29c825442567847ece7..917711ef1ddf31e04fea2f1aab9ed4ba7f718f38 100644 --- a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings.component.spec.ts +++ b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings.component.spec.ts @@ -21,41 +21,29 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { HasLinkPipe, createEmptyStateResource } from '@alfa-client/tech-shared'; +import { UiModule } from '@alfa-client/ui'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { MatButtonModule } from '@angular/material/button'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { ApiRootLinkRel } from '@alfa-client/api-root-shared'; -import { - HasLinkPipe, - createEmptyStateResource, - createStateResource, -} from '@alfa-client/tech-shared'; -import { getElementFromDomRoot, getElementFromFixture } from '@alfa-client/test-utils'; -import { UiModule } from '@alfa-client/ui'; -import { createApiRootResource } from 'libs/api-root-shared/test/api-root'; -import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; +import { DropdownMenuComponent } from '@ods/system'; +import { SettingsIconComponent } from 'libs/design-system/src/lib/icons/settings-icon/settings-icon.component'; import { MockComponent } from 'ng-mocks'; -import { UserSettingsDarkmodeContainerComponent } from './user-settings-darkmode-container/user-settings-darkmode-container.component'; -import { UserSettingsEmailBenachrichtigungContainerComponent } from './user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component'; -import { UserSettingsMenuButtonComponent } from './user-settings-menu-button/user-settings-menu-button.component'; +import { UserSettingsDropdownComponent } from './user-settings-dropdown/user-settings-dropdown.component'; import { UserSettingsComponent } from './user-settings.component'; describe('UserSettingsComponent', () => { let component: UserSettingsComponent; let fixture: ComponentFixture<UserSettingsComponent>; - const menuButton: string = getDataTestIdOf('menu-button'); - const emailBenachrichtigung: string = getDataTestIdOf('email-benachrichtigung-toggle'); - beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, MatButtonModule, UiModule], + imports: [NoopAnimationsModule, UiModule], declarations: [ HasLinkPipe, UserSettingsComponent, - MockComponent(UserSettingsMenuButtonComponent), - MockComponent(UserSettingsEmailBenachrichtigungContainerComponent), - MockComponent(UserSettingsDarkmodeContainerComponent), + MockComponent(SettingsIconComponent), + MockComponent(UserSettingsDropdownComponent), + MockComponent(DropdownMenuComponent), ], }).compileComponents(); @@ -68,25 +56,4 @@ describe('UserSettingsComponent', () => { it('should create', () => { expect(component).toBeTruthy(); }); - - describe('Toggle for "email benachrichtigung"', () => { - it('should show if link exists', () => { - component.apiRoot = createStateResource(createApiRootResource([ApiRootLinkRel.CURRENT_USER])); - fixture.detectChanges(); - - getElementFromFixture(fixture, menuButton).click(); - const element = getElementFromDomRoot(fixture, emailBenachrichtigung); - - expect(element).toBeInTheDocument(); - }); - - it('should hide if link not exists', () => { - component.apiRoot = createStateResource(createApiRootResource()); - - getElementFromFixture(fixture, menuButton).click(); - const element = getElementFromDomRoot(fixture, emailBenachrichtigung); - - expect(element).not.toBeInTheDocument(); - }); - }); }); diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings.component.ts b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings.component.ts index 4ab02e278fe7338668f91f93a4c5d7ccf2babe8f..a64e39e691766868088384e11467a83e644e78e5 100644 --- a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings.component.ts +++ b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings.component.ts @@ -21,9 +21,9 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Component, Input } from '@angular/core'; -import { ApiRootLinkRel, ApiRootResource } from '@alfa-client/api-root-shared'; +import { ApiRootResource } from '@alfa-client/api-root-shared'; import { StateResource } from '@alfa-client/tech-shared'; +import { Component, Input } from '@angular/core'; @Component({ selector: 'alfa-user-settings', @@ -32,6 +32,4 @@ import { StateResource } from '@alfa-client/tech-shared'; }) export class UserSettingsComponent { @Input() apiRoot: StateResource<ApiRootResource>; - - readonly apiRootLinkRel = ApiRootLinkRel; } diff --git a/alfa-client/libs/user-settings/src/lib/user-settings.module.ts b/alfa-client/libs/user-settings/src/lib/user-settings.module.ts index ad98409aa31cae49637c31ef41cc4726ba9a39dc..9036b0a346400d296a1fa1480589dbf99d63fdb4 100644 --- a/alfa-client/libs/user-settings/src/lib/user-settings.module.ts +++ b/alfa-client/libs/user-settings/src/lib/user-settings.module.ts @@ -21,20 +21,29 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { CommonModule } from '@angular/common'; -import { NgModule } from '@angular/core'; import { UiModule } from '@alfa-client/ui'; import { UserSettingsSharedModule } from '@alfa-client/user-settings-shared'; +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { CloseIconComponent, DropdownMenuComponent } from '@ods/system'; +import { SettingsIconComponent } from '../../../design-system/src/lib/icons/settings-icon/settings-icon.component'; import { UserSettingsContainerComponent } from './user-settings-container/user-settings-container.component'; -import { UserSettingsDarkmodeContainerComponent } from './user-settings-container/user-settings/user-settings-darkmode-container/user-settings-darkmode-container.component'; -import { UserSettingsDarkmodeComponent } from './user-settings-container/user-settings/user-settings-darkmode-container/user-settings-darkmode/user-settings-darkmode.component'; -import { UserSettingsEmailBenachrichtigungContainerComponent } from './user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component'; -import { UserSettingsEmailBenachrichtigungComponent } from './user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component'; -import { UserSettingsMenuButtonComponent } from './user-settings-container/user-settings/user-settings-menu-button/user-settings-menu-button.component'; +import { UserSettingsDarkmodeContainerComponent } from './user-settings-container/user-settings/user-settings-dropdown/user-settings-darkmode-container/user-settings-darkmode-container.component'; +import { UserSettingsDarkmodeComponent } from './user-settings-container/user-settings/user-settings-dropdown/user-settings-darkmode-container/user-settings-darkmode/user-settings-darkmode.component'; +import { UserSettingsDropdownComponent } from './user-settings-container/user-settings/user-settings-dropdown/user-settings-dropdown.component'; +import { UserSettingsEmailBenachrichtigungContainerComponent } from './user-settings-container/user-settings/user-settings-dropdown/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component'; +import { UserSettingsEmailBenachrichtigungComponent } from './user-settings-container/user-settings/user-settings-dropdown/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component'; import { UserSettingsComponent } from './user-settings-container/user-settings/user-settings.component'; @NgModule({ - imports: [CommonModule, UiModule, UserSettingsSharedModule], + imports: [ + CommonModule, + UiModule, + UserSettingsSharedModule, + DropdownMenuComponent, + CloseIconComponent, + SettingsIconComponent, + ], declarations: [ UserSettingsContainerComponent, UserSettingsEmailBenachrichtigungComponent, @@ -42,8 +51,13 @@ import { UserSettingsComponent } from './user-settings-container/user-settings/u UserSettingsComponent, UserSettingsDarkmodeContainerComponent, UserSettingsEmailBenachrichtigungContainerComponent, - UserSettingsMenuButtonComponent, + UserSettingsDropdownComponent, + ], + exports: [ + UserSettingsContainerComponent, + UserSettingsEmailBenachrichtigungComponent, + UserSettingsDarkmodeContainerComponent, + UserSettingsEmailBenachrichtigungContainerComponent, ], - exports: [UserSettingsContainerComponent, UserSettingsEmailBenachrichtigungComponent], }) export class UserSettingsModule {} diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-area.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-area.component.html index 2d16e8047196cf952d24fea9f905b058d7a3e9d9..d1d6dc6a5e8ee2eddfe33f8eac630c030ee15cb7 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-area.component.html +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-area.component.html @@ -36,9 +36,7 @@ ></alfa-vorgang-detail-header> <div class="section one-column"> - <alfa-vorgang-detail-formular-daten - [vorgangWithEingang]="vorgangResource" - ></alfa-vorgang-detail-formular-daten> + <alfa-vorgang-detail-formular-daten [vorgangWithEingang]="vorgangResource"></alfa-vorgang-detail-formular-daten> <div *ngIf="vorgangResource | hasLink: vorgangWithEingangLinkRel.BESCHEIDE"> <ozgcloud-expansion-panel headline="Bescheid" data-test-id="bescheid-expansion-panel"> @@ -47,30 +45,20 @@ </ozgcloud-expansion-panel> </div> - <alfa-vorgang-detail-formular-buttons - [vorgangWithEingang]="vorgangResource" - ></alfa-vorgang-detail-formular-buttons> + <alfa-vorgang-detail-formular-buttons [vorgangWithEingang]="vorgangResource"></alfa-vorgang-detail-formular-buttons> </div> - <div - class="section one-column" - *ngIf="vorgangResource | hasLink: vorgangWithEingangLinkRel.COLLABORATIONS" - > - <ozgcloud-expansion-panel - headline="Zusammenarbeit" - data-test-id="collaboration-expansion-panel" - > + <div class="section one-column" *ngIf="vorgangResource | hasLink: vorgangWithEingangLinkRel.COLLABORATIONS"> + <ozgcloud-expansion-panel headline="Zusammenarbeit" data-test-id="collaboration-expansion-panel"> <alfa-collaboration-in-vorgang-container - data-test-id="collaboration-in-voragng-container" + [vorgang]="vorgangResource" + data-test-id="collaboration-in-vorgang-container" ></alfa-collaboration-in-vorgang-container> </ozgcloud-expansion-panel> </div> <div class="two-column"> - <div - class="section" - *ngIf="vorgangResource | hasLink: vorgangWithEingangLinkRel.FORWARDING" - > + <div class="section" *ngIf="vorgangResource | hasLink: vorgangWithEingangLinkRel.FORWARDING"> <alfa-vorgang-forwarding-container [vorgang]="vorgangResource" data-test-id="forwarding-container-in-vorgang" diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-area.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-area.component.spec.ts index 7786b45a3e33dc073681a9cb53887a78d3a9587e..b63d9fabfe54a184580c2da4734bece6e408f69a 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-area.component.spec.ts +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-area.component.spec.ts @@ -25,22 +25,10 @@ import { CollaborationInVorgangContainerComponent } from '@alfa-client/collabora import { VorgangForwardingContainerComponent } from '@alfa-client/forwarding'; import { KommentarListInVorgangContainerComponent } from '@alfa-client/kommentar'; import { PostfachMailListContainerComponent } from '@alfa-client/postfach'; -import { - HasLinkPipe, - ToEmbeddedResourcesPipe, - createEmptyStateResource, - createStateResource, -} from '@alfa-client/tech-shared'; -import { existsAsHtmlElement, notExistsAsHtmlElement } from '@alfa-client/test-utils'; -import { - ExpansionPanelComponent, - OzgcloudStrokedButtonWithSpinnerComponent, -} from '@alfa-client/ui'; -import { - VorgangHeaderLinkRel, - VorgangWithEingangLinkRel, - VorgangWithEingangResource, -} from '@alfa-client/vorgang-shared'; +import { HasLinkPipe, ToEmbeddedResourcesPipe, createEmptyStateResource, createStateResource } from '@alfa-client/tech-shared'; +import { existsAsHtmlElement, getMockComponent, notExistsAsHtmlElement } from '@alfa-client/test-utils'; +import { ExpansionPanelComponent, OzgcloudStrokedButtonWithSpinnerComponent } from '@alfa-client/ui'; +import { VorgangHeaderLinkRel, VorgangWithEingangLinkRel, VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; import { WiedervorlageListInVorgangContainerComponent } from '@alfa-client/wiedervorlage'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MatDialogModule } from '@angular/material/dialog'; @@ -59,12 +47,10 @@ describe('VorgangDetailAreaComponent', () => { let component: VorgangDetailAreaComponent; let fixture: ComponentFixture<VorgangDetailAreaComponent>; - const collaborationContainer: string = getDataTestIdOf('collaboration-in-voragng-container'); + const collaborationContainer: string = getDataTestIdOf('collaboration-in-vorgang-container'); const wiedervorlagenContainer: string = getDataTestIdOf('wiedervorlagen-container-in-vorgang'); const kommentarContainer: string = getDataTestIdOf('kommentar-container-in-vorgang'); - const postfachNachrichtenContainer: string = getDataTestIdOf( - 'postfach-nachrichten-container-in-vorgang', - ); + const postfachNachrichtenContainer: string = getDataTestIdOf('postfach-nachrichten-container-in-vorgang'); const forwardingContainer: string = getDataTestIdOf('forwarding-container-in-vorgang'); const bescheidContainer: string = getDataTestIdOf('bescheid-container-in-vorgang'); @@ -105,11 +91,13 @@ describe('VorgangDetailAreaComponent', () => { expect(component).toBeTruthy(); }); - describe('Collaboration', () => { + describe('collaboration', () => { + const vorgangWithCollaborationsLink: VorgangWithEingangResource = createVorgangWithEingangResource([ + VorgangWithEingangLinkRel.COLLABORATIONS, + ]); + it('should be visibile if link is present', () => { - component.vorgangStateResource = createStateResource( - createVorgangWithEingangResource([VorgangWithEingangLinkRel.COLLABORATIONS]), - ); + component.vorgangStateResource = createStateResource(vorgangWithCollaborationsLink); fixture.detectChanges(); @@ -123,6 +111,18 @@ describe('VorgangDetailAreaComponent', () => { notExistsAsHtmlElement(fixture, collaborationContainer); }); + + it('component should be called with vorgang', () => { + component.vorgangStateResource = createStateResource(vorgangWithCollaborationsLink); + + fixture.detectChanges(); + + const comp: CollaborationInVorgangContainerComponent = getMockComponent<CollaborationInVorgangContainerComponent>( + fixture, + CollaborationInVorgangContainerComponent, + ); + expect(comp.vorgang).toEqual(vorgangWithCollaborationsLink); + }); }); describe('wiedervorlagen', () => { @@ -149,9 +149,7 @@ describe('VorgangDetailAreaComponent', () => { describe('kommentare', () => { it('should be visible', () => { - component.vorgangStateResource = createStateResource( - createVorgangWithEingangResource([VorgangHeaderLinkRel.KOMMENTARE]), - ); + component.vorgangStateResource = createStateResource(createVorgangWithEingangResource([VorgangHeaderLinkRel.KOMMENTARE])); fixture.detectChanges(); const element = fixture.nativeElement.querySelector(kommentarContainer); diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-formular-daten/vorgang-detail-dateien-container/vorgang-detail-dateien-container.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-formular-daten/vorgang-detail-dateien-container/vorgang-detail-dateien-container.component.spec.ts index 141729a2b4ec449a4746a6b97968e44bbf4f8499..35defdc2598780868be52660cf97a1d564ad6aad 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-formular-daten/vorgang-detail-dateien-container/vorgang-detail-dateien-container.component.spec.ts +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-formular-daten/vorgang-detail-dateien-container/vorgang-detail-dateien-container.component.spec.ts @@ -8,7 +8,7 @@ import { VorgangWithEingangResource, } from '@alfa-client/vorgang-shared'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { getUrl } from '@ngxp/rest'; import { createBinaryFileListResource } from 'libs/binary-file-shared/test/binary-file'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/bescheiden.formservice.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/bescheiden.formservice.spec.ts index 5c631ffeb6e6c4007028f95655df19047482b1b9..0506911a384eccb691e190f9d984939fa0b45eb9 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/bescheiden.formservice.spec.ts +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/bescheiden.formservice.spec.ts @@ -20,7 +20,7 @@ import { registerLocaleData } from '@angular/common'; import localeDe from '@angular/common/locales/de'; import { fakeAsync, tick } from '@angular/core/testing'; import { UntypedFormBuilder } from '@angular/forms'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { Resource, ResourceUri } from '@ngxp/rest'; import { cold } from 'jest-marbles'; import { diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component.spec.ts index 892c0f51c55deb828359fa2df54a45701f137583..d7b1c3dbe14b464eff99e7c76c1c4ae8a25ac74f 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component.spec.ts +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component.spec.ts @@ -10,7 +10,7 @@ import { registerLocaleData } from '@angular/common'; import localeDe from '@angular/common/locales/de'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ReactiveFormsModule, UntypedFormBuilder } from '@angular/forms'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { TextareaEditorComponent, TextEditorComponent } from '@ods/component'; import { Mock, mock, useFromMock } from 'libs/test-utils/src/lib/mocking'; import { OzgcloudSvgIconComponent } from 'libs/ui/src/lib/ui/ozgcloud-svgicon/ozgcloud-svgicon.component'; @@ -71,7 +71,7 @@ describe('VorgangDetailBescheidenResultNachrichtComponent', () => { describe('render', () => { it('should render Nachrichtenempfänger', () => { - const empfaenger: string = `${faker.name.firstName()} ${faker.name.lastName()}`; + const empfaenger: string = `${faker.person.firstName()} ${faker.person.lastName()}`; bescheidService.getEmpfaenger.mockReturnValue(of(empfaenger)); component.ngOnInit(); @@ -94,7 +94,7 @@ describe('VorgangDetailBescheidenResultNachrichtComponent', () => { describe('ngOnInit', () => { it('should set Nachrichtenempfänger', () => { - const empfaenger: string = `${faker.name.firstName()} ${faker.name.lastName()}`; + const empfaenger: string = `${faker.person.firstName()} ${faker.person.lastName()}`; bescheidService.getEmpfaenger.mockReturnValue(of(empfaenger)); component.ngOnInit(); diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokument-hochladen/vorgang-detail-bescheiden-dokument-hochladen.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokument-hochladen/vorgang-detail-bescheiden-dokument-hochladen.component.spec.ts index a5f979a198836ded1a4598c1eb3d5dfe4696b4f0..feff4137c26ad17e46244303a9a13f35d6a55b50 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokument-hochladen/vorgang-detail-bescheiden-dokument-hochladen.component.spec.ts +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokument-hochladen/vorgang-detail-bescheiden-dokument-hochladen.component.spec.ts @@ -4,7 +4,7 @@ import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ReactiveFormsModule, UntypedFormBuilder } from '@angular/forms'; import { MatIcon } from '@angular/material/icon'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { ResourceUri } from '@ngxp/rest'; import { SingleFileUploadEditorComponent } from '@ods/component'; import { SpinnerIconComponent } from '@ods/system'; @@ -72,7 +72,7 @@ describe('VorgangDetailBescheidenDokumentHochladenComponent', () => { describe('handle document uri changes', () => { it('should update bescheid document file in form service', () => { - const documentUri: ResourceUri = faker.name.firstName(); + const documentUri: ResourceUri = faker.person.firstName(); formService.updateBescheidDocumentFile = jest.fn(); component.handleDocumentUriChanges(documentUri); diff --git a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/_vorgang-search-container.theme.scss b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/_vorgang-search-container.theme.scss index f50729efdd4e5759424fba235265e25b10b0a0d5..7dbc25440d28708a1fd07572a6624db2eb287bae 100644 --- a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/_vorgang-search-container.theme.scss +++ b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/_vorgang-search-container.theme.scss @@ -52,12 +52,12 @@ body.dark alfa-vorgang-search-container { } @mixin search-container($theme) { - $color-config: mat.get-color-config($theme); + $color-config: mat.m2-get-color-config($theme); $primary: map.get($color-config, 'primary'); alfa-vorgang-search-container { .search-icon { - color: mat.get-color-from-palette($primary); + color: mat.m2-get-color-from-palette($primary); } } } diff --git a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search.formservice.spec.ts b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search.formservice.spec.ts index e9d054d5197c95f9912ce6b5a787df923694d446..9e639e1a9c66bf31e06c51de51d176fffeb94321 100644 --- a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search.formservice.spec.ts +++ b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search.formservice.spec.ts @@ -184,7 +184,7 @@ describe('VorgangSearchFormService', () => { describe('navigateToVorgangListOnSearch', () => { it('should call navigateToVorgangList when at search page', () => { - const params: Params = { search: faker.random.word() }; + const params: Params = { search: faker.word.sample() }; formService.navigateToVorgangListOnSearch(params); @@ -237,7 +237,7 @@ describe('VorgangSearchFormService', () => { const vorgang: VorgangResource = createVorgangResource([ VorgangHeaderLinkRel.VORGANG_WITH_EINGANG, ]); - const searchString: string = faker.name.firstName(); + const searchString: string = faker.person.firstName(); it('should clear searchString', () => { formService.submitByPreviewList(vorgang, searchString); diff --git a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-status-dot/vorgang-status-dot.component.scss b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-status-dot/vorgang-status-dot.component.scss index 50d5c095bdc3a8eacad7d6d8879e681afe481981..484c0729311c4f5ec6c3feb5217538e0a2d0318e 100644 --- a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-status-dot/vorgang-status-dot.component.scss +++ b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-status-dot/vorgang-status-dot.component.scss @@ -27,14 +27,14 @@ .dot { border-radius: 50%; - background-color: mat.get-color-from-palette($primaryPalette); + background-color: mat.m2-get-color-from-palette($primaryPalette); margin: 0 0 0 0; flex-shrink: 0; &.angenommen, &.in_bearbeitung, &.weiterleiten { - background-color: mat.get-color-from-palette($accentPalette, darker); + background-color: mat.m2-get-color-from-palette($accentPalette, darker); } &.verworfen { diff --git a/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.effects.spec.ts b/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.effects.spec.ts index 1dd8d8cca1a93bdf31b319e22724246209d6a166..e1aa26ff50bd314fb8f6cda0dad183ae846288f5 100644 --- a/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.effects.spec.ts +++ b/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.effects.spec.ts @@ -39,7 +39,6 @@ import { mock } from '@alfa-client/test-utils'; import { SnackBarService } from '@alfa-client/ui'; import { provideMockActions } from '@ngrx/effects/testing'; import { Action } from '@ngrx/store'; -import { TypedAction } from '@ngrx/store/src/models'; import { MockStore, provideMockStore } from '@ngrx/store/testing'; import { ResourceUri } from '@ngxp/rest'; import { cold, hot } from 'jest-marbles'; @@ -65,7 +64,7 @@ import { VorgangEffects } from './vorgang.effects'; import { VorgangFacade } from './vorgang.facade'; import { VorgangRepository } from './vorgang.repository'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import * as BinaryFileActions from '../../../../binary-file-shared/src/lib/+state/binary-file.actions'; import * as VorgangActions from './vorgang.actions'; @@ -339,7 +338,7 @@ describe('VorgangEffects', () => { additionalFailureAction, }; - const action: TypedAction<string> = VorgangActions.loadVorgangWithEingang({ resourceUri }); + const action: Action<string> = VorgangActions.loadVorgangWithEingang({ resourceUri }); describe('on success', () => { beforeEach(() => { @@ -356,7 +355,7 @@ describe('VorgangEffects', () => { }); it('should handle additional action', () => { - const action: TypedAction<string> = VorgangActions.loadVorgangWithEingang({ + const action: Action<string> = VorgangActions.loadVorgangWithEingang({ resourceUri, additionalActions, }); @@ -390,7 +389,7 @@ describe('VorgangEffects', () => { }); it('should handle additional action', () => { - const action: TypedAction<string> = VorgangActions.loadVorgangWithEingang({ + const action: Action<string> = VorgangActions.loadVorgangWithEingang({ resourceUri, additionalActions, }); @@ -607,7 +606,7 @@ describe('VorgangEffects', () => { describe('exportVorgang', () => { const blob: Blob = new Blob(); - const fileName: string = faker.random.alphaNumeric(); + const fileName: string = faker.string.alphanumeric(); const blobWithFileName: BlobWithFileName = { blob, fileName }; const action = VorgangActions.exportVorgang({ vorgangWithEingang }); diff --git a/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.effects.ts b/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.effects.ts index 9c6741b545e6aebf8a12fbbfe73a39be7b74b381..dfd1e3868cd87220b0f1cf96a19709d3230052f6 100644 --- a/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.effects.ts +++ b/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.effects.ts @@ -42,9 +42,9 @@ import { isServiceUnavailable, } from '@alfa-client/tech-shared'; import { SnackBarService } from '@alfa-client/ui'; -import { Actions, concatLatestFrom, createEffect, ofType } from '@ngrx/effects'; -import { Store } from '@ngrx/store'; -import { TypedAction } from '@ngrx/store/src/models'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; +import { concatLatestFrom } from '@ngrx/operators'; +import { Store, Action } from '@ngrx/store'; import { hasLink } from '@ngxp/rest'; import { Observable, of } from 'rxjs'; import { catchError, filter, map, mergeMap, switchMap } from 'rxjs/operators'; @@ -196,7 +196,7 @@ export class VorgangEffects { private handleSuccessActions( vorgangWithEingang: VorgangWithEingangResource, additionalActions: AdditionalActions, - ): TypedAction<string>[] { + ): Action<string>[] { if (isNotUndefined(additionalActions?.additionalSuccessAction)) { return [ VorgangActions.loadVorgangWithEingangSuccess({ vorgangWithEingang }), @@ -209,7 +209,7 @@ export class VorgangEffects { private handleFailureActions( error: HttpErrorResponse, additionalActions: AdditionalActions, - ): Observable<TypedAction<string>> { + ): Observable<Action<string>> { if (isNotUndefined(additionalActions?.additionalFailureAction)) { return of( VorgangActions.loadVorgangWithEingangFailure({ diff --git a/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.facade.spec.ts b/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.facade.spec.ts index 4868dc3fca2f4dff90e929c8a1f62f76f6c20318..5c781683fd1576f4d1ae704644734d03fd5d54b7 100644 --- a/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.facade.spec.ts +++ b/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.facade.spec.ts @@ -50,7 +50,7 @@ import { } from '../vorgang.model'; import { VorgangFacade } from './vorgang.facade'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import * as CommandActions from '../../../../command-shared/src/lib/+state/command.actions'; import * as VorgangActions from './vorgang.actions'; diff --git a/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.reducer.spec.ts b/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.reducer.spec.ts index 7d06a41cfbf42c036923dc1fb4970fc42c76247a..8ff408ff0d9400bd3aa533e573a5c17c596a2c80 100644 --- a/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.reducer.spec.ts +++ b/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.reducer.spec.ts @@ -42,7 +42,6 @@ import { import { HttpErrorResponse } from '@angular/common/http'; import { UrlSegment } from '@angular/router'; import { Action } from '@ngrx/store'; -import { TypedAction } from '@ngrx/store/src/models'; import { Resource, ResourceUri } from '@ngxp/rest'; import { createApiRootResource } from 'libs/api-root-shared/test/api-root'; import { createBinaryFileListResource } from 'libs/binary-file-shared/test/binary-file'; @@ -81,7 +80,7 @@ import { import { VorgangListAction } from './vorgang.actions'; import { VorgangState, initialState, reducer } from './vorgang.reducer'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import * as Storage from '@alfa-client/app-shared'; import * as CommandActions from '@alfa-client/command-shared'; @@ -130,7 +129,7 @@ describe('Vorgang Reducer', () => { ...createVorgangListResourceWithResource(vorgaenge, [VorgangListLinkRel.NEXT]), statistic, }; - const action: VorgangListAction & TypedAction<string> = VorgangActions.loadVorgangListSuccess( + const action: VorgangListAction & Action<string> = VorgangActions.loadVorgangListSuccess( { vorgangList }, ); @@ -165,7 +164,7 @@ describe('Vorgang Reducer', () => { describe('on "loadVorgangListFailure" action', () => { const apiError: ApiError = createApiError(); - const action: ApiErrorAction & TypedAction<string> = VorgangActions.loadVorgangListFailure({ + const action: ApiErrorAction & Action<string> = VorgangActions.loadVorgangListFailure({ apiError, }); @@ -197,7 +196,7 @@ describe('Vorgang Reducer', () => { describe('on "loadNextPageSuccess" action', () => { const statistic: VorgangStatistic = createVorgangStatistic(); const vorgangList: VorgangListResource = { ...createVorgangListResource(), statistic }; - const action: VorgangListAction & TypedAction<string> = VorgangActions.loadNextPageSuccess({ + const action: VorgangListAction & Action<string> = VorgangActions.loadNextPageSuccess({ vorgangList, }); @@ -252,7 +251,7 @@ describe('Vorgang Reducer', () => { ...createVorgangListResourceWithResource(vorgaenge), statistic, }; - const action: VorgangListAction & TypedAction<string> = + const action: VorgangListAction & Action<string> = VorgangActions.searchVorgaengeBySuccess({ vorgangList }); it('should set vorgangList', () => { diff --git a/alfa-client/libs/vorgang-shared/src/lib/vorgang-navigation.util.spec.ts b/alfa-client/libs/vorgang-shared/src/lib/vorgang-navigation.util.spec.ts index d2bce3b55be83c1af73b2a0ff41ac449d799a48b..03950bd73d9a05f85c194cba4450618f99059017 100644 --- a/alfa-client/libs/vorgang-shared/src/lib/vorgang-navigation.util.spec.ts +++ b/alfa-client/libs/vorgang-shared/src/lib/vorgang-navigation.util.spec.ts @@ -22,7 +22,7 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { UrlSegment } from '@angular/router'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { ApiRootLinkRel } from '@alfa-client/api-root-shared'; import { RouteData } from '@alfa-client/navigation-shared'; import { EMPTY_STRING } from '@alfa-client/tech-shared'; diff --git a/alfa-client/libs/vorgang-shared/src/lib/vorgang.linkrel.ts b/alfa-client/libs/vorgang-shared/src/lib/vorgang.linkrel.ts index a06768b2ed6d34e4c9a6e3fd4f7352a6de6edc89..5b3f83373d1bbdec9d416953be59cb1aba474098 100644 --- a/alfa-client/libs/vorgang-shared/src/lib/vorgang.linkrel.ts +++ b/alfa-client/libs/vorgang-shared/src/lib/vorgang.linkrel.ts @@ -66,6 +66,7 @@ export enum VorgangWithEingangLinkRel { DOWNLOAD_ATTACHMENTS = 'downloadAttachments', SEARCH_ORGANISATIONS_EINHEIT = 'searchOrganisationsEinheit', + SEARCH_EXTERNE_FACHSTELLE = 'searchFachstelle', COLLABORATIONS = 'collaborations', } diff --git a/alfa-client/libs/vorgang-shared/src/lib/vorgang.model.ts b/alfa-client/libs/vorgang-shared/src/lib/vorgang.model.ts index c77d29847aa5a2ab67291639b3d98ae496998b49..e0c03d3b6eb6b5d7a365ed2c3973c588b776f25d 100644 --- a/alfa-client/libs/vorgang-shared/src/lib/vorgang.model.ts +++ b/alfa-client/libs/vorgang-shared/src/lib/vorgang.model.ts @@ -23,7 +23,7 @@ */ import { ListResource, StateResource } from '@alfa-client/tech-shared'; import { HttpErrorResponse } from '@angular/common/http'; -import { TypedAction } from '@ngrx/store/src/models'; +import { Action } from '@ngrx/store'; import { Resource, ResourceUri } from '@ngxp/rest'; import { CommandOrder, @@ -181,6 +181,6 @@ export interface StatusCommandMap { } export interface AdditionalActions { - additionalSuccessAction: () => TypedAction<string>; - additionalFailureAction: (error: HttpErrorResponse) => TypedAction<string>; + additionalSuccessAction: () => Action<string>; + additionalFailureAction: (error: HttpErrorResponse) => Action<string>; } diff --git a/alfa-client/libs/vorgang-shared/src/lib/vorgang.service.spec.ts b/alfa-client/libs/vorgang-shared/src/lib/vorgang.service.spec.ts index e5dc6400bea26bdd9ddd108b4c51fa0d02adabc3..c0f48da7afde3c76de7c5886b93f2b48740dbca9 100644 --- a/alfa-client/libs/vorgang-shared/src/lib/vorgang.service.spec.ts +++ b/alfa-client/libs/vorgang-shared/src/lib/vorgang.service.spec.ts @@ -52,7 +52,7 @@ import { VorgangWithEingangLinkRel } from './vorgang.linkrel'; import { AdditionalActions, VorgangWithEingangResource } from './vorgang.model'; import { VorgangService } from './vorgang.service'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import * as VorgangNavigationUtil from './vorgang-navigation.util'; diff --git a/alfa-client/libs/vorgang-shared/src/lib/vorgang.util.spec.ts b/alfa-client/libs/vorgang-shared/src/lib/vorgang.util.spec.ts index 776eb27881031345d454185f5566d9d8036e61a8..a06a0c06735295d8cc666a568c32dd433b0750cb 100644 --- a/alfa-client/libs/vorgang-shared/src/lib/vorgang.util.spec.ts +++ b/alfa-client/libs/vorgang-shared/src/lib/vorgang.util.spec.ts @@ -42,7 +42,7 @@ import { getVorgaengeFromList, } from './vorgang.util'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; describe('VorgangUtil', () => { describe('create ZurueckholenCommand', () => { diff --git a/alfa-client/libs/vorgang-shared/test/vorgang.ts b/alfa-client/libs/vorgang-shared/test/vorgang.ts index c49eac582e5cb3bcdc5cec0be439a412bac8102c..85b8e9a7786801acb3580ea42322b235416c7201 100644 --- a/alfa-client/libs/vorgang-shared/test/vorgang.ts +++ b/alfa-client/libs/vorgang-shared/test/vorgang.ts @@ -67,7 +67,7 @@ export function createVorgangWithEingang(): VorgangWithEingang { export function createEingang(): Eingang { return { - id: faker.datatype.uuid(), + id: faker.string.uuid(), antragsteller: createAntragsteller(), zustaendigeStelle: createZustaendigeStelle(), header: createHeader(), @@ -78,24 +78,24 @@ export function createEingang(): Eingang { } function getRandomNumber(min: number, max: number): number { - return faker.datatype.number({ min: min, max: max }); + return faker.number.int({ min: min, max: max }); } export function createAntragsteller(): Antragsteller { return { anrede: faker.lorem.word(), geburtsdatum: faker.date.past().toDateString(), - geburtsname: faker.name.findName(), - geburtsort: faker.address.city(), - nachname: faker.name.lastName(), - vorname: faker.name.firstName(), - firmaName: faker.company.companyName(), + geburtsname: faker.person.fullName(), + geburtsort: faker.location.city(), + nachname: faker.person.lastName(), + vorname: faker.person.firstName(), + firmaName: faker.company.name(), email: faker.internet.email(), - telefon: `+ ${faker.datatype.number(10)}`, - strasse: faker.address.streetName(), - hausnummer: `${faker.datatype.number(2)}a`, - plz: faker.address.countryCode(), - ort: faker.address.city(), + telefon: `+ ${faker.number.int(10)}`, + strasse: faker.location.street(), + hausnummer: `${faker.number.int(2)}a`, + plz: faker.location.countryCode(), + ort: faker.location.city(), otherData: new Map(), }; } @@ -146,21 +146,21 @@ export function createVorgangListResourceWithResource( export function createVorgangStatistic(): VorgangStatistic { return { byStatus: createByStatus(), - wiedervorlagen: faker.datatype.number(), + wiedervorlagen: faker.number.int(), existsWiedervorlageOverdue: false, - ungeleseneNachrichten: faker.datatype.number(), + ungeleseneNachrichten: faker.number.int(), }; } function createByStatus(): ByStatus { return { - neu: faker.datatype.number(), - angenommen: faker.datatype.number(), - inBearbeitung: faker.datatype.number(), - beschieden: faker.datatype.number(), - abgeschlossen: faker.datatype.number(), - verworfen: faker.datatype.number(), - zuLoeschen: faker.datatype.number(), + neu: faker.number.int(), + angenommen: faker.number.int(), + inBearbeitung: faker.number.int(), + beschieden: faker.number.int(), + abgeschlossen: faker.number.int(), + verworfen: faker.number.int(), + zuLoeschen: faker.number.int(), }; } diff --git a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/_vorgang-filter-item.theme.scss b/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/_vorgang-filter-item.theme.scss deleted file mode 100644 index 63637945bf7b4a4a09251c073daeba6ae7ba00bd..0000000000000000000000000000000000000000 --- a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/_vorgang-filter-item.theme.scss +++ /dev/null @@ -1,47 +0,0 @@ -/** - * 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. - */ - -alfa-vorgang-filter-menu { - .filter-item-content { - display: grid; - grid-auto-flow: column; - align-content: center; - justify-content: space-between; - gap: 0.5rem; - height: 2rem; - font-size: 0.875rem; - - mat-icon { - display: none; - } - } - - .mat-button-toggle-checked .filter-item-content { - font-weight: bold; - - mat-icon { - display: block; - } - } -} diff --git a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu-item/vorgang-filter-menu-item.component.html b/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu-item/vorgang-filter-menu-item.component.html deleted file mode 100644 index 8fd35cdadf9dc2da14a7b26d83425ddc55755fee..0000000000000000000000000000000000000000 --- a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu-item/vorgang-filter-menu-item.component.html +++ /dev/null @@ -1,4 +0,0 @@ -<div class="filter-item-content"> - <mat-icon [inline]="true">check</mat-icon> - <span>{{ label }}</span> -</div> diff --git a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu-item/vorgang-filter-menu-item.component.scss b/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu-item/vorgang-filter-menu-item.component.scss deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu-item/vorgang-filter-menu-item.component.spec.ts b/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu-item/vorgang-filter-menu-item.component.spec.ts deleted file mode 100644 index b5d3651aa36aa74601ffcf545b4f9234f58beb7d..0000000000000000000000000000000000000000 --- a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu-item/vorgang-filter-menu-item.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { MatIcon } from '@angular/material/icon'; -import { VorgangFilterMenuItemComponent } from './vorgang-filter-menu-item.component'; - -describe('VorgangFilterMenuItemComponent', () => { - let component: VorgangFilterMenuItemComponent; - let fixture: ComponentFixture<VorgangFilterMenuItemComponent>; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [VorgangFilterMenuItemComponent], - imports: [MatIcon], - }).compileComponents(); - - fixture = TestBed.createComponent(VorgangFilterMenuItemComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu-item/vorgang-filter-menu-item.component.ts b/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu-item/vorgang-filter-menu-item.component.ts deleted file mode 100644 index cd21bb2c5adec22a73f94dd9c552ca3ce9a8fff1..0000000000000000000000000000000000000000 --- a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu-item/vorgang-filter-menu-item.component.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Component, Input } from '@angular/core'; - -@Component({ - selector: 'alfa-vorgang-filter-menu-item', - templateUrl: './vorgang-filter-menu-item.component.html', - styleUrls: ['./vorgang-filter-menu-item.component.scss'], -}) -export class VorgangFilterMenuItemComponent { - @Input() label: string; -} diff --git a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu.component.html b/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu.component.html index 07b48c607fdd9f85ea6b988f67a9e4f69863dd9f..0627897b068d048875319a42d23ce97a8ceb8145 100644 --- a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu.component.html +++ b/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu.component.html @@ -23,41 +23,25 @@ unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<form - [formGroup]="formService.form" - *ngIf="multipleFilterAvailable" - data-test-id="vorgang-filter-form" -> - <mat-button-toggle-group [formControlName]="filterName" multiple="false"> - <mat-button-toggle +<form [formGroup]="formService.form" *ngIf="multipleFilterAvailable" data-test-id="vorgang-filter-form"> + <ods-button-toggle-group [formControlName]="filterName"> + <ods-button-toggle *ngIf="apiRootStateResource.resource | hasLink: apiRootLinkRel.MEINE_VORGAENGE" - data-test-id="meine-vorgaenge-filter-toggle-button" [value]="formService.FILTER_MEINE_VALUE" - > - <alfa-vorgang-filter-menu-item - label="Meine Vorgänge" - data-test-id="meine-vorgaenge-filter-item" - ></alfa-vorgang-filter-menu-item> - </mat-button-toggle> - <mat-button-toggle + data-test-id="meine-vorgaenge-filter-toggle-button" + label="Meine Vorgänge" + ></ods-button-toggle> + <ods-button-toggle *ngIf="apiRootStateResource.resource | hasLink: apiRootLinkRel.ALLE_VORGAENGE" - data-test-id="alle-filter-toggle-button" [value]="formService.FILTER_ALLE_VALUE" - > - <alfa-vorgang-filter-menu-item - label="Alle" - data-test-id="alle-filter-item" - ></alfa-vorgang-filter-menu-item> - </mat-button-toggle> - <mat-button-toggle + data-test-id="alle-filter-toggle-button" + label="Alle" + ></ods-button-toggle> + <ods-button-toggle *ngIf="apiRootStateResource.resource | hasLink: apiRootLinkRel.UNASSIGNED" - data-test-id="nicht-zugewiesen-filter-toggle-button" [value]="formService.FILTER_UNASSIGNED_VALUE" - > - <alfa-vorgang-filter-menu-item - label="Nicht zugewiesen" - data-test-id="unassigned-filter-toggle-button" - ></alfa-vorgang-filter-menu-item> - </mat-button-toggle> - </mat-button-toggle-group> + data-test-id="unassigned-filter-toggle-button" + label="Nicht zugewiesen" + ></ods-button-toggle> + </ods-button-toggle-group> </form> diff --git a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu.component.spec.ts b/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu.component.spec.ts index fe56f2abaa2fb063ba72fb9ea4053b1a3d15df56..687cbfdb3fe8feb593131ac02fb00594ad0bd372 100644 --- a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu.component.spec.ts +++ b/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu.component.spec.ts @@ -21,25 +21,19 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { FormBuilder, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatButtonToggle, MatButtonToggleGroup } from '@angular/material/button-toggle'; -import { MatRipple } from '@angular/material/core'; import { ApiRootLinkRel } from '@alfa-client/api-root-shared'; import { NavigationService } from '@alfa-client/navigation-shared'; -import { - createEmptyStateResource, - createStateResource, - HasLinkPipe, -} from '@alfa-client/tech-shared'; +import { createEmptyStateResource, createStateResource, HasLinkPipe } from '@alfa-client/tech-shared'; import { existsAsHtmlElement, mock, notExistsAsHtmlElement } from '@alfa-client/test-utils'; import { VorgangListService } from '@alfa-client/vorgang-shared'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { FormBuilder, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { MatRipple } from '@angular/material/core'; +import { ButtonToggleGroupComponent } from '@ods/component'; +import { ButtonToggleComponent } from '@ods/system'; import { createApiRootResource } from 'libs/api-root-shared/test/api-root'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; -import { ButtonToggleGroupComponent } from 'libs/ui/src/lib/ui/button-toggle-group/button-toggle-group.component'; -import { ButtonToggleComponent } from 'libs/ui/src/lib/ui/button-toggle/button-toggle.component'; import { MockComponent } from 'ng-mocks'; -import { VorgangFilterMenuItemComponent } from './vorgang-filter-menu-item/vorgang-filter-menu-item.component'; import { VorgangFilterMenuComponent } from './vorgang-filter-menu.component'; import { VorgangFilterFormService } from './vorgang-filter-menu.formservice'; @@ -48,9 +42,7 @@ describe('VorgangFilterMenuComponent', () => { let fixture: ComponentFixture<VorgangFilterMenuComponent>; const alleFilterToggleButton: string = getDataTestIdOf('alle-filter-toggle-button'); - const meineVorgaengeFilterToggleButton: string = getDataTestIdOf( - 'meine-vorgaenge-filter-toggle-button', - ); + const meineVorgaengeFilterToggleButton: string = getDataTestIdOf('meine-vorgaenge-filter-toggle-button'); const unassignFilterToggleButton: string = getDataTestIdOf('unassigned-filter-toggle-button'); const form: FormGroup = new FormBuilder().group({ @@ -66,13 +58,9 @@ describe('VorgangFilterMenuComponent', () => { declarations: [ VorgangFilterMenuComponent, HasLinkPipe, - ButtonToggleGroupComponent, - MatButtonToggleGroup, - MatButtonToggle, MatRipple, - MockComponent(ButtonToggleGroupComponent), MockComponent(ButtonToggleComponent), - MockComponent(VorgangFilterMenuItemComponent), + MockComponent(ButtonToggleGroupComponent), ], imports: [ReactiveFormsModule], providers: [ @@ -110,9 +98,7 @@ describe('VorgangFilterMenuComponent', () => { }); it('should show on existing links', () => { - component.apiRootStateResource = createStateResource( - createApiRootResource([ApiRootLinkRel.ALLE_VORGAENGE]), - ); + component.apiRootStateResource = createStateResource(createApiRootResource([ApiRootLinkRel.ALLE_VORGAENGE])); fixture.detectChanges(); @@ -134,9 +120,7 @@ describe('VorgangFilterMenuComponent', () => { }); it('should show on existing link', () => { - component.apiRootStateResource = createStateResource( - createApiRootResource([ApiRootLinkRel.MEINE_VORGAENGE]), - ); + component.apiRootStateResource = createStateResource(createApiRootResource([ApiRootLinkRel.MEINE_VORGAENGE])); fixture.detectChanges(); @@ -158,9 +142,7 @@ describe('VorgangFilterMenuComponent', () => { }); it('should show on existing link', () => { - component.apiRootStateResource = createStateResource( - createApiRootResource([ApiRootLinkRel.UNASSIGNED]), - ); + component.apiRootStateResource = createStateResource(createApiRootResource([ApiRootLinkRel.UNASSIGNED])); fixture.detectChanges(); @@ -188,9 +170,7 @@ describe('VorgangFilterMenuComponent', () => { }); it('should return false if only one link', () => { - component.apiRootStateResource = createStateResource( - createApiRootResource([ApiRootLinkRel.ALLE_VORGAENGE]), - ); + component.apiRootStateResource = createStateResource(createApiRootResource([ApiRootLinkRel.ALLE_VORGAENGE])); const result: boolean = component.areMultipleFilterAvailable(); diff --git a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu.component.ts b/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu.component.ts index e76fea332e106b600d005059584e041ebc5e909e..c381482ae243df25ef20de7c6fad875f2df274e3 100644 --- a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu.component.ts +++ b/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu.component.ts @@ -21,16 +21,15 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Component, Input } from '@angular/core'; import { ApiRootLinkRel, ApiRootResource } from '@alfa-client/api-root-shared'; import { StateResource } from '@alfa-client/tech-shared'; +import { Component, Input } from '@angular/core'; import { hasLink } from '@ngxp/rest'; import { VorgangFilterFormService } from './vorgang-filter-menu.formservice'; @Component({ selector: 'alfa-vorgang-filter-menu', templateUrl: './vorgang-filter-menu.component.html', - styleUrls: ['./vorgang-filter-menu.component.scss'], }) export class VorgangFilterMenuComponent { @Input() public set apiRootStateResource(value: StateResource<ApiRootResource>) { diff --git a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-views-menu/_vorgang-views-menu.theme.scss b/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-views-menu/_vorgang-views-menu.theme.scss index fa06503c51843cb197bd28c9fcd25e53316bc005..ab64103f2df0c44f4a4d96d0a689bedd19585418 100644 --- a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-views-menu/_vorgang-views-menu.theme.scss +++ b/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-views-menu/_vorgang-views-menu.theme.scss @@ -2,13 +2,13 @@ @use '@angular/material' as mat; @import 'variables'; -$color-config: mat.get-color-config($alfaTheme); +$color-config: mat.m2-get-color-config($alfaTheme); $primary: map.get($color-config, 'primary'); alfa-vorgang-search-view-item { mat-icon { - color: mat.get-color-from-palette($primary); + color: mat.m2-get-color-from-palette($primary); } } diff --git a/alfa-client/libs/vorgang/src/lib/vorgang.module.ts b/alfa-client/libs/vorgang/src/lib/vorgang.module.ts index 0fea0e60e669a1a394c27127d2573e64a21f8f3c..1192e892db37d2bb339e08c837d5d99b4077e6bf 100644 --- a/alfa-client/libs/vorgang/src/lib/vorgang.module.ts +++ b/alfa-client/libs/vorgang/src/lib/vorgang.module.ts @@ -33,6 +33,8 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { MatButtonToggleModule } from '@angular/material/button-toggle'; import { RouterModule, Routes } from '@angular/router'; +import { ButtonToggleGroupComponent } from '@ods/component'; +import { ButtonToggleComponent } from '@ods/system'; import { vorgangFilterViewGuard } from './vorgang-filter-view.guard'; import { VorgangListContainerComponent } from './vorgang-list-container/vorgang-list-container.component'; import { EmptyListComponent } from './vorgang-list-container/vorgang-list/empty-list/empty-list.component'; @@ -43,7 +45,6 @@ import { VorgangNextFristButtonComponent } from './vorgang-list-container/vorgan import { VorgangListComponent } from './vorgang-list-container/vorgang-list/vorgang-list.component'; import { VorgangListPageContainerComponent } from './vorgang-list-page-container/vorgang-list-page-container.component'; import { VorgangFilterMenuContainerComponent } from './vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu-container.component'; -import { VorgangFilterMenuItemComponent } from './vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu-item/vorgang-filter-menu-item.component'; import { VorgangFilterMenuComponent } from './vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu.component'; import { VorgangListPageComponent } from './vorgang-list-page-container/vorgang-list-page/vorgang-list-page.component'; import { VorgangViewsMenuContainerComponent } from './vorgang-list-page-container/vorgang-list-page/vorgang-views-menu-container/vorgang-views-menu-container.component'; @@ -177,6 +178,8 @@ const routes: Routes = [ UserProfileModule, MatButtonToggleModule, HintModule, + ButtonToggleComponent, + ButtonToggleGroupComponent, ], declarations: [ VorgangListComponent, @@ -192,7 +195,6 @@ const routes: Routes = [ VorgangSearchViewItemComponent, VorgangSearchViewItemContainerComponent, VorgangListSearchContainerComponent, - VorgangFilterMenuItemComponent, VorgangCreatedAtComponent, VorgangViewItemContainerComponent, VorgangViewItemComponent, diff --git a/alfa-client/libs/wiedervorlage-shared/test/wiedervorlage.ts b/alfa-client/libs/wiedervorlage-shared/test/wiedervorlage.ts index 3a922dce162c6dbec5c02fc3567d17615b5f803d..d89e24a38f30364df79108fbe3fe0dcc27aa9646 100644 --- a/alfa-client/libs/wiedervorlage-shared/test/wiedervorlage.ts +++ b/alfa-client/libs/wiedervorlage-shared/test/wiedervorlage.ts @@ -42,7 +42,7 @@ export function createWiedervorlage(): Wiedervorlage { done: faker.datatype.boolean(), betreff: faker.lorem.words(3), beschreibung: faker.lorem.words(12), - frist: faker.date.between(past, future), + frist: faker.date.between({ from: past, to: future }), createdAt: faker.date.past(), attachments: faker.internet.url(), }; diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-breadcrumb-container/wiedervorlage-breadcrumb/_wiedervorlage-breadcrumb.theme.scss b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-breadcrumb-container/wiedervorlage-breadcrumb/_wiedervorlage-breadcrumb.theme.scss index 501b551416037b18082a9a8131e199ff0cd0c71f..c510c93c464a97c1e7be0080edfc4d54df7e5d27 100644 --- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-breadcrumb-container/wiedervorlage-breadcrumb/_wiedervorlage-breadcrumb.theme.scss +++ b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-breadcrumb-container/wiedervorlage-breadcrumb/_wiedervorlage-breadcrumb.theme.scss @@ -25,13 +25,13 @@ @use '@angular/material' as mat; @mixin breadcrumb($theme) { - $color-config: mat.get-color-config($theme); + $color-config: mat.m2-get-color-config($theme); $primary: map.get($color-config, 'primary'); alfa-breadcrumb, alfa-vorgang-in-postfach-breadcrumb { a { - color: mat.get-color-from-palette($primary); + color: mat.m2-get-color-from-palette($primary); } } } diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-status/wiedervorlage-status.component.scss b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-status/wiedervorlage-status.component.scss index e6c6c5d1e66c8987237fc8d6e491383030103a7a..041ec2dc9b559611d681e9a77b623d973163f57f 100644 --- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-status/wiedervorlage-status.component.scss +++ b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-status/wiedervorlage-status.component.scss @@ -48,13 +48,13 @@ } &.red:not(.erledigt) { - background-color: mat.get-color-from-palette($warnPalette); - border-color: mat.get-color-from-palette($warnPalette, darker); + background-color: mat.m2-get-color-from-palette($warnPalette); + border-color: mat.m2-get-color-from-palette($warnPalette, darker); } &.yellow:not(.erledigt) { - background-color: mat.get-color-from-palette($accentPalette); - border-color: mat.get-color-from-palette($accentPalette, darker); + background-color: mat.m2-get-color-from-palette($accentPalette); + border-color: mat.m2-get-color-from-palette($accentPalette, darker); } } diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage.guard.spec.ts b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage.guard.spec.ts index 64089451c87ad1d5887116252251f89fab2173ea..443a7e31ddb3b74274efd5d06a92b8e806acbd8d 100644 --- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage.guard.spec.ts +++ b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage.guard.spec.ts @@ -29,7 +29,7 @@ import { RouterStateSnapshot, UrlSegment, } from '@angular/router'; -import faker from '@faker-js/faker'; +import { faker } from '@faker-js/faker'; import { encodeUrlForEmbedding } from '@alfa-client/tech-shared'; import { mock } from '@alfa-client/test-utils'; import { SnackBarService } from '@alfa-client/ui'; diff --git a/alfa-client/libs/zustaendige-stelle-shared/.eslintrc.json b/alfa-client/libs/zustaendige-stelle-shared/.eslintrc.json new file mode 100644 index 0000000000000000000000000000000000000000..b953e5d37d40148217ab14a01859ea0cb43d9ebc --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle-shared/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "lib", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "lib", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nx/angular-template"], + "rules": {} + } + ] +} diff --git a/alfa-client/libs/zustaendige-stelle-shared/README.md b/alfa-client/libs/zustaendige-stelle-shared/README.md new file mode 100644 index 0000000000000000000000000000000000000000..746271b0090d56c3c5abbb2dfb34b7966d65a8e8 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle-shared/README.md @@ -0,0 +1,7 @@ +# zustaendige-stelle-shared + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test zustaendige-stelle-shared` to execute the unit tests. diff --git a/alfa-client/libs/zustaendige-stelle-shared/jest.config.ts b/alfa-client/libs/zustaendige-stelle-shared/jest.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..97f146082b038daa9b2539267d9f2d562181427a --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle-shared/jest.config.ts @@ -0,0 +1,22 @@ +/* eslint-disable */ +export default { + displayName: 'zustaendige-stelle-shared', + preset: '../../jest.preset.js', + setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'], + coverageDirectory: '../../coverage/libs/zustaendige-stelle-shared', + transform: { + '^.+\\.(ts|mjs|js|html)$': [ + 'jest-preset-angular', + { + tsconfig: '<rootDir>/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + ], + }, + transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/alfa-client/libs/zustaendige-stelle-shared/project.json b/alfa-client/libs/zustaendige-stelle-shared/project.json new file mode 100644 index 0000000000000000000000000000000000000000..16d8b42f87c70ddf052d1b6b4b4ae71a30eeae98 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle-shared/project.json @@ -0,0 +1,20 @@ +{ + "name": "zustaendige-stelle-shared", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/zustaendige-stelle-shared/src", + "prefix": "lib", + "projectType": "library", + "tags": [], + "targets": { + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "libs/zustaendige-stelle-shared/jest.config.ts" + } + }, + "lint": { + "executor": "@nx/eslint:lint" + } + } +} diff --git a/alfa-client/libs/zustaendige-stelle-shared/src/index.ts b/alfa-client/libs/zustaendige-stelle-shared/src/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..a7848f376a7054d248e5aecc97aff7a3b5a3fe76 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle-shared/src/index.ts @@ -0,0 +1,8 @@ +export * from './lib/externe-fachstelle/externe-fachstelle.model'; +export * from './lib/externe-fachstelle/externe-fachstelle.service'; +export * from './lib/organisations-einheit/organisations-einheit-resource-search.service'; +export * from './lib/organisations-einheit/organisations-einheit.model'; +export * from './lib/organisations-einheit/organisations-einheit.service'; +export * from './lib/zustaendige-stelle-shared.module'; +export * from './lib/zustaendige-stelle.service'; +export * from './lib/zustaendige-stelle.token'; diff --git a/alfa-client/libs/zustaendige-stelle-shared/src/lib/externe-fachstelle/externe-fachstelle-resource-search.service.ts b/alfa-client/libs/zustaendige-stelle-shared/src/lib/externe-fachstelle/externe-fachstelle-resource-search.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..3b5dca89b26947bc637309ced5110d94113f5063 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle-shared/src/lib/externe-fachstelle/externe-fachstelle-resource-search.service.ts @@ -0,0 +1,20 @@ +import { ResourceRepository, ResourceSearchService, SearchResourceServiceConfig, mapToResource } from '@alfa-client/tech-shared'; +import { VorgangResource, VorgangService, VorgangWithEingangLinkRel } from '@alfa-client/vorgang-shared'; +import { ExterneFachstelleListResource, ExterneFachstelleResource } from './externe-fachstelle.model'; + +export class ExterneFachstelleResourceSearchService extends ResourceSearchService< + VorgangResource, + ExterneFachstelleListResource, + ExterneFachstelleResource +> {} + +export function createExterneFachstelleResourceSearchService(repository: ResourceRepository, vorgangService: VorgangService) { + return new ResourceSearchService(buildConfig(vorgangService), repository); +} + +function buildConfig(vorgangService: VorgangService): SearchResourceServiceConfig<VorgangResource> { + return { + baseResource: vorgangService.getVorgangWithEingang().pipe(mapToResource<VorgangResource>()), + searchLinkRel: VorgangWithEingangLinkRel.SEARCH_EXTERNE_FACHSTELLE, + }; +} diff --git a/alfa-client/libs/zustaendige-stelle-shared/src/lib/externe-fachstelle/externe-fachstelle.linkrel.ts b/alfa-client/libs/zustaendige-stelle-shared/src/lib/externe-fachstelle/externe-fachstelle.linkrel.ts new file mode 100644 index 0000000000000000000000000000000000000000..db9e7fdd545ac5ce57841426e2e84ee015d1e091 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle-shared/src/lib/externe-fachstelle/externe-fachstelle.linkrel.ts @@ -0,0 +1,3 @@ +export enum ExterneFachstelleListLinkRel { + EXTERNE_FACHSTELLE_LIST = 'fachstelleList', +} diff --git a/alfa-client/libs/zustaendige-stelle-shared/src/lib/externe-fachstelle/externe-fachstelle.model.ts b/alfa-client/libs/zustaendige-stelle-shared/src/lib/externe-fachstelle/externe-fachstelle.model.ts new file mode 100644 index 0000000000000000000000000000000000000000..c946e5c5fff6943675f65f299527843812eb9ddb --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle-shared/src/lib/externe-fachstelle/externe-fachstelle.model.ts @@ -0,0 +1,11 @@ +import { ListItemResource, ListResource } from '@alfa-client/tech-shared'; +import { Resource } from '@ngxp/rest'; + +export interface ExterneFachstelle { + name: string; + anschrift: string; + email: string; +} + +export interface ExterneFachstelleResource extends ExterneFachstelle, Resource, ListItemResource {} +export interface ExterneFachstelleListResource extends ListResource {} diff --git a/alfa-client/libs/zustaendige-stelle-shared/src/lib/externe-fachstelle/externe-fachstelle.service.spec.ts b/alfa-client/libs/zustaendige-stelle-shared/src/lib/externe-fachstelle/externe-fachstelle.service.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..44fc719d403d8fae9f04a78eac33994aa07ef6cd --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle-shared/src/lib/externe-fachstelle/externe-fachstelle.service.spec.ts @@ -0,0 +1,174 @@ +import { EMPTY_ARRAY, StateResource, createStateResource } from '@alfa-client/tech-shared'; +import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; +import { faker } from '@faker-js/faker'; +import { InstantSearchResult } from '@ods/system'; +import { createInstantSearchResult } from 'libs/design-system/src/test/search'; +import { createEmptyListResource } from 'libs/tech-shared/test/resource'; +import { Observable, of } from 'rxjs'; +import { singleColdCompleted } from '../../../../tech-shared/test/marbles'; +import { createExterneFachstelleListResource, createExterneFachstelleResource } from './../../../test/externe-fachstelle'; +import { ExterneFachstelleResourceSearchService } from './externe-fachstelle-resource-search.service'; +import { ExterneFachstelleListResource, ExterneFachstelleResource } from './externe-fachstelle.model'; +import { ExterneFachstelleService } from './externe-fachstelle.service'; + +jest.mock('./externe-fachstelle-resource-search.service'); + +describe('ExterneFachstelleService', () => { + let service: ExterneFachstelleService; + + let searchService: Mock<ExterneFachstelleResourceSearchService>; + + const listResource: ExterneFachstelleListResource = createExterneFachstelleListResource(); + const listStateResource: StateResource<ExterneFachstelleListResource> = createStateResource(listResource); + + beforeEach(() => { + searchService = mock(ExterneFachstelleResourceSearchService); + + service = new ExterneFachstelleService(useFromMock(searchService)); + }); + + describe('get search result list', () => { + const instantSearchResult: InstantSearchResult<ExterneFachstelleResource> = createInstantSearchResult(); + + beforeEach(() => { + searchService.getResultList.mockReturnValue(of(listStateResource)); + service.mapListResource = jest.fn().mockReturnValue([instantSearchResult]); + }); + + it('should call search service', () => { + service.getSearchResultList(); + + expect(searchService.getResultList).toHaveBeenCalled(); + }); + + it('should map list resource', () => { + service.getSearchResultList().subscribe(); + + expect(service.mapListResource).toHaveBeenCalledWith(listStateResource); + }); + + it('should return result', (done) => { + searchService.getResultList.mockReturnValue(of(listStateResource)); + + service.getSearchResultList().subscribe((result: InstantSearchResult<ExterneFachstelleResource>[]) => { + expect(result).toEqual([instantSearchResult]); + done(); + }); + }); + }); + + describe('map listResource', () => { + const externeFachstelleResource: ExterneFachstelleResource = createExterneFachstelleResource(); + const singleEntrylistResource: ExterneFachstelleListResource = createExterneFachstelleListResource([ + externeFachstelleResource, + ]); + const singleEntryListStateResource: StateResource<ExterneFachstelleListResource> = + createStateResource(singleEntrylistResource); + + const instantSearchResult: InstantSearchResult<ExterneFachstelleResource> = createInstantSearchResult(); + + beforeEach(() => { + service.mapToInstantSearchResult = jest.fn().mockReturnValue(instantSearchResult); + }); + + it('should map to instantSearchResult', () => { + service.mapListResource(singleEntryListStateResource); + + expect(service.mapToInstantSearchResult).toHaveBeenCalledWith(externeFachstelleResource); + }); + + it('should return value', () => { + const result: InstantSearchResult<ExterneFachstelleResource>[] = service.mapListResource(singleEntryListStateResource); + + expect(result).toEqual([instantSearchResult]); + }); + + it('should return empty array on empty listResource', () => { + const result: InstantSearchResult<ExterneFachstelleResource>[] = service.mapListResource( + createStateResource(createEmptyListResource<ExterneFachstelleListResource>()), + ); + + expect(result).toEqual(EMPTY_ARRAY); + }); + }); + + describe('map to instant search result', () => { + const externeFachstelleResource: ExterneFachstelleResource = createExterneFachstelleResource(); + + it('should map titel', () => { + const instantSearchResult: InstantSearchResult<ExterneFachstelleResource> = + service.mapToInstantSearchResult(externeFachstelleResource); + + expect(instantSearchResult.title).toBe(externeFachstelleResource.name); + }); + it('should map description', () => { + const instantSearchResult: InstantSearchResult<ExterneFachstelleResource> = + service.mapToInstantSearchResult(externeFachstelleResource); + + expect(instantSearchResult.description).toBe(externeFachstelleResource.anschrift); + }); + + it('should map data', () => { + const instantSearchResult: InstantSearchResult<ExterneFachstelleResource> = + service.mapToInstantSearchResult(externeFachstelleResource); + + expect(instantSearchResult.data).toBe(externeFachstelleResource); + }); + }); + + describe('search', () => { + const searchBy: string = faker.lorem.word(); + + it('should call search service with search string', () => { + service.search(searchBy); + + expect(searchService.search).toHaveBeenCalledWith(searchBy); + }); + }); + + describe('clear search result', () => { + it('should call search service', () => { + service.clearSearchResult(); + + expect(searchService.clearResultList).toHaveBeenCalledWith(); + }); + }); + + describe('get selected result', () => { + const externeFachstelleResource: ExterneFachstelleResource = createExterneFachstelleResource(); + + beforeEach(() => { + searchService.getSelectedResult.mockReturnValue(of(externeFachstelleResource)); + }); + + it('should call service', () => { + service.getSelectedResult(); + + expect(searchService.getSelectedResult).toHaveBeenCalled(); + }); + + it('should return result', () => { + const selectedResult$: Observable<ExterneFachstelleResource> = service.getSelectedResult(); + + expect(selectedResult$).toBeObservable(singleColdCompleted(externeFachstelleResource)); + }); + }); + + describe('select search result', () => { + const externeFachstelleResource: ExterneFachstelleResource = createExterneFachstelleResource(); + + it('should call service', () => { + service.selectSearchResult(externeFachstelleResource); + + expect(searchService.selectResult).toHaveBeenCalledWith(externeFachstelleResource); + }); + }); + + describe('clear selected result', () => { + it('should call service', () => { + service.clearSelectedResult(); + + expect(searchService.clearSelectedResult).toHaveBeenCalled(); + }); + }); +}); diff --git a/alfa-client/libs/zustaendige-stelle-shared/src/lib/externe-fachstelle/externe-fachstelle.service.ts b/alfa-client/libs/zustaendige-stelle-shared/src/lib/externe-fachstelle/externe-fachstelle.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..85e9d9b5528e2a2076c783c8b8c78c07c2b0f9f1 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle-shared/src/lib/externe-fachstelle/externe-fachstelle.service.ts @@ -0,0 +1,70 @@ +import { EMPTY_ARRAY, getEmbeddedResources, StateResource } from '@alfa-client/tech-shared'; +import { Injectable } from '@angular/core'; +import { InstantSearchResult } from '@ods/system'; +import { isNull } from 'lodash-es'; +import { map, Observable } from 'rxjs'; +import { ZustaendigeStelleService } from '../zustaendige-stelle.service'; +import { ExterneFachstelleResourceSearchService } from './externe-fachstelle-resource-search.service'; +import { ExterneFachstelleListLinkRel } from './externe-fachstelle.linkrel'; +import { ExterneFachstelleListResource, ExterneFachstelleResource } from './externe-fachstelle.model'; + +@Injectable() +export class ExterneFachstelleService implements ZustaendigeStelleService<ExterneFachstelleResource> { + constructor(private readonly searchService: ExterneFachstelleResourceSearchService) {} + + public getSearchResultList(): Observable<InstantSearchResult<ExterneFachstelleResource>[]> { + return this.searchService + .getResultList() + .pipe( + map((externeFachstelleStateListResource: StateResource<ExterneFachstelleListResource>) => + this.mapListResource(externeFachstelleStateListResource), + ), + ); + } + + mapListResource( + externeFachstelleStateListResource: StateResource<ExterneFachstelleListResource>, + ): InstantSearchResult<ExterneFachstelleResource>[] { + return this.getExterneFachstellenResources(externeFachstelleStateListResource).map( + (externeFachstelle: ExterneFachstelleResource) => this.mapToInstantSearchResult(externeFachstelle), + ); + } + + private getExterneFachstellenResources( + externeFachstelleStateListResource: StateResource<ExterneFachstelleListResource>, + ): ExterneFachstelleResource[] { + const resources: ExterneFachstelleResource[] = getEmbeddedResources( + externeFachstelleStateListResource, + ExterneFachstelleListLinkRel.EXTERNE_FACHSTELLE_LIST, + ); + return isNull(resources) ? EMPTY_ARRAY : resources; + } + + mapToInstantSearchResult(externeFachstelle: ExterneFachstelleResource): InstantSearchResult<ExterneFachstelleResource> { + return { + title: externeFachstelle.name, + description: externeFachstelle.anschrift, + data: externeFachstelle, + }; + } + + public search(searchBy: string): void { + this.searchService.search(searchBy); + } + + public clearSearchResult(): void { + this.searchService.clearResultList(); + } + + public getSelectedResult(): Observable<ExterneFachstelleResource> { + return this.searchService.getSelectedResult(); + } + + public selectSearchResult(externeFachstelle: ExterneFachstelleResource): void { + this.searchService.selectResult(externeFachstelle); + } + + public clearSelectedResult(): void { + this.searchService.clearSelectedResult(); + } +} diff --git a/alfa-client/libs/collaboration-shared/src/lib/organisations-einheit-resource-search.service.ts b/alfa-client/libs/zustaendige-stelle-shared/src/lib/organisations-einheit/organisations-einheit-resource-search.service.ts similarity index 58% rename from alfa-client/libs/collaboration-shared/src/lib/organisations-einheit-resource-search.service.ts rename to alfa-client/libs/zustaendige-stelle-shared/src/lib/organisations-einheit/organisations-einheit-resource-search.service.ts index 23f726f9ed323a5c596e660190d1168e0aea41e5..a31309271a877ac8e22ad2280885d38dd6ed3257 100644 --- a/alfa-client/libs/collaboration-shared/src/lib/organisations-einheit-resource-search.service.ts +++ b/alfa-client/libs/zustaendige-stelle-shared/src/lib/organisations-einheit/organisations-einheit-resource-search.service.ts @@ -1,18 +1,6 @@ -import { - ResourceRepository, - ResourceSearchService, - SearchResourceServiceConfig, - mapToResource, -} from '@alfa-client/tech-shared'; -import { - VorgangResource, - VorgangService, - VorgangWithEingangLinkRel, -} from '@alfa-client/vorgang-shared'; -import { - OrganisationsEinheitListResource, - OrganisationsEinheitResource, -} from './organisations-einheit.model'; +import { ResourceRepository, ResourceSearchService, SearchResourceServiceConfig, mapToResource } from '@alfa-client/tech-shared'; +import { VorgangResource, VorgangService, VorgangWithEingangLinkRel } from '@alfa-client/vorgang-shared'; +import { OrganisationsEinheitListResource, OrganisationsEinheitResource } from './organisations-einheit.model'; export class OrganisationsEinheitResourceSearchService extends ResourceSearchService< VorgangResource, @@ -20,10 +8,7 @@ export class OrganisationsEinheitResourceSearchService extends ResourceSearchSer OrganisationsEinheitResource > {} -export function createOrganisationsEinheitResourceSearchService( - repository: ResourceRepository, - vorgangService: VorgangService, -) { +export function createOrganisationsEinheitResourceSearchService(repository: ResourceRepository, vorgangService: VorgangService) { return new ResourceSearchService(buildConfig(vorgangService), repository); } diff --git a/alfa-client/libs/collaboration-shared/src/lib/organisations-einheit.linkrel.ts b/alfa-client/libs/zustaendige-stelle-shared/src/lib/organisations-einheit/organisations-einheit.linkrel.ts similarity index 100% rename from alfa-client/libs/collaboration-shared/src/lib/organisations-einheit.linkrel.ts rename to alfa-client/libs/zustaendige-stelle-shared/src/lib/organisations-einheit/organisations-einheit.linkrel.ts diff --git a/alfa-client/libs/collaboration-shared/src/lib/organisations-einheit.model.ts b/alfa-client/libs/zustaendige-stelle-shared/src/lib/organisations-einheit/organisations-einheit.model.ts similarity index 65% rename from alfa-client/libs/collaboration-shared/src/lib/organisations-einheit.model.ts rename to alfa-client/libs/zustaendige-stelle-shared/src/lib/organisations-einheit/organisations-einheit.model.ts index aafc23fbbce95dae57f511413b8e1c0dedd936ad..46320868558c4bcb58c907bcb3ad1ec3cd766b73 100644 --- a/alfa-client/libs/collaboration-shared/src/lib/organisations-einheit.model.ts +++ b/alfa-client/libs/zustaendige-stelle-shared/src/lib/organisations-einheit/organisations-einheit.model.ts @@ -13,8 +13,6 @@ export interface Anschrift { ort: string; } -export interface OrganisationsEinheitResource - extends OrganisationsEinheit, - Resource, - ListItemResource {} +export interface OrganisationsEinheitResource extends OrganisationsEinheit, Resource, ListItemResource {} export interface OrganisationsEinheitListResource extends ListResource {} +export declare type OrganisationsEinheitItemResource = Resource & OrganisationsEinheit; diff --git a/alfa-client/libs/zustaendige-stelle-shared/src/lib/organisations-einheit/organisations-einheit.service.spec.ts b/alfa-client/libs/zustaendige-stelle-shared/src/lib/organisations-einheit/organisations-einheit.service.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..62a1511e600749a8c907c49f0430014fd10bfc12 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle-shared/src/lib/organisations-einheit/organisations-einheit.service.spec.ts @@ -0,0 +1,175 @@ +import { EMPTY_ARRAY, StateResource, createStateResource } from '@alfa-client/tech-shared'; +import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; +import { faker } from '@faker-js/faker'; +import { InstantSearchResult } from '@ods/system'; +import { createInstantSearchResult } from 'libs/design-system/src/test/search'; +import { createEmptyListResource } from 'libs/tech-shared/test/resource'; +import { Observable, of } from 'rxjs'; +import { singleColdCompleted } from '../../../../tech-shared/test/marbles'; +import { createOrganisationsEinheitListResource, createOrganisationsEinheitResource } from '../../../test/organisations-einheit'; +import { OrganisationsEinheitResourceSearchService } from './organisations-einheit-resource-search.service'; +import { OrganisationsEinheitListResource, OrganisationsEinheitResource } from './organisations-einheit.model'; +import { OrganisationsEinheitService } from './organisations-einheit.service'; + +jest.mock('./organisations-einheit-resource-search.service'); + +describe('OrganisationsEinheitService', () => { + let service: OrganisationsEinheitService; + + let searchService: Mock<OrganisationsEinheitResourceSearchService>; + + const listResource: OrganisationsEinheitListResource = createOrganisationsEinheitListResource(); + const listStateResource: StateResource<OrganisationsEinheitListResource> = createStateResource(listResource); + + beforeEach(() => { + searchService = mock(OrganisationsEinheitResourceSearchService); + + service = new OrganisationsEinheitService(useFromMock(searchService)); + }); + + describe('get search result list', () => { + const instantSearchResult: InstantSearchResult<OrganisationsEinheitResource> = createInstantSearchResult(); + + beforeEach(() => { + searchService.getResultList.mockReturnValue(of(listStateResource)); + service.mapListResource = jest.fn().mockReturnValue([instantSearchResult]); + }); + + it('should call search service', () => { + service.getSearchResultList(); + + expect(searchService.getResultList).toHaveBeenCalled(); + }); + + it('should map list resource', () => { + service.getSearchResultList().subscribe(); + + expect(service.mapListResource).toHaveBeenCalledWith(listStateResource); + }); + + it('should return result', (done) => { + searchService.getResultList.mockReturnValue(of(listStateResource)); + + service.getSearchResultList().subscribe((result: InstantSearchResult<OrganisationsEinheitResource>[]) => { + expect(result).toEqual([instantSearchResult]); + done(); + }); + }); + }); + + describe('map listResource', () => { + const organisationsEinheitResource: OrganisationsEinheitResource = createOrganisationsEinheitResource(); + const singleEntrylistResource: OrganisationsEinheitListResource = createOrganisationsEinheitListResource([ + organisationsEinheitResource, + ]); + const singleEntryListStateResource: StateResource<OrganisationsEinheitListResource> = + createStateResource(singleEntrylistResource); + + const instantSearchResult: InstantSearchResult<OrganisationsEinheitResource> = createInstantSearchResult(); + + beforeEach(() => { + service.mapToInstantSearchResult = jest.fn().mockReturnValue(instantSearchResult); + }); + + it('should map to instantSearchResult', () => { + service.mapListResource(singleEntryListStateResource); + + expect(service.mapToInstantSearchResult).toHaveBeenCalledWith(organisationsEinheitResource); + }); + + it('should return value', () => { + const result: InstantSearchResult<OrganisationsEinheitResource>[] = service.mapListResource(singleEntryListStateResource); + + expect(result).toEqual([instantSearchResult]); + }); + + it('should return empty array on empty listResource', () => { + const result: InstantSearchResult<OrganisationsEinheitResource>[] = service.mapListResource( + createStateResource(createEmptyListResource<OrganisationsEinheitListResource>()), + ); + + expect(result).toEqual(EMPTY_ARRAY); + }); + }); + + describe('map to instant search result', () => { + const organisationsEinheitResource: OrganisationsEinheitResource = createOrganisationsEinheitResource(); + + it('should map titel', () => { + const instantSearchResult: InstantSearchResult<OrganisationsEinheitResource> = + service.mapToInstantSearchResult(organisationsEinheitResource); + + expect(instantSearchResult.title).toBe(organisationsEinheitResource.name); + }); + it('should map description', () => { + const instantSearchResult: InstantSearchResult<OrganisationsEinheitResource> = + service.mapToInstantSearchResult(organisationsEinheitResource); + + const expectedDescription: string = `${organisationsEinheitResource.anschrift.strasse} ${organisationsEinheitResource.anschrift.hausnummer}, ${organisationsEinheitResource.anschrift.plz} ${organisationsEinheitResource.anschrift.ort}`; + expect(instantSearchResult.description).toBe(expectedDescription); + }); + + it('should map data', () => { + const instantSearchResult: InstantSearchResult<OrganisationsEinheitResource> = + service.mapToInstantSearchResult(organisationsEinheitResource); + + expect(instantSearchResult.data).toBe(organisationsEinheitResource); + }); + }); + + describe('search', () => { + const searchBy: string = faker.lorem.word(); + + it('should call search service with search string', () => { + service.search(searchBy); + + expect(searchService.search).toHaveBeenCalledWith(searchBy); + }); + }); + + describe('clear search result', () => { + it('should call search service', () => { + service.clearSearchResult(); + + expect(searchService.clearResultList).toHaveBeenCalledWith(); + }); + }); + + describe('get selected result', () => { + const organisationsEinheitResource: OrganisationsEinheitResource = createOrganisationsEinheitResource(); + + beforeEach(() => { + searchService.getSelectedResult.mockReturnValue(of(organisationsEinheitResource)); + }); + + it('should call service', () => { + service.getSelectedResult(); + + expect(searchService.getSelectedResult).toHaveBeenCalled(); + }); + + it('should return result', () => { + const selectedResult$: Observable<OrganisationsEinheitResource> = service.getSelectedResult(); + + expect(selectedResult$).toBeObservable(singleColdCompleted(organisationsEinheitResource)); + }); + }); + + describe('select search result', () => { + const organisationsEinheitResource: OrganisationsEinheitResource = createOrganisationsEinheitResource(); + + it('should call service', () => { + service.selectSearchResult(organisationsEinheitResource); + + expect(searchService.selectResult).toHaveBeenCalledWith(organisationsEinheitResource); + }); + }); + + describe('clear selected result', () => { + it('should call service', () => { + service.clearSelectedResult(); + + expect(searchService.clearSelectedResult).toHaveBeenCalled(); + }); + }); +}); diff --git a/alfa-client/libs/zustaendige-stelle-shared/src/lib/organisations-einheit/organisations-einheit.service.ts b/alfa-client/libs/zustaendige-stelle-shared/src/lib/organisations-einheit/organisations-einheit.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..f37df6898ee27ef575d5faa964dc0fa57baad68b --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle-shared/src/lib/organisations-einheit/organisations-einheit.service.ts @@ -0,0 +1,70 @@ +import { EMPTY_ARRAY, getEmbeddedResources, StateResource } from '@alfa-client/tech-shared'; +import { Injectable } from '@angular/core'; +import { InstantSearchResult } from '@ods/system'; +import { isNull } from 'lodash-es'; +import { map, Observable } from 'rxjs'; +import { ZustaendigeStelleService } from '../zustaendige-stelle.service'; +import { OrganisationsEinheitResourceSearchService } from './organisations-einheit-resource-search.service'; +import { OrganisationsEinheitListLinkRel } from './organisations-einheit.linkrel'; +import { OrganisationsEinheitListResource, OrganisationsEinheitResource } from './organisations-einheit.model'; + +@Injectable() +export class OrganisationsEinheitService implements ZustaendigeStelleService<OrganisationsEinheitResource> { + constructor(private readonly searchService: OrganisationsEinheitResourceSearchService) {} + + public getSearchResultList(): Observable<InstantSearchResult<OrganisationsEinheitResource>[]> { + return this.searchService + .getResultList() + .pipe( + map((organisationsEinheitStateListResource: StateResource<OrganisationsEinheitListResource>) => + this.mapListResource(organisationsEinheitStateListResource), + ), + ); + } + + mapListResource( + organisationsEinheitStateListResource: StateResource<OrganisationsEinheitListResource>, + ): InstantSearchResult<OrganisationsEinheitResource>[] { + return this.getOrganisationsEinheitResources(organisationsEinheitStateListResource).map( + (organisationsEinheitResource: OrganisationsEinheitResource) => this.mapToInstantSearchResult(organisationsEinheitResource), + ); + } + + private getOrganisationsEinheitResources( + organisationsEinheitStateListResource: StateResource<OrganisationsEinheitListResource>, + ): OrganisationsEinheitResource[] { + const resources: OrganisationsEinheitResource[] = getEmbeddedResources( + organisationsEinheitStateListResource, + OrganisationsEinheitListLinkRel.ORGANISATIONS_EINHEIT_HEADER_LIST, + ); + return isNull(resources) ? EMPTY_ARRAY : resources; + } + + mapToInstantSearchResult(zustaendigeStelle: OrganisationsEinheitResource): InstantSearchResult<OrganisationsEinheitResource> { + return { + title: zustaendigeStelle.name, + description: `${zustaendigeStelle.anschrift.strasse} ${zustaendigeStelle.anschrift.hausnummer}, ${zustaendigeStelle.anschrift.plz} ${zustaendigeStelle.anschrift.ort}`, + data: zustaendigeStelle, + }; + } + + public search(searchBy: string): void { + this.searchService.search(searchBy); + } + + public clearSearchResult(): void { + this.searchService.clearResultList(); + } + + public getSelectedResult(): Observable<OrganisationsEinheitResource> { + return this.searchService.getSelectedResult(); + } + + public selectSearchResult(organisationsEinheitResource: OrganisationsEinheitResource): void { + this.searchService.selectResult(organisationsEinheitResource); + } + + public clearSelectedResult(): void { + this.searchService.clearSelectedResult(); + } +} diff --git a/alfa-client/libs/zustaendige-stelle-shared/src/lib/zustaendige-stelle-shared.module.spec.ts b/alfa-client/libs/zustaendige-stelle-shared/src/lib/zustaendige-stelle-shared.module.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..1d35dca1187314e568d682dd77633c693e56124b --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle-shared/src/lib/zustaendige-stelle-shared.module.spec.ts @@ -0,0 +1,14 @@ +import { TestBed } from '@angular/core/testing'; +import { ZustaendigeStelleSharedModule } from './zustaendige-stelle-shared.module'; + +describe('ZustaendigeStelleSharedModule', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [ZustaendigeStelleSharedModule], + }).compileComponents(); + }); + + it('should create', () => { + expect(ZustaendigeStelleSharedModule).toBeDefined(); + }); +}); diff --git a/alfa-client/libs/zustaendige-stelle-shared/src/lib/zustaendige-stelle-shared.module.ts b/alfa-client/libs/zustaendige-stelle-shared/src/lib/zustaendige-stelle-shared.module.ts new file mode 100644 index 0000000000000000000000000000000000000000..1d233051635da34cf94f031f139df71eba683dfb --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle-shared/src/lib/zustaendige-stelle-shared.module.ts @@ -0,0 +1,33 @@ +import { ResourceRepository } from '@alfa-client/tech-shared'; +import { VorgangService } from '@alfa-client/vorgang-shared'; +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { + ExterneFachstelleResourceSearchService, + createExterneFachstelleResourceSearchService, +} from './externe-fachstelle/externe-fachstelle-resource-search.service'; +import { ExterneFachstelleService } from './externe-fachstelle/externe-fachstelle.service'; +import { + OrganisationsEinheitResourceSearchService, + createOrganisationsEinheitResourceSearchService, +} from './organisations-einheit/organisations-einheit-resource-search.service'; +import { OrganisationsEinheitService } from './organisations-einheit/organisations-einheit.service'; + +@NgModule({ + imports: [CommonModule], + providers: [ + OrganisationsEinheitService, + ExterneFachstelleService, + { + provide: OrganisationsEinheitResourceSearchService, + useFactory: createOrganisationsEinheitResourceSearchService, + deps: [ResourceRepository, VorgangService], + }, + { + provide: ExterneFachstelleResourceSearchService, + useFactory: createExterneFachstelleResourceSearchService, + deps: [ResourceRepository, VorgangService], + }, + ], +}) +export class ZustaendigeStelleSharedModule {} diff --git a/alfa-client/libs/zustaendige-stelle-shared/src/lib/zustaendige-stelle.service.ts b/alfa-client/libs/zustaendige-stelle-shared/src/lib/zustaendige-stelle.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..0349ebacc9ec8ca35851b4f2a994f1eb2b219e12 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle-shared/src/lib/zustaendige-stelle.service.ts @@ -0,0 +1,12 @@ +import { Resource } from '@ngxp/rest'; +import { InstantSearchResult } from '@ods/system'; +import { Observable } from 'rxjs'; + +export interface ZustaendigeStelleService<T extends Resource> { + getSearchResultList(): Observable<InstantSearchResult<T>[]>; + search(searchBy: string): void; + clearSearchResult(): void; + getSelectedResult(): Observable<T>; + selectSearchResult(zustaendigeStelleResource: T): void; + clearSelectedResult(): void; +} diff --git a/alfa-client/libs/zustaendige-stelle-shared/src/lib/zustaendige-stelle.token.ts b/alfa-client/libs/zustaendige-stelle-shared/src/lib/zustaendige-stelle.token.ts new file mode 100644 index 0000000000000000000000000000000000000000..bdb1bef21fc92ccf970b6c536cc77e3553dea213 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle-shared/src/lib/zustaendige-stelle.token.ts @@ -0,0 +1,5 @@ +import { InjectionToken } from '@angular/core'; +import { Resource } from '@ngxp/rest'; +import { ZustaendigeStelleService } from './zustaendige-stelle.service'; + +export const ZUSTAENDIGE_STELLE_SERVICE = new InjectionToken<ZustaendigeStelleService<Resource>>('ZustaendigeStelleService'); diff --git a/alfa-client/libs/zustaendige-stelle-shared/src/test-setup.ts b/alfa-client/libs/zustaendige-stelle-shared/src/test-setup.ts new file mode 100644 index 0000000000000000000000000000000000000000..12fa19564300d506f71206e28de6cfa4a933bc59 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle-shared/src/test-setup.ts @@ -0,0 +1,9 @@ +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, +}); diff --git a/alfa-client/libs/zustaendige-stelle-shared/test/externe-fachstelle.ts b/alfa-client/libs/zustaendige-stelle-shared/test/externe-fachstelle.ts new file mode 100644 index 0000000000000000000000000000000000000000..adca84c77ef27222bd7c3891e01401a3e68a6783 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle-shared/test/externe-fachstelle.ts @@ -0,0 +1,34 @@ +import { faker } from '@faker-js/faker'; +import { toResource } from 'libs/tech-shared/test/resource'; +import { times } from 'lodash-es'; +import { ExterneFachstelleListLinkRel } from '../src/lib/externe-fachstelle/externe-fachstelle.linkrel'; +import { + ExterneFachstelle, + ExterneFachstelleListResource, + ExterneFachstelleResource, +} from '../src/lib/externe-fachstelle/externe-fachstelle.model'; + +export function createExterneFachstelle(): ExterneFachstelle { + return { + name: faker.lorem.word(), + anschrift: faker.lorem.words(5), + email: faker.internet.email(), + }; +} + +export function createExterneFachstelleResource(linkRel: string[] = []): ExterneFachstelleResource { + return toResource(createExterneFachstelle(), linkRel); +} + +export function createExterneFachstelleResources(linkRelations: string[] = []): ExterneFachstelleResource[] { + return times(10, () => toResource(createExterneFachstelleResource(), [...linkRelations])); +} + +export function createExterneFachstelleListResource( + resources?: ExterneFachstelleResource[], + linkRelations: string[] = [], +): ExterneFachstelleListResource { + return toResource({}, [...linkRelations], { + [ExterneFachstelleListLinkRel.EXTERNE_FACHSTELLE_LIST]: resources ? resources : createExterneFachstelleResources(), + }); +} diff --git a/alfa-client/libs/collaboration-shared/test/organisations-einheit.ts b/alfa-client/libs/zustaendige-stelle-shared/test/organisations-einheit.ts similarity index 62% rename from alfa-client/libs/collaboration-shared/test/organisations-einheit.ts rename to alfa-client/libs/zustaendige-stelle-shared/test/organisations-einheit.ts index 4c0f749b773824c841749f7cc5f7851bf7a44134..3fa8a76977ba13edde1d864b8edb576994475512 100644 --- a/alfa-client/libs/collaboration-shared/test/organisations-einheit.ts +++ b/alfa-client/libs/zustaendige-stelle-shared/test/organisations-einheit.ts @@ -1,40 +1,35 @@ +import { faker } from '@faker-js/faker'; import { times } from 'lodash-es'; import { toResource } from '../../tech-shared/test/resource'; +import { OrganisationsEinheitListLinkRel } from '../src/lib/organisations-einheit/organisations-einheit.linkrel'; import { Anschrift, OrganisationsEinheit, - OrganisationsEinheitListLinkRel, OrganisationsEinheitListResource, OrganisationsEinheitResource, -} from '../src'; - -import { faker } from '@faker-js/faker'; +} from '../src/lib/organisations-einheit/organisations-einheit.model'; export function createAnschrift(): Anschrift { return { - hausnummer: faker.random.word(), - ort: faker.random.word(), - plz: faker.random.word(), - strasse: faker.random.words(2), + hausnummer: faker.word.sample(), + ort: faker.word.sample(), + plz: faker.word.sample(), + strasse: faker.word.sample(2), }; } export function createOrganisationsEinheit(): OrganisationsEinheit { return { - name: faker.random.word(), + name: faker.word.sample(), anschrift: createAnschrift(), }; } -export function createOrganisationsEinheitResource( - linkRel: string[] = [], -): OrganisationsEinheitResource { +export function createOrganisationsEinheitResource(linkRel: string[] = []): OrganisationsEinheitResource { return toResource(createOrganisationsEinheit(), linkRel); } -export function createOrganisationsEinheitResources( - linkRelations: string[] = [], -): OrganisationsEinheitResource[] { +export function createOrganisationsEinheitResources(linkRelations: string[] = []): OrganisationsEinheitResource[] { return times(10, () => toResource(createOrganisationsEinheitResource(), [...linkRelations])); } diff --git a/alfa-client/libs/zustaendige-stelle-shared/tsconfig.json b/alfa-client/libs/zustaendige-stelle-shared/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..7cc6baf2f58ed5ccfba098131996f579979e9f18 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle-shared/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "target": "es2022" + } +} diff --git a/alfa-client/libs/zustaendige-stelle-shared/tsconfig.lib.json b/alfa-client/libs/zustaendige-stelle-shared/tsconfig.lib.json new file mode 100644 index 0000000000000000000000000000000000000000..9475b010386d7226f2b81f0f8501a110c3340cb2 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle-shared/tsconfig.lib.json @@ -0,0 +1,19 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "target": "es2015", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [], + "lib": ["dom", "es2018"] + }, + "angularCompilerOptions": { + "skipTemplateCodegen": true, + "strictMetadataEmit": true, + "enableResourceInlining": true + }, + "exclude": ["src/test-setup.ts", "**/*.spec.ts", "jest.config.ts"], + "include": ["**/*.ts"] +} \ No newline at end of file diff --git a/alfa-client/libs/zustaendige-stelle-shared/tsconfig.spec.json b/alfa-client/libs/zustaendige-stelle-shared/tsconfig.spec.json new file mode 100644 index 0000000000000000000000000000000000000000..3a690070a7f5e48080dd36522d6a0db384d940aa --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle-shared/tsconfig.spec.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"], + "target": "ES2022", + "useDefineForClassFields": false + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts", "jest.config.ts"] +} diff --git a/alfa-client/libs/zustaendige-stelle/.eslintrc.json b/alfa-client/libs/zustaendige-stelle/.eslintrc.json new file mode 100644 index 0000000000000000000000000000000000000000..b953e5d37d40148217ab14a01859ea0cb43d9ebc --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "lib", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "lib", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nx/angular-template"], + "rules": {} + } + ] +} diff --git a/alfa-client/libs/zustaendige-stelle/README.md b/alfa-client/libs/zustaendige-stelle/README.md new file mode 100644 index 0000000000000000000000000000000000000000..79cdd47f94b5d289ef89c83fac63d412edf6b4e8 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/README.md @@ -0,0 +1,7 @@ +# zustaendige-stelle + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test zustaendige-stelle` to execute the unit tests. diff --git a/alfa-client/libs/zustaendige-stelle/jest.config.ts b/alfa-client/libs/zustaendige-stelle/jest.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..ab3acdae1b5402f061cb7eecf2d2c8fa38811f79 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/jest.config.ts @@ -0,0 +1,22 @@ +/* eslint-disable */ +export default { + displayName: 'zustaendige-stelle', + preset: '../../jest.preset.js', + setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'], + coverageDirectory: '../../coverage/libs/zustaendige-stelle', + transform: { + '^.+\\.(ts|mjs|js|html)$': [ + 'jest-preset-angular', + { + tsconfig: '<rootDir>/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + ], + }, + transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/alfa-client/libs/zustaendige-stelle/project.json b/alfa-client/libs/zustaendige-stelle/project.json new file mode 100644 index 0000000000000000000000000000000000000000..867f306a90142d3343259429b19dbedaa5d3259d --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/project.json @@ -0,0 +1,20 @@ +{ + "name": "zustaendige-stelle", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/zustaendige-stelle/src", + "prefix": "lib", + "projectType": "library", + "tags": [], + "targets": { + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "libs/zustaendige-stelle/jest.config.ts" + } + }, + "lint": { + "executor": "@nx/eslint:lint" + } + } +} diff --git a/alfa-client/libs/zustaendige-stelle/src/index.ts b/alfa-client/libs/zustaendige-stelle/src/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..0b94d9bc2b959f56babe9fe5df97cb5dd0886f02 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/src/index.ts @@ -0,0 +1,3 @@ +export * from './lib/search-externe-fachstelle-container/search-externe-fachstelle-container.component'; +export * from './lib/search-organisations-einheit-container/search-organisations-einheit-container.component'; +export * from './lib/zustaendige-stelle.module'; diff --git a/alfa-client/libs/zustaendige-stelle/src/lib/edit-zustaendige-stelle-button/edit-zustaendige-stelle-button.component.html b/alfa-client/libs/zustaendige-stelle/src/lib/edit-zustaendige-stelle-button/edit-zustaendige-stelle-button.component.html new file mode 100644 index 0000000000000000000000000000000000000000..d36f2ccadb9ebb69aa3ccf78c2fc000f17fdd953 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/src/lib/edit-zustaendige-stelle-button/edit-zustaendige-stelle-button.component.html @@ -0,0 +1,9 @@ +<ods-button + variant="icon" + size="fit" + data-test-class="edit-zustaendige-stelle-button" + [dataTestId]="dataTestId" + (clickEmitter)="openSearchDialog()" +> + <ods-edit-icon icon /> +</ods-button> diff --git a/alfa-client/libs/zustaendige-stelle/src/lib/edit-zustaendige-stelle-button/edit-zustaendige-stelle-button.component.spec.ts b/alfa-client/libs/zustaendige-stelle/src/lib/edit-zustaendige-stelle-button/edit-zustaendige-stelle-button.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..8facf8e5b085edde1b1c413cff3b6921f9dd9078 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/src/lib/edit-zustaendige-stelle-button/edit-zustaendige-stelle-button.component.spec.ts @@ -0,0 +1,69 @@ +import { dispatchEventFromFixture, mock, Mock } from '@alfa-client/test-utils'; +import { OzgcloudDialogService } from '@alfa-client/ui'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { faker } from '@faker-js/faker'; +import { Resource } from '@ngxp/rest'; +import { ButtonComponent, EditIconComponent } from '@ods/system'; +import { getDataTestClassOf } from 'libs/tech-shared/test/data-test'; +import { MockComponent } from 'ng-mocks'; +import { SearchZustaendigeStelleDialogComponent } from '../search-zustaendige-stelle-dialog/search-zustaendige-stelle-dialog.component'; +import { EditZustaendigeStelleButtonComponent } from './edit-zustaendige-stelle-button.component'; + +describe('EditZustaendigeStelleButtonComponent', () => { + let component: EditZustaendigeStelleButtonComponent<Resource>; + let fixture: ComponentFixture<EditZustaendigeStelleButtonComponent<Resource>>; + + const title: string = faker.lorem.words(3); + const dataTestId: string = faker.lorem.word(); + + const button: string = getDataTestClassOf('edit-zustaendige-stelle-button'); + + let dialogService: Mock<OzgcloudDialogService>; + + beforeEach(async () => { + dialogService = mock(OzgcloudDialogService); + await TestBed.configureTestingModule({ + declarations: [EditZustaendigeStelleButtonComponent], + imports: [MockComponent(ButtonComponent), MockComponent(EditIconComponent)], + providers: [ + { + provide: OzgcloudDialogService, + useValue: dialogService, + }, + ], + }).compileComponents(); + + fixture = TestBed.createComponent(EditZustaendigeStelleButtonComponent); + component = fixture.componentInstance; + component.title = title; + component.dataTestId = dataTestId; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + describe('search zustaendige stelle button', () => { + it('should call openSearchDialog', () => { + component.openSearchDialog = jest.fn(); + + fixture.detectChanges(); + dispatchEventFromFixture(fixture, button, 'clickEmitter'); + + expect(component.openSearchDialog).toHaveBeenCalled(); + }); + }); + + describe('open search dialog', () => { + it('should call dialog service', () => { + component.openSearchDialog(); + + expect(dialogService.openFullScreenDialog).toHaveBeenCalledWith( + SearchZustaendigeStelleDialogComponent, + component.viewContainerRef, + title, + ); + }); + }); +}); diff --git a/alfa-client/libs/zustaendige-stelle/src/lib/edit-zustaendige-stelle-button/edit-zustaendige-stelle-button.component.ts b/alfa-client/libs/zustaendige-stelle/src/lib/edit-zustaendige-stelle-button/edit-zustaendige-stelle-button.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..b3c059fc8c8c044ce4b94d961190bd6d7e35057f --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/src/lib/edit-zustaendige-stelle-button/edit-zustaendige-stelle-button.component.ts @@ -0,0 +1,26 @@ +import { OzgcloudDialogService } from '@alfa-client/ui'; +import { Component, Input, ViewContainerRef } from '@angular/core'; +import { Resource } from '@ngxp/rest'; +import { SearchZustaendigeStelleDialogComponent } from '../search-zustaendige-stelle-dialog/search-zustaendige-stelle-dialog.component'; + +@Component({ + selector: 'alfa-edit-zustaendige-stelle-button', + templateUrl: './edit-zustaendige-stelle-button.component.html', +}) +export class EditZustaendigeStelleButtonComponent<T extends Resource> { + @Input() public dataTestId: string; + @Input() title: string; + + constructor( + private dialogService: OzgcloudDialogService, + readonly viewContainerRef: ViewContainerRef, + ) {} + + public openSearchDialog(): void { + this.dialogService.openFullScreenDialog<SearchZustaendigeStelleDialogComponent<T>>( + SearchZustaendigeStelleDialogComponent, + this.viewContainerRef, + this.title, + ); + } +} diff --git a/alfa-client/libs/zustaendige-stelle/src/lib/search-externe-fachstelle-container/search-externe-fachstelle-container.component.html b/alfa-client/libs/zustaendige-stelle/src/lib/search-externe-fachstelle-container/search-externe-fachstelle-container.component.html new file mode 100644 index 0000000000000000000000000000000000000000..c3e48e9305999ee9f845f56ec608ef9f256d03b2 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/src/lib/search-externe-fachstelle-container/search-externe-fachstelle-container.component.html @@ -0,0 +1,19 @@ +<ng-container *ngIf="externeFachstelleResource$ | async as externeFachstelleResource; else searchButton"> + <alfa-zustaendige-stelle-header title="Externe Fachstelle" [subTitle]="externeFachstelleResource.name" [isSubTitleBold]="true"> + <ods-external-unit-icon icon /> + <div class="flex flex-1 flex-col text-sm text-text" info> + <p>{{ externeFachstelleResource.anschrift }}</p> + <p>{{ 'Email: ' + externeFachstelleResource.email }}</p> + </div> + <alfa-edit-zustaendige-stelle-button + title="Zuständige externe Fachstelle auswählen" + dataTestId="edit-externe-fachstelle-button" + /> + </alfa-zustaendige-stelle-header> +</ng-container> +<ng-template #searchButton> + <alfa-zustaendige-stelle-header title="Externe Fachstelle" subTitle="Private Organisation, Verein, Schule"> + <ods-external-unit-icon icon /> + <alfa-zustaendige-stelle-button title="Zuständige externe Fachstelle auswählen" dataTestId="externe-fachstelle-button" /> + </alfa-zustaendige-stelle-header> +</ng-template> diff --git a/alfa-client/libs/zustaendige-stelle/src/lib/search-externe-fachstelle-container/search-externe-fachstelle-container.component.spec.ts b/alfa-client/libs/zustaendige-stelle/src/lib/search-externe-fachstelle-container/search-externe-fachstelle-container.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..e51df04f892b09f383e96113374091d17666e687 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/src/lib/search-externe-fachstelle-container/search-externe-fachstelle-container.component.spec.ts @@ -0,0 +1,148 @@ +import { Mock, mock } from '@alfa-client/test-utils'; +import { + ExterneFachstelleResource, + ExterneFachstelleService, + ZUSTAENDIGE_STELLE_SERVICE, +} from '@alfa-client/zustaendige-stelle-shared'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { FormControl } from '@angular/forms'; +import { getUrl } from '@ngxp/rest'; +import { ExternalUnitIconComponent } from '@ods/system'; +import { createExterneFachstelleResource } from 'libs/zustaendige-stelle-shared/test/externe-fachstelle'; +import { MockComponent } from 'ng-mocks'; +import { of } from 'rxjs'; +import { EditZustaendigeStelleButtonComponent } from '../edit-zustaendige-stelle-button/edit-zustaendige-stelle-button.component'; +import { ZustaendigeStelleButtonComponent } from '../zustaendige-stelle-button/zustaendige-stelle-button.component'; +import { ZustaendigeStelleHeaderComponent } from '../zustaendige-stelle-header/zustaendige-stelle-header.component'; +import { SearchExterneFachstelleContainerComponent } from './search-externe-fachstelle-container.component'; + +describe('SearchExterneFachstelleContainerComponent', () => { + let component: SearchExterneFachstelleContainerComponent; + let fixture: ComponentFixture<SearchExterneFachstelleContainerComponent>; + + const externeFachstelleResource: ExterneFachstelleResource = createExterneFachstelleResource(); + + let externeFachstelleService: Mock<ExterneFachstelleService>; + + beforeEach(async () => { + externeFachstelleService = { + ...mock(ExterneFachstelleService), + getSelectedResult: jest.fn().mockReturnValue(of(createExterneFachstelleResource())), + }; + TestBed.overrideComponent(SearchExterneFachstelleContainerComponent, { + set: { + providers: [ + { + provide: ZUSTAENDIGE_STELLE_SERVICE, + useValue: externeFachstelleService, + }, + ], + }, + }); + await TestBed.configureTestingModule({ + declarations: [ + SearchExterneFachstelleContainerComponent, + MockComponent(EditZustaendigeStelleButtonComponent), + MockComponent(ZustaendigeStelleButtonComponent), + MockComponent(ZustaendigeStelleHeaderComponent), + MockComponent(ExternalUnitIconComponent), + ], + providers: [ + { + provide: ExterneFachstelleService, + useValue: externeFachstelleService, + }, + ], + }).compileComponents(); + + fixture = TestBed.createComponent(SearchExterneFachstelleContainerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + describe('ngOnInt', () => { + beforeEach(() => { + component.getSelectedResult = jest.fn().mockReturnValue(of(externeFachstelleResource)); + }); + + it('should call getSelectedResult', () => { + component.ngOnInit(); + + expect(component.getSelectedResult).toHaveBeenCalled(); + }); + + it('should set externeFachstelleResource', (done) => { + component.ngOnInit(); + + component.externeFachstelleResource$.subscribe((externeFachstelleResource: ExterneFachstelleResource) => { + expect(externeFachstelleResource).toBe(externeFachstelleResource); + done(); + }); + }); + }); + + describe('ngOnDestroy', () => { + it('should clear selected result', () => { + component.ngOnDestroy(); + + expect(externeFachstelleService.clearSelectedResult).toHaveBeenCalled(); + }); + }); + + describe('get selected result', () => { + const externeFachstelleResource: ExterneFachstelleResource = createExterneFachstelleResource(); + + beforeEach(() => { + externeFachstelleService.getSelectedResult.mockReturnValue(of(externeFachstelleResource)); + }); + + it('should call service', () => { + component.getSelectedResult().subscribe(); + + expect(externeFachstelleService.getSelectedResult).toHaveBeenCalled(); + }); + + it('should call handleResult', () => { + component.handleResult = jest.fn(); + + component.getSelectedResult().subscribe(); + + expect(component.handleResult).toHaveBeenCalledWith(externeFachstelleResource); + }); + + it('should return value', (done) => { + component.handleResult = jest.fn(); + + component.getSelectedResult().subscribe((result) => { + expect(result).toBe(externeFachstelleResource); + done(); + }); + }); + }); + + describe('handle result', () => { + beforeEach(() => { + component.fieldControl = new FormControl(); + }); + + it('should patch fieldControl with resource uri', () => { + const fieldControlPatchSpy: jest.SpyInstance = (component.fieldControl.patchValue = jest.fn()); + + component.handleResult(externeFachstelleResource); + + expect(fieldControlPatchSpy).toHaveBeenCalledWith(getUrl(externeFachstelleResource)); + }); + + it('should not patch fieldControl if externeFachstelle resource is null', () => { + const fieldControlPatchSpy: jest.SpyInstance = (component.fieldControl.patchValue = jest.fn()); + + component.handleResult(null); + + expect(fieldControlPatchSpy).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/alfa-client/libs/zustaendige-stelle/src/lib/search-externe-fachstelle-container/search-externe-fachstelle-container.component.ts b/alfa-client/libs/zustaendige-stelle/src/lib/search-externe-fachstelle-container/search-externe-fachstelle-container.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..a1b23bb17a43a7536219ca39c6a6ea229f6a4498 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/src/lib/search-externe-fachstelle-container/search-externe-fachstelle-container.component.ts @@ -0,0 +1,47 @@ +import { isNotNull } from '@alfa-client/tech-shared'; +import { + ExterneFachstelleResource, + ExterneFachstelleService, + ZUSTAENDIGE_STELLE_SERVICE, + ZustaendigeStelleService, +} from '@alfa-client/zustaendige-stelle-shared'; +import { Component, Inject, Input, OnDestroy, OnInit } from '@angular/core'; +import { AbstractControl } from '@angular/forms'; +import { ResourceUri, getUrl } from '@ngxp/rest'; +import { Observable, tap } from 'rxjs'; + +@Component({ + selector: 'alfa-search-externe-fachstelle-container', + templateUrl: './search-externe-fachstelle-container.component.html', + providers: [{ provide: ZUSTAENDIGE_STELLE_SERVICE, useClass: ExterneFachstelleService }], +}) +export class SearchExterneFachstelleContainerComponent implements OnInit, OnDestroy { + @Input() public fieldControl: AbstractControl<ResourceUri>; + + public externeFachstelleResource$: Observable<ExterneFachstelleResource>; + + constructor( + @Inject(ZUSTAENDIGE_STELLE_SERVICE) + private service: ZustaendigeStelleService<ExterneFachstelleResource>, + ) {} + + ngOnInit(): void { + this.externeFachstelleResource$ = this.getSelectedResult(); + } + + ngOnDestroy(): void { + this.service.clearSelectedResult(); + } + + getSelectedResult(): Observable<ExterneFachstelleResource> { + return this.service + .getSelectedResult() + .pipe(tap((externeFachstelleResource: ExterneFachstelleResource) => this.handleResult(externeFachstelleResource))); + } + + handleResult(externeFachstelleResource: ExterneFachstelleResource): void { + if (isNotNull(externeFachstelleResource)) { + this.fieldControl.patchValue(getUrl(externeFachstelleResource)); + } + } +} diff --git a/alfa-client/libs/zustaendige-stelle/src/lib/search-organisations-einheit-container/organisations-einheit/organisations-einheit.component.html b/alfa-client/libs/zustaendige-stelle/src/lib/search-organisations-einheit-container/organisations-einheit/organisations-einheit.component.html new file mode 100644 index 0000000000000000000000000000000000000000..4dfc708d600fb2f0e9691666cc22cdcc82a9693c --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/src/lib/search-organisations-einheit-container/organisations-einheit/organisations-einheit.component.html @@ -0,0 +1 @@ +<p class="text-sm text-text">{{ address }}</p> diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/organisations-einheit-container/organisations-einheit/organisations-einheit.component.spec.ts b/alfa-client/libs/zustaendige-stelle/src/lib/search-organisations-einheit-container/organisations-einheit/organisations-einheit.component.spec.ts similarity index 75% rename from alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/organisations-einheit-container/organisations-einheit/organisations-einheit.component.spec.ts rename to alfa-client/libs/zustaendige-stelle/src/lib/search-organisations-einheit-container/organisations-einheit/organisations-einheit.component.spec.ts index 8e6eaa1ea513256ec82992961078976755078248..821ce7f843e1e2d4ef4f367959aacf360fb7f5b4 100644 --- a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/organisations-einheit-container/organisations-einheit/organisations-einheit.component.spec.ts +++ b/alfa-client/libs/zustaendige-stelle/src/lib/search-organisations-einheit-container/organisations-einheit/organisations-einheit.component.spec.ts @@ -1,14 +1,13 @@ -import { OrganisationsEinheitResource } from '@alfa-client/collaboration-shared'; +import { OrganisationsEinheitResource } from '@alfa-client/zustaendige-stelle-shared'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { createOrganisationsEinheitResource } from 'libs/collaboration-shared/test/organisations-einheit'; +import { createOrganisationsEinheitResource } from 'libs/zustaendige-stelle-shared/test/organisations-einheit'; import { OrganisationsEinheitComponent } from './organisations-einheit.component'; describe('OrganisationsEinheitComponent', () => { let component: OrganisationsEinheitComponent; let fixture: ComponentFixture<OrganisationsEinheitComponent>; - const organisationsEinheitResource: OrganisationsEinheitResource = - createOrganisationsEinheitResource(); + const organisationsEinheitResource: OrganisationsEinheitResource = createOrganisationsEinheitResource(); beforeEach(async () => { await TestBed.configureTestingModule({ @@ -30,21 +29,11 @@ describe('OrganisationsEinheitComponent', () => { component.organisationsEinheitResource = organisationsEinheitResource; - expect(component.updateByOrganisationsEinheit).toHaveBeenCalledWith( - organisationsEinheitResource, - ); + expect(component.updateByOrganisationsEinheit).toHaveBeenCalledWith(organisationsEinheitResource); }); }); describe('update by organisationsEinheit', () => { - it('should set name', () => { - component.name = null; - - component.updateByOrganisationsEinheit(organisationsEinheitResource); - - expect(component.name).toEqual(organisationsEinheitResource.name); - }); - it('should set address', () => { component.address = null; diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/organisations-einheit-container/organisations-einheit/organisations-einheit.component.ts b/alfa-client/libs/zustaendige-stelle/src/lib/search-organisations-einheit-container/organisations-einheit/organisations-einheit.component.ts similarity index 76% rename from alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/organisations-einheit-container/organisations-einheit/organisations-einheit.component.ts rename to alfa-client/libs/zustaendige-stelle/src/lib/search-organisations-einheit-container/organisations-einheit/organisations-einheit.component.ts index ff94e74f550eee641eaf4645b166838d5048badb..91889a8bced5ef09e4976e4762786646eee887be 100644 --- a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/organisations-einheit-container/organisations-einheit/organisations-einheit.component.ts +++ b/alfa-client/libs/zustaendige-stelle/src/lib/search-organisations-einheit-container/organisations-einheit/organisations-einheit.component.ts @@ -1,4 +1,4 @@ -import { Anschrift, OrganisationsEinheitResource } from '@alfa-client/collaboration-shared'; +import { Anschrift, OrganisationsEinheitResource } from '@alfa-client/zustaendige-stelle-shared'; import { Component, Input } from '@angular/core'; @Component({ @@ -6,17 +6,13 @@ import { Component, Input } from '@angular/core'; templateUrl: './organisations-einheit.component.html', }) export class OrganisationsEinheitComponent { - @Input() public set organisationsEinheitResource( - organisationsEinheit: OrganisationsEinheitResource, - ) { + @Input() public set organisationsEinheitResource(organisationsEinheit: OrganisationsEinheitResource) { this.updateByOrganisationsEinheit(organisationsEinheit); } - public name: string; public address: string; updateByOrganisationsEinheit(organisationsEinheit: OrganisationsEinheitResource): void { - this.name = organisationsEinheit.name; this.address = this.buildAddress(organisationsEinheit.anschrift); } diff --git a/alfa-client/libs/zustaendige-stelle/src/lib/search-organisations-einheit-container/search-organisations-einheit-container.component.html b/alfa-client/libs/zustaendige-stelle/src/lib/search-organisations-einheit-container/search-organisations-einheit-container.component.html new file mode 100644 index 0000000000000000000000000000000000000000..77443b9e24d398ace9485cfaa0a2a71bb83266c7 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/src/lib/search-organisations-einheit-container/search-organisations-einheit-container.component.html @@ -0,0 +1,22 @@ +<ng-container *ngIf="organisationsEinheitResource$ | async as organisationsEinheitResource; else searchButton"> + <alfa-zustaendige-stelle-header + title="Öffentliche Verwaltung" + [subTitle]="organisationsEinheitResource.name" + [isSubTitleBold]="true" + > + <ods-public-administration-icon icon /> + <alfa-organisations-einheit + data-test-id="organisations-einheit-in-collaboration" + [organisationsEinheitResource]="organisationsEinheitResource" + class="flex-1" + info + /> + <alfa-edit-zustaendige-stelle-button title="Zuständige Stelle auswählen" dataTestId="edit-organisations-einheit-button" /> + </alfa-zustaendige-stelle-header> +</ng-container> +<ng-template #searchButton> + <alfa-zustaendige-stelle-header title="Öffentliche Verwaltung" subTitle="Kommune, Amt, Ministerium"> + <ods-public-administration-icon icon /> + <alfa-zustaendige-stelle-button title="Zuständige Stelle auswählen" dataTestId="organisations-einheit-search-button" /> + </alfa-zustaendige-stelle-header> +</ng-template> diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/organisations-einheit-container/organisations-einheit-container.component.spec.ts b/alfa-client/libs/zustaendige-stelle/src/lib/search-organisations-einheit-container/search-organisations-einheit-container.component.spec.ts similarity index 51% rename from alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/organisations-einheit-container/organisations-einheit-container.component.spec.ts rename to alfa-client/libs/zustaendige-stelle/src/lib/search-organisations-einheit-container/search-organisations-einheit-container.component.spec.ts index 9fe951c4b33dbd191a352467286baaa168922529..eee16abf0001bcbe53e1991a2d6c3ac2cfc99466 100644 --- a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-form/organisations-einheit-container/organisations-einheit-container.component.spec.ts +++ b/alfa-client/libs/zustaendige-stelle/src/lib/search-organisations-einheit-container/search-organisations-einheit-container.component.spec.ts @@ -1,83 +1,66 @@ +import { Mock, existsAsHtmlElement, getMockComponent, mock } from '@alfa-client/test-utils'; import { OrganisationsEinheitResource, OrganisationsEinheitService, -} from '@alfa-client/collaboration-shared'; -import { - Mock, - dispatchEventFromFixture, - existsAsHtmlElement, - getMockComponent, - mock, -} from '@alfa-client/test-utils'; -import { OzgcloudDialogService } from '@alfa-client/ui'; -import { DialogConfig } from '@angular/cdk/dialog'; + ZUSTAENDIGE_STELLE_SERVICE, +} from '@alfa-client/zustaendige-stelle-shared'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormControl } from '@angular/forms'; import { getUrl } from '@ngxp/rest'; -import { ButtonComponent, OfficeIconComponent } from '@ods/system'; -import { createOrganisationsEinheitResource } from 'libs/collaboration-shared/test/organisations-einheit'; -import { SearchIconComponent } from 'libs/design-system/src/lib/icons/search-icon/search-icon.component'; +import { PublicAdministrationIconComponent } from '@ods/system'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; +import { createOrganisationsEinheitResource } from 'libs/zustaendige-stelle-shared/test/organisations-einheit'; import { MockComponent } from 'ng-mocks'; import { of } from 'rxjs'; -import { SearchOrganisationsEinheitContainerComponent } from '../../../search-organisations-einheit-container/search-organisations-einheit-container.component'; -import { OrganisationsEinheitContainerComponent } from './organisations-einheit-container.component'; +import { EditZustaendigeStelleButtonComponent } from '../edit-zustaendige-stelle-button/edit-zustaendige-stelle-button.component'; +import { ZustaendigeStelleButtonComponent } from '../zustaendige-stelle-button/zustaendige-stelle-button.component'; +import { ZustaendigeStelleHeaderComponent } from '../zustaendige-stelle-header/zustaendige-stelle-header.component'; import { OrganisationsEinheitComponent } from './organisations-einheit/organisations-einheit.component'; +import { SearchOrganisationsEinheitContainerComponent } from './search-organisations-einheit-container.component'; -describe('OrganisationsEinheitContainerComponent', () => { - let component: OrganisationsEinheitContainerComponent; - let fixture: ComponentFixture<OrganisationsEinheitContainerComponent>; +describe('SearchOrganisationsEinheitContainerComponent', () => { + let component: SearchOrganisationsEinheitContainerComponent; + let fixture: ComponentFixture<SearchOrganisationsEinheitContainerComponent>; - const searchOrganisationsEinheitButton: string = getDataTestIdOf( - 'organisations-einheit-search-button', - ); - const organisationsEinheitComp: string = getDataTestIdOf( - 'organisations-einheit-in-collaboration', - ); + const organisationsEinheitComp: string = getDataTestIdOf('organisations-einheit-in-collaboration'); - const organisationsEinheitResource: OrganisationsEinheitResource = - createOrganisationsEinheitResource(); + const organisationsEinheitResource: OrganisationsEinheitResource = createOrganisationsEinheitResource(); - let dialogService: Mock<OzgcloudDialogService>; - let service: Mock<OrganisationsEinheitService>; + let organisationsEinheitService: Mock<OrganisationsEinheitService>; beforeEach(async () => { - dialogService = mock(OzgcloudDialogService); - service = { + organisationsEinheitService = { ...mock(OrganisationsEinheitService), getSelectedResult: jest.fn().mockReturnValue(of(createOrganisationsEinheitResource())), }; - TestBed.overrideComponent(OrganisationsEinheitContainerComponent, { + TestBed.overrideComponent(SearchOrganisationsEinheitContainerComponent, { set: { providers: [ { - provide: OrganisationsEinheitService, - useValue: service, + provide: ZUSTAENDIGE_STELLE_SERVICE, + useValue: organisationsEinheitService, }, ], }, }); await TestBed.configureTestingModule({ declarations: [ - OrganisationsEinheitContainerComponent, - MockComponent(SearchIconComponent), - MockComponent(OfficeIconComponent), - MockComponent(ButtonComponent), + SearchOrganisationsEinheitContainerComponent, MockComponent(OrganisationsEinheitComponent), + MockComponent(ZustaendigeStelleButtonComponent), + MockComponent(ZustaendigeStelleHeaderComponent), + MockComponent(PublicAdministrationIconComponent), + MockComponent(EditZustaendigeStelleButtonComponent), ], providers: [ - { - provide: OzgcloudDialogService, - useValue: dialogService, - }, { provide: OrganisationsEinheitService, - useValue: service, + useValue: organisationsEinheitService, }, ], }).compileComponents(); - fixture = TestBed.createComponent(OrganisationsEinheitContainerComponent); + fixture = TestBed.createComponent(SearchOrganisationsEinheitContainerComponent); component = fixture.componentInstance; fixture.detectChanges(); }); @@ -92,8 +75,6 @@ describe('OrganisationsEinheitContainerComponent', () => { }); it('should call getSelectedResult', () => { - component.getSelectedResult = jest.fn(); - component.ngOnInit(); expect(component.getSelectedResult).toHaveBeenCalled(); @@ -102,27 +83,32 @@ describe('OrganisationsEinheitContainerComponent', () => { it('should set organisationsEinheitResource', (done) => { component.ngOnInit(); - component.organisationsEinheitResource$.subscribe( - (organisationsEinheitResource: OrganisationsEinheitResource) => { - expect(organisationsEinheitResource).toBe(organisationsEinheitResource); - done(); - }, - ); + component.organisationsEinheitResource$.subscribe((organisationsEinheitResource: OrganisationsEinheitResource) => { + expect(organisationsEinheitResource).toBe(organisationsEinheitResource); + done(); + }); + }); + }); + + describe('ngOnDestory', () => { + it('should clear selected result', () => { + component.ngOnDestroy(); + + expect(organisationsEinheitService.clearSelectedResult).toHaveBeenCalled(); }); }); describe('get selected result', () => { - const organisationsEinheitResource: OrganisationsEinheitResource = - createOrganisationsEinheitResource(); + const organisationsEinheitResource: OrganisationsEinheitResource = createOrganisationsEinheitResource(); beforeEach(() => { - service.getSelectedResult.mockReturnValue(of(organisationsEinheitResource)); + organisationsEinheitService.getSelectedResult.mockReturnValue(of(organisationsEinheitResource)); }); it('should call service', () => { component.getSelectedResult().subscribe(); - expect(service.getSelectedResult).toHaveBeenCalled(); + expect(organisationsEinheitService.getSelectedResult).toHaveBeenCalled(); }); it('should call handleResult', () => { @@ -149,8 +135,7 @@ describe('OrganisationsEinheitContainerComponent', () => { }); it('should patch fieldControl with resource uri', () => { - const fieldControlPatchSpy: jest.SpyInstance = (component.fieldControl.patchValue = - jest.fn()); + const fieldControlPatchSpy: jest.SpyInstance = (component.fieldControl.patchValue = jest.fn()); component.handleResult(organisationsEinheitResource); @@ -158,8 +143,7 @@ describe('OrganisationsEinheitContainerComponent', () => { }); it('should not patch fieldControl if organisationsEinheit resource is null', () => { - const fieldControlPatchSpy: jest.SpyInstance = (component.fieldControl.patchValue = - jest.fn()); + const fieldControlPatchSpy: jest.SpyInstance = (component.fieldControl.patchValue = jest.fn()); component.handleResult(null); @@ -167,26 +151,6 @@ describe('OrganisationsEinheitContainerComponent', () => { }); }); - describe('search zustaendige stelle button', () => { - beforeEach(() => { - component.organisationsEinheitResource$ = of(undefined); - }); - - it('should be visible on missing organisationsEinheit', () => { - fixture.detectChanges(); - - existsAsHtmlElement(fixture, searchOrganisationsEinheitButton); - }); - it('should call openSearchDialog', () => { - component.openSearchDialog = jest.fn(); - - fixture.detectChanges(); - dispatchEventFromFixture(fixture, searchOrganisationsEinheitButton, 'clickEmitter'); - - expect(component.openSearchDialog).toHaveBeenCalled(); - }); - }); - describe('organisationsEinheit component', () => { beforeEach(() => { component.organisationsEinheitResource$ = of(organisationsEinheitResource); @@ -208,21 +172,4 @@ describe('OrganisationsEinheitContainerComponent', () => { expect(comp.organisationsEinheitResource).toBe(organisationsEinheitResource); }); }); - - describe('open search dialog', () => { - it('should call dialog service', () => { - const DIALOG_CONFIG: DialogConfig = { - backdropClass: ['backdrop-blur-1', 'bg-greybackdrop'], - }; - - component.openSearchDialog(); - - expect(dialogService.openInCallingComponentContext).toHaveBeenCalledWith( - SearchOrganisationsEinheitContainerComponent, - component.viewContainerRef, - null, - DIALOG_CONFIG, - ); - }); - }); }); diff --git a/alfa-client/libs/zustaendige-stelle/src/lib/search-organisations-einheit-container/search-organisations-einheit-container.component.ts b/alfa-client/libs/zustaendige-stelle/src/lib/search-organisations-einheit-container/search-organisations-einheit-container.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..4ce7deee0316075aba1c8888cc5832c2f3181f87 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/src/lib/search-organisations-einheit-container/search-organisations-einheit-container.component.ts @@ -0,0 +1,47 @@ +import { isNotNull } from '@alfa-client/tech-shared'; +import { + OrganisationsEinheitResource, + OrganisationsEinheitService, + ZUSTAENDIGE_STELLE_SERVICE, + ZustaendigeStelleService, +} from '@alfa-client/zustaendige-stelle-shared'; +import { Component, Inject, Input, OnDestroy, OnInit } from '@angular/core'; +import { AbstractControl } from '@angular/forms'; +import { ResourceUri, getUrl } from '@ngxp/rest'; +import { Observable, tap } from 'rxjs'; + +@Component({ + selector: 'alfa-search-organisations-einheit-container', + templateUrl: './search-organisations-einheit-container.component.html', + providers: [{ provide: ZUSTAENDIGE_STELLE_SERVICE, useClass: OrganisationsEinheitService }], +}) +export class SearchOrganisationsEinheitContainerComponent implements OnInit, OnDestroy { + @Input() public fieldControl: AbstractControl<ResourceUri>; + + public organisationsEinheitResource$: Observable<OrganisationsEinheitResource>; + + constructor( + @Inject(ZUSTAENDIGE_STELLE_SERVICE) + private service: ZustaendigeStelleService<OrganisationsEinheitResource>, + ) {} + + ngOnInit(): void { + this.organisationsEinheitResource$ = this.getSelectedResult(); + } + + ngOnDestroy(): void { + this.service.clearSelectedResult(); + } + + getSelectedResult(): Observable<OrganisationsEinheitResource> { + return this.service + .getSelectedResult() + .pipe(tap((organisationsEinheitResource: OrganisationsEinheitResource) => this.handleResult(organisationsEinheitResource))); + } + + handleResult(organisationsEinheitResource: OrganisationsEinheitResource): void { + if (isNotNull(organisationsEinheitResource)) { + this.fieldControl.patchValue(getUrl(organisationsEinheitResource)); + } + } +} diff --git a/alfa-client/libs/zustaendige-stelle/src/lib/search-zustaendige-stelle-dialog/search-zustaendige-stelle-dialog.component.html b/alfa-client/libs/zustaendige-stelle/src/lib/search-zustaendige-stelle-dialog/search-zustaendige-stelle-dialog.component.html new file mode 100644 index 0000000000000000000000000000000000000000..ba1e3274e4abdbe281712544b86d398583b7f239 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/src/lib/search-zustaendige-stelle-dialog/search-zustaendige-stelle-dialog.component.html @@ -0,0 +1,15 @@ +<div class="my-32 flex h-screen flex-col gap-2"> + <div class="flex gap-48 py-6 lg:gap-96"> + <h1 class="text-xl font-bold text-primary">{{ title }}</h1> + <ods-button variant="icon" size="fit" (clickEmitter)="closeDialog()" dataTestId="close-search-dialog"> + <ods-close-icon class="fill-primary" icon /> + </ods-button> + </div> + <alfa-search-zustaendige-stelle-form + data-test-id="search-organisations-einheit" + [searchResults]="searchResults$ | async" + (search)="search($event)" + (selectSearchResult)="selectSearchResult($event)" + (clearSearchResult)="clearSearchResult()" + ></alfa-search-zustaendige-stelle-form> +</div> diff --git a/alfa-client/libs/collaboration/src/lib/search-organisations-einheit-container/search-organisations-einheit-container.component.spec.ts b/alfa-client/libs/zustaendige-stelle/src/lib/search-zustaendige-stelle-dialog/search-zustaendige-stelle-dialog.component.spec.ts similarity index 54% rename from alfa-client/libs/collaboration/src/lib/search-organisations-einheit-container/search-organisations-einheit-container.component.spec.ts rename to alfa-client/libs/zustaendige-stelle/src/lib/search-zustaendige-stelle-dialog/search-zustaendige-stelle-dialog.component.spec.ts index 69c11f3b7ff394d26ec6472161c281fe59ff2cae..adb12daf7e4ec5b14e8c3e505413869531193abb 100644 --- a/alfa-client/libs/collaboration/src/lib/search-organisations-einheit-container/search-organisations-einheit-container.component.spec.ts +++ b/alfa-client/libs/zustaendige-stelle/src/lib/search-zustaendige-stelle-dialog/search-zustaendige-stelle-dialog.component.spec.ts @@ -1,77 +1,61 @@ +import { ToEmbeddedResourcesPipe } from '@alfa-client/tech-shared'; +import { EventData, Mock, dialogRefMock, getMockComponent, mock, triggerEvent } from '@alfa-client/test-utils'; import { - OrganisationsEinheitListResource, OrganisationsEinheitResource, OrganisationsEinheitService, -} from '@alfa-client/collaboration-shared'; -import { - StateResource, - ToEmbeddedResourcesPipe, - createStateResource, -} from '@alfa-client/tech-shared'; -import { - EventData, - Mock, - dialogRefMock, - getMockComponent, - mock, - triggerEvent, -} from '@alfa-client/test-utils'; -import { DialogRef } from '@angular/cdk/dialog'; + ZUSTAENDIGE_STELLE_SERVICE, +} from '@alfa-client/zustaendige-stelle-shared'; +import { DIALOG_DATA, DialogRef } from '@angular/cdk/dialog'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import faker from '@faker-js/faker'; -import { ButtonComponent, CloseIconComponent } from '@ods/system'; -import { - createOrganisationsEinheitListResource, - createOrganisationsEinheitResource, - createOrganisationsEinheitResources, -} from 'libs/collaboration-shared/test/organisations-einheit'; -import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; +import { faker } from '@faker-js/faker'; +import { Resource } from '@ngxp/rest'; +import { ButtonComponent, CloseIconComponent, InstantSearchResult } from '@ods/system'; +import { createInstantSearchResult } from 'libs/design-system/src/test/search'; import { MockComponent } from 'ng-mocks'; import { of } from 'rxjs'; -import { SearchOrganisationsEinheitContainerComponent } from './search-organisations-einheit-container.component'; -import { SearchOrganisationsEinheitFormComponent } from './search-organisations-einheit-form/search-organisations-einheit-form.component'; +import { getDataTestIdOf } from '../../../../tech-shared/test/data-test'; +import { createOrganisationsEinheitResource } from '../../../../zustaendige-stelle-shared/test/organisations-einheit'; +import { SearchZustaendigeStelleDialogComponent } from '././search-zustaendige-stelle-dialog.component'; +import { SearchZustaendigeStelleFormComponent } from './search-zustaendige-stelle-form/search-zustaendige-stelle-form.component'; -describe('SearchOrganisationsEinheitContainerComponent', () => { - let component: SearchOrganisationsEinheitContainerComponent; - let fixture: ComponentFixture<SearchOrganisationsEinheitContainerComponent>; +describe('SearchZustaendigeStelleDialogComponent', () => { + let component: SearchZustaendigeStelleDialogComponent<Resource>; + let fixture: ComponentFixture<SearchZustaendigeStelleDialogComponent<Resource>>; const searchOrganisationsEinheitComp: string = getDataTestIdOf('search-organisations-einheit'); const service: Mock<OrganisationsEinheitService> = mock(OrganisationsEinheitService); + const title: string = 'dummyTitle'; - const organisationsEinheitResource: OrganisationsEinheitResource = - createOrganisationsEinheitResource(); - const organisationsEinheitResources: OrganisationsEinheitResource[] = - createOrganisationsEinheitResources(); - const organisationsEinheitListResource: OrganisationsEinheitListResource = - createOrganisationsEinheitListResource(organisationsEinheitResources); - const organisationsEinheitStateListResource: StateResource<OrganisationsEinheitListResource> = - createStateResource(organisationsEinheitListResource); + const organisationsEinheitResource: OrganisationsEinheitResource = createOrganisationsEinheitResource(); beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [ - SearchOrganisationsEinheitContainerComponent, + SearchZustaendigeStelleDialogComponent, ToEmbeddedResourcesPipe, - MockComponent(SearchOrganisationsEinheitFormComponent), + MockComponent(SearchZustaendigeStelleFormComponent), MockComponent(ButtonComponent), MockComponent(CloseIconComponent), ], providers: [ { - provide: OrganisationsEinheitService, + provide: ZUSTAENDIGE_STELLE_SERVICE, useValue: service, }, { provide: DialogRef, useValue: dialogRefMock, }, + { + provide: DIALOG_DATA, + useValue: title, + }, ], }).compileComponents(); - fixture = TestBed.createComponent(SearchOrganisationsEinheitContainerComponent); + fixture = TestBed.createComponent(SearchZustaendigeStelleDialogComponent); component = fixture.componentInstance; - component.organisationsEinheitStateListResource$ = of(organisationsEinheitStateListResource); fixture.detectChanges(); }); @@ -88,39 +72,53 @@ describe('SearchOrganisationsEinheitContainerComponent', () => { }); describe('onKeyDownHandler', () => { - it('should prevent default behavior for enter key', () => { + it('should prevent default behavior for enter key on non buttons', () => { const keyboardEvent: KeyboardEvent = { ...new KeyboardEvent('enter'), key: 'Enter', preventDefault: jest.fn(), + target: new EventTarget(), }; component.onKeyDownHandler(keyboardEvent); expect(keyboardEvent.preventDefault).toHaveBeenCalled(); }); + + it('should not prevent default behavior for enter key on buttons', () => { + const keyboardEvent: KeyboardEvent = { + ...new KeyboardEvent('enter'), + key: 'Enter', + preventDefault: jest.fn(), + target: { ...new EventTarget(), tagName: 'BUTTON' } as Element, + }; + + component.onKeyDownHandler(keyboardEvent); + + expect(keyboardEvent.preventDefault).not.toHaveBeenCalled(); + }); }); describe('search organisationsEinheit component', () => { + const result: InstantSearchResult<Resource> = createInstantSearchResult(); + beforeEach(() => { - component.organisationsEinheitStateListResource$ = of(organisationsEinheitStateListResource); + component.searchResults$ = of([result]); fixture.detectChanges(); }); - it('should be called with organisationsEinheiten', () => { - const comp: SearchOrganisationsEinheitFormComponent = - getMockComponent<SearchOrganisationsEinheitFormComponent>( - fixture, - SearchOrganisationsEinheitFormComponent, - ); + it('should be called with searchResult', () => { + const comp: SearchZustaendigeStelleFormComponent<Resource> = getMockComponent< + SearchZustaendigeStelleFormComponent<Resource> + >(fixture, SearchZustaendigeStelleFormComponent); - expect(comp.organisationsEinheiten).toEqual(organisationsEinheitResources); + expect(comp.searchResults).toEqual([result]); }); it('should call search on openSearchDialog output', () => { component.search = jest.fn(); - const searchBy: string = faker.random.word(); - const eventData: EventData<SearchOrganisationsEinheitContainerComponent> = { + const searchBy: string = faker.word.sample(); + const eventData: EventData<SearchZustaendigeStelleDialogComponent<Resource>> = { fixture, elementSelector: searchOrganisationsEinheitComp, name: 'search', @@ -135,7 +133,7 @@ describe('SearchOrganisationsEinheitContainerComponent', () => { it('should call selectSearchResult on selectSearchResult output', () => { component.selectSearchResult = jest.fn(); - const eventData: EventData<SearchOrganisationsEinheitContainerComponent> = { + const eventData: EventData<SearchZustaendigeStelleDialogComponent<Resource>> = { fixture, elementSelector: searchOrganisationsEinheitComp, name: 'selectSearchResult', @@ -150,7 +148,7 @@ describe('SearchOrganisationsEinheitContainerComponent', () => { it('should call clearSearchResult', () => { component.clearSearchResult = jest.fn(); - const eventData: EventData<SearchOrganisationsEinheitContainerComponent> = { + const eventData: EventData<SearchZustaendigeStelleDialogComponent<Resource>> = { fixture, elementSelector: searchOrganisationsEinheitComp, name: 'clearSearchResult', @@ -164,7 +162,7 @@ describe('SearchOrganisationsEinheitContainerComponent', () => { }); describe('search', () => { - const searchBy: string = faker.random.word(); + const searchBy: string = faker.word.sample(); it('should call service', () => { component.search(searchBy); @@ -216,4 +214,22 @@ describe('SearchOrganisationsEinheitContainerComponent', () => { expect(dialogRefMock.close).toHaveBeenCalled(); }); }); + + describe('isNotButtonElement', () => { + it('should return false', () => { + const element: Element = { tagName: 'BUTTON' } as Element; + + const result: boolean = component.isNotButtonElement(element); + + expect(result).toBe(false); + }); + + it('should return true', () => { + const element: Element = { tagName: 'INPUT' } as Element; + + const result: boolean = component.isNotButtonElement(element); + + expect(result).toBe(true); + }); + }); }); diff --git a/alfa-client/libs/zustaendige-stelle/src/lib/search-zustaendige-stelle-dialog/search-zustaendige-stelle-dialog.component.ts b/alfa-client/libs/zustaendige-stelle/src/lib/search-zustaendige-stelle-dialog/search-zustaendige-stelle-dialog.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..848ffc0d98a31c99b190f659cbda6b528936e301 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/src/lib/search-zustaendige-stelle-dialog/search-zustaendige-stelle-dialog.component.ts @@ -0,0 +1,56 @@ +import { ZUSTAENDIGE_STELLE_SERVICE, ZustaendigeStelleService } from '@alfa-client/zustaendige-stelle-shared'; +import { DIALOG_DATA, DialogRef } from '@angular/cdk/dialog'; +import { Component, HostListener, Inject, OnInit } from '@angular/core'; +import { Resource } from '@ngxp/rest'; +import { InstantSearchResult } from '@ods/system'; +import { Observable } from 'rxjs'; + +//TODO rename to SearchZustaendigeStelleDialogContainerComponent +@Component({ + selector: 'search-zustaendige-stelle-dialog', + templateUrl: './search-zustaendige-stelle-dialog.component.html', +}) +export class SearchZustaendigeStelleDialogComponent<T extends Resource> implements OnInit { + public searchResults$: Observable<InstantSearchResult<T>[]>; + + constructor( + private dialogRef: DialogRef, + @Inject(ZUSTAENDIGE_STELLE_SERVICE) + private service: ZustaendigeStelleService<T>, + @Inject(DIALOG_DATA) public title: string, + ) {} + + ngOnInit(): void { + this.searchResults$ = this.service.getSearchResultList(); + } + + @HostListener('document:keydown', ['$event']) + onKeyDownHandler(e: KeyboardEvent) { + if (e.key === 'Enter' && this.isNotButtonElement(e.target as Element)) { + e.preventDefault(); + } + } + + public search(searchBy: string): void { + this.service.search(searchBy); + } + + public selectSearchResult(zustaendigeStelle: T): void { + this.service.selectSearchResult(zustaendigeStelle); + this.service.clearSearchResult(); + this.dialogRef.close(); + } + + public clearSearchResult(): void { + this.service.clearSearchResult(); + } + + public closeDialog(): void { + this.clearSearchResult(); + this.dialogRef.close(); + } + + public isNotButtonElement(e: Element): boolean { + return e.tagName !== 'BUTTON'; + } +} diff --git a/alfa-client/libs/collaboration/src/lib/search-organisations-einheit-container/search-organisations-einheit-form/search-organisations-einheit-form.component.html b/alfa-client/libs/zustaendige-stelle/src/lib/search-zustaendige-stelle-dialog/search-zustaendige-stelle-form/search-zustaendige-stelle-form.component.html similarity index 89% rename from alfa-client/libs/collaboration/src/lib/search-organisations-einheit-container/search-organisations-einheit-form/search-organisations-einheit-form.component.html rename to alfa-client/libs/zustaendige-stelle/src/lib/search-zustaendige-stelle-dialog/search-zustaendige-stelle-form/search-zustaendige-stelle-form.component.html index 7252665d682c7686f3ae4b63e4cce1567edf4f9d..6c888f1981e40ff86e638086a34a92d0b6c8c1d1 100644 --- a/alfa-client/libs/collaboration/src/lib/search-organisations-einheit-container/search-organisations-einheit-form/search-organisations-einheit-form.component.html +++ b/alfa-client/libs/zustaendige-stelle/src/lib/search-zustaendige-stelle-dialog/search-zustaendige-stelle-form/search-zustaendige-stelle-form.component.html @@ -7,6 +7,6 @@ (searchResultSelected)="selectSearchResult.emit($event.data)" (searchQueryChanged)="search.emit($event.searchBy)" (searchQueryCleared)="clearSearchResult.emit()" - (searchResultClosed)="clearSearchResult.emit()" + (searchClosed)="clearSearchResult.emit()" ></ods-instant-search> </form> diff --git a/alfa-client/libs/zustaendige-stelle/src/lib/search-zustaendige-stelle-dialog/search-zustaendige-stelle-form/search-zustaendige-stelle-form.component.spec.ts b/alfa-client/libs/zustaendige-stelle/src/lib/search-zustaendige-stelle-dialog/search-zustaendige-stelle-form/search-zustaendige-stelle-form.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..2593d6121f7c9efd004e92e063963e6263b2557e --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/src/lib/search-zustaendige-stelle-dialog/search-zustaendige-stelle-form/search-zustaendige-stelle-form.component.spec.ts @@ -0,0 +1,120 @@ +import { EventData, Mock, getMockComponent, mock, triggerEvent } from '@alfa-client/test-utils'; +import { OrganisationsEinheitResource } from '@alfa-client/zustaendige-stelle-shared'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ReactiveFormsModule } from '@angular/forms'; +import { faker } from '@faker-js/faker'; +import { Resource } from '@ngxp/rest'; +import { InstantSearchComponent, InstantSearchResult } from '@ods/system'; +import { MockComponent } from 'ng-mocks'; +import { createInstantSearchResult } from '../../../../../design-system/src/test/search'; +import { getDataTestIdOf } from '../../../../../tech-shared/test/data-test'; +import { createOrganisationsEinheitResource } from '../../../../../zustaendige-stelle-shared/test/organisations-einheit'; +import { SearchZustaendigeStelleFormservice } from '../search-zustaendige-stelle.formservice'; +import { SearchZustaendigeStelleFormComponent } from './search-zustaendige-stelle-form.component'; + +describe('SearchZustaendigeStelleFormComponent', () => { + let component: SearchZustaendigeStelleFormComponent<Resource>; + let fixture: ComponentFixture<SearchZustaendigeStelleFormComponent<Resource>>; + + const searchComp: string = getDataTestIdOf('search'); + + const formService: Mock<SearchZustaendigeStelleFormservice> = mock(SearchZustaendigeStelleFormservice); + + const instantSearchResult: InstantSearchResult<Resource> = createInstantSearchResult<OrganisationsEinheitResource>(); + const organisationsEinheitResource: OrganisationsEinheitResource = createOrganisationsEinheitResource(); + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ReactiveFormsModule], + declarations: [SearchZustaendigeStelleFormComponent, MockComponent(InstantSearchComponent)], + providers: [ + { + provide: SearchZustaendigeStelleFormservice, + useValue: formService, + }, + ], + }).compileComponents(); + + fixture = TestBed.createComponent(SearchZustaendigeStelleFormComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + describe('instant search component', () => { + it('should be called with search results', () => { + component.searchResults = [instantSearchResult]; + + fixture.detectChanges(); + + expect(getInstantSearchComponent().searchResults).toEqual([instantSearchResult]); + }); + + function getInstantSearchComponent(): InstantSearchComponent { + return getMockComponent<InstantSearchComponent>(fixture, InstantSearchComponent); + } + + it('should emit selected search result on searchResultSelected output', () => { + const selectSearchResultSpy: jest.SpyInstance = (component.selectSearchResult.emit = jest.fn()); + const eventData: EventData<SearchZustaendigeStelleFormComponent<Resource>> = { + fixture, + elementSelector: searchComp, + name: 'searchResultSelected', + data: { data: organisationsEinheitResource }, + }; + + triggerEvent(eventData); + + expect(selectSearchResultSpy).toHaveBeenCalledWith(organisationsEinheitResource); + }); + + it('should emit search on searchQueryChanged output', () => { + const searchSpy: jest.SpyInstance = (component.search.emit = jest.fn()); + const searchBy: string = faker.lorem.word(); + const eventData: EventData<SearchZustaendigeStelleFormComponent<Resource>> = { + fixture, + elementSelector: searchComp, + name: 'searchQueryChanged', + data: { searchBy }, + }; + + triggerEvent(eventData); + + expect(searchSpy).toHaveBeenCalledWith(searchBy); + }); + + describe('should emit clear search result', () => { + let clearSearchResultSpy: jest.SpyInstance; + let eventData: EventData<SearchZustaendigeStelleFormComponent<Resource>>; + + beforeEach(() => { + clearSearchResultSpy = component.clearSearchResult.emit = jest.fn(); + eventData = { + fixture, + elementSelector: searchComp, + name: 'TBD', + data: { searchBy: faker.lorem.word() }, + }; + }); + + it('on searchClosed output', () => { + eventData = { ...eventData, name: 'searchClosed' }; + + triggerEvent(eventData); + + expect(clearSearchResultSpy).toHaveBeenCalledWith(); + }); + + it('on searchQueryCleared output', () => { + eventData = { ...eventData, name: 'searchClosed' }; + + triggerEvent(eventData); + + expect(clearSearchResultSpy).toHaveBeenCalled(); + }); + }); + }); +}); diff --git a/alfa-client/libs/zustaendige-stelle/src/lib/search-zustaendige-stelle-dialog/search-zustaendige-stelle-form/search-zustaendige-stelle-form.component.ts b/alfa-client/libs/zustaendige-stelle/src/lib/search-zustaendige-stelle-dialog/search-zustaendige-stelle-form/search-zustaendige-stelle-form.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..bc616cec372cb5d411c5e984d63fdcfc9cb3eca8 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/src/lib/search-zustaendige-stelle-dialog/search-zustaendige-stelle-form/search-zustaendige-stelle-form.component.ts @@ -0,0 +1,19 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { Resource } from '@ngxp/rest'; +import { InstantSearchResult } from '@ods/system'; +import { SearchZustaendigeStelleFormservice } from '../search-zustaendige-stelle.formservice'; + +@Component({ + selector: 'alfa-search-zustaendige-stelle-form', + templateUrl: './search-zustaendige-stelle-form.component.html', + providers: [SearchZustaendigeStelleFormservice], +}) +export class SearchZustaendigeStelleFormComponent<T extends Resource> { + @Input() public searchResults: InstantSearchResult<T>[]; + + @Output() public search: EventEmitter<string> = new EventEmitter(); + @Output() public selectSearchResult: EventEmitter<T> = new EventEmitter(); + @Output() public clearSearchResult: EventEmitter<string> = new EventEmitter(); + + constructor(public formService: SearchZustaendigeStelleFormservice) {} +} diff --git a/alfa-client/libs/collaboration/src/lib/search-organisations-einheit-container/search-organisations-einheit.formservice.ts b/alfa-client/libs/zustaendige-stelle/src/lib/search-zustaendige-stelle-dialog/search-zustaendige-stelle.formservice.ts similarity index 89% rename from alfa-client/libs/collaboration/src/lib/search-organisations-einheit-container/search-organisations-einheit.formservice.ts rename to alfa-client/libs/zustaendige-stelle/src/lib/search-zustaendige-stelle-dialog/search-zustaendige-stelle.formservice.ts index 2b63e2097a660615148dce5468d7b017976b64ef..95a21678407e72ce5b25ec54cb3113ddd0ef7344 100644 --- a/alfa-client/libs/collaboration/src/lib/search-organisations-einheit-container/search-organisations-einheit.formservice.ts +++ b/alfa-client/libs/zustaendige-stelle/src/lib/search-zustaendige-stelle-dialog/search-zustaendige-stelle.formservice.ts @@ -3,7 +3,7 @@ import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; import { ResourceUri } from '@ngxp/rest'; @Injectable() -export class SearchOrganisationsEinheitFormService { +export class SearchZustaendigeStelleFormservice { public form: FormGroup; public readonly SEARCH_FIELD: string = 'search'; diff --git a/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle-button/zustaendige-stelle-button.component.html b/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle-button/zustaendige-stelle-button.component.html new file mode 100644 index 0000000000000000000000000000000000000000..9c1bebdcea3451828f6a4270bb72620fe1478e3c --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle-button/zustaendige-stelle-button.component.html @@ -0,0 +1,11 @@ +<div class="flex items-center gap-3"> + <ods-button + variant="outline" + text="Zuständige Stelle auswählen" + data-test-class="zustaendige-stelle-button" + [dataTestId]="dataTestId" + (clickEmitter)="openSearchDialog()" + > + <ods-search-icon icon /> + </ods-button> +</div> diff --git a/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle-button/zustaendige-stelle-button.component.spec.ts b/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle-button/zustaendige-stelle-button.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..ede463cfcbfcc1baabe15f5564c7ebe9e12c7d11 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle-button/zustaendige-stelle-button.component.spec.ts @@ -0,0 +1,69 @@ +import { dispatchEventFromFixture, Mock, mock } from '@alfa-client/test-utils'; +import { OzgcloudDialogService } from '@alfa-client/ui'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { faker } from '@faker-js/faker'; +import { Resource } from '@ngxp/rest'; +import { ButtonComponent, SearchIconComponent } from '@ods/system'; +import { getDataTestClassOf } from 'libs/tech-shared/test/data-test'; +import { MockComponent } from 'ng-mocks'; +import { SearchZustaendigeStelleDialogComponent } from '../search-zustaendige-stelle-dialog/search-zustaendige-stelle-dialog.component'; +import { ZustaendigeStelleButtonComponent } from './zustaendige-stelle-button.component'; + +describe('ZustaendigeStelleButtonComponent', () => { + let component: ZustaendigeStelleButtonComponent<Resource>; + let fixture: ComponentFixture<ZustaendigeStelleButtonComponent<Resource>>; + + const title: string = faker.lorem.words(3); + const dataTestId: string = faker.lorem.word(); + + const button: string = getDataTestClassOf('zustaendige-stelle-button'); + + let dialogService: Mock<OzgcloudDialogService>; + + beforeEach(async () => { + dialogService = mock(OzgcloudDialogService); + await TestBed.configureTestingModule({ + declarations: [ZustaendigeStelleButtonComponent], + imports: [MockComponent(SearchIconComponent), MockComponent(ButtonComponent)], + providers: [ + { + provide: OzgcloudDialogService, + useValue: dialogService, + }, + ], + }).compileComponents(); + + fixture = TestBed.createComponent(ZustaendigeStelleButtonComponent); + component = fixture.componentInstance; + component.title = title; + component.dataTestId = dataTestId; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + describe('search zustaendige stelle button', () => { + it('should call openSearchDialog', () => { + component.openSearchDialog = jest.fn(); + + fixture.detectChanges(); + dispatchEventFromFixture(fixture, button, 'clickEmitter'); + + expect(component.openSearchDialog).toHaveBeenCalled(); + }); + }); + + describe('open search dialog', () => { + it('should call dialog service', () => { + component.openSearchDialog(); + + expect(dialogService.openFullScreenDialog).toHaveBeenCalledWith( + SearchZustaendigeStelleDialogComponent, + component.viewContainerRef, + title, + ); + }); + }); +}); diff --git a/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle-button/zustaendige-stelle-button.component.ts b/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle-button/zustaendige-stelle-button.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..7dcd968fe1c69d4a5ed7f7af3f256d93716cb075 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle-button/zustaendige-stelle-button.component.ts @@ -0,0 +1,26 @@ +import { OzgcloudDialogService } from '@alfa-client/ui'; +import { Component, Input, ViewContainerRef } from '@angular/core'; +import { Resource } from '@ngxp/rest'; +import { SearchZustaendigeStelleDialogComponent } from '../search-zustaendige-stelle-dialog/search-zustaendige-stelle-dialog.component'; + +@Component({ + selector: 'alfa-zustaendige-stelle-button', + templateUrl: './zustaendige-stelle-button.component.html', +}) +export class ZustaendigeStelleButtonComponent<T extends Resource> { + @Input() public dataTestId: string; + @Input() title: string; + + constructor( + private readonly dialogService: OzgcloudDialogService, + readonly viewContainerRef: ViewContainerRef, + ) {} + + public openSearchDialog(): void { + this.dialogService.openFullScreenDialog<SearchZustaendigeStelleDialogComponent<T>>( + SearchZustaendigeStelleDialogComponent, + this.viewContainerRef, + this.title, + ); + } +} diff --git a/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle-header/zustaendige-stelle-header.component.html b/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle-header/zustaendige-stelle-header.component.html new file mode 100644 index 0000000000000000000000000000000000000000..eda66df0206c64ce27affabd18339fa0933e2689 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle-header/zustaendige-stelle-header.component.html @@ -0,0 +1,13 @@ +<div class="flex"> + <div class="flex flex-1 gap-3"> + <ng-content select="[icon]" /> + <div class="flex flex-1 flex-col text-base"> + <p class="text-primary" data-test-id="zustaendige-stelle-header-title">{{ title }}</p> + <p class="text-text" [class.font-medium]="isSubTitleBold" data-test-id="zustaendige-stelle-header-sub-title"> + {{ subTitle }} + </p> + </div> + <ng-content select="[info]" /> + </div> + <ng-content /> +</div> diff --git a/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle-header/zustaendige-stelle-header.component.spec.ts b/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle-header/zustaendige-stelle-header.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..a9f48ee516c4a0a1419de895de4d0ba201dbf495 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle-header/zustaendige-stelle-header.component.spec.ts @@ -0,0 +1,71 @@ +import { getElementFromFixture } from '@alfa-client/test-utils'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; +import { ZustaendigeStelleHeaderComponent } from './zustaendige-stelle-header.component'; + +describe('ZustaendigeStelleHeaderComponent', () => { + let component: ZustaendigeStelleHeaderComponent; + let fixture: ComponentFixture<ZustaendigeStelleHeaderComponent>; + const titleSelector = getDataTestIdOf('zustaendige-stelle-header-title'); + const subTitleSelector = getDataTestIdOf('zustaendige-stelle-header-sub-title'); + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ZustaendigeStelleHeaderComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(ZustaendigeStelleHeaderComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + describe('template', () => { + describe('title', () => { + it('should show title', () => { + component.title = 'I am test title'; + fixture.detectChanges(); + + const titleElement: HTMLElement = getElementFromFixture(fixture, titleSelector); + + expect(titleElement.innerHTML).toContain('I am test title'); + }); + }); + + describe('subTitle', () => { + it('should show sub title', () => { + component.subTitle = 'I am test sub title'; + fixture.detectChanges(); + + const subTitleElement: HTMLElement = getElementFromFixture(fixture, subTitleSelector); + + expect(subTitleElement.innerHTML).toContain('I am test sub title'); + }); + }); + + describe('isSubTitleBold', () => { + it('should add class if true', () => { + component.subTitle = 'I am test sub title'; + component.isSubTitleBold = true; + fixture.detectChanges(); + + const subTitleElement: HTMLElement = getElementFromFixture(fixture, subTitleSelector); + + expect(subTitleElement.classList).toContain('font-medium'); + }); + + it('should not add class if false', () => { + component.subTitle = 'I am test sub title'; + component.isSubTitleBold = false; + fixture.detectChanges(); + + const subTitleElement: HTMLElement = getElementFromFixture(fixture, subTitleSelector); + + expect(subTitleElement.classList).not.toContain('font-medium'); + }); + }); + }); +}); diff --git a/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle-header/zustaendige-stelle-header.component.ts b/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle-header/zustaendige-stelle-header.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..1315d4eb444c2ee5e27976a762ef934a9b8bedc0 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle-header/zustaendige-stelle-header.component.ts @@ -0,0 +1,11 @@ +import { Component, Input } from '@angular/core'; + +@Component({ + selector: 'alfa-zustaendige-stelle-header', + templateUrl: './zustaendige-stelle-header.component.html', +}) +export class ZustaendigeStelleHeaderComponent { + @Input() title: string; + @Input() subTitle: string; + @Input() isSubTitleBold: boolean = false; +} diff --git a/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle.module.spec.ts b/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle.module.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..4314534118ddd91873bfb530f3accd1493b11363 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle.module.spec.ts @@ -0,0 +1,14 @@ +import { TestBed } from '@angular/core/testing'; +import { ZustaendigeStelleModule } from './zustaendige-stelle.module'; + +describe('ZustaendigeStelleModule', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [ZustaendigeStelleModule], + }).compileComponents(); + }); + + it('should create', () => { + expect(ZustaendigeStelleModule).toBeDefined(); + }); +}); diff --git a/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle.module.ts b/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle.module.ts new file mode 100644 index 0000000000000000000000000000000000000000..359741d86014184f95392702aed7ba82ee168164 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle.module.ts @@ -0,0 +1,59 @@ +import { TechSharedModule } from '@alfa-client/tech-shared'; +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { + ButtonComponent, + CloseIconComponent, + ExternalUnitIconComponent, + InstantSearchComponent, + OfficeIconComponent, + SearchIconComponent, +} from '@ods/system'; +import { ZustaendigeStelleSharedModule } from 'libs/zustaendige-stelle-shared/src/lib/zustaendige-stelle-shared.module'; +import { EditIconComponent } from '../../../design-system/src/lib/icons/edit-icon/edit-icon.component'; +import { PublicAdministrationIconComponent } from '../../../design-system/src/lib/icons/public-administration-icon/public-administration-icon.component'; +import { EditZustaendigeStelleButtonComponent } from './edit-zustaendige-stelle-button/edit-zustaendige-stelle-button.component'; +import { SearchExterneFachstelleContainerComponent } from './search-externe-fachstelle-container/search-externe-fachstelle-container.component'; +import { OrganisationsEinheitComponent } from './search-organisations-einheit-container/organisations-einheit/organisations-einheit.component'; +import { SearchOrganisationsEinheitContainerComponent } from './search-organisations-einheit-container/search-organisations-einheit-container.component'; +import { SearchZustaendigeStelleDialogComponent } from './search-zustaendige-stelle-dialog/search-zustaendige-stelle-dialog.component'; +import { SearchZustaendigeStelleFormComponent } from './search-zustaendige-stelle-dialog/search-zustaendige-stelle-form/search-zustaendige-stelle-form.component'; +import { ZustaendigeStelleButtonComponent } from './zustaendige-stelle-button/zustaendige-stelle-button.component'; +import { ZustaendigeStelleHeaderComponent } from './zustaendige-stelle-header/zustaendige-stelle-header.component'; + +@NgModule({ + imports: [ + CommonModule, + ButtonComponent, + CloseIconComponent, + TechSharedModule, + InstantSearchComponent, + FormsModule, + ReactiveFormsModule, + ZustaendigeStelleSharedModule, + OfficeIconComponent, + SearchIconComponent, + ExternalUnitIconComponent, + EditIconComponent, + PublicAdministrationIconComponent, + ], + declarations: [ + SearchOrganisationsEinheitContainerComponent, + OrganisationsEinheitComponent, + SearchZustaendigeStelleFormComponent, + SearchZustaendigeStelleDialogComponent, + ZustaendigeStelleButtonComponent, + SearchExterneFachstelleContainerComponent, + EditZustaendigeStelleButtonComponent, + ZustaendigeStelleHeaderComponent, + ], + exports: [ + OrganisationsEinheitComponent, + SearchZustaendigeStelleFormComponent, + SearchZustaendigeStelleDialogComponent, + SearchOrganisationsEinheitContainerComponent, + SearchExterneFachstelleContainerComponent, + ], +}) +export class ZustaendigeStelleModule {} diff --git a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu.component.scss b/alfa-client/libs/zustaendige-stelle/src/test-setup.ts similarity index 66% rename from alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu.component.scss rename to alfa-client/libs/zustaendige-stelle/src/test-setup.ts index 5b627bc13f94ebb8634f1f6040ceac8f52e54cb3..03a84127dca1b63fa485fc51d162cec76921b596 100644 --- a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu/vorgang-filter-menu.component.scss +++ b/alfa-client/libs/zustaendige-stelle/src/test-setup.ts @@ -21,12 +21,15 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -@import 'variables'; +import '@testing-library/jest-dom'; +import 'jest-preset-angular/setup-jest'; -mat-button-toggle-group { - border-radius: 1rem; -} +import { getTestBed } from '@angular/core/testing'; +import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing'; -.mat-button-toggle-checked { - background-color: $activeButton; -} +getTestBed().resetTestEnvironment(); +getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), { + teardown: { destroyAfterEach: false }, + errorOnUnknownProperties: true, + errorOnUnknownElements: true, +}); diff --git a/alfa-client/libs/zustaendige-stelle/tsconfig.json b/alfa-client/libs/zustaendige-stelle/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..7cc6baf2f58ed5ccfba098131996f579979e9f18 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "target": "es2022" + } +} diff --git a/alfa-client/libs/zustaendige-stelle/tsconfig.lib.json b/alfa-client/libs/zustaendige-stelle/tsconfig.lib.json new file mode 100644 index 0000000000000000000000000000000000000000..9475b010386d7226f2b81f0f8501a110c3340cb2 --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/tsconfig.lib.json @@ -0,0 +1,19 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "target": "es2015", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [], + "lib": ["dom", "es2018"] + }, + "angularCompilerOptions": { + "skipTemplateCodegen": true, + "strictMetadataEmit": true, + "enableResourceInlining": true + }, + "exclude": ["src/test-setup.ts", "**/*.spec.ts", "jest.config.ts"], + "include": ["**/*.ts"] +} \ No newline at end of file diff --git a/alfa-client/libs/zustaendige-stelle/tsconfig.spec.json b/alfa-client/libs/zustaendige-stelle/tsconfig.spec.json new file mode 100644 index 0000000000000000000000000000000000000000..3a690070a7f5e48080dd36522d6a0db384d940aa --- /dev/null +++ b/alfa-client/libs/zustaendige-stelle/tsconfig.spec.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"], + "target": "ES2022", + "useDefineForClassFields": false + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts", "jest.config.ts"] +} diff --git a/alfa-client/nx.json b/alfa-client/nx.json index ef541a7eb5a1b147ff131218b9f498e2d295f344..d5846d9ce54ec894bf7601a95e7f626e1bfe360b 100644 --- a/alfa-client/nx.json +++ b/alfa-client/nx.json @@ -49,12 +49,7 @@ }, "build-storybook": { "cache": true, - "inputs": [ - "default", - "^production", - "{projectRoot}/.storybook/**/*", - "{projectRoot}/tsconfig.storybook.json" - ] + "inputs": ["default", "^production", "{projectRoot}/.storybook/**/*", "{projectRoot}/tsconfig.storybook.json"] }, "@nx/jest:jest": { "inputs": ["default", "^production", "{workspaceRoot}/jest.preset.js"], diff --git a/alfa-client/package-lock.json b/alfa-client/package-lock.json index dbda527eba74209d94d4efd84feb89d4af08e4b4..25a05fca0216901f24fa10cabc5db677d76ee6f2 100644 --- a/alfa-client/package-lock.json +++ b/alfa-client/package-lock.json @@ -1,125 +1,122 @@ { "name": "alfa", - "version": "1.1.0-SNAPSHOT", + "version": "1.2.0-SNAPSHOT", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "alfa", - "version": "1.1.0-SNAPSHOT", - "license": "MIT", - "dependencies": { - "@angular/animations": "17.3.10", - "@angular/cdk": "17.3.10", - "@angular/common": "17.3.10", - "@angular/core": "17.3.10", - "@angular/forms": "17.3.10", - "@angular/material": "17.3.10", - "@angular/material-date-fns-adapter": "17.3.10", - "@angular/platform-browser": "17.3.10", - "@angular/platform-browser-dynamic": "17.3.10", - "@angular/router": "17.3.10", - "@keycloak/keycloak-admin-client": "^24.0.4", - "@ngrx/component-store": "17.2.0", - "@ngrx/effects": "17.2.0", - "@ngrx/entity": "17.2.0", - "@ngrx/router-store": "17.2.0", - "@ngrx/store": "17.2.0", - "@ngxp/rest": "10.0.0", - "@nx/angular": "18.3.5", + "version": "1.2.0-SNAPSHOT", + "license": "MIT", + "dependencies": { + "@angular/animations": "18.2.8", + "@angular/cdk": "18.2.8", + "@angular/common": "18.2.8", + "@angular/core": "18.2.8", + "@angular/forms": "18.2.8", + "@angular/material": "18.2.8", + "@angular/material-date-fns-adapter": "18.2.8", + "@angular/platform-browser": "18.2.8", + "@angular/platform-browser-dynamic": "18.2.8", + "@angular/router": "18.2.8", + "@keycloak/keycloak-admin-client": "^24.0.5", + "@ngrx/component-store": "18.1.0", + "@ngrx/effects": "18.1.0", + "@ngrx/entity": "18.1.0", + "@ngrx/operators": "^18.0.0", + "@ngrx/router-store": "18.1.0", + "@ngrx/store": "18.1.0", + "@ngxp/rest": "^11.0.0", + "@nx/angular": "19.8.8", "angular-oauth2-oidc": "17.0.2", "angular-oauth2-oidc-jwks": "17.0.2", "class-variance-authority": "^0.7.0", "date-fns": "^2.30.0", - "decompress": "^4.2.1", "file-saver": "2.0.5", "include-media": "^1.4.10", "js-base64": "^3.7.7", - "keycloak-angular": "15.2.1", - "keycloak-js": "^23.0.6", + "keycloak-angular": "16.0.1", + "keycloak-js": "^24.0.5", "lodash-es": "4.17.21", "rxjs": "~7.8.1", "sanitize-filename-ts": "^1.0.2", - "tailwind-merge": "^2.3.0", "tslib": "^2.3.0", "typeface-roboto": "1.1.13", - "zone.js": "0.14.6" + "zone.js": "0.14.10" }, "devDependencies": { - "@angular-devkit/build-angular": "17.3.8", - "@angular-devkit/core": "17.3.8", - "@angular-devkit/schematics": "17.3.8", - "@angular-eslint/eslint-plugin": "17.3.0", - "@angular-eslint/eslint-plugin-template": "17.3.0", - "@angular-eslint/template-parser": "17.3.0", - "@angular/cli": "~17.3.8", - "@angular/compiler-cli": "17.3.10", - "@angular/language-service": "17.3.10", + "@angular-devkit/build-angular": "18.2.8", + "@angular-devkit/core": "18.2.8", + "@angular-devkit/schematics": "18.2.8", + "@angular-eslint/eslint-plugin": "18.3.1", + "@angular-eslint/eslint-plugin-template": "18.3.1", + "@angular-eslint/template-parser": "18.3.1", + "@angular/cli": "~18.2.0", + "@angular/compiler-cli": "18.2.8", + "@angular/language-service": "18.2.8", "@bahmutov/cypress-extends": "1.1.0", "@chromatic-com/storybook": "^1.4.0", "@cypress/webpack-batteries-included-preprocessor": "^2.4.1", "@cypress/webpack-preprocessor": "^5.17.1", - "@faker-js/faker": "^6.3.1", - "@ngrx/schematics": "17.2.0", - "@ngrx/store-devtools": "17.2.0", + "@faker-js/faker": "^9.0.3", + "@ngrx/schematics": "18.1.0", + "@ngrx/store-devtools": "18.1.0", "@nx-tools/container-metadata": "^6.0.1", "@nx-tools/nx-container": "^6.0.1", - "@nx/cypress": "18.3.5", - "@nx/eslint": "18.3.5", - "@nx/eslint-plugin": "18.3.5", - "@nx/jest": "18.3.5", - "@nx/js": "18.3.5", - "@nx/storybook": "18.3.5", - "@nx/web": "18.3.5", - "@nx/workspace": "18.3.5", - "@schematics/angular": "17.3.8", - "@storybook/addon-essentials": "^8.1.4", - "@storybook/angular": "^8.1.4", - "@storybook/core-server": "^8.1.4", - "@swc-node/register": "1.9.1", - "@swc/core": "~1.5.7", - "@testing-library/jest-dom": "6.4.5", + "@nx/cypress": "19.8.8", + "@nx/eslint": "19.8.8", + "@nx/eslint-plugin": "19.8.8", + "@nx/jest": "19.8.8", + "@nx/js": "19.8.8", + "@nx/storybook": "19.8.8", + "@nx/web": "19.8.8", + "@nx/workspace": "19.8.8", + "@schematics/angular": "18.2.8", + "@storybook/addon-essentials": "^8.3.5", + "@storybook/addon-interactions": "^8.3.5", + "@storybook/angular": "^8.3.5", + "@storybook/core-server": "^8.3.5", + "@testing-library/jest-dom": "^6.4.5", "@types/file-saver": "2.0.7", - "@types/jest": "29.4.4", + "@types/jest": "29.5.13", "@types/lodash-es": "4.17.12", "@types/node": "^20.12.12", - "@typescript-eslint/eslint-plugin": "7.10.0", - "@typescript-eslint/parser": "7.10.0", + "@typescript-eslint/eslint-plugin": "7.18.0", + "@typescript-eslint/parser": "7.18.0", + "@typescript-eslint/utils": "^7.16.0", "autoprefixer": "^10.4.19", - "cypress": "13.6.2", + "cypress": "13.15.1", "cypress-file-upload": "5.0.8", "cypress-mochawesome-reporter": "3.8", "cypress-real-events": "^1.12.0", "cypress-timestamps": "^1.2.3", + "decompress": "^4.2.1", "eslint": "8.57.0", "eslint-config-prettier": "9.1.0", "eslint-plugin-cypress": "2.15.1", - "gzipper": "^7.2.0", + "gzipper": "^8.1.0", "jasmine-marbles": "~0.9.2", - "jest": "^29.4.3", - "jest-environment-jsdom": "^29.4.3", + "jest": "29.7.0", + "jest-environment-jsdom": "29.7.0", "jest-junit": "^16.0.0", "jest-marbles": "3.0.6", - "jest-preset-angular": "14.0.4", + "jest-preset-angular": "14.1.1", "jest-sonar-reporter": "^2.0.0", "jsonc-eslint-parser": "^2.4.0", - "mongodb": "4.17.2", - "ng-mocks": "^14.12.2", - "ng-packagr": "17.3.0", - "nx": "18.3.5", - "postcss": "^8.4.38", - "postcss-import": "~14.1.0", - "postcss-preset-env": "~7.8.3", - "postcss-url": "~10.1.3", + "mongodb": "^4.17.2", + "ng-mocks": "^14.13.1", + "ng-packagr": "18.2.1", + "nx": "19.8.8", "prettier": "^3.2.5", - "prettier-plugin-organize-imports": "^3.2.4", - "prettier-plugin-tailwindcss": "^0.5.14", - "sonarqube-scanner": "3.5.0", - "storybook-tailwind-dark-mode": "^1.0.22", - "tailwindcss": "^3.4.3", + "prettier-plugin-organize-imports": "^4.1.0", + "prettier-plugin-tailwindcss": "^0.6.8", + "sonarqube-scanner": "^4.2.5", + "storybook": "^8.3.5", + "tailwind-merge": "^2.5.4", + "tailwindcss": "^3.4.14", "ts-jest": "^29.1.0", "ts-node": "10.9.1", - "typescript": "5.4.5" + "typescript": "5.5.4" } }, "node_modules/@actions/exec": { @@ -156,19 +153,6 @@ "undici": "^5.25.4" } }, - "node_modules/@actions/http-client/node_modules/undici": { - "version": "5.28.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/undici/-/undici-5.28.4.tgz", - "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } - }, "node_modules/@actions/io": { "version": "1.1.3", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@actions/io/-/io-1.1.3.tgz", @@ -209,14 +193,13 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1802.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-devkit/architect/-/architect-0.1802.5.tgz", - "integrity": "sha512-c7sVoW85Yqj7IYvNKxtNSGS5I7gWpORorg/xxLZX3OkHWXDrwYbb5LN/2p5/Aytxyb0aXl4o5fFOu6CUwcaLUw==", + "version": "0.1802.10", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-devkit/architect/-/architect-0.1802.10.tgz", + "integrity": "sha512-/xudcHK2s4J/GcL6qyobmGaWMHQcYLSMqCaWMT+nK6I6tu9VEAj/p3R83Tzx8B/eKi31Pz499uHw9pmqdtbafg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@angular-devkit/core": "18.2.5", + "@angular-devkit/core": "18.2.10", "rxjs": "7.8.1" }, "engines": { @@ -226,12 +209,11 @@ } }, "node_modules/@angular-devkit/architect/node_modules/@angular-devkit/core": { - "version": "18.2.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-devkit/core/-/core-18.2.5.tgz", - "integrity": "sha512-r9TumPlJ8PvA2+yz4sp+bUHgtznaVKzhvXTN5qL1k4YP8LJ7iZWMR2FOP+HjukHZOTsenzmV9pszbogabqwoZQ==", + "version": "18.2.10", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-devkit/core/-/core-18.2.10.tgz", + "integrity": "sha512-LFqiNdraBujg8e1lhuB0bkFVAoIbVbeXXwfoeROKH60OPbP8tHdgV6sFTqU7UGBKA+b+bYye70KFTG2Ys8QzKQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ajv": "8.17.1", "ajv-formats": "3.0.1", @@ -254,157 +236,97 @@ } } }, - "node_modules/@angular-devkit/architect/node_modules/ajv": { - "version": "8.17.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@angular-devkit/architect/node_modules/ajv-formats": { - "version": "3.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/architect/node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@angular-devkit/architect/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/@angular-devkit/build-angular": { - "version": "17.3.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-devkit/build-angular/-/build-angular-17.3.8.tgz", - "integrity": "sha512-ixsdXggWaFRP7Jvxd0AMukImnePuGflT9Yy7NJ9/y0cL/k//S/3RnkQv5i411KzN+7D4RIbNkRGGTYeqH24zlg==", + "version": "18.2.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-devkit/build-angular/-/build-angular-18.2.8.tgz", + "integrity": "sha512-qK/iLk7A8vQp1CyiJV4DpwfLjPKoiOlTtFqoO5vD8Tyxmc+R06FQp6GJTsZ7JtrTLYSiH+QAWiY6NgF/Rj/hHg==", "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1703.8", - "@angular-devkit/build-webpack": "0.1703.8", - "@angular-devkit/core": "17.3.8", - "@babel/core": "7.24.0", - "@babel/generator": "7.23.6", - "@babel/helper-annotate-as-pure": "7.22.5", - "@babel/helper-split-export-declaration": "7.22.6", - "@babel/plugin-transform-async-generator-functions": "7.23.9", - "@babel/plugin-transform-async-to-generator": "7.23.3", - "@babel/plugin-transform-runtime": "7.24.0", - "@babel/preset-env": "7.24.0", - "@babel/runtime": "7.24.0", - "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "17.3.8", + "@angular-devkit/architect": "0.1802.8", + "@angular-devkit/build-webpack": "0.1802.8", + "@angular-devkit/core": "18.2.8", + "@angular/build": "18.2.8", + "@babel/core": "7.25.2", + "@babel/generator": "7.25.0", + "@babel/helper-annotate-as-pure": "7.24.7", + "@babel/helper-split-export-declaration": "7.24.7", + "@babel/plugin-transform-async-generator-functions": "7.25.0", + "@babel/plugin-transform-async-to-generator": "7.24.7", + "@babel/plugin-transform-runtime": "7.24.7", + "@babel/preset-env": "7.25.3", + "@babel/runtime": "7.25.0", + "@discoveryjs/json-ext": "0.6.1", + "@ngtools/webpack": "18.2.8", "@vitejs/plugin-basic-ssl": "1.1.0", "ansi-colors": "4.1.3", - "autoprefixer": "10.4.18", + "autoprefixer": "10.4.20", "babel-loader": "9.1.3", - "babel-plugin-istanbul": "6.1.1", "browserslist": "^4.21.5", - "copy-webpack-plugin": "11.0.0", - "critters": "0.0.22", - "css-loader": "6.10.0", - "esbuild-wasm": "0.20.1", + "copy-webpack-plugin": "12.0.2", + "critters": "0.0.24", + "css-loader": "7.1.2", + "esbuild-wasm": "0.23.0", "fast-glob": "3.3.2", - "http-proxy-middleware": "2.0.6", - "https-proxy-agent": "7.0.4", - "inquirer": "9.2.15", - "jsonc-parser": "3.2.1", + "http-proxy-middleware": "3.0.0", + "https-proxy-agent": "7.0.5", + "istanbul-lib-instrument": "6.0.3", + "jsonc-parser": "3.3.1", "karma-source-map-support": "1.4.0", "less": "4.2.0", - "less-loader": "11.1.0", + "less-loader": "12.2.0", "license-webpack-plugin": "4.0.2", - "loader-utils": "3.2.1", - "magic-string": "0.30.8", - "mini-css-extract-plugin": "2.8.1", + "loader-utils": "3.3.1", + "magic-string": "0.30.11", + "mini-css-extract-plugin": "2.9.0", "mrmime": "2.0.0", - "open": "8.4.2", + "open": "10.1.0", "ora": "5.4.1", "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "4.0.1", - "piscina": "4.4.0", - "postcss": "8.4.35", + "picomatch": "4.0.2", + "piscina": "4.6.1", + "postcss": "8.4.41", "postcss-loader": "8.1.1", "resolve-url-loader": "5.0.0", "rxjs": "7.8.1", - "sass": "1.71.1", - "sass-loader": "14.1.1", - "semver": "7.6.0", + "sass": "1.77.6", + "sass-loader": "16.0.0", + "semver": "7.6.3", "source-map-loader": "5.0.0", "source-map-support": "0.5.21", - "terser": "5.29.1", + "terser": "5.31.6", "tree-kill": "1.2.2", - "tslib": "2.6.2", - "undici": "6.11.1", - "vite": "5.1.7", - "watchpack": "2.4.0", - "webpack": "5.90.3", - "webpack-dev-middleware": "6.1.2", - "webpack-dev-server": "4.15.1", - "webpack-merge": "5.10.0", + "tslib": "2.6.3", + "vite": "5.4.6", + "watchpack": "2.4.1", + "webpack": "5.94.0", + "webpack-dev-middleware": "7.4.2", + "webpack-dev-server": "5.0.4", + "webpack-merge": "6.0.1", "webpack-subresource-integrity": "5.1.0" }, "engines": { - "node": "^18.13.0 || >=20.9.0", + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "optionalDependencies": { - "esbuild": "0.20.1" + "esbuild": "0.23.0" }, "peerDependencies": { - "@angular/compiler-cli": "^17.0.0", - "@angular/localize": "^17.0.0", - "@angular/platform-server": "^17.0.0", - "@angular/service-worker": "^17.0.0", + "@angular/compiler-cli": "^18.0.0", + "@angular/localize": "^18.0.0", + "@angular/platform-server": "^18.0.0", + "@angular/service-worker": "^18.0.0", "@web/test-runner": "^0.18.0", "browser-sync": "^3.0.2", "jest": "^29.5.0", "jest-environment-jsdom": "^29.5.0", "karma": "^6.3.0", - "ng-packagr": "^17.0.0", + "ng-packagr": "^18.0.0", "protractor": "^7.0.0", "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=5.2 <5.5" + "typescript": ">=5.4 <5.6" }, "peerDependenciesMeta": { "@angular/localize": { @@ -443,36 +365,104 @@ } }, "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/architect": { - "version": "0.1703.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-devkit/architect/-/architect-0.1703.8.tgz", - "integrity": "sha512-lKxwG4/QABXZvJpqeSIn/kAwnY6MM9HdHZUV+o5o3UiTi+vO8rZApG4CCaITH3Bxebm7Nam7Xbk8RuukC5rq6g==", + "version": "0.1802.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-devkit/architect/-/architect-0.1802.8.tgz", + "integrity": "sha512-/rtFQEKgS7LlB9oHr4NCBSdKnvP5kr8L5Hbd3Vl8hZOYK9QWjxKPEXnryA2d5+PCE98bBzZswCNXqELZCPTgIQ==", "license": "MIT", "dependencies": { - "@angular-devkit/core": "17.3.8", + "@angular-devkit/core": "18.2.8", "rxjs": "7.8.1" }, "engines": { - "node": "^18.13.0 || >=20.9.0", + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@angular/build": { + "version": "18.2.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/build/-/build-18.2.8.tgz", + "integrity": "sha512-ufuA4vHJSrL9SQW7bKV61DOoN1mm0t0ILTHaxSoCG3YF70cZJOX7+HNp3cK2uoldRMwbTOKSvCWBw54KKDRd5Q==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.1802.8", + "@babel/core": "7.25.2", + "@babel/helper-annotate-as-pure": "7.24.7", + "@babel/helper-split-export-declaration": "7.24.7", + "@babel/plugin-syntax-import-attributes": "7.24.7", + "@inquirer/confirm": "3.1.22", + "@vitejs/plugin-basic-ssl": "1.1.0", + "browserslist": "^4.23.0", + "critters": "0.0.24", + "esbuild": "0.23.0", + "fast-glob": "3.3.2", + "https-proxy-agent": "7.0.5", + "listr2": "8.2.4", + "lmdb": "3.0.13", + "magic-string": "0.30.11", + "mrmime": "2.0.0", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "4.0.2", + "piscina": "4.6.1", + "rollup": "4.22.4", + "sass": "1.77.6", + "semver": "7.6.3", + "vite": "5.4.6", + "watchpack": "2.4.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^18.0.0", + "@angular/localize": "^18.0.0", + "@angular/platform-server": "^18.0.0", + "@angular/service-worker": "^18.0.0", + "less": "^4.2.0", + "postcss": "^8.4.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=5.4 <5.6" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "less": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tailwindcss": { + "optional": true + } } }, "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { - "version": "7.24.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/core/-/core-7.24.0.tgz", - "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", + "version": "7.25.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.0", - "@babel/parser": "^7.24.0", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", - "@babel/types": "^7.24.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -496,27 +486,44 @@ "semver": "bin/semver.js" } }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.24.7", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@angular-devkit/build-angular/node_modules/@babel/preset-env": { - "version": "7.24.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/preset-env/-/preset-env-7.24.0.tgz", - "integrity": "sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "version": "7.25.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/preset-env/-/preset-env-7.25.3.tgz", + "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.23.3", - "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-assertions": "^7.24.7", + "@babel/plugin-syntax-import-attributes": "^7.24.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -528,59 +535,60 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.9", - "@babel/plugin-transform-async-to-generator": "^7.23.3", - "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.4", - "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.4", - "@babel/plugin-transform-classes": "^7.23.8", - "@babel/plugin-transform-computed-properties": "^7.23.3", - "@babel/plugin-transform-destructuring": "^7.23.3", - "@babel/plugin-transform-dotall-regex": "^7.23.3", - "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.4", - "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.4", - "@babel/plugin-transform-for-of": "^7.23.6", - "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.4", - "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", - "@babel/plugin-transform-member-expression-literals": "^7.23.3", - "@babel/plugin-transform-modules-amd": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-modules-systemjs": "^7.23.9", - "@babel/plugin-transform-modules-umd": "^7.23.3", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", - "@babel/plugin-transform-numeric-separator": "^7.23.4", - "@babel/plugin-transform-object-rest-spread": "^7.24.0", - "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.4", - "@babel/plugin-transform-optional-chaining": "^7.23.4", - "@babel/plugin-transform-parameters": "^7.23.3", - "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.4", - "@babel/plugin-transform-property-literals": "^7.23.3", - "@babel/plugin-transform-regenerator": "^7.23.3", - "@babel/plugin-transform-reserved-words": "^7.23.3", - "@babel/plugin-transform-shorthand-properties": "^7.23.3", - "@babel/plugin-transform-spread": "^7.23.3", - "@babel/plugin-transform-sticky-regex": "^7.23.3", - "@babel/plugin-transform-template-literals": "^7.23.3", - "@babel/plugin-transform-typeof-symbol": "^7.23.3", - "@babel/plugin-transform-unicode-escapes": "^7.23.3", - "@babel/plugin-transform-unicode-property-regex": "^7.23.3", - "@babel/plugin-transform-unicode-regex": "^7.23.3", - "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.0", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoped-functions": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.25.0", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-transform-classes": "^7.25.0", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", + "@babel/plugin-transform-dotall-regex": "^7.24.7", + "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", + "@babel/plugin-transform-dynamic-import": "^7.24.7", + "@babel/plugin-transform-exponentiation-operator": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.24.7", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.25.1", + "@babel/plugin-transform-json-strings": "^7.24.7", + "@babel/plugin-transform-literals": "^7.25.2", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-member-expression-literals": "^7.24.7", + "@babel/plugin-transform-modules-amd": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", + "@babel/plugin-transform-modules-systemjs": "^7.25.0", + "@babel/plugin-transform-modules-umd": "^7.24.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-new-target": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-object-super": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-property-literals": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-reserved-words": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-template-literals": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.8", + "@babel/plugin-transform-unicode-escapes": "^7.24.7", + "@babel/plugin-transform-unicode-property-regex": "^7.24.7", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", - "core-js-compat": "^3.31.0", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.37.1", "semver": "^6.3.1" }, "engines": { @@ -599,26 +607,23 @@ "semver": "bin/semver.js" } }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/aix-ppc64": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz", - "integrity": "sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA==", - "cpu": [ - "ppc64" - ], + "node_modules/@angular-devkit/build-angular/node_modules/@inquirer/confirm": { + "version": "3.1.22", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@inquirer/confirm/-/confirm-3.1.22.tgz", + "integrity": "sha512-gsAKIOWBm2Q87CDfs9fEo7wJT3fwWIJfnDGMn9Qy74gBnNFOACDNfhUzovubbJjWnKLGBln7/NcSmZwj5DuEXg==", "license": "MIT", - "optional": true, - "os": [ - "aix" - ], + "dependencies": { + "@inquirer/core": "^9.0.10", + "@inquirer/type": "^1.5.2" + }, "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/android-arm": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/android-arm/-/android-arm-0.20.1.tgz", - "integrity": "sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw==", + "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.22.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", + "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==", "cpu": [ "arm" ], @@ -626,15 +631,12 @@ "optional": true, "os": [ "android" - ], - "engines": { - "node": ">=12" - } + ] }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/android-arm64": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz", - "integrity": "sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A==", + "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-android-arm64": { + "version": "4.22.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz", + "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==", "cpu": [ "arm64" ], @@ -642,31 +644,12 @@ "optional": true, "os": [ "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/android-x64": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/android-x64/-/android-x64-0.20.1.tgz", - "integrity": "sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } + ] }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/darwin-arm64": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz", - "integrity": "sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA==", + "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.22.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", + "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", "cpu": [ "arm64" ], @@ -674,15 +657,12 @@ "optional": true, "os": [ "darwin" - ], - "engines": { - "node": ">=12" - } + ] }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/darwin-x64": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz", - "integrity": "sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA==", + "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-darwin-x64": { + "version": "4.22.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz", + "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==", "cpu": [ "x64" ], @@ -690,47 +670,12 @@ "optional": true, "os": [ "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz", - "integrity": "sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/freebsd-x64": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz", - "integrity": "sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } + ] }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-arm": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz", - "integrity": "sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw==", + "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.22.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz", + "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==", "cpu": [ "arm" ], @@ -738,79 +683,51 @@ "optional": true, "os": [ "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-arm64": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz", - "integrity": "sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } + ] }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-ia32": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz", - "integrity": "sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw==", + "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.22.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz", + "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==", "cpu": [ - "ia32" + "arm" ], "license": "MIT", "optional": true, "os": [ "linux" - ], - "engines": { - "node": ">=12" - } + ] }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-loong64": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz", - "integrity": "sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA==", + "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.22.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz", + "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==", "cpu": [ - "loong64" + "arm64" ], "license": "MIT", "optional": true, "os": [ "linux" - ], - "engines": { - "node": ">=12" - } + ] }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-mips64el": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz", - "integrity": "sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA==", + "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.22.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz", + "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==", "cpu": [ - "mips64el" + "arm64" ], "license": "MIT", "optional": true, "os": [ "linux" - ], - "engines": { - "node": ">=12" - } + ] }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-ppc64": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz", - "integrity": "sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw==", + "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.22.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz", + "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==", "cpu": [ "ppc64" ], @@ -818,15 +735,12 @@ "optional": true, "os": [ "linux" - ], - "engines": { - "node": ">=12" - } + ] }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-riscv64": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz", - "integrity": "sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg==", + "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.22.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz", + "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==", "cpu": [ "riscv64" ], @@ -834,15 +748,12 @@ "optional": true, "os": [ "linux" - ], - "engines": { - "node": ">=12" - } + ] }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-s390x": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz", - "integrity": "sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ==", + "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.22.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz", + "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==", "cpu": [ "s390x" ], @@ -850,15 +761,12 @@ "optional": true, "os": [ "linux" - ], - "engines": { - "node": ">=12" - } + ] }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-x64": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz", - "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==", + "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.22.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", + "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", "cpu": [ "x64" ], @@ -866,63 +774,25 @@ "optional": true, "os": [ "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/netbsd-x64": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz", - "integrity": "sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/openbsd-x64": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz", - "integrity": "sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } + ] }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/sunos-x64": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz", - "integrity": "sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q==", + "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.22.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz", + "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==", "cpu": [ "x64" ], "license": "MIT", "optional": true, "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } + "linux" + ] }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/win32-arm64": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz", - "integrity": "sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A==", + "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.22.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz", + "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==", "cpu": [ "arm64" ], @@ -930,15 +800,12 @@ "optional": true, "os": [ "win32" - ], - "engines": { - "node": ">=12" - } + ] }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/win32-ia32": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz", - "integrity": "sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw==", + "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.22.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz", + "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==", "cpu": [ "ia32" ], @@ -946,15 +813,12 @@ "optional": true, "os": [ "win32" - ], - "engines": { - "node": ">=12" - } + ] }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/win32-x64": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz", - "integrity": "sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA==", + "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.22.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz", + "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==", "cpu": [ "x64" ], @@ -962,10 +826,13 @@ "optional": true, "os": [ "win32" - ], - "engines": { - "node": ">=12" - } + ] + }, + "node_modules/@angular-devkit/build-angular/node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "license": "MIT" }, "node_modules/@angular-devkit/build-angular/node_modules/ajv": { "version": "6.12.6", @@ -992,43 +859,6 @@ "ajv": "^6.9.1" } }, - "node_modules/@angular-devkit/build-angular/node_modules/autoprefixer": { - "version": "10.4.18", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/autoprefixer/-/autoprefixer-10.4.18.tgz", - "integrity": "sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-lite": "^1.0.30001591", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, "node_modules/@angular-devkit/build-angular/node_modules/babel-loader": { "version": "9.1.3", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/babel-loader/-/babel-loader-9.1.3.tgz", @@ -1065,45 +895,6 @@ "node": ">=10.13.0" } }, - "node_modules/@angular-devkit/build-angular/node_modules/esbuild": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/esbuild/-/esbuild-0.20.1.tgz", - "integrity": "sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.1", - "@esbuild/android-arm": "0.20.1", - "@esbuild/android-arm64": "0.20.1", - "@esbuild/android-x64": "0.20.1", - "@esbuild/darwin-arm64": "0.20.1", - "@esbuild/darwin-x64": "0.20.1", - "@esbuild/freebsd-arm64": "0.20.1", - "@esbuild/freebsd-x64": "0.20.1", - "@esbuild/linux-arm": "0.20.1", - "@esbuild/linux-arm64": "0.20.1", - "@esbuild/linux-ia32": "0.20.1", - "@esbuild/linux-loong64": "0.20.1", - "@esbuild/linux-mips64el": "0.20.1", - "@esbuild/linux-ppc64": "0.20.1", - "@esbuild/linux-riscv64": "0.20.1", - "@esbuild/linux-s390x": "0.20.1", - "@esbuild/linux-x64": "0.20.1", - "@esbuild/netbsd-x64": "0.20.1", - "@esbuild/openbsd-x64": "0.20.1", - "@esbuild/sunos-x64": "0.20.1", - "@esbuild/win32-arm64": "0.20.1", - "@esbuild/win32-ia32": "0.20.1", - "@esbuild/win32-x64": "0.20.1" - } - }, "node_modules/@angular-devkit/build-angular/node_modules/eslint-scope": { "version": "5.1.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -1240,9 +1031,9 @@ } }, "node_modules/@angular-devkit/build-angular/node_modules/postcss": { - "version": "8.4.35", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "version": "8.4.41", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss/-/postcss-8.4.41.tgz", + "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", "funding": [ { "type": "opencollective", @@ -1260,62 +1051,96 @@ "license": "MIT", "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" } }, - "node_modules/@angular-devkit/build-angular/node_modules/tslib": { - "version": "2.6.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "license": "0BSD" - }, - "node_modules/@angular-devkit/build-angular/node_modules/webpack": { - "version": "5.90.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/webpack/-/webpack-5.90.3.tgz", - "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", + "node_modules/@angular-devkit/build-angular/node_modules/rollup": { + "version": "4.22.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/rollup/-/rollup-4.22.4.tgz", + "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==", "license": "MIT", "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.21.10", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" + "@types/estree": "1.0.5" }, "bin": { - "webpack": "bin/webpack.js" + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">=18.0.0", + "npm": ">=8.0.0" }, - "peerDependenciesMeta": { - "webpack-cli": { + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.22.4", + "@rollup/rollup-android-arm64": "4.22.4", + "@rollup/rollup-darwin-arm64": "4.22.4", + "@rollup/rollup-darwin-x64": "4.22.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", + "@rollup/rollup-linux-arm-musleabihf": "4.22.4", + "@rollup/rollup-linux-arm64-gnu": "4.22.4", + "@rollup/rollup-linux-arm64-musl": "4.22.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", + "@rollup/rollup-linux-riscv64-gnu": "4.22.4", + "@rollup/rollup-linux-s390x-gnu": "4.22.4", + "@rollup/rollup-linux-x64-gnu": "4.22.4", + "@rollup/rollup-linux-x64-musl": "4.22.4", + "@rollup/rollup-win32-arm64-msvc": "4.22.4", + "@rollup/rollup-win32-ia32-msvc": "4.22.4", + "@rollup/rollup-win32-x64-msvc": "4.22.4", + "fsevents": "~2.3.2" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/tslib": { + "version": "2.6.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/@angular-devkit/build-angular/node_modules/webpack": { + "version": "5.94.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { "optional": true } } @@ -1351,54 +1176,54 @@ } }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1703.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-devkit/build-webpack/-/build-webpack-0.1703.8.tgz", - "integrity": "sha512-9u6fl8VVOxcLOEMzrUeaybSvi9hSLSRucHnybneYrabsgreDo32tuy/4G8p6YAHQjpWEj9jvF9Um13ertdni5Q==", + "version": "0.1802.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-devkit/build-webpack/-/build-webpack-0.1802.8.tgz", + "integrity": "sha512-uPpopkXkO66SSdjtVr7xCyQCPs/x6KUC76xkDc4j0b8EEHifTbi/fNpbkcZ6wBmoAfjKLWXfKvtkh0TqKK5Hkw==", "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1703.8", + "@angular-devkit/architect": "0.1802.8", "rxjs": "7.8.1" }, "engines": { - "node": "^18.13.0 || >=20.9.0", + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "peerDependencies": { "webpack": "^5.30.0", - "webpack-dev-server": "^4.0.0" + "webpack-dev-server": "^5.0.2" } }, "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/architect": { - "version": "0.1703.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-devkit/architect/-/architect-0.1703.8.tgz", - "integrity": "sha512-lKxwG4/QABXZvJpqeSIn/kAwnY6MM9HdHZUV+o5o3UiTi+vO8rZApG4CCaITH3Bxebm7Nam7Xbk8RuukC5rq6g==", + "version": "0.1802.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-devkit/architect/-/architect-0.1802.8.tgz", + "integrity": "sha512-/rtFQEKgS7LlB9oHr4NCBSdKnvP5kr8L5Hbd3Vl8hZOYK9QWjxKPEXnryA2d5+PCE98bBzZswCNXqELZCPTgIQ==", "license": "MIT", "dependencies": { - "@angular-devkit/core": "17.3.8", + "@angular-devkit/core": "18.2.8", "rxjs": "7.8.1" }, "engines": { - "node": "^18.13.0 || >=20.9.0", + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@angular-devkit/core": { - "version": "17.3.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-devkit/core/-/core-17.3.8.tgz", - "integrity": "sha512-Q8q0voCGudbdCgJ7lXdnyaxKHbNQBARH68zPQV72WT8NWy+Gw/tys870i6L58NWbBaCJEUcIj/kb6KoakSRu+Q==", + "version": "18.2.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-devkit/core/-/core-18.2.8.tgz", + "integrity": "sha512-4o2T6wsmXGE/v53+F8L7kGoN2+qzt03C9rtjLVQpOljzpJVttQ8bhvfWxyYLWwcl04RWqRa+82fpIZtBkOlZJw==", "license": "MIT", "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.1", + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.2", "rxjs": "7.8.1", "source-map": "0.7.4" }, "engines": { - "node": "^18.13.0 || >=20.9.0", + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, @@ -1412,113 +1237,113 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "17.3.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-devkit/schematics/-/schematics-17.3.8.tgz", - "integrity": "sha512-QRVEYpIfgkprNHc916JlPuNbLzOgrm9DZalHasnLUz4P6g7pR21olb8YCyM2OTJjombNhya9ZpckcADU5Qyvlg==", + "version": "18.2.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-devkit/schematics/-/schematics-18.2.8.tgz", + "integrity": "sha512-i/h2Oji5FhJMC7wDSnIl5XUe/qym+C1ZwScaATJwDyRLCUIynZkj5rLgdG/uK6l+H0PgvxigkF+akWpokkwW6w==", "license": "MIT", "dependencies": { - "@angular-devkit/core": "17.3.8", - "jsonc-parser": "3.2.1", - "magic-string": "0.30.8", + "@angular-devkit/core": "18.2.8", + "jsonc-parser": "3.3.1", + "magic-string": "0.30.11", "ora": "5.4.1", "rxjs": "7.8.1" }, "engines": { - "node": "^18.13.0 || >=20.9.0", + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@angular-eslint/bundled-angular-compiler": { - "version": "17.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-17.3.0.tgz", - "integrity": "sha512-ejfNzRuBeHUV8m2fkgs+M809rj5STuCuQo4fdfc6ccQpzXDI6Ha7BKpTznWfg5g529q/wrkoGSGgFxU9Yc2/dQ==", + "version": "18.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-18.3.1.tgz", + "integrity": "sha512-sikmkjfsXPpPTku1aQkQ1MNNEKGBgGGRvUN/WeNS9dhCJ4dxU3O7dZctt1aQWj+W3nbuUtDiimAWF5fZHGFE2Q==", "dev": true, "license": "MIT" }, "node_modules/@angular-eslint/eslint-plugin": { - "version": "17.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-eslint/eslint-plugin/-/eslint-plugin-17.3.0.tgz", - "integrity": "sha512-81cQbOEPoQupFX8WmpqZn+y8VA7JdVRGBtt+uJNKBXcJknTpPWdLBZRFlgVakmC24iEZ0Fint/N3NBBQI3mz2A==", + "version": "18.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-eslint/eslint-plugin/-/eslint-plugin-18.3.1.tgz", + "integrity": "sha512-MP4Nm+SHboF8KdnN0KpPEGAaTTzDLPm3+S/4W3Mg8onqWCyadyd4mActh9mK/pvCj8TVlb/SW1zeTtdMYhwonw==", "dev": true, "license": "MIT", "dependencies": { - "@angular-eslint/utils": "17.3.0", - "@typescript-eslint/utils": "7.2.0" + "@angular-eslint/bundled-angular-compiler": "18.3.1", + "@angular-eslint/utils": "18.3.1" }, "peerDependencies": { - "eslint": "^7.20.0 || ^8.0.0", + "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", "typescript": "*" } }, "node_modules/@angular-eslint/eslint-plugin-template": { - "version": "17.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-17.3.0.tgz", - "integrity": "sha512-9l/aRfpE9MCRVDWRb+rSB9Zei0paep1vqV6M/87VUnzBnzqeMRnVuPvQowilh2zweVSGKBF25Vp4HkwOL6ExDQ==", + "version": "18.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-18.3.1.tgz", + "integrity": "sha512-hBJ3+f7VSidvrtYaXH7Vp0sWvblA9jLK2c6uQzhYGWdEDUcTg7g7VI9ThW39WvMbHqkyzNE4PPOynK69cBEDGg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-eslint/bundled-angular-compiler": "17.3.0", - "@angular-eslint/utils": "17.3.0", - "@typescript-eslint/type-utils": "7.2.0", - "@typescript-eslint/utils": "7.2.0", + "@angular-eslint/bundled-angular-compiler": "18.3.1", + "@angular-eslint/utils": "18.3.1", "aria-query": "5.3.0", - "axobject-query": "4.0.0" + "axobject-query": "4.1.0" }, "peerDependencies": { - "eslint": "^7.20.0 || ^8.0.0", + "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", "typescript": "*" } }, "node_modules/@angular-eslint/template-parser": { - "version": "17.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-eslint/template-parser/-/template-parser-17.3.0.tgz", - "integrity": "sha512-m+UzAnWgtjeS0x6skSmR0eXltD/p7HZA+c8pPyAkiHQzkxE7ohhfyZc03yWGuYJvWQUqQAKKdO/nQop14TP0bg==", + "version": "18.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-eslint/template-parser/-/template-parser-18.3.1.tgz", + "integrity": "sha512-JUUkfWH1G+u/Uk85ZYvJSt/qwN/Ko+jlXFtzBEcknJZsTWTwBcp36v77gPZe5FmKSziJZpyPUd+7Kiy6tuSCTw==", "dev": true, "license": "MIT", "dependencies": { - "@angular-eslint/bundled-angular-compiler": "17.3.0", - "eslint-scope": "^8.0.0" + "@angular-eslint/bundled-angular-compiler": "18.3.1", + "eslint-scope": "^8.0.2" }, "peerDependencies": { - "eslint": "^7.20.0 || ^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", "typescript": "*" } }, "node_modules/@angular-eslint/utils": { - "version": "17.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-eslint/utils/-/utils-17.3.0.tgz", - "integrity": "sha512-PJT9pxWqpvI9OXO+7L5SIVhvMW+RFjeafC7PYjtvSbNFpz+kF644BiAcfMJ0YqBnkrw3JXt+RAX25CT4mXIoXw==", + "version": "18.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-eslint/utils/-/utils-18.3.1.tgz", + "integrity": "sha512-sd9niZI7h9H2FQ7OLiQsLFBhjhRQTASh+Q0+4+hyjv9idbSHBJli8Gsi2fqj9zhtMKpAZFTrWzuLUpubJ9UYbA==", "dev": true, "license": "MIT", "dependencies": { - "@angular-eslint/bundled-angular-compiler": "17.3.0", - "@typescript-eslint/utils": "7.2.0" + "@angular-eslint/bundled-angular-compiler": "18.3.1" }, "peerDependencies": { - "eslint": "^7.20.0 || ^8.0.0", + "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", "typescript": "*" } }, "node_modules/@angular/animations": { - "version": "17.3.10", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/animations/-/animations-17.3.10.tgz", - "integrity": "sha512-9fR5snTuG4aM2K54TG/6DXcKXMDKZMovZhjQOxO8l68/oqn6fKrHs8DLzckFs0XGRZ+2OyURH8WggFm1Z828rA==", + "version": "18.2.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/animations/-/animations-18.2.8.tgz", + "integrity": "sha512-dMSn2hg70siv3lhP+vqhMbgc923xw6XBUvnpCPEzhZqFHvPXfh/LubmsD5RtqHmjWebXtgVcgS+zg3Gq3jB2lg==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^18.13.0 || >=20.9.0" + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "17.3.10" + "@angular/core": "18.2.8" } }, "node_modules/@angular/cdk": { - "version": "17.3.10", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/cdk/-/cdk-17.3.10.tgz", - "integrity": "sha512-b1qktT2c1TTTe5nTji/kFAVW92fULK0YhYAvJ+BjZTPKu2FniZNe8o4qqQ0pUuvtMu+ZQxp/QqFYoidIVCjScg==", + "version": "18.2.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/cdk/-/cdk-18.2.8.tgz", + "integrity": "sha512-J8A2FkwTBzLleAEWz6EgW73dEoeq87GREBPjTv8+2JV09LX+V3hnbgNk6zWq5k4OXtQNg9WrWP9QyRbUyA597g==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -1527,34 +1352,33 @@ "parse5": "^7.1.2" }, "peerDependencies": { - "@angular/common": "^17.0.0 || ^18.0.0", - "@angular/core": "^17.0.0 || ^18.0.0", + "@angular/common": "^18.0.0 || ^19.0.0", + "@angular/core": "^18.0.0 || ^19.0.0", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/cli": { - "version": "17.3.9", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/cli/-/cli-17.3.9.tgz", - "integrity": "sha512-b5RGu5RO4VKZlMQDatwABAn1qocgD9u4IrGN2dvHDcrz5apTKYftUdGyG42vngyDNBCg1mWkSDQEWK4f2HfuGg==", + "version": "18.2.10", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/cli/-/cli-18.2.10.tgz", + "integrity": "sha512-qW/F3XVZMzzenFzbn+7FGpw8GOt9qW8UxBtYya7gUNdWlcsgGUk+ZaGC2OLbfI5gX6pchW4TOPMsDSMeaCEI2Q==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1703.9", - "@angular-devkit/core": "17.3.9", - "@angular-devkit/schematics": "17.3.9", - "@schematics/angular": "17.3.9", + "@angular-devkit/architect": "0.1802.10", + "@angular-devkit/core": "18.2.10", + "@angular-devkit/schematics": "18.2.10", + "@inquirer/prompts": "5.3.8", + "@listr2/prompt-adapter-inquirer": "2.0.15", + "@schematics/angular": "18.2.10", "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.3", - "ini": "4.1.2", - "inquirer": "9.2.15", - "jsonc-parser": "3.2.1", - "npm-package-arg": "11.0.1", - "npm-pick-manifest": "9.0.0", - "open": "8.4.2", - "ora": "5.4.1", - "pacote": "17.0.6", + "ini": "4.1.3", + "jsonc-parser": "3.3.1", + "listr2": "8.2.4", + "npm-package-arg": "11.0.3", + "npm-pick-manifest": "9.1.0", + "pacote": "18.0.6", "resolve": "1.22.8", - "semver": "7.6.0", + "semver": "7.6.3", "symbol-observable": "4.0.0", "yargs": "17.7.2" }, @@ -1562,43 +1386,27 @@ "ng": "bin/ng.js" }, "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { - "version": "0.1703.9", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-devkit/architect/-/architect-0.1703.9.tgz", - "integrity": "sha512-kEPfTOVnzrJxPGTvaXy8653HU9Fucxttx9gVfQR1yafs+yIEGx3fKGKe89YPmaEay32bIm7ZUpxDF1FO14nkdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "17.3.9", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@angular/cli/node_modules/@angular-devkit/core": { - "version": "17.3.9", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-devkit/core/-/core-17.3.9.tgz", - "integrity": "sha512-/iKyn5YT7NW5ylrg9yufUydS8byExeQ2HHIwFC4Ebwb/JYYCz+k4tBf2LdP+zXpemDpLznXTQGWia0/yJjG8Vg==", + "version": "18.2.10", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-devkit/core/-/core-18.2.10.tgz", + "integrity": "sha512-LFqiNdraBujg8e1lhuB0bkFVAoIbVbeXXwfoeROKH60OPbP8tHdgV6sFTqU7UGBKA+b+bYye70KFTG2Ys8QzKQ==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.1", + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.2", "rxjs": "7.8.1", "source-map": "0.7.4" }, "engines": { - "node": "^18.13.0 || >=20.9.0", + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, @@ -1612,71 +1420,71 @@ } }, "node_modules/@angular/cli/node_modules/@angular-devkit/schematics": { - "version": "17.3.9", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-devkit/schematics/-/schematics-17.3.9.tgz", - "integrity": "sha512-9qg+uWywgAtaQlvbnCQv47hcL6ZuA+d9ucgZ0upZftBllZ2vp5WIthCPb2mB0uBkj84Csmtz9MsErFjOQtTj4g==", + "version": "18.2.10", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular-devkit/schematics/-/schematics-18.2.10.tgz", + "integrity": "sha512-EIm/yCYg3ZYPsPYJxXRX5F6PofJCbNQ5rZEuQEY09vy+ZRTqGezH0qoUP5WxlYeJrjiRLYqADI9WtVNzDyaD4w==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "17.3.9", - "jsonc-parser": "3.2.1", - "magic-string": "0.30.8", + "@angular-devkit/core": "18.2.10", + "jsonc-parser": "3.3.1", + "magic-string": "0.30.11", "ora": "5.4.1", "rxjs": "7.8.1" }, "engines": { - "node": "^18.13.0 || >=20.9.0", + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@angular/cli/node_modules/@schematics/angular": { - "version": "17.3.9", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@schematics/angular/-/angular-17.3.9.tgz", - "integrity": "sha512-q6N8mbcYC6cgPyjTrMH7ehULQoUUwEYN4g7uo4ylZ/PFklSLJvpSp4BuuxANgW449qHSBvQfdIoui9ayAUXQzA==", + "version": "18.2.10", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@schematics/angular/-/angular-18.2.10.tgz", + "integrity": "sha512-2pDHT4aSzfs8Up4RQmHHuFd5FeuUebS1ZJwyt46MfXzRMFtzUZV/JKsIvDqyMwnkvFfLvgJyTCkl8JGw5jQObg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "17.3.9", - "@angular-devkit/schematics": "17.3.9", - "jsonc-parser": "3.2.1" + "@angular-devkit/core": "18.2.10", + "@angular-devkit/schematics": "18.2.10", + "jsonc-parser": "3.3.1" }, "engines": { - "node": "^18.13.0 || >=20.9.0", + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@angular/common": { - "version": "17.3.10", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/common/-/common-17.3.10.tgz", - "integrity": "sha512-6SfD21M3LujymmZsZQIxAsV8Bj5u6He6ImZ+p2rr7FAhFxpVJyKldK8LCmJcFsBD4srpQcxEZ0iDxXvg+0ihAw==", + "version": "18.2.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/common/-/common-18.2.8.tgz", + "integrity": "sha512-TYsKtE5nVaIScWSLGSO34Skc+s3hB/BujSddnfQHoNFvPT/WR0dfmdlpVCTeLj+f50htFoMhW11tW99PbK+whQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^18.13.0 || >=20.9.0" + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "17.3.10", + "@angular/core": "18.2.8", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "17.3.10", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/compiler/-/compiler-17.3.10.tgz", - "integrity": "sha512-6Ce4siHyF0fCZBDm/cz+blJByGDu1/hbPkQVGmk5HGZTmCUeKkgyjoM6bZr7ssAsyGDRwxBh2SGHO4Ce31vuPA==", + "version": "18.2.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/compiler/-/compiler-18.2.8.tgz", + "integrity": "sha512-JRedHNfK1CCPVyeGQB5w3WBYqMA6X8Q240CkvjlGfn0pVXihf9DWk3nkSQJVgYxpvpHfxdgjaYZ5IpMzlkmkhw==", "license": "MIT", "peer": true, "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^18.13.0 || >=20.9.0" + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "17.3.10" + "@angular/core": "18.2.8" }, "peerDependenciesMeta": { "@angular/core": { @@ -1685,14 +1493,14 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "17.3.10", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/compiler-cli/-/compiler-cli-17.3.10.tgz", - "integrity": "sha512-85SBphqRj3szac3FbeYgEZ+I6WaAlo5h7JX06BdjOLLiaoIwlFhLeAuG+jVekseV+95grFUxIsCMphWHi2e6hQ==", + "version": "18.2.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/compiler-cli/-/compiler-cli-18.2.8.tgz", + "integrity": "sha512-OksDE4LWQUCcIvMjtZF7eiDCdIMrcMMpC1+Q0PIYi7KmnqXFGs4/Y0NdJvtn/LrQznzz5WaKM3ZDVNZTRX4wmw==", "license": "MIT", "dependencies": { - "@babel/core": "7.23.9", + "@babel/core": "7.25.2", "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^3.0.0", + "chokidar": "^4.0.0", "convert-source-map": "^1.5.1", "reflect-metadata": "^0.2.0", "semver": "^7.0.0", @@ -1705,29 +1513,29 @@ "ngcc": "bundles/ngcc/index.js" }, "engines": { - "node": "^18.13.0 || >=20.9.0" + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/compiler": "17.3.10", - "typescript": ">=5.2 <5.5" + "@angular/compiler": "18.2.8", + "typescript": ">=5.4 <5.6" } }, "node_modules/@angular/compiler-cli/node_modules/@babel/core": { - "version": "7.23.9", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/core/-/core-7.23.9.tgz", - "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", + "version": "7.25.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.9", - "@babel/parser": "^7.23.9", - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -1757,144 +1565,125 @@ "semver": "bin/semver.js" } }, + "node_modules/@angular/compiler-cli/node_modules/chokidar": { + "version": "4.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@angular/compiler-cli/node_modules/readdirp": { + "version": "4.0.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "license": "MIT", + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@angular/core": { - "version": "17.3.10", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/core/-/core-17.3.10.tgz", - "integrity": "sha512-ocEKu7X0yFCOvgJn1uZy76qjhsjKvULrO1k/BuIX0nwhp61DTGYTvCqKmwCBLM8/gvcKYH5vMKMHoQKtiSGE0A==", + "version": "18.2.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/core/-/core-18.2.8.tgz", + "integrity": "sha512-NwIuX/Iby1jT6Iv1/s6S3wOFf8xfuQR3MPGvKhGgNtjXLbHG+TXceK9+QPZC0s9/Z8JR/hz+li34B79GrIKgUg==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^18.13.0 || >=20.9.0" + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.14.0" + "zone.js": "~0.14.10" } }, "node_modules/@angular/forms": { - "version": "17.3.10", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/forms/-/forms-17.3.10.tgz", - "integrity": "sha512-0VZWSXDi2M3DAGJlpdV3lo73Yo/73GPRqmfTOrvIoUIenFg5Dz6oNGzvt/1aRkRn6HKccjix6iMpH91EN65pWA==", + "version": "18.2.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/forms/-/forms-18.2.8.tgz", + "integrity": "sha512-JCLki7KC6D5vF6dE6yGlBmW33khIgpHs8N9SzuiJtkQqNDTIQA8cPsGV6qpLpxflxASynQOX5lDkWYdQyfm77Q==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^18.13.0 || >=20.9.0" + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "17.3.10", - "@angular/core": "17.3.10", - "@angular/platform-browser": "17.3.10", + "@angular/common": "18.2.8", + "@angular/core": "18.2.8", + "@angular/platform-browser": "18.2.8", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/language-service": { - "version": "17.3.10", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/language-service/-/language-service-17.3.10.tgz", - "integrity": "sha512-6y0yEnjuKGCnH+YxmZZUC/KEb2ZuB5z7y0AOj4PwOladMWSwHv71x1rz5MokBVBf7ZTeN2w89f9jSWBzSz+fPw==", + "version": "18.2.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/language-service/-/language-service-18.2.8.tgz", + "integrity": "sha512-IueQ57CPP0Dt0z2n8B1A6JTwTq6m/AJVObZzrkSfXlzY1rY2qRuTJmAbZpTJ3iAxVzNYoaGh+NFHmJL8fRiXKQ==", "dev": true, "license": "MIT", "engines": { - "node": "^18.13.0 || >=20.9.0" + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" } }, "node_modules/@angular/material": { - "version": "17.3.10", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/material/-/material-17.3.10.tgz", - "integrity": "sha512-hHMQES0tQPH5JW33W+mpBPuM8ybsloDTqFPuRV8cboDjosAWfJhzAKF3ozICpNlUrs62La/2Wu/756GcQrxebg==", - "license": "MIT", - "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/auto-init": "15.0.0-canary.7f224ddd4.0", - "@material/banner": "15.0.0-canary.7f224ddd4.0", - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/button": "15.0.0-canary.7f224ddd4.0", - "@material/card": "15.0.0-canary.7f224ddd4.0", - "@material/checkbox": "15.0.0-canary.7f224ddd4.0", - "@material/chips": "15.0.0-canary.7f224ddd4.0", - "@material/circular-progress": "15.0.0-canary.7f224ddd4.0", - "@material/data-table": "15.0.0-canary.7f224ddd4.0", - "@material/density": "15.0.0-canary.7f224ddd4.0", - "@material/dialog": "15.0.0-canary.7f224ddd4.0", - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/drawer": "15.0.0-canary.7f224ddd4.0", - "@material/elevation": "15.0.0-canary.7f224ddd4.0", - "@material/fab": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/floating-label": "15.0.0-canary.7f224ddd4.0", - "@material/form-field": "15.0.0-canary.7f224ddd4.0", - "@material/icon-button": "15.0.0-canary.7f224ddd4.0", - "@material/image-list": "15.0.0-canary.7f224ddd4.0", - "@material/layout-grid": "15.0.0-canary.7f224ddd4.0", - "@material/line-ripple": "15.0.0-canary.7f224ddd4.0", - "@material/linear-progress": "15.0.0-canary.7f224ddd4.0", - "@material/list": "15.0.0-canary.7f224ddd4.0", - "@material/menu": "15.0.0-canary.7f224ddd4.0", - "@material/menu-surface": "15.0.0-canary.7f224ddd4.0", - "@material/notched-outline": "15.0.0-canary.7f224ddd4.0", - "@material/radio": "15.0.0-canary.7f224ddd4.0", - "@material/ripple": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/segmented-button": "15.0.0-canary.7f224ddd4.0", - "@material/select": "15.0.0-canary.7f224ddd4.0", - "@material/shape": "15.0.0-canary.7f224ddd4.0", - "@material/slider": "15.0.0-canary.7f224ddd4.0", - "@material/snackbar": "15.0.0-canary.7f224ddd4.0", - "@material/switch": "15.0.0-canary.7f224ddd4.0", - "@material/tab": "15.0.0-canary.7f224ddd4.0", - "@material/tab-bar": "15.0.0-canary.7f224ddd4.0", - "@material/tab-indicator": "15.0.0-canary.7f224ddd4.0", - "@material/tab-scroller": "15.0.0-canary.7f224ddd4.0", - "@material/textfield": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/tooltip": "15.0.0-canary.7f224ddd4.0", - "@material/top-app-bar": "15.0.0-canary.7f224ddd4.0", - "@material/touch-target": "15.0.0-canary.7f224ddd4.0", - "@material/typography": "15.0.0-canary.7f224ddd4.0", + "version": "18.2.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/material/-/material-18.2.8.tgz", + "integrity": "sha512-wQGMVsfQ9lQfih2VsWAvV4z3S3uBxrxc61owlE+K0T1BxH9u/jo3A/rnRitIdvR/L4NnYlfhCnmrW9K+Pl+WCg==", + "license": "MIT", + "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/animations": "^17.0.0 || ^18.0.0", - "@angular/cdk": "17.3.10", - "@angular/common": "^17.0.0 || ^18.0.0", - "@angular/core": "^17.0.0 || ^18.0.0", - "@angular/forms": "^17.0.0 || ^18.0.0", - "@angular/platform-browser": "^17.0.0 || ^18.0.0", + "@angular/animations": "^18.0.0 || ^19.0.0", + "@angular/cdk": "18.2.8", + "@angular/common": "^18.0.0 || ^19.0.0", + "@angular/core": "^18.0.0 || ^19.0.0", + "@angular/forms": "^18.0.0 || ^19.0.0", + "@angular/platform-browser": "^18.0.0 || ^19.0.0", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/material-date-fns-adapter": { - "version": "17.3.10", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/material-date-fns-adapter/-/material-date-fns-adapter-17.3.10.tgz", - "integrity": "sha512-Q4QAPGImZTjKW9ZhLSTkBeQX21I0dtak3JbexYx4CN/pHxKRpen6KaVAEqiORqq6vNUP2Kwb7cZznQyj6L7oQw==", + "version": "18.2.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/material-date-fns-adapter/-/material-date-fns-adapter-18.2.8.tgz", + "integrity": "sha512-+x/xXUsati4q/KleRSS9H2x8hmNmGJgDRGX0ytF8et2PGlfvIWwiIyXAA8JjXwseVUx+sUyo3gGV7iZQRX2HYA==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/core": "^17.0.0 || ^18.0.0", - "@angular/material": "17.3.10", + "@angular/core": "^18.0.0 || ^19.0.0", + "@angular/material": "18.2.8", "date-fns": ">2.20.0 <4.0" } }, "node_modules/@angular/platform-browser": { - "version": "17.3.10", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/platform-browser/-/platform-browser-17.3.10.tgz", - "integrity": "sha512-LEhBDOKm2A7nRmZqsafVp6OinRDG1OYZBSqjnT1jZ+f0CRRFIXz6aJ0TMPoU6vq9SLRJ7vrGD9P/eBf2hW00NQ==", + "version": "18.2.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/platform-browser/-/platform-browser-18.2.8.tgz", + "integrity": "sha512-EPai4ZPqSq3ilLJUC85kPi9wo5j5suQovwtgRyjM/75D9Qy4TV19g8hkVM5Co/zrltO8a2G6vDscCNI5BeGw2A==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^18.13.0 || >=20.9.0" + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/animations": "17.3.10", - "@angular/common": "17.3.10", - "@angular/core": "17.3.10" + "@angular/animations": "18.2.8", + "@angular/common": "18.2.8", + "@angular/core": "18.2.8" }, "peerDependenciesMeta": { "@angular/animations": { @@ -1903,38 +1692,38 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "17.3.10", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.3.10.tgz", - "integrity": "sha512-TW6G4+isdHM2ssQTRTobeAKtR2516pJ25BSwRb+9+Jw/ZAEYOOi+KQyofIFYQccaUjb3+LpjRcaZbtZ9m/Ispg==", + "version": "18.2.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.8.tgz", + "integrity": "sha512-poZoapDqyN/rxGKQ3C6esdPiPLMkSpP2v12hoEa12KHgfPk7T1e+a+NMyJjV8HeOY3WyvL7tGRhW0NPTajTkhw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^18.13.0 || >=20.9.0" + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "17.3.10", - "@angular/compiler": "17.3.10", - "@angular/core": "17.3.10", - "@angular/platform-browser": "17.3.10" + "@angular/common": "18.2.8", + "@angular/compiler": "18.2.8", + "@angular/core": "18.2.8", + "@angular/platform-browser": "18.2.8" } }, "node_modules/@angular/router": { - "version": "17.3.10", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/router/-/router-17.3.10.tgz", - "integrity": "sha512-HlZlR9BOLoEKGOSMjmL5EfYL7F7PeDifbFi0dYWNcrG8zFrVKFklB1cuBdJhfPZgYhDEoGms/EToD71tg5wliA==", + "version": "18.2.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/router/-/router-18.2.8.tgz", + "integrity": "sha512-L+olYgxIiBq+tbfayVI0cv1yOuymsw33msnGC2l/vpc9sSVfqGzESFnB4yMVU3vHtE9v6v2Y6O+iV44/b79W/g==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^18.13.0 || >=20.9.0" + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "17.3.10", - "@angular/core": "17.3.10", - "@angular/platform-browser": "17.3.10", + "@angular/common": "18.2.8", + "@angular/core": "18.2.8", + "@angular/platform-browser": "18.2.8", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -2084,52 +1873,52 @@ } }, "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.658.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.658.0.tgz", - "integrity": "sha512-+bAp8owKzQ4oTKvLfRJDuaArzaX1RsTIx7l71HYOX0Vimm0+QFPDYQ67Jsj0SIdWKq2ReweXeg9jqI97AjHXxA==", + "version": "3.682.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.682.0.tgz", + "integrity": "sha512-BD8PPPk3+ZzFqCJSPraoXkgRcPTtjguXtyDYsyBMzFofWmN4YeswXSavZVAC354W98mkffDaXBvieyqu1Y9fKA==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.658.0", - "@aws-sdk/client-sts": "3.658.0", - "@aws-sdk/core": "3.658.0", - "@aws-sdk/credential-provider-node": "3.658.0", - "@aws-sdk/middleware-host-header": "3.654.0", - "@aws-sdk/middleware-logger": "3.654.0", - "@aws-sdk/middleware-recursion-detection": "3.654.0", - "@aws-sdk/middleware-user-agent": "3.654.0", - "@aws-sdk/region-config-resolver": "3.654.0", - "@aws-sdk/types": "3.654.0", - "@aws-sdk/util-endpoints": "3.654.0", - "@aws-sdk/util-user-agent-browser": "3.654.0", - "@aws-sdk/util-user-agent-node": "3.654.0", - "@smithy/config-resolver": "^3.0.8", - "@smithy/core": "^2.4.3", - "@smithy/fetch-http-handler": "^3.2.7", - "@smithy/hash-node": "^3.0.6", - "@smithy/invalid-dependency": "^3.0.6", - "@smithy/middleware-content-length": "^3.0.8", - "@smithy/middleware-endpoint": "^3.1.3", - "@smithy/middleware-retry": "^3.0.18", - "@smithy/middleware-serde": "^3.0.6", - "@smithy/middleware-stack": "^3.0.6", - "@smithy/node-config-provider": "^3.1.7", - "@smithy/node-http-handler": "^3.2.2", - "@smithy/protocol-http": "^4.1.3", - "@smithy/smithy-client": "^3.3.2", - "@smithy/types": "^3.4.2", - "@smithy/url-parser": "^3.0.6", + "@aws-sdk/client-sso-oidc": "3.682.0", + "@aws-sdk/client-sts": "3.682.0", + "@aws-sdk/core": "3.679.0", + "@aws-sdk/credential-provider-node": "3.682.0", + "@aws-sdk/middleware-host-header": "3.679.0", + "@aws-sdk/middleware-logger": "3.679.0", + "@aws-sdk/middleware-recursion-detection": "3.679.0", + "@aws-sdk/middleware-user-agent": "3.682.0", + "@aws-sdk/region-config-resolver": "3.679.0", + "@aws-sdk/types": "3.679.0", + "@aws-sdk/util-endpoints": "3.679.0", + "@aws-sdk/util-user-agent-browser": "3.679.0", + "@aws-sdk/util-user-agent-node": "3.682.0", + "@smithy/config-resolver": "^3.0.9", + "@smithy/core": "^2.4.8", + "@smithy/fetch-http-handler": "^3.2.9", + "@smithy/hash-node": "^3.0.7", + "@smithy/invalid-dependency": "^3.0.7", + "@smithy/middleware-content-length": "^3.0.9", + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/middleware-retry": "^3.0.23", + "@smithy/middleware-serde": "^3.0.7", + "@smithy/middleware-stack": "^3.0.7", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/node-http-handler": "^3.2.4", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.4.0", + "@smithy/types": "^3.5.0", + "@smithy/url-parser": "^3.0.7", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.18", - "@smithy/util-defaults-mode-node": "^3.0.18", - "@smithy/util-endpoints": "^2.1.2", - "@smithy/util-middleware": "^3.0.6", - "@smithy/util-retry": "^3.0.6", + "@smithy/util-defaults-mode-browser": "^3.0.23", + "@smithy/util-defaults-mode-node": "^3.0.23", + "@smithy/util-endpoints": "^2.1.3", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-retry": "^3.0.7", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -2138,49 +1927,49 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.658.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/client-sso/-/client-sso-3.658.0.tgz", - "integrity": "sha512-OtT6bXthyP/z7x2QDTWYz0mteXhQvV+mH4JgT7dW1Y5Kc/Xr85kIQ0ouypSLH14DeiT1Gd21kXKy4YuLEoWaYQ==", + "version": "3.682.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/client-sso/-/client-sso-3.682.0.tgz", + "integrity": "sha512-PYH9RFUMYLFl66HSBq4tIx6fHViMLkhJHTYJoJONpBs+Td+NwVJ895AdLtDsBIhMS0YseCbPpuyjUCJgsUrwUw==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.658.0", - "@aws-sdk/middleware-host-header": "3.654.0", - "@aws-sdk/middleware-logger": "3.654.0", - "@aws-sdk/middleware-recursion-detection": "3.654.0", - "@aws-sdk/middleware-user-agent": "3.654.0", - "@aws-sdk/region-config-resolver": "3.654.0", - "@aws-sdk/types": "3.654.0", - "@aws-sdk/util-endpoints": "3.654.0", - "@aws-sdk/util-user-agent-browser": "3.654.0", - "@aws-sdk/util-user-agent-node": "3.654.0", - "@smithy/config-resolver": "^3.0.8", - "@smithy/core": "^2.4.3", - "@smithy/fetch-http-handler": "^3.2.7", - "@smithy/hash-node": "^3.0.6", - "@smithy/invalid-dependency": "^3.0.6", - "@smithy/middleware-content-length": "^3.0.8", - "@smithy/middleware-endpoint": "^3.1.3", - "@smithy/middleware-retry": "^3.0.18", - "@smithy/middleware-serde": "^3.0.6", - "@smithy/middleware-stack": "^3.0.6", - "@smithy/node-config-provider": "^3.1.7", - "@smithy/node-http-handler": "^3.2.2", - "@smithy/protocol-http": "^4.1.3", - "@smithy/smithy-client": "^3.3.2", - "@smithy/types": "^3.4.2", - "@smithy/url-parser": "^3.0.6", + "@aws-sdk/core": "3.679.0", + "@aws-sdk/middleware-host-header": "3.679.0", + "@aws-sdk/middleware-logger": "3.679.0", + "@aws-sdk/middleware-recursion-detection": "3.679.0", + "@aws-sdk/middleware-user-agent": "3.682.0", + "@aws-sdk/region-config-resolver": "3.679.0", + "@aws-sdk/types": "3.679.0", + "@aws-sdk/util-endpoints": "3.679.0", + "@aws-sdk/util-user-agent-browser": "3.679.0", + "@aws-sdk/util-user-agent-node": "3.682.0", + "@smithy/config-resolver": "^3.0.9", + "@smithy/core": "^2.4.8", + "@smithy/fetch-http-handler": "^3.2.9", + "@smithy/hash-node": "^3.0.7", + "@smithy/invalid-dependency": "^3.0.7", + "@smithy/middleware-content-length": "^3.0.9", + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/middleware-retry": "^3.0.23", + "@smithy/middleware-serde": "^3.0.7", + "@smithy/middleware-stack": "^3.0.7", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/node-http-handler": "^3.2.4", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.4.0", + "@smithy/types": "^3.5.0", + "@smithy/url-parser": "^3.0.7", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.18", - "@smithy/util-defaults-mode-node": "^3.0.18", - "@smithy/util-endpoints": "^2.1.2", - "@smithy/util-middleware": "^3.0.6", - "@smithy/util-retry": "^3.0.6", + "@smithy/util-defaults-mode-browser": "^3.0.23", + "@smithy/util-defaults-mode-node": "^3.0.23", + "@smithy/util-endpoints": "^2.1.3", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-retry": "^3.0.7", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -2189,50 +1978,50 @@ } }, "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.658.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.658.0.tgz", - "integrity": "sha512-+oZcf9Wm7BlAhakSnxftmpeMwJLXQPesOcIX+ViF6HWSfMid4LY8Cq0jJ9si3HSe216GVMiAlBbNksayzHNdlA==", + "version": "3.682.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.682.0.tgz", + "integrity": "sha512-ZPZ7Y/r/w3nx/xpPzGSqSQsB090Xk5aZZOH+WBhTDn/pBEuim09BYXCLzvvxb7R7NnuoQdrTJiwimdJAhHl7ZQ==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.658.0", - "@aws-sdk/credential-provider-node": "3.658.0", - "@aws-sdk/middleware-host-header": "3.654.0", - "@aws-sdk/middleware-logger": "3.654.0", - "@aws-sdk/middleware-recursion-detection": "3.654.0", - "@aws-sdk/middleware-user-agent": "3.654.0", - "@aws-sdk/region-config-resolver": "3.654.0", - "@aws-sdk/types": "3.654.0", - "@aws-sdk/util-endpoints": "3.654.0", - "@aws-sdk/util-user-agent-browser": "3.654.0", - "@aws-sdk/util-user-agent-node": "3.654.0", - "@smithy/config-resolver": "^3.0.8", - "@smithy/core": "^2.4.3", - "@smithy/fetch-http-handler": "^3.2.7", - "@smithy/hash-node": "^3.0.6", - "@smithy/invalid-dependency": "^3.0.6", - "@smithy/middleware-content-length": "^3.0.8", - "@smithy/middleware-endpoint": "^3.1.3", - "@smithy/middleware-retry": "^3.0.18", - "@smithy/middleware-serde": "^3.0.6", - "@smithy/middleware-stack": "^3.0.6", - "@smithy/node-config-provider": "^3.1.7", - "@smithy/node-http-handler": "^3.2.2", - "@smithy/protocol-http": "^4.1.3", - "@smithy/smithy-client": "^3.3.2", - "@smithy/types": "^3.4.2", - "@smithy/url-parser": "^3.0.6", + "@aws-sdk/core": "3.679.0", + "@aws-sdk/credential-provider-node": "3.682.0", + "@aws-sdk/middleware-host-header": "3.679.0", + "@aws-sdk/middleware-logger": "3.679.0", + "@aws-sdk/middleware-recursion-detection": "3.679.0", + "@aws-sdk/middleware-user-agent": "3.682.0", + "@aws-sdk/region-config-resolver": "3.679.0", + "@aws-sdk/types": "3.679.0", + "@aws-sdk/util-endpoints": "3.679.0", + "@aws-sdk/util-user-agent-browser": "3.679.0", + "@aws-sdk/util-user-agent-node": "3.682.0", + "@smithy/config-resolver": "^3.0.9", + "@smithy/core": "^2.4.8", + "@smithy/fetch-http-handler": "^3.2.9", + "@smithy/hash-node": "^3.0.7", + "@smithy/invalid-dependency": "^3.0.7", + "@smithy/middleware-content-length": "^3.0.9", + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/middleware-retry": "^3.0.23", + "@smithy/middleware-serde": "^3.0.7", + "@smithy/middleware-stack": "^3.0.7", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/node-http-handler": "^3.2.4", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.4.0", + "@smithy/types": "^3.5.0", + "@smithy/url-parser": "^3.0.7", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.18", - "@smithy/util-defaults-mode-node": "^3.0.18", - "@smithy/util-endpoints": "^2.1.2", - "@smithy/util-middleware": "^3.0.6", - "@smithy/util-retry": "^3.0.6", + "@smithy/util-defaults-mode-browser": "^3.0.23", + "@smithy/util-defaults-mode-node": "^3.0.23", + "@smithy/util-endpoints": "^2.1.3", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-retry": "^3.0.7", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -2240,55 +2029,55 @@ "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.658.0" + "@aws-sdk/client-sts": "^3.682.0" } }, "node_modules/@aws-sdk/client-sts": { - "version": "3.658.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/client-sts/-/client-sts-3.658.0.tgz", - "integrity": "sha512-SffIgt/Mzwq3ijkg3lZjndkrqS1d6OeDcUi7IAO2w4KC4nM6yH1zZNSjNWvdjEvUp0Gz2kk54HvyP/r9DqTg6Q==", + "version": "3.682.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/client-sts/-/client-sts-3.682.0.tgz", + "integrity": "sha512-xKuo4HksZ+F8m9DOfx/ZuWNhaPuqZFPwwy0xqcBT6sWH7OAuBjv/fnpOTzyQhpVTWddlf+ECtMAMrxjxuOExGQ==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.658.0", - "@aws-sdk/core": "3.658.0", - "@aws-sdk/credential-provider-node": "3.658.0", - "@aws-sdk/middleware-host-header": "3.654.0", - "@aws-sdk/middleware-logger": "3.654.0", - "@aws-sdk/middleware-recursion-detection": "3.654.0", - "@aws-sdk/middleware-user-agent": "3.654.0", - "@aws-sdk/region-config-resolver": "3.654.0", - "@aws-sdk/types": "3.654.0", - "@aws-sdk/util-endpoints": "3.654.0", - "@aws-sdk/util-user-agent-browser": "3.654.0", - "@aws-sdk/util-user-agent-node": "3.654.0", - "@smithy/config-resolver": "^3.0.8", - "@smithy/core": "^2.4.3", - "@smithy/fetch-http-handler": "^3.2.7", - "@smithy/hash-node": "^3.0.6", - "@smithy/invalid-dependency": "^3.0.6", - "@smithy/middleware-content-length": "^3.0.8", - "@smithy/middleware-endpoint": "^3.1.3", - "@smithy/middleware-retry": "^3.0.18", - "@smithy/middleware-serde": "^3.0.6", - "@smithy/middleware-stack": "^3.0.6", - "@smithy/node-config-provider": "^3.1.7", - "@smithy/node-http-handler": "^3.2.2", - "@smithy/protocol-http": "^4.1.3", - "@smithy/smithy-client": "^3.3.2", - "@smithy/types": "^3.4.2", - "@smithy/url-parser": "^3.0.6", + "@aws-sdk/client-sso-oidc": "3.682.0", + "@aws-sdk/core": "3.679.0", + "@aws-sdk/credential-provider-node": "3.682.0", + "@aws-sdk/middleware-host-header": "3.679.0", + "@aws-sdk/middleware-logger": "3.679.0", + "@aws-sdk/middleware-recursion-detection": "3.679.0", + "@aws-sdk/middleware-user-agent": "3.682.0", + "@aws-sdk/region-config-resolver": "3.679.0", + "@aws-sdk/types": "3.679.0", + "@aws-sdk/util-endpoints": "3.679.0", + "@aws-sdk/util-user-agent-browser": "3.679.0", + "@aws-sdk/util-user-agent-node": "3.682.0", + "@smithy/config-resolver": "^3.0.9", + "@smithy/core": "^2.4.8", + "@smithy/fetch-http-handler": "^3.2.9", + "@smithy/hash-node": "^3.0.7", + "@smithy/invalid-dependency": "^3.0.7", + "@smithy/middleware-content-length": "^3.0.9", + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/middleware-retry": "^3.0.23", + "@smithy/middleware-serde": "^3.0.7", + "@smithy/middleware-stack": "^3.0.7", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/node-http-handler": "^3.2.4", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.4.0", + "@smithy/types": "^3.5.0", + "@smithy/url-parser": "^3.0.7", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.18", - "@smithy/util-defaults-mode-node": "^3.0.18", - "@smithy/util-endpoints": "^2.1.2", - "@smithy/util-middleware": "^3.0.6", - "@smithy/util-retry": "^3.0.6", + "@smithy/util-defaults-mode-browser": "^3.0.23", + "@smithy/util-defaults-mode-node": "^3.0.23", + "@smithy/util-endpoints": "^2.1.3", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-retry": "^3.0.7", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -2297,21 +2086,22 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.658.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/core/-/core-3.658.0.tgz", - "integrity": "sha512-vtOUqYD2/SfWGxmfYneiqv4R64qtSRPqznHUcMCusq71ZG9iz90ZxRYxS8ABrvhWD+oUqnxHesO08VYtaL4oAg==", + "version": "3.679.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/core/-/core-3.679.0.tgz", + "integrity": "sha512-CS6PWGX8l4v/xyvX8RtXnBisdCa5+URzKd0L6GvHChype9qKUVxO/Gg6N/y43Hvg7MNWJt9FBPNWIxUB+byJwg==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/core": "^2.4.3", - "@smithy/node-config-provider": "^3.1.7", - "@smithy/property-provider": "^3.1.6", - "@smithy/protocol-http": "^4.1.3", - "@smithy/signature-v4": "^4.1.3", - "@smithy/smithy-client": "^3.3.2", - "@smithy/types": "^3.4.2", - "@smithy/util-middleware": "^3.0.6", + "@aws-sdk/types": "3.679.0", + "@smithy/core": "^2.4.8", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/property-provider": "^3.1.7", + "@smithy/protocol-http": "^4.1.4", + "@smithy/signature-v4": "^4.2.0", + "@smithy/smithy-client": "^3.4.0", + "@smithy/types": "^3.5.0", + "@smithy/util-middleware": "^3.0.7", "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, @@ -2320,17 +2110,17 @@ } }, "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.658.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.658.0.tgz", - "integrity": "sha512-AALBd32sLLMZzpYEc0nc5Z3glZkwQFjvQTjDbnFaTpOIqJ7h3wfWGW1beUs75Bpz7bUjEpjcFdP0pnPhGZmDpw==", + "version": "3.682.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.682.0.tgz", + "integrity": "sha512-V+y4qUQtc0kTnNR7u5LwnZn8EZk2pjdNX+84MwD9VjXekqbXikADu06Mj93kVGVW+qgqtNMvJ8PpiI3EaaxC7A==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/client-cognito-identity": "3.658.0", - "@aws-sdk/types": "3.654.0", - "@smithy/property-provider": "^3.1.6", - "@smithy/types": "^3.4.2", + "@aws-sdk/client-cognito-identity": "3.682.0", + "@aws-sdk/types": "3.679.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -2338,16 +2128,17 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.654.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/credential-provider-env/-/credential-provider-env-3.654.0.tgz", - "integrity": "sha512-kogsx3Ql81JouHS7DkheCDU9MYAvK0AokxjcshDveGmf7BbgbWCA8Fnb9wjQyNDaOXNvkZu8Z8rgkX91z324/w==", + "version": "3.679.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/credential-provider-env/-/credential-provider-env-3.679.0.tgz", + "integrity": "sha512-EdlTYbzMm3G7VUNAMxr9S1nC1qUNqhKlAxFU8E7cKsAe8Bp29CD5HAs3POc56AVo9GC4yRIS+/mtlZSmrckzUA==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.654.0", - "@smithy/property-provider": "^3.1.6", - "@smithy/types": "^3.4.2", + "@aws-sdk/core": "3.679.0", + "@aws-sdk/types": "3.679.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -2355,21 +2146,22 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.654.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/credential-provider-http/-/credential-provider-http-3.654.0.tgz", - "integrity": "sha512-tgmAH4MBi/aDR882lfw48+tDV95ZH3GWc1Eoe6DpNLiM3GN2VfU/cZwuHmi6aq+vAbdIlswBHJ/+va0fOvlyjw==", + "version": "3.679.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/credential-provider-http/-/credential-provider-http-3.679.0.tgz", + "integrity": "sha512-ZoKLubW5DqqV1/2a3TSn+9sSKg0T8SsYMt1JeirnuLJF0mCoYFUaWMyvxxKuxPoqvUsaycxKru4GkpJ10ltNBw==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.654.0", - "@smithy/fetch-http-handler": "^3.2.7", - "@smithy/node-http-handler": "^3.2.2", - "@smithy/property-provider": "^3.1.6", - "@smithy/protocol-http": "^4.1.3", - "@smithy/smithy-client": "^3.3.2", - "@smithy/types": "^3.4.2", - "@smithy/util-stream": "^3.1.6", + "@aws-sdk/core": "3.679.0", + "@aws-sdk/types": "3.679.0", + "@smithy/fetch-http-handler": "^3.2.9", + "@smithy/node-http-handler": "^3.2.4", + "@smithy/property-provider": "^3.1.7", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.4.0", + "@smithy/types": "^3.5.0", + "@smithy/util-stream": "^3.1.9", "tslib": "^2.6.2" }, "engines": { @@ -2377,51 +2169,52 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.658.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.658.0.tgz", - "integrity": "sha512-fL4hAeF2jjSZ3Dm/kmU9AEDO8UARhUagUJ/UfXMxvkvmQ/jLydKA3ip5jMSf1fhu1TWoi/JBE/4cjKDbjwMzXA==", + "version": "3.682.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.682.0.tgz", + "integrity": "sha512-6eqWeHdK6EegAxqDdiCi215nT3QZPwukgWAYuVxNfJ/5m0/P7fAzF+D5kKVgByUvGJEbq/FEL8Fw7OBe64AA+g==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/credential-provider-env": "3.654.0", - "@aws-sdk/credential-provider-http": "3.654.0", - "@aws-sdk/credential-provider-process": "3.654.0", - "@aws-sdk/credential-provider-sso": "3.658.0", - "@aws-sdk/credential-provider-web-identity": "3.654.0", - "@aws-sdk/types": "3.654.0", - "@smithy/credential-provider-imds": "^3.2.3", - "@smithy/property-provider": "^3.1.6", - "@smithy/shared-ini-file-loader": "^3.1.7", - "@smithy/types": "^3.4.2", + "@aws-sdk/core": "3.679.0", + "@aws-sdk/credential-provider-env": "3.679.0", + "@aws-sdk/credential-provider-http": "3.679.0", + "@aws-sdk/credential-provider-process": "3.679.0", + "@aws-sdk/credential-provider-sso": "3.682.0", + "@aws-sdk/credential-provider-web-identity": "3.679.0", + "@aws-sdk/types": "3.679.0", + "@smithy/credential-provider-imds": "^3.2.4", + "@smithy/property-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.658.0" + "@aws-sdk/client-sts": "^3.682.0" } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.658.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/credential-provider-node/-/credential-provider-node-3.658.0.tgz", - "integrity": "sha512-rdWBylUdT6/dK+zBj7jajJpUQ3rP/YvKo0peYhpTgpUSHjqkjrx/BRXE+iccbFimR8QSxwOJ4tsb15Gvuv0E4Q==", + "version": "3.682.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/credential-provider-node/-/credential-provider-node-3.682.0.tgz", + "integrity": "sha512-HSmDqZcBVZrTctHCT9m++vdlDfJ1ARI218qmZa+TZzzOFNpKWy6QyHMEra45GB9GnkkMmV6unoDSPMuN0AqcMg==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/credential-provider-env": "3.654.0", - "@aws-sdk/credential-provider-http": "3.654.0", - "@aws-sdk/credential-provider-ini": "3.658.0", - "@aws-sdk/credential-provider-process": "3.654.0", - "@aws-sdk/credential-provider-sso": "3.658.0", - "@aws-sdk/credential-provider-web-identity": "3.654.0", - "@aws-sdk/types": "3.654.0", - "@smithy/credential-provider-imds": "^3.2.3", - "@smithy/property-provider": "^3.1.6", - "@smithy/shared-ini-file-loader": "^3.1.7", - "@smithy/types": "^3.4.2", + "@aws-sdk/credential-provider-env": "3.679.0", + "@aws-sdk/credential-provider-http": "3.679.0", + "@aws-sdk/credential-provider-ini": "3.682.0", + "@aws-sdk/credential-provider-process": "3.679.0", + "@aws-sdk/credential-provider-sso": "3.682.0", + "@aws-sdk/credential-provider-web-identity": "3.679.0", + "@aws-sdk/types": "3.679.0", + "@smithy/credential-provider-imds": "^3.2.4", + "@smithy/property-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -2429,17 +2222,18 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.654.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/credential-provider-process/-/credential-provider-process-3.654.0.tgz", - "integrity": "sha512-PmQoo8sZ9Q2Ow8OMzK++Z9lI7MsRUG7sNq3E72DVA215dhtTICTDQwGlXH2AAmIp7n+G9LLRds+4wo2ehG4mkg==", + "version": "3.679.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/credential-provider-process/-/credential-provider-process-3.679.0.tgz", + "integrity": "sha512-u/p4TV8kQ0zJWDdZD4+vdQFTMhkDEJFws040Gm113VHa/Xo1SYOjbpvqeuFoz6VmM0bLvoOWjxB9MxnSQbwKpQ==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.654.0", - "@smithy/property-provider": "^3.1.6", - "@smithy/shared-ini-file-loader": "^3.1.7", - "@smithy/types": "^3.4.2", + "@aws-sdk/core": "3.679.0", + "@aws-sdk/types": "3.679.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -2447,19 +2241,20 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.658.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.658.0.tgz", - "integrity": "sha512-zK5FwCZJ9OovBPpoVfhlNyUhdFCgkkVbQolR47UKXCREH/P6sOsVay4/CnwtVQeMGlv9c8F41ELJXWaTRmdwHA==", + "version": "3.682.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.682.0.tgz", + "integrity": "sha512-h7IH1VsWgV6YAJSWWV6y8uaRjGqLY3iBpGZlXuTH/c236NMLaNv+WqCBLeBxkFGUb2WeQ+FUPEJDCD69rgLIkg==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/client-sso": "3.658.0", - "@aws-sdk/token-providers": "3.654.0", - "@aws-sdk/types": "3.654.0", - "@smithy/property-provider": "^3.1.6", - "@smithy/shared-ini-file-loader": "^3.1.7", - "@smithy/types": "^3.4.2", + "@aws-sdk/client-sso": "3.682.0", + "@aws-sdk/core": "3.679.0", + "@aws-sdk/token-providers": "3.679.0", + "@aws-sdk/types": "3.679.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -2467,48 +2262,50 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.654.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.654.0.tgz", - "integrity": "sha512-6a2g9gMtZToqSu+CusjNK5zvbLJahQ9di7buO3iXgbizXpLXU1rnawCpWxwslMpT5fLgMSKDnKDrr6wdEk7jSw==", + "version": "3.679.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.679.0.tgz", + "integrity": "sha512-a74tLccVznXCaBefWPSysUcLXYJiSkeUmQGtalNgJ1vGkE36W5l/8czFiiowdWdKWz7+x6xf0w+Kjkjlj42Ung==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.654.0", - "@smithy/property-provider": "^3.1.6", - "@smithy/types": "^3.4.2", + "@aws-sdk/core": "3.679.0", + "@aws-sdk/types": "3.679.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.654.0" + "@aws-sdk/client-sts": "^3.679.0" } }, "node_modules/@aws-sdk/credential-providers": { - "version": "3.658.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/credential-providers/-/credential-providers-3.658.0.tgz", - "integrity": "sha512-yhxIIhC5kH8ONshOIop/Ncga0e1yjaZIDdKJQx+J0nEiCek2v1ImLwIIrbGWXC2YORd5oJp2k82iyPHOMkOqLA==", + "version": "3.682.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/credential-providers/-/credential-providers-3.682.0.tgz", + "integrity": "sha512-vLBdUlTISEXVKYFFO665ajC0U0RdXFx21fwTHiN2g4edFH++di2XCJ8/Y34bu09z9bV/rwFT2jn41iAVWasNKg==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/client-cognito-identity": "3.658.0", - "@aws-sdk/client-sso": "3.658.0", - "@aws-sdk/client-sts": "3.658.0", - "@aws-sdk/credential-provider-cognito-identity": "3.658.0", - "@aws-sdk/credential-provider-env": "3.654.0", - "@aws-sdk/credential-provider-http": "3.654.0", - "@aws-sdk/credential-provider-ini": "3.658.0", - "@aws-sdk/credential-provider-node": "3.658.0", - "@aws-sdk/credential-provider-process": "3.654.0", - "@aws-sdk/credential-provider-sso": "3.658.0", - "@aws-sdk/credential-provider-web-identity": "3.654.0", - "@aws-sdk/types": "3.654.0", - "@smithy/credential-provider-imds": "^3.2.3", - "@smithy/property-provider": "^3.1.6", - "@smithy/types": "^3.4.2", + "@aws-sdk/client-cognito-identity": "3.682.0", + "@aws-sdk/client-sso": "3.682.0", + "@aws-sdk/client-sts": "3.682.0", + "@aws-sdk/core": "3.679.0", + "@aws-sdk/credential-provider-cognito-identity": "3.682.0", + "@aws-sdk/credential-provider-env": "3.679.0", + "@aws-sdk/credential-provider-http": "3.679.0", + "@aws-sdk/credential-provider-ini": "3.682.0", + "@aws-sdk/credential-provider-node": "3.682.0", + "@aws-sdk/credential-provider-process": "3.679.0", + "@aws-sdk/credential-provider-sso": "3.682.0", + "@aws-sdk/credential-provider-web-identity": "3.679.0", + "@aws-sdk/types": "3.679.0", + "@smithy/credential-provider-imds": "^3.2.4", + "@smithy/property-provider": "^3.1.7", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -2516,16 +2313,16 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.654.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/middleware-host-header/-/middleware-host-header-3.654.0.tgz", - "integrity": "sha512-rxGgVHWKp8U2ubMv+t+vlIk7QYUaRCHaVpmUlJv0Wv6Q0KeO9a42T9FxHphjOTlCGQOLcjCreL9CF8Qhtb4mdQ==", + "version": "3.679.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/middleware-host-header/-/middleware-host-header-3.679.0.tgz", + "integrity": "sha512-y176HuQ8JRY3hGX8rQzHDSbCl9P5Ny9l16z4xmaiLo+Qfte7ee4Yr3yaAKd7GFoJ3/Mhud2XZ37fR015MfYl2w==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.654.0", - "@smithy/protocol-http": "^4.1.3", - "@smithy/types": "^3.4.2", + "@aws-sdk/types": "3.679.0", + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -2533,15 +2330,15 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.654.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/middleware-logger/-/middleware-logger-3.654.0.tgz", - "integrity": "sha512-OQYb+nWlmASyXfRb989pwkJ9EVUMP1CrKn2eyTk3usl20JZmKo2Vjis6I0tLUkMSxMhnBJJlQKyWkRpD/u1FVg==", + "version": "3.679.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/middleware-logger/-/middleware-logger-3.679.0.tgz", + "integrity": "sha512-0vet8InEj7nvIvGKk+ch7bEF5SyZ7Us9U7YTEgXPrBNStKeRUsgwRm0ijPWWd0a3oz2okaEwXsFl7G/vI0XiEA==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.654.0", - "@smithy/types": "^3.4.2", + "@aws-sdk/types": "3.679.0", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -2549,16 +2346,16 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.654.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.654.0.tgz", - "integrity": "sha512-gKSomgltKVmsT8sC6W7CrADZ4GHwX9epk3GcH6QhebVO3LA9LRbkL3TwOPUXakxxOLLUTYdOZLIOtFf7iH00lg==", + "version": "3.679.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.679.0.tgz", + "integrity": "sha512-sQoAZFsQiW/LL3DfKMYwBoGjYDEnMbA9WslWN8xneCmBAwKo6IcSksvYs23PP8XMIoBGe2I2J9BSr654XWygTQ==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.654.0", - "@smithy/protocol-http": "^4.1.3", - "@smithy/types": "^3.4.2", + "@aws-sdk/types": "3.679.0", + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -2566,17 +2363,19 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.654.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.654.0.tgz", - "integrity": "sha512-liCcqPAyRsr53cy2tYu4qeH4MMN0eh9g6k56XzI5xd4SghXH5YWh4qOYAlQ8T66ZV4nPMtD8GLtLXGzsH8moFg==", + "version": "3.682.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.682.0.tgz", + "integrity": "sha512-7TyvYR9HdGH1/Nq0eeApUTM4izB6rExiw87khVYuJwZHr6FmvIL1FsOVFro/4WlXa0lg4LiYOm/8H8dHv+fXTg==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.654.0", - "@aws-sdk/util-endpoints": "3.654.0", - "@smithy/protocol-http": "^4.1.3", - "@smithy/types": "^3.4.2", + "@aws-sdk/core": "3.679.0", + "@aws-sdk/types": "3.679.0", + "@aws-sdk/util-endpoints": "3.679.0", + "@smithy/core": "^2.4.8", + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -2584,18 +2383,18 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.654.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/region-config-resolver/-/region-config-resolver-3.654.0.tgz", - "integrity": "sha512-ydGOrXJxj3x0sJhsXyTmvJVLAE0xxuTWFJihTl67RtaO7VRNtd82I3P3bwoMMaDn5WpmV5mPo8fEUDRlBm3fPg==", + "version": "3.679.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/region-config-resolver/-/region-config-resolver-3.679.0.tgz", + "integrity": "sha512-Ybx54P8Tg6KKq5ck7uwdjiKif7n/8g1x+V0V9uTjBjRWqaIgiqzXwKWoPj6NCNkE7tJNtqI4JrNxp/3S3HvmRw==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.654.0", - "@smithy/node-config-provider": "^3.1.7", - "@smithy/types": "^3.4.2", + "@aws-sdk/types": "3.679.0", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/types": "^3.5.0", "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.6", + "@smithy/util-middleware": "^3.0.7", "tslib": "^2.6.2" }, "engines": { @@ -2603,35 +2402,35 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.654.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/token-providers/-/token-providers-3.654.0.tgz", - "integrity": "sha512-D8GeJYmvbfWkQDtTB4owmIobSMexZel0fOoetwvgCQ/7L8VPph3Q2bn1TRRIXvH7wdt6DcDxA3tKMHPBkT3GlA==", + "version": "3.679.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/token-providers/-/token-providers-3.679.0.tgz", + "integrity": "sha512-1/+Zso/x2jqgutKixYFQEGli0FELTgah6bm7aB+m2FAWH4Hz7+iMUsazg6nSWm714sG9G3h5u42Dmpvi9X6/hA==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.654.0", - "@smithy/property-provider": "^3.1.6", - "@smithy/shared-ini-file-loader": "^3.1.7", - "@smithy/types": "^3.4.2", + "@aws-sdk/types": "3.679.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.654.0" + "@aws-sdk/client-sso-oidc": "^3.679.0" } }, "node_modules/@aws-sdk/types": { - "version": "3.654.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/types/-/types-3.654.0.tgz", - "integrity": "sha512-VWvbED3SV+10QJIcmU/PKjsKilsTV16d1I7/on4bvD/jo1qGeMXqLDBSen3ks/tuvXZF/mFc7ZW/W2DiLVtO7A==", + "version": "3.679.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/types/-/types-3.679.0.tgz", + "integrity": "sha512-NwVq8YvInxQdJ47+zz4fH3BRRLC6lL+WLkvr242PVBbUOLRyK/lkwHlfiKUoeVIMyK5NF+up6TRg71t/8Bny6Q==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^3.4.2", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -2639,16 +2438,16 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.654.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/util-endpoints/-/util-endpoints-3.654.0.tgz", - "integrity": "sha512-i902fcBknHs0Irgdpi62+QMvzxE+bczvILXigYrlHL4+PiEnlMVpni5L5W1qCkNZXf8AaMrSBuR1NZAGp6UOUw==", + "version": "3.679.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/util-endpoints/-/util-endpoints-3.679.0.tgz", + "integrity": "sha512-YL6s4Y/1zC45OvddvgE139fjeWSKKPgLlnfrvhVL7alNyY9n7beR4uhoDpNrt5mI6sn9qiBF17790o+xLAXjjg==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.654.0", - "@smithy/types": "^3.4.2", - "@smithy/util-endpoints": "^2.1.2", + "@aws-sdk/types": "3.679.0", + "@smithy/types": "^3.5.0", + "@smithy/util-endpoints": "^2.1.3", "tslib": "^2.6.2" }, "engines": { @@ -2670,30 +2469,31 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.654.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.654.0.tgz", - "integrity": "sha512-ykYAJqvnxLt7wfrqya28wuH3/7NdrwzfiFd7NqEVQf7dXVxL5RPEpD7DxjcyQo3DsHvvdUvGZVaQhozycn1pzA==", + "version": "3.679.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.679.0.tgz", + "integrity": "sha512-CusSm2bTBG1kFypcsqU8COhnYc6zltobsqs3nRrvYqYaOqtMnuE46K4XTWpnzKgwDejgZGOE+WYyprtAxrPvmQ==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.654.0", - "@smithy/types": "^3.4.2", + "@aws-sdk/types": "3.679.0", + "@smithy/types": "^3.5.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.654.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.654.0.tgz", - "integrity": "sha512-a0ojjdBN6pqv6gB4H/QPPSfhs7mFtlVwnmKCM/QrTaFzN0U810PJ1BST3lBx5sa23I5jWHGaoFY+5q65C3clLQ==", + "version": "3.682.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.682.0.tgz", + "integrity": "sha512-so5s+j0gPoTS0HM4HPL+G0ajk0T6cQAg8JXzRgvyiQAxqie+zGCZAV3VuVeMNWMVbzsgZl0pYZaatPFTLG/AxA==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.654.0", - "@smithy/node-config-provider": "^3.1.7", - "@smithy/types": "^3.4.2", + "@aws-sdk/middleware-user-agent": "3.682.0", + "@aws-sdk/types": "3.679.0", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -2709,12 +2509,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.26.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/code-frame/-/code-frame-7.26.0.tgz", + "integrity": "sha512-INCKxTtbXtcNbUZ3YXutwMpEleqttcswhAdee7dhuoVrD2cnuc3PqtERBtxkX5nziX9vnBL8WXmSGwv8CuPV6g==", "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.7", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" }, "engines": { @@ -2722,30 +2523,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/compat-data/-/compat-data-7.25.4.tgz", - "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "version": "7.26.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/compat-data/-/compat-data-7.26.0.tgz", + "integrity": "sha512-qETICbZSLe7uXv9VE8T/RWOdIE5qqyTucOt4zLYMafj2MRO271VGgLd4RACJMeBO37UPWhXiKMBk7YlJ0fOzQA==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.25.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "version": "7.26.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -2761,15 +2562,16 @@ } }, "node_modules/@babel/core/node_modules/@babel/generator": { - "version": "7.25.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/generator/-/generator-7.25.6.tgz", - "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "version": "7.26.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/generator/-/generator-7.26.0.tgz", + "integrity": "sha512-/AIkAmInnWwgEAJGQr9vY0c66Mj6kjkE2ZPB1PurTRaRAh3U+J45sAQMjQDJdh4WbR3l0x5xkimXBKyBXXAu2w==", "license": "MIT", "dependencies": { - "@babel/types": "^7.25.6", + "@babel/parser": "^7.26.0", + "@babel/types": "^7.26.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" @@ -2781,6 +2583,18 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "license": "MIT" }, + "node_modules/@babel/core/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/semver/-/semver-6.3.1.tgz", @@ -2791,14 +2605,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.25.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", "license": "MIT", "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -2806,39 +2620,39 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "version": "7.24.7", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", - "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", + "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -2856,17 +2670,17 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz", - "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", + "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/traverse": "^7.25.4", + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.25.9", "semver": "^6.3.1" }, "engines": { @@ -2877,12 +2691,12 @@ } }, "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", "license": "MIT", "dependencies": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2898,13 +2712,13 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", - "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz", + "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "regexpu-core": "^5.3.1", + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.1.1", "semver": "^6.3.1" }, "engines": { @@ -2915,12 +2729,12 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", "license": "MIT", "dependencies": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2951,54 +2765,41 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", - "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.8" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "version": "7.26.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3008,35 +2809,35 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", - "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", "license": "MIT", "dependencies": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", - "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-wrap-function": "^7.25.0", - "@babel/traverse": "^7.25.0" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3046,26 +2847,26 @@ } }, "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", "license": "MIT", "dependencies": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.25.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", - "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", + "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/traverse": "^7.25.0" + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3075,119 +2876,104 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", + "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", - "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "version": "7.24.7", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.25.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", - "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", "license": "MIT", "dependencies": { - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.25.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helpers/-/helpers-7.25.6.tgz", - "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "version": "7.26.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.25.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/parser/-/parser-7.25.6.tgz", - "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "version": "7.26.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/parser/-/parser-7.26.1.tgz", + "integrity": "sha512-reoQYNiAJreZNsJzyrDNzFQ+IQ5JFiIzAHJg9bn94S3l+4++J7RsIhNMoB+lgP/9tpmiAQqspv+xfdxTSzREOw==", "license": "MIT", "dependencies": { - "@babel/types": "^7.25.6" + "@babel/types": "^7.26.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -3197,13 +2983,13 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", - "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", + "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.3" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3213,12 +2999,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", - "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", + "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3228,12 +3014,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", - "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", + "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3243,14 +3029,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", - "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3260,13 +3046,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", - "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", + "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.0" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3294,14 +3080,14 @@ } }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz", - "integrity": "sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz", + "integrity": "sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==", "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-decorators": "^7.24.7" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-decorators": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3396,12 +3182,12 @@ } }, "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz", - "integrity": "sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz", + "integrity": "sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3435,12 +3221,12 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.25.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz", - "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==", + "version": "7.26.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3450,12 +3236,12 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.25.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz", - "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==", + "version": "7.26.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3489,12 +3275,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", - "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3606,12 +3392,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz", - "integrity": "sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3637,12 +3423,12 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", - "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3652,15 +3438,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.9", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", - "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", + "version": "7.25.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", + "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -3670,14 +3456,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.23.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", - "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "version": "7.24.7", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", + "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -3687,12 +3473,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", - "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", + "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3702,12 +3488,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", - "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", + "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3717,13 +3503,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz", - "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.4", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3733,14 +3519,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", - "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", + "version": "7.26.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-class-static-block": "^7.14.5" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3750,16 +3535,16 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz", - "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/traverse": "^7.25.4", + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", "globals": "^11.1.0" }, "engines": { @@ -3770,25 +3555,25 @@ } }, "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", "license": "MIT", "dependencies": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", - "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/template": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3798,12 +3583,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", - "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3813,13 +3598,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", - "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3829,12 +3614,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", - "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3844,13 +3629,13 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", - "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3860,13 +3645,12 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", - "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3876,13 +3660,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", - "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", + "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", "license": "MIT", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3892,13 +3676,12 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", - "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3908,13 +3691,13 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", - "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", + "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3924,14 +3707,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", - "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.1" + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3941,13 +3724,12 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", - "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3957,12 +3739,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", - "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3972,13 +3754,12 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", - "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3988,12 +3769,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", - "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4003,13 +3784,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", - "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4019,14 +3800,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", - "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", + "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-simple-access": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-simple-access": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4036,15 +3817,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", - "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.0" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4054,13 +3835,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", - "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4070,13 +3851,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", - "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4086,12 +3867,12 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", - "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4101,13 +3882,12 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", - "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", + "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4117,13 +3897,12 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", - "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4133,15 +3912,14 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", - "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.7" + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4151,13 +3929,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", - "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4167,13 +3945,12 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", - "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4183,14 +3960,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", - "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4200,12 +3976,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", - "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4215,13 +3991,13 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz", - "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.4", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4231,15 +4007,14 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", - "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4249,24 +4024,24 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", "license": "MIT", "dependencies": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", - "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4276,13 +4051,13 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz", - "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", + "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4292,17 +4067,17 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.25.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz", - "integrity": "sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", + "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/plugin-syntax-jsx": "^7.24.7", - "@babel/types": "^7.25.2" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4312,13 +4087,13 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz", - "integrity": "sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", + "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.24.7" + "@babel/plugin-transform-react-jsx": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4328,27 +4103,27 @@ } }, "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz", - "integrity": "sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", + "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4358,25 +4133,25 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", - "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", + "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.9", "regenerator-transform": "^0.15.2" }, "engines": { @@ -4386,13 +4161,29 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", - "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4402,16 +4193,16 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.24.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.0.tgz", - "integrity": "sha512-zc0GA5IitLKJrSfXlXmp8KDqLrnGECK7YRfQBmEKg1NmBOQ7e+KuclBEKJgzifQeUYLdNiAw4B4bjyvzWVLiSA==", + "version": "7.24.7", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", + "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", "semver": "^6.3.1" }, "engines": { @@ -4431,12 +4222,12 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", - "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4446,13 +4237,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", - "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4462,12 +4253,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", - "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4477,12 +4268,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", - "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", + "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4492,12 +4283,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", - "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", + "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4507,16 +4298,16 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.25.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz", - "integrity": "sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz", + "integrity": "sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-syntax-typescript": "^7.24.7" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4526,24 +4317,24 @@ } }, "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", "license": "MIT", "dependencies": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", - "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4553,13 +4344,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", - "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4569,13 +4360,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", - "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4585,13 +4376,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz", - "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4601,93 +4392,79 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.25.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/preset-env/-/preset-env-7.25.4.tgz", - "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.25.4", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-option": "^7.24.8", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", + "version": "7.26.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/preset-env/-/preset-env-7.26.0.tgz", + "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.7", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.4", - "@babel/plugin-transform-async-to-generator": "^7.24.7", - "@babel/plugin-transform-block-scoped-functions": "^7.24.7", - "@babel/plugin-transform-block-scoping": "^7.25.0", - "@babel/plugin-transform-class-properties": "^7.25.4", - "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.25.4", - "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.8", - "@babel/plugin-transform-dotall-regex": "^7.24.7", - "@babel/plugin-transform-duplicate-keys": "^7.24.7", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", - "@babel/plugin-transform-dynamic-import": "^7.24.7", - "@babel/plugin-transform-exponentiation-operator": "^7.24.7", - "@babel/plugin-transform-export-namespace-from": "^7.24.7", - "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.25.1", - "@babel/plugin-transform-json-strings": "^7.24.7", - "@babel/plugin-transform-literals": "^7.25.2", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", - "@babel/plugin-transform-member-expression-literals": "^7.24.7", - "@babel/plugin-transform-modules-amd": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.8", - "@babel/plugin-transform-modules-systemjs": "^7.25.0", - "@babel/plugin-transform-modules-umd": "^7.24.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", - "@babel/plugin-transform-new-target": "^7.24.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", - "@babel/plugin-transform-numeric-separator": "^7.24.7", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", - "@babel/plugin-transform-object-super": "^7.24.7", - "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.8", - "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.25.4", - "@babel/plugin-transform-private-property-in-object": "^7.24.7", - "@babel/plugin-transform-property-literals": "^7.24.7", - "@babel/plugin-transform-regenerator": "^7.24.7", - "@babel/plugin-transform-reserved-words": "^7.24.7", - "@babel/plugin-transform-shorthand-properties": "^7.24.7", - "@babel/plugin-transform-spread": "^7.24.7", - "@babel/plugin-transform-sticky-regex": "^7.24.7", - "@babel/plugin-transform-template-literals": "^7.24.7", - "@babel/plugin-transform-typeof-symbol": "^7.24.8", - "@babel/plugin-transform-unicode-escapes": "^7.24.7", - "@babel/plugin-transform-unicode-property-regex": "^7.24.7", - "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.4", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.25.9", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.25.9", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.25.9", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.25.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.25.9", + "@babel/plugin-transform-typeof-symbol": "^7.25.9", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.10.6", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.37.1", + "core-js-compat": "^3.38.1", "semver": "^6.3.1" }, "engines": { @@ -4698,15 +4475,14 @@ } }, "node_modules/@babel/preset-env/node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz", - "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", + "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-remap-async-to-generator": "^7.25.0", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/traverse": "^7.25.4" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4716,14 +4492,14 @@ } }, "node_modules/@babel/preset-env/node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", - "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4732,31 +4508,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, "node_modules/@babel/preset-env/node_modules/semver": { "version": "6.3.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/semver/-/semver-6.3.1.tgz", @@ -4781,18 +4532,18 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/preset-react/-/preset-react-7.24.7.tgz", - "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/preset-react/-/preset-react-7.25.9.tgz", + "integrity": "sha512-D3to0uSPiWE7rBrdIICCd0tJSIGpLaaGptna2+w7Pft5xMqLpA1sz99DK5TZ1TjGbdQ/VI1eCSZ06dv3lT4JOw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-transform-react-display-name": "^7.24.7", - "@babel/plugin-transform-react-jsx": "^7.24.7", - "@babel/plugin-transform-react-jsx-development": "^7.24.7", - "@babel/plugin-transform-react-pure-annotations": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-transform-react-display-name": "^7.25.9", + "@babel/plugin-transform-react-jsx": "^7.25.9", + "@babel/plugin-transform-react-jsx-development": "^7.25.9", + "@babel/plugin-transform-react-pure-annotations": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4802,16 +4553,16 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.24.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz", - "integrity": "sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==", + "version": "7.26.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", + "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-syntax-jsx": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.7", - "@babel/plugin-transform-typescript": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-typescript": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4820,16 +4571,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "license": "MIT" - }, "node_modules/@babel/runtime": { - "version": "7.24.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/runtime/-/runtime-7.24.0.tgz", - "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==", + "version": "7.25.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/runtime/-/runtime-7.25.0.tgz", + "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -4839,9 +4584,9 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.25.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/runtime-corejs3/-/runtime-corejs3-7.25.6.tgz", - "integrity": "sha512-Gz0Nrobx8szge6kQQ5Z5MX9L3ObqNwCQY1PSwSNzreFL7aHGxv8Fp2j3ETV6/wWdbiV+mW6OSm8oQhg3Tcsniw==", + "version": "7.26.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/runtime-corejs3/-/runtime-corejs3-7.26.0.tgz", + "integrity": "sha512-YXHu5lN8kJCb1LOb9PgV6pvak43X2h4HvRApcN5SdWeaItQOzfn1hgP6jasD6KWQyJDBxrVmA9o9OivlnNJK/w==", "dev": true, "license": "MIT", "dependencies": { @@ -4853,30 +4598,30 @@ } }, "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/traverse/-/traverse-7.25.6.tgz", - "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "version": "7.25.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.6", - "@babel/parser": "^7.25.6", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6", + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -4885,29 +4630,41 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.25.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/generator/-/generator-7.25.6.tgz", - "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "version": "7.26.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/generator/-/generator-7.26.0.tgz", + "integrity": "sha512-/AIkAmInnWwgEAJGQr9vY0c66Mj6kjkE2ZPB1PurTRaRAh3U+J45sAQMjQDJdh4WbR3l0x5xkimXBKyBXXAu2w==", "license": "MIT", "dependencies": { - "@babel/types": "^7.25.6", + "@babel/parser": "^7.26.0", + "@babel/types": "^7.26.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@babel/types": { - "version": "7.25.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/types/-/types-7.25.6.tgz", - "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "version": "7.26.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4993,305 +4750,10 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@csstools/postcss-cascade-layers": { - "version": "1.1.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", - "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "@csstools/selector-specificity": "^2.0.2", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-color-function": { - "version": "1.1.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", - "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-font-format-keywords": { - "version": "1.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", - "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-hwb-function": { - "version": "1.0.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", - "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-ic-unit": { - "version": "1.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", - "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "2.0.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", - "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-nested-calc": { - "version": "1.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", - "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-normalize-display-values": { - "version": "1.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", - "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-oklab-function": { - "version": "1.1.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", - "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "1.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", - "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "1.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", - "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "1.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", - "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "1.0.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", - "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-unset-value": { - "version": "1.0.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", - "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", - "dev": true, - "license": "CC0-1.0", - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/selector-specificity": { - "version": "2.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", - "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", - "dev": true, - "license": "CC0-1.0", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss-selector-parser": "^6.0.10" - } - }, "node_modules/@cypress/request": { - "version": "3.0.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@cypress/request/-/request-3.0.5.tgz", - "integrity": "sha512-v+XHd9XmWbufxF1/bTaVm2yhbxY+TB4YtWRqF2zaXBlDNMkls34KiATz0AVDLavL3iB6bQk9/7n3oY1EoLSWGA==", + "version": "3.0.6", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@cypress/request/-/request-3.0.6.tgz", + "integrity": "sha512-fi0eVdCOtKu5Ed6+E8mYxUF6ZTFJDZvHogCBelM0xVXmrDEkyM22gRArQzq1YcHPm1V47Vf/iAD+WgVdUlJCGg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -5310,7 +4772,7 @@ "performance-now": "^2.1.0", "qs": "6.13.0", "safe-buffer": "^5.1.2", - "tough-cookie": "^4.1.3", + "tough-cookie": "^5.0.0", "tunnel-agent": "^0.6.0", "uuid": "^8.3.2" }, @@ -5745,13 +5207,6 @@ "node": ">=4" } }, - "node_modules/@cypress/webpack-batteries-included-preprocessor/node_modules/isarray": { - "version": "1.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@cypress/webpack-batteries-included-preprocessor/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -6337,29 +5792,46 @@ } }, "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "version": "0.6.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@discoveryjs/json-ext/-/json-ext-0.6.1.tgz", + "integrity": "sha512-boghen8F0Q8D+0/Q1/1r6DUEieUJ8w2a1gIknExMSHBsJFOr2+0KUfHiVYBvucPwl3+RU5PFBK833FjFCh3BhA==", "license": "MIT", "engines": { - "node": ">=10.0.0" + "node": ">=14.17.0" } }, - "node_modules/@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz", - "integrity": "sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==", - "dev": true, + "node_modules/@emnapi/core": { + "version": "1.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@emnapi/core/-/core-1.3.1.tgz", + "integrity": "sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==", "license": "MIT", - "peer": true, - "peerDependencies": { - "react": ">=16.8.0" + "dependencies": { + "@emnapi/wasi-threads": "1.0.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@emnapi/runtime/-/runtime-1.3.1.tgz", + "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz", + "integrity": "sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.19.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", - "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", + "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", "cpu": [ "ppc64" ], @@ -6369,13 +5841,13 @@ "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.19.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/android-arm/-/android-arm-0.23.0.tgz", + "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", "cpu": [ "arm" ], @@ -6385,13 +5857,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz", + "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", "cpu": [ "arm64" ], @@ -6401,13 +5873,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/android-x64/-/android-x64-0.23.0.tgz", + "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", "cpu": [ "x64" ], @@ -6417,13 +5889,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz", + "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", "cpu": [ "arm64" ], @@ -6433,13 +5905,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.19.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz", + "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", "cpu": [ "x64" ], @@ -6449,13 +5921,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz", + "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", "cpu": [ "arm64" ], @@ -6465,13 +5937,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz", + "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", "cpu": [ "x64" ], @@ -6481,13 +5953,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz", + "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", "cpu": [ "arm" ], @@ -6497,13 +5969,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz", + "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", "cpu": [ "arm64" ], @@ -6513,13 +5985,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz", + "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", "cpu": [ "ia32" ], @@ -6529,13 +6001,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz", + "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", "cpu": [ "loong64" ], @@ -6545,13 +6017,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz", + "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", "cpu": [ "mips64el" ], @@ -6561,13 +6033,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz", + "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", "cpu": [ "ppc64" ], @@ -6577,13 +6049,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz", + "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", "cpu": [ "riscv64" ], @@ -6593,13 +6065,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz", + "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", "cpu": [ "s390x" ], @@ -6609,13 +6081,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz", + "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", "cpu": [ "x64" ], @@ -6625,13 +6097,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz", + "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", "cpu": [ "x64" ], @@ -6641,13 +6113,29 @@ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz", + "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz", + "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", "cpu": [ "x64" ], @@ -6657,13 +6145,13 @@ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz", + "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", "cpu": [ "x64" ], @@ -6673,13 +6161,13 @@ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz", + "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", "cpu": [ "arm64" ], @@ -6689,13 +6177,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz", + "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", "cpu": [ "ia32" ], @@ -6705,13 +6193,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz", + "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", "cpu": [ "x64" ], @@ -6721,7 +6209,7 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@eslint-community/eslint-utils": { @@ -6740,14 +6228,67 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.11.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", - "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", + "version": "4.12.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/core": { + "version": "0.7.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@eslint/core/-/core-0.7.0.tgz", + "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { "version": "2.1.4", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", @@ -6869,15 +6410,46 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz", + "integrity": "sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@faker-js/faker": { - "version": "6.3.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@faker-js/faker/-/faker-6.3.1.tgz", - "integrity": "sha512-8YXBE2ZcU/pImVOHX7MWrSR/X5up7t6rPWZlk34RwZEcdr3ua6X+32pSd6XuOQRN+vbuvYNfA6iey8NbrjuMFQ==", + "version": "9.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@faker-js/faker/-/faker-9.1.0.tgz", + "integrity": "sha512-GJvX9iM9PBtKScJVlXQ0tWpihK3i0pha/XAhzQa1hPK/ILLa1Wq3I63Ij7lRtqTwmdTxRCyrUhLC5Sly9SLbug==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/fakerjs" + } + ], "license": "MIT", "engines": { - "node": ">=14.0.0", - "npm": ">=6.0.0" + "node": ">=18.0.0", + "npm": ">=9.0.0" } }, "node_modules/@fastify/busboy": { @@ -6890,63 +6462,43 @@ "node": ">=14" } }, - "node_modules/@floating-ui/core": { - "version": "1.6.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@floating-ui/core/-/core-1.6.8.tgz", - "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@floating-ui/utils": "^0.2.8" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.6.11", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@floating-ui/dom/-/dom-1.6.11.tgz", - "integrity": "sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==", + "node_modules/@gfx/zopfli": { + "version": "1.0.15", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@gfx/zopfli/-/zopfli-1.0.15.tgz", + "integrity": "sha512-7mBgpi7UD82fsff5ThQKet0uBTl4BYerQuc+/qA1ELTwWEiIedRTcD3JgiUu9wwZ2kytW8JOb165rSdAt8PfcQ==", "dev": true, - "license": "MIT", - "peer": true, + "license": "Apache-2.0", "dependencies": { - "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.8" + "base64-js": "^1.3.0" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@floating-ui/react-dom": { - "version": "2.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", - "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "peer": true, - "dependencies": { - "@floating-ui/dom": "^1.0.0" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" + "engines": { + "node": ">=18.18.0" } }, - "node_modules/@floating-ui/utils": { - "version": "0.2.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@floating-ui/utils/-/utils-0.2.8.tgz", - "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@gfx/zopfli": { - "version": "1.0.15", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@gfx/zopfli/-/zopfli-1.0.15.tgz", - "integrity": "sha512-7mBgpi7UD82fsff5ThQKet0uBTl4BYerQuc+/qA1ELTwWEiIedRTcD3JgiUu9wwZ2kytW8JOb165rSdAt8PfcQ==", + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { - "base64-js": "^1.3.0" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" }, "engines": { - "node": ">= 8" + "node": ">=18.18.0" } }, "node_modules/@humanwhocodes/config-array": { @@ -7006,11 +6558,276 @@ "deprecated": "Use @eslint/object-schema instead", "license": "BSD-3-Clause" }, + "node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "2.5.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@inquirer/checkbox/-/checkbox-2.5.0.tgz", + "integrity": "sha512-sMgdETOfi2dUHT8r7TT1BTKOwNvdDGFDXYWtQ2J69SvlYNntk9I/gJe7r5yvMwwsuKnYbuRs3pNhx4tgNck5aA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.3", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/confirm": { + "version": "3.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@inquirer/confirm/-/confirm-3.2.0.tgz", + "integrity": "sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/core": { + "version": "9.2.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@inquirer/core/-/core-9.2.1.tgz", + "integrity": "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==", + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.6", + "@inquirer/type": "^2.0.0", + "@types/mute-stream": "^0.0.4", + "@types/node": "^22.5.5", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/core/node_modules/@inquirer/type": { + "version": "2.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@inquirer/type/-/type-2.0.0.tgz", + "integrity": "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==", + "license": "MIT", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/core/node_modules/@types/node": { + "version": "22.8.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/node/-/node-22.8.4.tgz", + "integrity": "sha512-SpNNxkftTJOPk0oN+y2bIqurEXHTA2AOZ3EJDDKeJ5VzkvvORSvmQXGQarcOzWV1ac7DCaPBEdMDxBsM+d8jWw==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.8" + } + }, + "node_modules/@inquirer/core/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/editor": { + "version": "2.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@inquirer/editor/-/editor-2.2.0.tgz", + "integrity": "sha512-9KHOpJ+dIL5SZli8lJ6xdaYLPPzB8xB9GZItg39MBybzhxA16vxmszmQFrRwbOA918WA2rvu8xhDEg/p6LXKbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3", + "external-editor": "^3.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/expand": { + "version": "2.3.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@inquirer/expand/-/expand-2.3.0.tgz", + "integrity": "sha512-qnJsUcOGCSG1e5DTOErmv2BPQqrtT6uzqn1vI/aYGiPKq+FgslGZmtdnXbhuI7IlT7OByDoEEqdnhUnVR2hhLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.7", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@inquirer/figures/-/figures-1.0.7.tgz", + "integrity": "sha512-m+Trk77mp54Zma6xLkLuY+mvanPxlE4A7yNKs2HBiyZ4UkVs28Mv5c/pgWrHeInx+USHeX/WEPzjrWrcJiQgjw==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "2.3.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@inquirer/input/-/input-2.3.0.tgz", + "integrity": "sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/number": { + "version": "1.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@inquirer/number/-/number-1.1.0.tgz", + "integrity": "sha512-ilUnia/GZUtfSZy3YEErXLJ2Sljo/mf9fiKc08n18DdwdmDbOzRcTv65H1jjDvlsAuvdFXf4Sa/aL7iw/NanVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/password": { + "version": "2.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@inquirer/password/-/password-2.2.0.tgz", + "integrity": "sha512-5otqIpgsPYIshqhgtEwSspBQE40etouR8VIxzpJkv9i0dVHIpyhiivbkH9/dGiMLdyamT54YRdGJLfl8TFnLHg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3", + "ansi-escapes": "^4.3.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/prompts": { + "version": "5.3.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@inquirer/prompts/-/prompts-5.3.8.tgz", + "integrity": "sha512-b2BudQY/Si4Y2a0PdZZL6BeJtl8llgeZa7U2j47aaJSCeAl1e4UI7y8a9bSkO3o/ZbZrgT5muy/34JbsjfIWxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^2.4.7", + "@inquirer/confirm": "^3.1.22", + "@inquirer/editor": "^2.1.22", + "@inquirer/expand": "^2.1.22", + "@inquirer/input": "^2.2.9", + "@inquirer/number": "^1.0.10", + "@inquirer/password": "^2.1.22", + "@inquirer/rawlist": "^2.2.4", + "@inquirer/search": "^1.0.7", + "@inquirer/select": "^2.4.7" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/rawlist": { + "version": "2.3.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@inquirer/rawlist/-/rawlist-2.3.0.tgz", + "integrity": "sha512-zzfNuINhFF7OLAtGHfhwOW2TlYJyli7lOUoJUXw/uyklcwalV6WRXBXtFIicN8rTRK1XTiPWB4UY+YuW8dsnLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/search": { + "version": "1.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@inquirer/search/-/search-1.1.0.tgz", + "integrity": "sha512-h+/5LSj51dx7hp5xOn4QFnUaKeARwUCLs6mIhtkJ0JYPBLmEYjdHSYh7I6GrLg9LwpJ3xeX0FZgAG1q0QdCpVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.3", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/select": { + "version": "2.5.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@inquirer/select/-/select-2.5.0.tgz", + "integrity": "sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.3", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/type": { + "version": "1.5.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@inquirer/type/-/type-1.5.5.tgz", + "integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==", + "license": "MIT", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "devOptional": true, "license": "ISC", "dependencies": { "string-width": "^5.1.2", @@ -7028,7 +6845,6 @@ "version": "6.2.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "devOptional": true, "license": "MIT", "engines": { "node": ">=12" @@ -7041,14 +6857,12 @@ "version": "9.2.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "devOptional": true, "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "devOptional": true, "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -7066,7 +6880,6 @@ "version": "8.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -7084,6 +6897,7 @@ "version": "1.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "devOptional": true, "license": "ISC", "dependencies": { "camelcase": "^5.3.1", @@ -7100,6 +6914,7 @@ "version": "4.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "devOptional": true, "license": "MIT", "dependencies": { "locate-path": "^5.0.0", @@ -7113,6 +6928,7 @@ "version": "5.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "devOptional": true, "license": "MIT", "dependencies": { "p-locate": "^4.1.0" @@ -7125,6 +6941,7 @@ "version": "2.3.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "devOptional": true, "license": "MIT", "dependencies": { "p-try": "^2.0.0" @@ -7140,6 +6957,7 @@ "version": "4.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "devOptional": true, "license": "MIT", "dependencies": { "p-limit": "^2.2.0" @@ -7175,62 +6993,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/core": { "version": "29.7.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@jest/core/-/core-29.7.0.tgz", @@ -7279,47 +7041,17 @@ } } }, - "node_modules/@jest/core/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "5.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "devOptional": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@jest/core/node_modules/ci-info": { @@ -7338,16 +7070,28 @@ "node": ">=8" } }, - "node_modules/@jest/core/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@jest/core/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "devOptional": true, "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@jest/core/node_modules/react-is": { + "version": "18.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "devOptional": true, + "license": "MIT" + }, "node_modules/@jest/core/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -7361,19 +7105,6 @@ "node": ">=8" } }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/environment": { "version": "29.7.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@jest/environment/-/environment-29.7.0.tgz", @@ -7495,59 +7226,6 @@ } } }, - "node_modules/@jest/reporters/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/reporters/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -7561,19 +7239,6 @@ "node": ">=8" } }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/schemas": { "version": "29.6.3", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@jest/schemas/-/schemas-29.6.3.tgz", @@ -7660,39 +7325,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/@jest/transform/node_modules/convert-source-map": { "version": "2.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -7700,29 +7332,6 @@ "devOptional": true, "license": "MIT" }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/types": { "version": "29.6.3", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@jest/types/-/types-29.6.3.tgz", @@ -7740,58 +7349,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -7850,13 +7407,59 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@juggle/resize-observer": { - "version": "3.4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", - "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==", - "dev": true, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", "license": "Apache-2.0", - "peer": true + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz", + "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.1", + "@jsonjoy.com/util": "^1.1.2", + "hyperdyperid": "^1.2.0", + "thingies": "^1.20.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.5.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@jsonjoy.com/util/-/util-1.5.0.tgz", + "integrity": "sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } }, "node_modules/@keycloak/keycloak-admin-client": { "version": "24.0.5", @@ -7878,896 +7481,479 @@ "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", "license": "MIT" }, - "node_modules/@ljharb/through": { - "version": "2.3.13", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@ljharb/through/-/through-2.3.13.tgz", - "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", + "node_modules/@listr2/prompt-adapter-inquirer": { + "version": "2.0.15", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.15.tgz", + "integrity": "sha512-MZrGem/Ujjd4cPTLYDfCZK2iKKeiO/8OX13S6jqxldLs0Prf2aGqVlJ77nMBqMv7fzqgXEgjrNHLXcKR8l9lOg==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "@inquirer/type": "^1.5.1" }, "engines": { - "node": ">= 0.4" + "node": ">=18.0.0" + }, + "peerDependencies": { + "@inquirer/prompts": ">= 3 < 6" } }, - "node_modules/@material/animation": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/animation/-/animation-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-1GSJaPKef+7HRuV+HusVZHps64cmZuOItDbt40tjJVaikcaZvwmHlcTxRIqzcRoCdt5ZKHh3NoO7GB9Khg4Jnw==", + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "3.0.13", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.0.13.tgz", + "integrity": "sha512-uiKPB0Fv6WEEOZjruu9a6wnW/8jrjzlZbxXscMB8kuCJ1k6kHpcBnuvaAWcqhbI7rqX5GKziwWEdD+wi2gNLfA==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "tslib": "^2.1.0" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@material/auto-init": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/auto-init/-/auto-init-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-t7ZGpRJ3ec0QDUO0nJu/SMgLW7qcuG2KqIsEYD1Ej8qhI2xpdR2ydSDQOkVEitXmKoGol1oq4nYSBjTlB65GqA==", + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "3.0.13", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.0.13.tgz", + "integrity": "sha512-bEVIIfK5mSQoG1R19qA+fJOvCB+0wVGGnXHT3smchBVahYBdlPn2OsZZKzlHWfb1E+PhLBmYfqB5zQXFP7hJig==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "@material/base": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@material/banner": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/banner/-/banner-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-g9wBUZzYBizyBcBQXTIafnRUUPi7efU9gPJfzeGgkynXiccP/vh5XMmH+PBxl5v+4MlP/d4cZ2NUYoAN7UTqSA==", + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "3.0.13", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.0.13.tgz", + "integrity": "sha512-Yml1KlMzOnXj/tnW7yX8U78iAzTk39aILYvCPbqeewAq1kSzl+w59k/fiVkTBfvDi/oW/5YRxL+Fq+Y1Fr1r2Q==", + "cpu": [ + "arm" + ], "license": "MIT", - "dependencies": { - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/button": "15.0.0-canary.7f224ddd4.0", - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/elevation": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/ripple": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/shape": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/tokens": "15.0.0-canary.7f224ddd4.0", - "@material/typography": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@material/base": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/base/-/base-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-I9KQOKXpLfJkP8MqZyr8wZIzdPHrwPjFvGd9zSK91/vPyE4hzHRJc/0njsh9g8Lm9PRYLbifXX+719uTbHxx+A==", + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "3.0.13", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.0.13.tgz", + "integrity": "sha512-afbVrsMgZ9dUTNUchFpj5VkmJRxvht/u335jUJ7o23YTbNbnpmXif3VKQGCtnjSh+CZaqm6N3CPG8KO3zwyZ1Q==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@material/button": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/button/-/button-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-BHB7iyHgRVH+JF16+iscR+Qaic+p7LU1FOLgP8KucRlpF9tTwIxQA6mJwGRi5gUtcG+vyCmzVS+hIQ6DqT/7BA==", - "license": "MIT", - "dependencies": { - "@material/density": "15.0.0-canary.7f224ddd4.0", - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/elevation": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/focus-ring": "15.0.0-canary.7f224ddd4.0", - "@material/ripple": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/shape": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/tokens": "15.0.0-canary.7f224ddd4.0", - "@material/touch-target": "15.0.0-canary.7f224ddd4.0", - "@material/typography": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@material/card": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/card/-/card-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-kt7y9/IWOtJTr3Z/AoWJT3ZLN7CLlzXhx2udCLP9ootZU2bfGK0lzNwmo80bv/pJfrY9ihQKCtuGTtNxUy+vIw==", + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "3.0.13", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.0.13.tgz", + "integrity": "sha512-vOtxu0xC0SLdQ2WRXg8Qgd8T32ak4SPqk5zjItRszrJk2BdeXqfGxBJbP7o4aOvSPSmSSv46Lr1EP4HXU8v7Kg==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/elevation": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/ripple": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/shape": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/tokens": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@material/checkbox": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/checkbox/-/checkbox-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-rURcrL5O1u6hzWR+dNgiQ/n89vk6tdmdP3mZgnxJx61q4I/k1yijKqNJSLrkXH7Rto3bM5NRKMOlgvMvVd7UMQ==", + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "3.0.13", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.0.13.tgz", + "integrity": "sha512-UCrMJQY/gJnOl3XgbWRZZUvGGBuKy6i0YNSptgMzHBjs+QYDYR1Mt/RLTOPy4fzzves65O1EDmlL//OzEqoLlA==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/density": "15.0.0-canary.7f224ddd4.0", - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/focus-ring": "15.0.0-canary.7f224ddd4.0", - "@material/ripple": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/touch-target": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/chips": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/chips/-/chips-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-AYAivV3GSk/T/nRIpH27sOHFPaSMrE3L0WYbnb5Wa93FgY8a0fbsFYtSH2QmtwnzXveg+B1zGTt7/xIIcynKdQ==", - "license": "MIT", - "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/checkbox": "15.0.0-canary.7f224ddd4.0", - "@material/density": "15.0.0-canary.7f224ddd4.0", - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/elevation": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/focus-ring": "15.0.0-canary.7f224ddd4.0", - "@material/ripple": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/shape": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/tokens": "15.0.0-canary.7f224ddd4.0", - "@material/touch-target": "15.0.0-canary.7f224ddd4.0", - "@material/typography": "15.0.0-canary.7f224ddd4.0", - "safevalues": "^0.3.4", - "tslib": "^2.1.0" - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@material/circular-progress": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/circular-progress/-/circular-progress-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-DJrqCKb+LuGtjNvKl8XigvyK02y36GRkfhMUYTcJEi3PrOE00bwXtyj7ilhzEVshQiXg6AHGWXtf5UqwNrx3Ow==", + "node_modules/@mdx-js/react": { + "version": "3.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@mdx-js/react/-/react-3.0.1.tgz", + "integrity": "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==", + "dev": true, "license": "MIT", "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/progress-indicator": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/data-table": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/data-table/-/data-table-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-/2WZsuBIq9z9RWYF5Jo6b7P6u0fwit+29/mN7rmAZ6akqUR54nXyNfoSNiyydMkzPlZZsep5KrSHododDhBZbA==", - "license": "MIT", - "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/checkbox": "15.0.0-canary.7f224ddd4.0", - "@material/density": "15.0.0-canary.7f224ddd4.0", - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/elevation": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/icon-button": "15.0.0-canary.7f224ddd4.0", - "@material/linear-progress": "15.0.0-canary.7f224ddd4.0", - "@material/list": "15.0.0-canary.7f224ddd4.0", - "@material/menu": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/select": "15.0.0-canary.7f224ddd4.0", - "@material/shape": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/tokens": "15.0.0-canary.7f224ddd4.0", - "@material/touch-target": "15.0.0-canary.7f224ddd4.0", - "@material/typography": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" + "@types/mdx": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=16", + "react": ">=16" } }, - "node_modules/@material/density": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/density/-/density-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-o9EXmGKVpiQ6mHhyV3oDDzc78Ow3E7v8dlaOhgaDSXgmqaE8v5sIlLNa/LKSyUga83/fpGk3QViSGXotpQx0jA==", - "license": "MIT", + "node_modules/@module-federation/bridge-react-webpack-plugin": { + "version": "0.6.14", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@module-federation/bridge-react-webpack-plugin/-/bridge-react-webpack-plugin-0.6.14.tgz", + "integrity": "sha512-bSz3jeViMVN6zYO0PbUBaLB1H6/Shebj0LusbaYmKYr1RWu6uz7cMC/3/ev4X5HHqOE7TIUPkqqu4dhqMkZRiA==", "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@material/dialog": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/dialog/-/dialog-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-u0XpTlv1JqWC/bQ3DavJ1JguofTelLT2wloj59l3/1b60jv42JQ6Am7jU3I8/SIUB1MKaW7dYocXjDWtWJakLA==", - "license": "MIT", - "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/button": "15.0.0-canary.7f224ddd4.0", - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/elevation": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/icon-button": "15.0.0-canary.7f224ddd4.0", - "@material/ripple": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/shape": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/tokens": "15.0.0-canary.7f224ddd4.0", - "@material/touch-target": "15.0.0-canary.7f224ddd4.0", - "@material/typography": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" + "@module-federation/sdk": "0.6.14", + "@types/semver": "7.5.8", + "semver": "7.6.3" } }, - "node_modules/@material/dom": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/dom/-/dom-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-mQ1HT186GPQSkRg5S18i70typ5ZytfjL09R0gJ2Qg5/G+MLCGi7TAjZZSH65tuD/QGOjel4rDdWOTmYbPYV6HA==", + "node_modules/@module-federation/data-prefetch": { + "version": "0.6.14", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@module-federation/data-prefetch/-/data-prefetch-0.6.14.tgz", + "integrity": "sha512-8TZNuddqAfu8eDSdJepe5J1Uascktty27PSarSHeh0y7gu2fkGdW+3oQvnzESIbMNNO5ru2hOKhG23R1rYqEaA==", "license": "MIT", "dependencies": { - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" + "@module-federation/runtime": "0.6.14", + "@module-federation/sdk": "0.6.14", + "fs-extra": "9.1.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" } }, - "node_modules/@material/drawer": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/drawer/-/drawer-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-qyO0W0KBftfH8dlLR0gVAgv7ZHNvU8ae11Ao6zJif/YxcvK4+gph1z8AO4H410YmC2kZiwpSKyxM1iQCCzbb4g==", + "node_modules/@module-federation/dts-plugin": { + "version": "0.6.14", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@module-federation/dts-plugin/-/dts-plugin-0.6.14.tgz", + "integrity": "sha512-v9PB4ExSn8LLp1I+jn4iK7x54MG6znnyyVQDfk/8aDKo1sSMnlT5hO1j6/NvrSdoCzXHHgO9wAsszY2WyYSuBw==", "license": "MIT", "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/elevation": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/list": "15.0.0-canary.7f224ddd4.0", - "@material/ripple": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/shape": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/typography": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" + "@module-federation/managers": "0.6.14", + "@module-federation/sdk": "0.6.14", + "@module-federation/third-party-dts-extractor": "0.6.14", + "adm-zip": "^0.5.10", + "ansi-colors": "^4.1.3", + "axios": "^1.7.4", + "chalk": "3.0.0", + "fs-extra": "9.1.0", + "isomorphic-ws": "5.0.0", + "koa": "2.15.3", + "lodash.clonedeepwith": "4.5.0", + "log4js": "6.9.1", + "node-schedule": "2.1.1", + "rambda": "^9.1.0", + "ws": "8.18.0" + }, + "peerDependencies": { + "typescript": "^4.9.0 || ^5.0.0", + "vue-tsc": ">=1.0.24" + }, + "peerDependenciesMeta": { + "vue-tsc": { + "optional": true + } } }, - "node_modules/@material/elevation": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/elevation/-/elevation-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-tV6s4/pUBECedaI36Yj18KmRCk1vfue/JP/5yYRlFNnLMRVISePbZaKkn/BHXVf+26I3W879+XqIGlDVdmOoMA==", + "node_modules/@module-federation/dts-plugin/node_modules/chalk": { + "version": "3.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "license": "MIT", "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/fab": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/fab/-/fab-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-4h76QrzfZTcPdd+awDPZ4Q0YdSqsXQnS540TPtyXUJ/5G99V6VwGpjMPIxAsW0y+pmI9UkLL/srrMaJec+7r4Q==", - "license": "MIT", - "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/elevation": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/focus-ring": "15.0.0-canary.7f224ddd4.0", - "@material/ripple": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/shape": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/tokens": "15.0.0-canary.7f224ddd4.0", - "@material/touch-target": "15.0.0-canary.7f224ddd4.0", - "@material/typography": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@material/feature-targeting": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/feature-targeting/-/feature-targeting-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-SAjtxYh6YlKZriU83diDEQ7jNSP2MnxKsER0TvFeyG1vX/DWsUyYDOIJTOEa9K1N+fgJEBkNK8hY55QhQaspew==", + "node_modules/@module-federation/enhanced": { + "version": "0.6.14", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@module-federation/enhanced/-/enhanced-0.6.14.tgz", + "integrity": "sha512-ulDGgMyBrSR2EldA+zvTeLS1T/XA+AU6uWR1S6F8wmFfcTSzQ/9JILG29VPFtcbT2Yt6v6/Pi5ldqzmhq2hQmA==", "license": "MIT", "dependencies": { - "tslib": "^2.1.0" + "@module-federation/bridge-react-webpack-plugin": "0.6.14", + "@module-federation/data-prefetch": "0.6.14", + "@module-federation/dts-plugin": "0.6.14", + "@module-federation/managers": "0.6.14", + "@module-federation/manifest": "0.6.14", + "@module-federation/rspack": "0.6.14", + "@module-federation/runtime-tools": "0.6.14", + "@module-federation/sdk": "0.6.14", + "btoa": "^1.2.1", + "upath": "2.0.1" + }, + "peerDependencies": { + "typescript": "^4.9.0 || ^5.0.0", + "vue-tsc": ">=1.0.24", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vue-tsc": { + "optional": true + }, + "webpack": { + "optional": true + } } }, - "node_modules/@material/floating-label": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/floating-label/-/floating-label-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-0KMo5ijjYaEHPiZ2pCVIcbaTS2LycvH9zEhEMKwPPGssBCX7iz5ffYQFk7e5yrQand1r3jnQQgYfHAwtykArnQ==", + "node_modules/@module-federation/managers": { + "version": "0.6.14", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@module-federation/managers/-/managers-0.6.14.tgz", + "integrity": "sha512-bZAtZUcNKCRvIqyJhye0XhrwJpg2ifBXtprYN/p4k+fSUsuTTdsQSGW0bzfic3cYAm3H5k1A/qyMQ0YuyUNy6w==", "license": "MIT", "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/typography": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" + "@module-federation/sdk": "0.6.14", + "find-pkg": "2.0.0", + "fs-extra": "9.1.0" } }, - "node_modules/@material/focus-ring": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/focus-ring/-/focus-ring-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-Jmg1nltq4J6S6A10EGMZnvufrvU3YTi+8R8ZD9lkSbun0Fm2TVdICQt/Auyi6An9zP66oQN6c31eqO6KfIPsDg==", + "node_modules/@module-federation/manifest": { + "version": "0.6.14", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@module-federation/manifest/-/manifest-0.6.14.tgz", + "integrity": "sha512-QWYcxbRIs4TVn12hr49VYsrvbppKQ/KsfYv9jW0VGCrYtsgLUq6Q5OTrCoCQjsIMIy3u7YKNdUxxMFJTYA3x+Q==", "license": "MIT", "dependencies": { - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0" + "@module-federation/dts-plugin": "0.6.14", + "@module-federation/managers": "0.6.14", + "@module-federation/sdk": "0.6.14", + "chalk": "3.0.0", + "find-pkg": "2.0.0" } }, - "node_modules/@material/form-field": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/form-field/-/form-field-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-fEPWgDQEPJ6WF7hNnIStxucHR9LE4DoDSMqCsGWS2Yu+NLZYLuCEecgR0UqQsl1EQdNRaFh8VH93KuxGd2hiPg==", + "node_modules/@module-federation/manifest/node_modules/chalk": { + "version": "3.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "license": "MIT", "dependencies": { - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/ripple": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/typography": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@material/icon-button": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/icon-button/-/icon-button-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-DcK7IL4ICY/DW+48YQZZs9g0U1kRaW0Wb0BxhvppDMYziHo/CTpFdle4gjyuTyRxPOdHQz5a97ru48Z9O4muTw==", + "node_modules/@module-federation/rspack": { + "version": "0.6.14", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@module-federation/rspack/-/rspack-0.6.14.tgz", + "integrity": "sha512-73p+CClc+/L0JD7TJ5VX9St3YsrcOXH3CtgqU8Yu2Q1CpY0ouRMG/YYOY7W327cUdcaq6Upcs/3zNI+f/ZpSpg==", "license": "MIT", "dependencies": { - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/density": "15.0.0-canary.7f224ddd4.0", - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/elevation": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/focus-ring": "15.0.0-canary.7f224ddd4.0", - "@material/ripple": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/touch-target": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" + "@module-federation/bridge-react-webpack-plugin": "0.6.14", + "@module-federation/dts-plugin": "0.6.14", + "@module-federation/managers": "0.6.14", + "@module-federation/manifest": "0.6.14", + "@module-federation/runtime-tools": "0.6.14", + "@module-federation/sdk": "0.6.14" + }, + "peerDependencies": { + "typescript": "^4.9.0 || ^5.0.0", + "vue-tsc": ">=1.0.24" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vue-tsc": { + "optional": true + } } }, - "node_modules/@material/image-list": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/image-list/-/image-list-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-voMjG2p80XbjL1B2lmF65zO5gEgJOVKClLdqh4wbYzYfwY/SR9c8eLvlYG7DLdFaFBl/7gGxD8TvvZ329HUFPw==", + "node_modules/@module-federation/runtime": { + "version": "0.6.14", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@module-federation/runtime/-/runtime-0.6.14.tgz", + "integrity": "sha512-UbwKPzUdsQZGj1dSBL/CRLZl3FoZjpCiaHJ1KUBYU8oNSX1XckkM2E9nmTP7gecvN8kZqBOIuwVSCI4X7C3MCA==", "license": "MIT", "dependencies": { - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/shape": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/typography": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" + "@module-federation/sdk": "0.6.14" } }, - "node_modules/@material/layout-grid": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/layout-grid/-/layout-grid-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-veDABLxMn2RmvfnUO2RUmC1OFfWr4cU+MrxKPoDD2hl3l3eDYv5fxws6r5T1JoSyXoaN+oEZpheS0+M9Ure8Pg==", + "node_modules/@module-federation/runtime-tools": { + "version": "0.6.14", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@module-federation/runtime-tools/-/runtime-tools-0.6.14.tgz", + "integrity": "sha512-rrGlwqhsQQ+CYTjnx06fA+uZ9hYfEQc0hROhLMBY21Mm69sbrCbEyGBQMplkGijwXRn2ZVQynUGMUrWLhHRa/A==", "license": "MIT", "dependencies": { - "tslib": "^2.1.0" + "@module-federation/runtime": "0.6.14", + "@module-federation/webpack-bundler-runtime": "0.6.14" } }, - "node_modules/@material/line-ripple": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/line-ripple/-/line-ripple-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-f60hVJhIU6I3/17Tqqzch1emUKEcfVVgHVqADbU14JD+oEIz429ZX9ksZ3VChoU3+eejFl+jVdZMLE/LrAuwpg==", + "node_modules/@module-federation/sdk": { + "version": "0.6.14", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@module-federation/sdk/-/sdk-0.6.14.tgz", + "integrity": "sha512-Qv9c/w8bpY3G/ytrsAyYE3tFpLaa1HI6slBtbP1vSg+9rQmSw1fUOoGO8J9l6jTQrhRjfO6IJWmptCguj4b6gA==", "license": "MIT", "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" + "isomorphic-rslog": "0.0.4" } }, - "node_modules/@material/linear-progress": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/linear-progress/-/linear-progress-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-pRDEwPQielDiC9Sc5XhCXrGxP8wWOnAO8sQlMebfBYHYqy5hhiIzibezS8CSaW4MFQFyXmCmpmqWlbqGYRmiyg==", + "node_modules/@module-federation/third-party-dts-extractor": { + "version": "0.6.14", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-0.6.14.tgz", + "integrity": "sha512-5BFPquRQysYmbwCqEfNXN1FeAkgvChksxFRlHWvfQl8+WgJ7ASzP5736HywhUaORN5r/Jp8i7Vr4aLcSQJ5KlQ==", "license": "MIT", "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/progress-indicator": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" + "find-pkg": "2.0.0", + "fs-extra": "9.1.0", + "resolve": "1.22.8" } }, - "node_modules/@material/list": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/list/-/list-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-Is0NV91sJlXF5pOebYAtWLF4wU2MJDbYqztML/zQNENkQxDOvEXu3nWNb3YScMIYJJXvARO0Liur5K4yPagS1Q==", + "node_modules/@module-federation/webpack-bundler-runtime": { + "version": "0.6.14", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.6.14.tgz", + "integrity": "sha512-wRlvjEwrAKL7GZ+bw1AyKzv6clrsm9xVMVwiDY5Wx9C7DrdgQBn6Q3SidMUxrAwSTR3vA5ByIDte9c+XrYCeEA==", "license": "MIT", "dependencies": { - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/density": "15.0.0-canary.7f224ddd4.0", - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/ripple": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/shape": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/tokens": "15.0.0-canary.7f224ddd4.0", - "@material/typography": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" + "@module-federation/runtime": "0.6.14", + "@module-federation/sdk": "0.6.14" } }, - "node_modules/@material/menu": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/menu/-/menu-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-D11QU1dXqLbh5X1zKlEhS3QWh0b5BPNXlafc5MXfkdJHhOiieb7LC9hMJhbrHtj24FadJ7evaFW/T2ugJbJNnQ==", + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@mongodb-js/saslprep/-/saslprep-1.1.9.tgz", + "integrity": "sha512-tVkljjeEaAhCqTzajSdgbQ6gE6f3oneVwa3iXR6csiEwXXOFsiC6Uh9iAjAhXPtqa/XMDHWjjeNH/77m/Yq2dw==", + "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/elevation": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/list": "15.0.0-canary.7f224ddd4.0", - "@material/menu-surface": "15.0.0-canary.7f224ddd4.0", - "@material/ripple": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/shape": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/tokens": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" + "sparse-bitfield": "^3.0.3" } }, - "node_modules/@material/menu-surface": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/menu-surface/-/menu-surface-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-7RZHvw0gbwppaAJ/Oh5SWmfAKJ62aw1IMB3+3MRwsb5PLoV666wInYa+zJfE4i7qBeOn904xqT2Nko5hY0ssrg==", + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", + "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/elevation": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/shape": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@material/notched-outline": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/notched-outline/-/notched-outline-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-Yg2usuKB2DKlKIBISbie9BFsOVuffF71xjbxPbybvqemxqUBd+bD5/t6H1fLE+F8/NCu5JMigho4ewUU+0RCiw==", + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", + "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/floating-label": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/shape": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@material/progress-indicator": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/progress-indicator/-/progress-indicator-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-UPbDjE5CqT+SqTs0mNFG6uFEw7wBlgYmh+noSkQ6ty/EURm8lF125dmi4dv4kW0+octonMXqkGtAoZwLIHKf/w==", + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", + "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", + "cpu": [ + "arm" + ], "license": "MIT", - "dependencies": { - "tslib": "^2.1.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@material/radio": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/radio/-/radio-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-wR1X0Sr0KmQLu6+YOFKAI84G3L6psqd7Kys5kfb8WKBM36zxO5HQXC5nJm/Y0rdn22ixzsIz2GBo0MNU4V4k1A==", - "license": "MIT", - "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/density": "15.0.0-canary.7f224ddd4.0", - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/focus-ring": "15.0.0-canary.7f224ddd4.0", - "@material/ripple": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/touch-target": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/ripple": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/ripple/-/ripple-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-JqOsWM1f4aGdotP0rh1vZlPZTg6lZgh39FIYHFMfOwfhR+LAikUJ+37ciqZuewgzXB6iiRO6a8aUH6HR5SJYPg==", - "license": "MIT", - "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/rtl": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/rtl/-/rtl-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-UVf14qAtmPiaaZjuJtmN36HETyoKWmsZM/qn1L5ciR2URb8O035dFWnz4ZWFMmAYBno/L7JiZaCkPurv2ZNrGA==", - "license": "MIT", - "dependencies": { - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/segmented-button": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/segmented-button/-/segmented-button-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-LCnVRUSAhELTKI/9hSvyvIvQIpPpqF29BV+O9yM4WoNNmNWqTulvuiv7grHZl6Z+kJuxSg4BGbsPxxb9dXozPg==", - "license": "MIT", - "dependencies": { - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/elevation": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/ripple": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/touch-target": "15.0.0-canary.7f224ddd4.0", - "@material/typography": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/select": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/select/-/select-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-WioZtQEXRpglum0cMSzSqocnhsGRr+ZIhvKb3FlaNrTaK8H3Y4QA7rVjv3emRtrLOOjaT6/RiIaUMTo9AGzWQQ==", - "license": "MIT", - "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/density": "15.0.0-canary.7f224ddd4.0", - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/elevation": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/floating-label": "15.0.0-canary.7f224ddd4.0", - "@material/line-ripple": "15.0.0-canary.7f224ddd4.0", - "@material/list": "15.0.0-canary.7f224ddd4.0", - "@material/menu": "15.0.0-canary.7f224ddd4.0", - "@material/menu-surface": "15.0.0-canary.7f224ddd4.0", - "@material/notched-outline": "15.0.0-canary.7f224ddd4.0", - "@material/ripple": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/shape": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/tokens": "15.0.0-canary.7f224ddd4.0", - "@material/typography": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/shape": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/shape/-/shape-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-8z8l1W3+cymObunJoRhwFPKZ+FyECfJ4MJykNiaZq7XJFZkV6xNmqAVrrbQj93FtLsECn9g4PjjIomguVn/OEw==", - "license": "MIT", - "dependencies": { - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/slider": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/slider/-/slider-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-QU/WSaSWlLKQRqOhJrPgm29wqvvzRusMqwAcrCh1JTrCl+xwJ43q5WLDfjYhubeKtrEEgGu9tekkAiYfMG7EBw==", - "license": "MIT", - "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/elevation": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/ripple": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/tokens": "15.0.0-canary.7f224ddd4.0", - "@material/typography": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/snackbar": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/snackbar/-/snackbar-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-sm7EbVKddaXpT/aXAYBdPoN0k8yeg9+dprgBUkrdqGzWJAeCkxb4fv2B3He88YiCtvkTz2KLY4CThPQBSEsMFQ==", - "license": "MIT", - "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/button": "15.0.0-canary.7f224ddd4.0", - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/elevation": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/icon-button": "15.0.0-canary.7f224ddd4.0", - "@material/ripple": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/shape": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/tokens": "15.0.0-canary.7f224ddd4.0", - "@material/typography": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/switch": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/switch/-/switch-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-lEDJfRvkVyyeHWIBfoxYjJVl+WlEAE2kZ/+6OqB1FW0OV8ftTODZGhHRSzjVBA1/p4FPuhAtKtoK9jTpa4AZjA==", - "license": "MIT", - "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/density": "15.0.0-canary.7f224ddd4.0", - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/elevation": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/focus-ring": "15.0.0-canary.7f224ddd4.0", - "@material/ripple": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/shape": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/tokens": "15.0.0-canary.7f224ddd4.0", - "safevalues": "^0.3.4", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/tab": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/tab/-/tab-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-E1xGACImyCLurhnizyOTCgOiVezce4HlBFAI6YhJo/AyVwjN2Dtas4ZLQMvvWWqpyhITNkeYdOchwCC1mrz3AQ==", - "license": "MIT", - "dependencies": { - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/elevation": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/focus-ring": "15.0.0-canary.7f224ddd4.0", - "@material/ripple": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/tab-indicator": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/tokens": "15.0.0-canary.7f224ddd4.0", - "@material/typography": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/tab-bar": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/tab-bar/-/tab-bar-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-p1Asb2NzrcECvAQU3b2SYrpyJGyJLQWR+nXTYzDKE8WOpLIRCXap2audNqD7fvN/A20UJ1J8U01ptrvCkwJ4eA==", - "license": "MIT", - "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/density": "15.0.0-canary.7f224ddd4.0", - "@material/elevation": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/tab": "15.0.0-canary.7f224ddd4.0", - "@material/tab-indicator": "15.0.0-canary.7f224ddd4.0", - "@material/tab-scroller": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/tokens": "15.0.0-canary.7f224ddd4.0", - "@material/typography": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/tab-indicator": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/tab-indicator/-/tab-indicator-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-h9Td3MPqbs33spcPS7ecByRHraYgU4tNCZpZzZXw31RypjKvISDv/PS5wcA4RmWqNGih78T7xg4QIGsZg4Pk4w==", - "license": "MIT", - "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/tab-scroller": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/tab-scroller/-/tab-scroller-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-LFeYNjQpdXecwECd8UaqHYbhscDCwhGln5Yh+3ctvcEgvmDPNjhKn/DL3sWprWvG8NAhP6sHMrsGhQFVdCWtTg==", - "license": "MIT", - "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/tab": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/textfield": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/textfield/-/textfield-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-AExmFvgE5nNF0UA4l2cSzPghtxSUQeeoyRjFLHLy+oAaE4eKZFrSy0zEpqPeWPQpEMDZk+6Y+6T3cOFYBeSvsw==", - "license": "MIT", - "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/density": "15.0.0-canary.7f224ddd4.0", - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/floating-label": "15.0.0-canary.7f224ddd4.0", - "@material/line-ripple": "15.0.0-canary.7f224ddd4.0", - "@material/notched-outline": "15.0.0-canary.7f224ddd4.0", - "@material/ripple": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/shape": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/tokens": "15.0.0-canary.7f224ddd4.0", - "@material/typography": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/theme": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/theme/-/theme-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-hs45hJoE9yVnoVOcsN1jklyOa51U4lzWsEnQEuJTPOk2+0HqCQ0yv/q0InpSnm2i69fNSyZC60+8HADZGF8ugQ==", - "license": "MIT", - "dependencies": { - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/tokens": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/tokens/-/tokens-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-r9TDoicmcT7FhUXC4eYMFnt9TZsz0G8T3wXvkKncLppYvZ517gPyD/1+yhuGfGOxAzxTrM66S/oEc1fFE2q4hw==", - "license": "MIT", - "dependencies": { - "@material/elevation": "15.0.0-canary.7f224ddd4.0" - } - }, - "node_modules/@material/tooltip": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/tooltip/-/tooltip-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-8qNk3pmPLTnam3XYC1sZuplQXW9xLn4Z4MI3D+U17Q7pfNZfoOugGr+d2cLA9yWAEjVJYB0mj8Yu86+udo4N9w==", - "license": "MIT", - "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/button": "15.0.0-canary.7f224ddd4.0", - "@material/dom": "15.0.0-canary.7f224ddd4.0", - "@material/elevation": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/shape": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/tokens": "15.0.0-canary.7f224ddd4.0", - "@material/typography": "15.0.0-canary.7f224ddd4.0", - "safevalues": "^0.3.4", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/top-app-bar": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/top-app-bar/-/top-app-bar-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-SARR5/ClYT4CLe9qAXakbr0i0cMY0V3V4pe3ElIJPfL2Z2c4wGR1mTR8m2LxU1MfGKK8aRoUdtfKaxWejp+eNA==", - "license": "MIT", - "dependencies": { - "@material/animation": "15.0.0-canary.7f224ddd4.0", - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/elevation": "15.0.0-canary.7f224ddd4.0", - "@material/ripple": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/shape": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "@material/typography": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/touch-target": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/touch-target/-/touch-target-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-BJo/wFKHPYLGsRaIpd7vsQwKr02LtO2e89Psv0on/p0OephlNIgeB9dD9W+bQmaeZsZ6liKSKRl6wJWDiK71PA==", + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", + "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "@material/base": "15.0.0-canary.7f224ddd4.0", - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/rtl": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@material/typography": { - "version": "15.0.0-canary.7f224ddd4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@material/typography/-/typography-15.0.0-canary.7f224ddd4.0.tgz", - "integrity": "sha512-kBaZeCGD50iq1DeRRH5OM5Jl7Gdk+/NOfKArkY4ksBZvJiStJ7ACAhpvb8MEGm4s3jvDInQFLsDq3hL+SA79sQ==", + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", + "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", - "@material/theme": "15.0.0-canary.7f224ddd4.0", - "tslib": "^2.1.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@mdx-js/react": { - "version": "3.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@mdx-js/react/-/react-3.0.1.tgz", - "integrity": "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==", - "dev": true, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", + "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "@types/mdx": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@mongodb-js/saslprep": { - "version": "1.1.9", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@mongodb-js/saslprep/-/saslprep-1.1.9.tgz", - "integrity": "sha512-tVkljjeEaAhCqTzajSdgbQ6gE6f3oneVwa3iXR6csiEwXXOFsiC6Uh9iAjAhXPtqa/XMDHWjjeNH/77m/Yq2dw==", - "dev": true, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz", + "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==", "license": "MIT", - "optional": true, "dependencies": { - "sparse-bitfield": "^3.0.3" + "@emnapi/core": "^1.1.0", + "@emnapi/runtime": "^1.1.0", + "@tybys/wasm-util": "^0.9.0" } }, "node_modules/@ngrx/component-store": { - "version": "17.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@ngrx/component-store/-/component-store-17.2.0.tgz", - "integrity": "sha512-ywhyoZpkbVIY1t5zf7xfWLGkY0A/fQdMjPehHloDI6bRLrmbllBhQRazwZ+FAGIi2myx1+mGcmAc6FbtIikedA==", + "version": "18.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@ngrx/component-store/-/component-store-18.1.0.tgz", + "integrity": "sha512-o4tHzRbscCJgPSNi7skqVxeZFYGC2aJU0iNPsap81ApoEOXX6OVaK+X6dowEABxuM1IR1pd+tqQHzgP0+Lz5hw==", "license": "MIT", "dependencies": { - "@ngrx/operators": "17.0.0-beta.0", "tslib": "^2.0.0" }, "peerDependencies": { - "@angular/core": "^17.0.0", + "@angular/core": "^18.0.0", "rxjs": "^6.5.3 || ^7.5.0" } }, "node_modules/@ngrx/effects": { - "version": "17.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@ngrx/effects/-/effects-17.2.0.tgz", - "integrity": "sha512-tXDJNsuBtbvI/7+vYnkDKKpUvLbopw1U5G6LoPnKNrbTPsPcUGmCqF5Su/ZoRN3BhXjt2j+eoeVdpBkxdxMRgg==", + "version": "18.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@ngrx/effects/-/effects-18.1.0.tgz", + "integrity": "sha512-Z52ZDv2gf15ukrpcpj6sB76WWEkvo8+dGZvSnpWRMWkysD7owdDTZOc+lcEflmtUzI4aMPn2TmrJG6ZTjvixGw==", "license": "MIT", "dependencies": { - "@ngrx/operators": "17.0.0-beta.0", "tslib": "^2.0.0" }, "peerDependencies": { - "@angular/core": "^17.0.0", - "@ngrx/store": "17.2.0", + "@angular/core": "^18.0.0", + "@ngrx/store": "18.1.0", "rxjs": "^6.5.3 || ^7.5.0" } }, "node_modules/@ngrx/entity": { - "version": "17.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@ngrx/entity/-/entity-17.2.0.tgz", - "integrity": "sha512-epXgojGXCrVMNrFdv60704iRUU+pYkE1qHBppP/wqKbZZIZHaagsg2jy8/ptDP7U3udvVq0z9suc1s+zpmL2EA==", + "version": "18.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@ngrx/entity/-/entity-18.1.0.tgz", + "integrity": "sha512-pIthc6aQAkgdm8kk0TJ7NLirVLgBfYof9cmnIfqBsEFyY8SQhFrAperuiIMO6t5Aaa/DnUYGUxhk0vrsd6+nNQ==", "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { - "@angular/core": "^17.0.0", - "@ngrx/store": "17.2.0", + "@angular/core": "^18.0.0", + "@ngrx/store": "18.1.0", "rxjs": "^6.5.3 || ^7.5.0" } }, "node_modules/@ngrx/operators": { - "version": "17.0.0-beta.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@ngrx/operators/-/operators-17.0.0-beta.0.tgz", - "integrity": "sha512-EbO8AONuQ6zo2v/mPyBOi4y0CTAp1x4Z+bx7ZF+Pd8BL5ma53BTCL1TmzaeK5zPUe0yApudLk9/ZbHXPnVox5A==", + "version": "18.1.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@ngrx/operators/-/operators-18.1.1.tgz", + "integrity": "sha512-RB156PouKI/E79jxvJLaDFYMHz9JVFR8f4ogfAeT7sh2dDGoK4A+B0n1Cl0iYW9fpcJCdfB/mu7TkH6auFv1aQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -8777,82 +7963,83 @@ } }, "node_modules/@ngrx/router-store": { - "version": "17.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@ngrx/router-store/-/router-store-17.2.0.tgz", - "integrity": "sha512-Vynfg2xsB57Oedf0Bb6mjC4MIeaF2OtAewsSnppGIM2b8pwL5W89r2+q2SGc2D6Mp3/pZF3HRI6NxhnHWJdYmg==", + "version": "18.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@ngrx/router-store/-/router-store-18.1.0.tgz", + "integrity": "sha512-i+aKGKPEizuUBNqfjQM7Tb6R8IZm+fqhHSfJEH6CKCVvkGsF6jcqQxVcCDCCUAL4ogc/kPk8d/0VexrRSgmF7g==", "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { - "@angular/common": "^17.0.0", - "@angular/core": "^17.0.0", - "@angular/router": "^17.0.0", - "@ngrx/store": "17.2.0", + "@angular/common": "^18.0.0", + "@angular/core": "^18.0.0", + "@angular/router": "^18.0.0", + "@ngrx/store": "18.1.0", "rxjs": "^6.5.3 || ^7.5.0" } }, "node_modules/@ngrx/schematics": { - "version": "17.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@ngrx/schematics/-/schematics-17.2.0.tgz", - "integrity": "sha512-7YQyPWaadxY2+Fe0oFIkClMpEKsC2HaxdjJY8SRTLnFOHj070r3Kp6mxGee46MVdfDNK47bUYnMPQi9A25EcVQ==", + "version": "18.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@ngrx/schematics/-/schematics-18.1.0.tgz", + "integrity": "sha512-KmPczWOg3NB1CN/s6dYdP5JUksxZK7YCD4S5nlBgwpMAOokRawWm+lZ/aMAQAiw3jwRqG+lYtLKfWGRD73eaNw==", "dev": true, "license": "MIT" }, "node_modules/@ngrx/store": { - "version": "17.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@ngrx/store/-/store-17.2.0.tgz", - "integrity": "sha512-7wKgZ59B/6yQSvvsU0DQXipDqpkAXv7LwcXLD5Ww7nvqN0fQoRPThMh4+Wv55DCJhE0bQc1NEMciLA47uRt7Wg==", + "version": "18.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@ngrx/store/-/store-18.1.0.tgz", + "integrity": "sha512-ijxAzJMOb3LeiegpJNNaL8BkcxNg2DVgd/NTiGCJNI7vVUEvtlSRPSWDDYY3Z9Q5oVyqJG9CP0IN/o5FGAGyAw==", "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { - "@angular/core": "^17.0.0", + "@angular/core": "^18.0.0", "rxjs": "^6.5.3 || ^7.5.0" } }, "node_modules/@ngrx/store-devtools": { - "version": "17.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@ngrx/store-devtools/-/store-devtools-17.2.0.tgz", - "integrity": "sha512-ig0qr6hMexZGnrlxfHvZmu5CanRjH7hhx60XUbB5BdBvWJIIRaWKPLcsniiDUhljAD87gvzrrilbCTiML38+CA==", + "version": "18.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@ngrx/store-devtools/-/store-devtools-18.1.0.tgz", + "integrity": "sha512-46oTChtdiJCgONwJ6SuKmVlAMe7fKnlRE1puSMyYh5O45ZuKOE6j4VFQQhIyecoce21eO/zmH3CxuBDJaoD4OQ==", "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { - "@ngrx/store": "17.2.0", + "@angular/core": "^18.0.0", + "@ngrx/store": "18.1.0", "rxjs": "^6.5.3 || ^7.5.0" } }, "node_modules/@ngtools/webpack": { - "version": "17.3.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@ngtools/webpack/-/webpack-17.3.8.tgz", - "integrity": "sha512-CjSVVa/9fzMpEDQP01SC4colKCbZwj7vUq0H2bivp8jVsmd21x9Fu0gDBH0Y9NdfAIm4eGZvmiZKMII3vIOaYQ==", + "version": "18.2.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@ngtools/webpack/-/webpack-18.2.8.tgz", + "integrity": "sha512-sq0kI8gEen4QlM6X8XqOYy7j4B8iLCYNo+iKxatV36ts4AXH0MuVkP56+oMaoH5oZNoSqd0RlfnotEHfvJAr8A==", "license": "MIT", "engines": { - "node": "^18.13.0 || >=20.9.0", + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "peerDependencies": { - "@angular/compiler-cli": "^17.0.0", - "typescript": ">=5.2 <5.5", + "@angular/compiler-cli": "^18.0.0", + "typescript": ">=5.4 <5.6", "webpack": "^5.54.0" } }, "node_modules/@ngxp/rest": { - "version": "10.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@ngxp/rest/-/rest-10.0.0.tgz", - "integrity": "sha512-LOyWIblpuBWQ8657E+JsG57+MBDed9OAwFcMhBLZCvjwQ3ozA+tDIvYsz95pvA6SfUHBf+9D3huKkEsDYOuMBQ==", + "version": "11.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@ngxp/rest/-/rest-11.0.0.tgz", + "integrity": "sha512-Kj3caopTgWgbVPP+ppkREYfmCOmyDbatfA/l6aqRQoIWQ0oH3QxUhq2I5VtviTKLb/YE4iYPvgsQWdL/b/OJgg==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/common": "^17.3.10", - "@angular/core": "^17.3.10", + "@angular/common": "^18.0.7", + "@angular/core": "^18.0.7", "lodash-es": "^4.17.21", "rxjs": "~7.8.0" } @@ -8964,16 +8151,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@npmcli/git/node_modules/ini": { - "version": "4.1.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ini/-/ini-4.1.3.tgz", - "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/@npmcli/git/node_modules/isexe": { "version": "3.1.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/isexe/-/isexe-3.1.1.tgz", @@ -8991,16 +8168,6 @@ "dev": true, "license": "ISC" }, - "node_modules/@npmcli/git/node_modules/proc-log": { - "version": "4.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/@npmcli/git/node_modules/which": { "version": "4.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/which/-/which-4.0.0.tgz", @@ -9100,16 +8267,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/package-json/node_modules/proc-log": { - "version": "4.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/@npmcli/promise-spawn": { "version": "7.0.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", @@ -9150,9 +8307,9 @@ } }, "node_modules/@npmcli/redact": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@npmcli/redact/-/redact-1.1.0.tgz", - "integrity": "sha512-PfnWuOkQgu7gCbnSsAisaX7hKOdZ4wSAhAzH3/ph5dSGau52kCRrMMGbiSQLwyTZpgldkZ49b0brkOr1AzGBHQ==", + "version": "2.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@npmcli/redact/-/redact-2.0.1.tgz", + "integrity": "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==", "dev": true, "license": "ISC", "engines": { @@ -9160,9 +8317,9 @@ } }, "node_modules/@npmcli/run-script": { - "version": "7.0.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@npmcli/run-script/-/run-script-7.0.4.tgz", - "integrity": "sha512-9ApYM/3+rBt9V80aYg6tZfzj3UWdiYyCt7gJUD1VJKvWF5nwKDSICXbYIQbspFTq6TOpbsEtIC0LArB8d9PFmg==", + "version": "8.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@npmcli/run-script/-/run-script-8.1.0.tgz", + "integrity": "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==", "dev": true, "license": "ISC", "dependencies": { @@ -9170,6 +8327,7 @@ "@npmcli/package-json": "^5.0.0", "@npmcli/promise-spawn": "^7.0.0", "node-gyp": "^10.0.0", + "proc-log": "^4.0.0", "which": "^4.0.0" }, "engines": { @@ -9203,82 +8361,100 @@ } }, "node_modules/@nrwl/angular": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/angular/-/angular-18.3.5.tgz", - "integrity": "sha512-+SqvZXnx2H5mBWaFfLtjpbPwQOZb7+TpXLixCsbdcbj1/64NimU2I+1ARFNs7t6/TPdKbYSSbDKNVtwOtQ4IwQ==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/angular/-/angular-19.8.8.tgz", + "integrity": "sha512-PA1QbIgg/yU76maJfHvAHukqHSleruj6Q8nVnMYxKbsrzC1tfOeyCiVbIHfDTtxP4XGvPh5TWxyKxThDjd/fvQ==", "license": "MIT", "dependencies": { - "@nx/angular": "18.3.5", + "@nx/angular": "19.8.8", "tslib": "^2.3.0" } }, "node_modules/@nrwl/cypress": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/cypress/-/cypress-18.3.5.tgz", - "integrity": "sha512-so2D+WJQGXBIg37FhDpdqYuiSPHOOWrwUwsq6wrVNfzYAUkejHK4J+n5Kw6056ZdKI/yJ3niw50eNprb7yKFpg==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/cypress/-/cypress-19.8.8.tgz", + "integrity": "sha512-gMgMNa4GgaA44oNAhMy0Q9Yaj+o+08pHr11afqV7azbOW80eDTk4wKqzB6fNy0HfIE0SNb0AlNQiAulxSIhPNA==", "dev": true, "license": "MIT", "dependencies": { - "@nx/cypress": "18.3.5" + "@nx/cypress": "19.8.8" } }, "node_modules/@nrwl/devkit": { - "version": "19.8.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/devkit/-/devkit-19.8.0.tgz", - "integrity": "sha512-LehpQ2D1687+JWaUpW84NPuXsQuPosmts66LShPT4+6KozB4gd0hJGAXNXpjNs9CUfLyNf8rRdEeqNjWnPYEmA==", - "dev": true, + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/devkit/-/devkit-19.8.8.tgz", + "integrity": "sha512-eikVLG60Zj4vA+mMs+ctH3JhwWYMMwNIelMT+7o7/QRn+ZAJK75EVRhSOQXly4jnRMno++ltIlsaTXxq3uhlrw==", + "license": "MIT", + "dependencies": { + "@nx/devkit": "19.8.8" + } + }, + "node_modules/@nrwl/devkit/node_modules/@nx/devkit": { + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/devkit/-/devkit-19.8.8.tgz", + "integrity": "sha512-JZtx+2J/9g4OCaNWNxW2udGxEtje0RZ75pybK4ZieiIQVXPsrInN/bpSJSEWW3xt90GlsaFPif39rBkmy6uoHg==", "license": "MIT", - "peer": true, "dependencies": { - "@nx/devkit": "19.8.0" + "@nrwl/devkit": "19.8.8", + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "minimatch": "9.0.3", + "semver": "^7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0", + "yargs-parser": "21.1.1" + }, + "peerDependencies": { + "nx": ">= 19 <= 21" } }, "node_modules/@nrwl/eslint-plugin-nx": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-18.3.5.tgz", - "integrity": "sha512-E3ysbO3BT/bx8gZJQX65YsU/MvsuLP/+gL7Xnm0lEOfm9rIdwY6iRRTmQNUIExDBzVlleLruqIPBK11Dr5H/lA==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-19.8.8.tgz", + "integrity": "sha512-pQjANrSiPbO31YK1tQhd8wty264FboMjIUt+WS06HlOOl05rCqPtl3OQ8jhHq5bv6xKftIdfs96NOcb3Nr7bdQ==", "dev": true, "license": "MIT", "dependencies": { - "@nx/eslint-plugin": "18.3.5" + "@nx/eslint-plugin": "19.8.8" } }, "node_modules/@nrwl/jest": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/jest/-/jest-18.3.5.tgz", - "integrity": "sha512-/BvFmOO9lX8DviHP8+ZO9/gsdMhCXpA/gDeboBHiQMrKP6RXKiOdJZbHPpEkIJVIcfu/fTfBG4EvH5tBEbyrBw==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/jest/-/jest-19.8.8.tgz", + "integrity": "sha512-CtKywLhuYWJ06uxqm7RmW2Sfk0vJDsQg1XHhEQVrqps/XbnkMvu89+Uq3+bauikpuJkSRAsLKVISaj2giw25Yg==", "dev": true, "license": "MIT", "dependencies": { - "@nx/jest": "18.3.5" + "@nx/jest": "19.8.8" } }, "node_modules/@nrwl/js": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/js/-/js-18.3.5.tgz", - "integrity": "sha512-Eoxkx60L/uuX33ll341PRfNMhrkO7KySCaLCLP8XWe0AZu3k1qNGyb0iTh6bsxn+5n1Zd2tkRkZ3RUYyPwyrbQ==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/js/-/js-19.8.8.tgz", + "integrity": "sha512-k9DtDoTiBzPvUSij+Wa35kkawaIZh36ErKm4ZL1sGkaBdsQ8uKVjyO8n+iGjj5GftBsh01prpCgom9n1qrtPaw==", "license": "MIT", "dependencies": { - "@nx/js": "18.3.5" + "@nx/js": "19.8.8" } }, "node_modules/@nrwl/storybook": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/storybook/-/storybook-18.3.5.tgz", - "integrity": "sha512-OGk7TsCqCTj4Yx8HoALN3EzlYw0Q14+0cXHhwCG3Q0FfDUEExbtM4Wfwx+60rPMpNwJ0UqPppAbnakk08Q7hTQ==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/storybook/-/storybook-19.8.8.tgz", + "integrity": "sha512-VFY7Ewd8vfS2vn0M4A25kritWuPafANf9Fu33fZTD+e1YDp1SZUl4bty09L8iEbZCnuJ4NF/nDYMupi30kzguQ==", "dev": true, "license": "MIT", "dependencies": { - "@nx/storybook": "18.3.5" + "@nx/storybook": "19.8.8" } }, "node_modules/@nrwl/tao": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/tao/-/tao-18.3.5.tgz", - "integrity": "sha512-gB7Vxa6FReZZEGva03Eh+84W8BSZOjsNyXboglOINu6d8iZZ0eotSXGziKgjpkj3feZ1ofKZMs0PRObVAOROVw==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/tao/-/tao-19.8.8.tgz", + "integrity": "sha512-TJ6NoI7pbdov8v/+QzW8toDLH1u2DNCMvwhNOx29bBPG0ycugmR+g2EqixujBgM1BeBQN99Fqi1ZR/ZOuHkemQ==", "license": "MIT", "dependencies": { - "nx": "18.3.5", + "nx": "19.8.8", "tslib": "^2.3.0" }, "bin": { @@ -9286,41 +8462,41 @@ } }, "node_modules/@nrwl/web": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/web/-/web-18.3.5.tgz", - "integrity": "sha512-KPKnFRv2EqrcKglyAjVCWgjhjYJTfbhXJzLsSceBHbAJniyrEE20oRqzYZJOftGoAghNZbJdVpB7Xwdl11ZKiQ==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/web/-/web-19.8.8.tgz", + "integrity": "sha512-3O4wHH5PZyOlY9woiIjERUBEm4KXEdySW1Hb1isZnUhPPLCb/ATnX6JuFaQtFp/zulxGXV8z/AcqYM/0dPcSdw==", "license": "MIT", "dependencies": { - "@nx/web": "18.3.5" + "@nx/web": "19.8.8" } }, "node_modules/@nrwl/webpack": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/webpack/-/webpack-18.3.5.tgz", - "integrity": "sha512-jIp+ihDP5s0hkk06+ZMik3KI81dV4NiSa7UBw2bOlrvSYRQquww/LAkZOW9JcxwWqR4mJs0HASBoEtR6b29Pag==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/webpack/-/webpack-19.8.8.tgz", + "integrity": "sha512-EJmrQYwC1lCSVq/78MS5db3YGgzn4c+6YvSPMXi+Oyj5loKbX5VFp95mh51zHNtuo9uflVJ3zHMROg8jWS9vfA==", "license": "MIT", "dependencies": { - "@nx/webpack": "18.3.5" + "@nx/webpack": "19.8.8" } }, "node_modules/@nrwl/workspace": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/workspace/-/workspace-18.3.5.tgz", - "integrity": "sha512-2njrwfPT6AYgGdCNeZl/s4i6Sodq0z2YBtjyWtIi+2NTznK4pyHo9E4yL+NygGyJ0vVAToKURvYYQCtPHax0pw==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/workspace/-/workspace-19.8.8.tgz", + "integrity": "sha512-O2KTVeswxQ8pSxjod0GJyVPM3SGXqxPasQ/rx3neOUvoL9ke38vNlsp+ldCgQ3BwXlwpaH3wmjwROWFs3e7YHw==", "license": "MIT", "dependencies": { - "@nx/workspace": "18.3.5" + "@nx/workspace": "19.8.8" } }, "node_modules/@nx-tools/ci-context": { - "version": "6.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx-tools/ci-context/-/ci-context-6.0.1.tgz", - "integrity": "sha512-+nZqVr6rZvSpqqbf9cZkiwvpixPx7EjJWAbIixueclakyYU8okZ20wVy30wd4wOmcnOcb4VxCdSAY4AqsUgseg==", + "version": "6.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx-tools/ci-context/-/ci-context-6.1.0.tgz", + "integrity": "sha512-RUTbrSeqA9iA4PH/NEmWczDJ/VJmHRIPOtaJs39NbJCHy9bG93iyF5j5LCPrVgK26RFvMXXJy8kuyg2o7AqrXQ==", "dev": true, "license": "MIT", "dependencies": { "@actions/github": "^6.0.0", - "@nx-tools/core": "6.0.1", + "@nx-tools/core": "6.1.0", "@octokit/openapi-types": "^22.0.0", "ci-info": "^4.0.0", "properties-file": "^3.5.4" @@ -9330,14 +8506,14 @@ } }, "node_modules/@nx-tools/container-metadata": { - "version": "6.0.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx-tools/container-metadata/-/container-metadata-6.0.2.tgz", - "integrity": "sha512-jAad8dEPaRX6SKvvTo6uIcPphD2ZEOuERtx0jb1YTxU7J7+1SF9wv+Em+7Xx3G08QJfnrNV8ZVoVaHWqFs7gqw==", + "version": "6.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx-tools/container-metadata/-/container-metadata-6.1.0.tgz", + "integrity": "sha512-RzG3AxO4t+MJDwRYaTUjJXyGwWETSDef+2FWOaqV9D+bo98nAWNXbrz3PKajBCrDj6yo5LFbsBasqKt/0CHzGw==", "dev": true, "license": "MIT", "dependencies": { - "@nx-tools/ci-context": "6.0.1", - "@nx-tools/core": "6.0.1", + "@nx-tools/ci-context": "6.1.0", + "@nx-tools/core": "6.1.0", "@renovate/pep440": "1.0.0", "csv-parse": "^5.5.5", "handlebars": "^4.7.8", @@ -9345,14 +8521,14 @@ "semver": "^7.6.0" }, "peerDependencies": { - "@nx/devkit": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "@nx/devkit": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0", "tslib": "^2.5.0" } }, "node_modules/@nx-tools/core": { - "version": "6.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx-tools/core/-/core-6.0.1.tgz", - "integrity": "sha512-Uj0H5XWmOj60rTuRGe4JO6z0nO9sDZ76xrZJKkityWQl7KYjAM8KYIK4jbIgq9GdumK1pTAqv8GnzWNe15Uixw==", + "version": "6.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx-tools/core/-/core-6.1.0.tgz", + "integrity": "sha512-jVy3mR2G0/UpuW1oh46ZR/hut4qN8passzqPGYA8FwavtB/6dG1x+Syz6lE2feI8UbExFvLBU2hu4FUmIVvRSA==", "dev": true, "license": "MIT", "dependencies": { @@ -9363,359 +8539,111 @@ "csv-parse": "^5.5.5" }, "peerDependencies": { - "@nx/devkit": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "@nx/devkit": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0", "tslib": "^2.5.0" } }, - "node_modules/@nx-tools/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@nx-tools/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@nx-tools/core/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@nx-tools/core/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@nx-tools/nx-container": { - "version": "6.0.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx-tools/nx-container/-/nx-container-6.0.2.tgz", - "integrity": "sha512-xUJCRjjpLfdsLHwfsZjX9WopjZqk66ZaAKXt/F2+CdWjVZLNOrlyiQegDdeTSRF3PTKc8xbtvS28eOvf3kplHQ==", + "version": "6.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx-tools/nx-container/-/nx-container-6.1.0.tgz", + "integrity": "sha512-5lI6NZesIvluElQ4b3kSB+fA1xCih+FMMHVvCP/rG+JVnAwmpd+F7LGncTIFFhWjjs3CrUlntMTcD8bGsn9Sgw==", "dev": true, "license": "MIT", "dependencies": { - "@nx-tools/container-metadata": "6.0.2", - "@nx-tools/core": "6.0.1", + "@nx-tools/container-metadata": "6.1.0", + "@nx-tools/core": "6.1.0", "csv-parse": "^5.5.5", "handlebars": "^4.7.8", "semver": "^7.6.0", "tmp": "^0.2.3" }, "peerDependencies": { - "@nx/devkit": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "@nx/devkit": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0", "@swc/helpers": "~0.5.11", "dotenv": ">=16.0.0" } }, "node_modules/@nx/angular": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/angular/-/angular-18.3.5.tgz", - "integrity": "sha512-TMK32LAzVpr5SGgskiD0LMk66iufMJ18g7w0TmYUeRgiR+YalAx53EiOAVKIeh8zAf4JrdXpzXdOxpo2VlL7GA==", - "license": "MIT", - "dependencies": { - "@nrwl/angular": "18.3.5", - "@nx/devkit": "18.3.5", - "@nx/eslint": "18.3.5", - "@nx/js": "18.3.5", - "@nx/web": "18.3.5", - "@nx/webpack": "18.3.5", - "@nx/workspace": "18.3.5", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/angular/-/angular-19.8.8.tgz", + "integrity": "sha512-dKL9UDtt8ngCxwWbdKNXNBkupLJ8b++RFO1FkviEasspmnk9YwRtw1/4Stwwe0ZzAs9Ngxo2mEKN4AJM8id+Aw==", + "license": "MIT", + "dependencies": { + "@module-federation/enhanced": "~0.6.0", + "@nrwl/angular": "19.8.8", + "@nx/devkit": "19.8.8", + "@nx/eslint": "19.8.8", + "@nx/js": "19.8.8", + "@nx/web": "19.8.8", + "@nx/webpack": "19.8.8", + "@nx/workspace": "19.8.8", "@phenomnomnominal/tsquery": "~5.0.1", - "@typescript-eslint/type-utils": "^7.3.0", + "@typescript-eslint/type-utils": "^8.0.0", "chalk": "^4.1.0", "find-cache-dir": "^3.3.2", - "ignore": "^5.0.4", "magic-string": "~0.30.2", "minimatch": "9.0.3", "piscina": "^4.4.0", "semver": "^7.5.3", "tslib": "^2.3.0", - "webpack": "^5.80.0", + "webpack": "^5.88.0", "webpack-merge": "^5.8.0" }, "peerDependencies": { - "@angular-devkit/build-angular": ">= 15.0.0 < 18.0.0", - "@angular-devkit/core": ">= 15.0.0 < 18.0.0", - "@angular-devkit/schematics": ">= 15.0.0 < 18.0.0", - "@schematics/angular": ">= 15.0.0 < 18.0.0", - "esbuild": "^0.19.2", + "@angular-devkit/build-angular": ">= 16.0.0 < 19.0.0", + "@angular-devkit/core": ">= 16.0.0 < 19.0.0", + "@angular-devkit/schematics": ">= 16.0.0 < 19.0.0", + "@schematics/angular": ">= 16.0.0 < 19.0.0", "rxjs": "^6.5.3 || ^7.5.0" - }, - "peerDependenciesMeta": { - "esbuild": { - "optional": true - } - } - }, - "node_modules/@nx/angular/node_modules/@nrwl/devkit": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/devkit/-/devkit-18.3.5.tgz", - "integrity": "sha512-DIvChKMe4q8CtIsbrumL/aYgf85H5vlT6eF3jnCCWORj6LTwoHtK8Q9ky1+uM82KIM0gaKd32NVDw+w64scHyg==", - "license": "MIT", - "dependencies": { - "@nx/devkit": "18.3.5" } }, "node_modules/@nx/angular/node_modules/@nx/devkit": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/devkit/-/devkit-18.3.5.tgz", - "integrity": "sha512-9I0L17t0MN87fL4m4MjDiBxJIx7h5RQY/pTYtt5TBjye0ANb165JeE4oh3ibzfjMzXv42Aej2Gm+cOuSPwzT9g==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/devkit/-/devkit-19.8.8.tgz", + "integrity": "sha512-JZtx+2J/9g4OCaNWNxW2udGxEtje0RZ75pybK4ZieiIQVXPsrInN/bpSJSEWW3xt90GlsaFPif39rBkmy6uoHg==", "license": "MIT", "dependencies": { - "@nrwl/devkit": "18.3.5", + "@nrwl/devkit": "19.8.8", "ejs": "^3.1.7", "enquirer": "~2.3.6", "ignore": "^5.0.4", + "minimatch": "9.0.3", "semver": "^7.5.3", "tmp": "~0.2.1", "tslib": "^2.3.0", "yargs-parser": "21.1.1" }, "peerDependencies": { - "nx": ">= 16 <= 19" - } - }, - "node_modules/@nx/angular/node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@nx/angular/node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@nx/angular/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "license": "MIT", - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@nx/angular/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@nx/angular/node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@nx/angular/node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/@nx/angular/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@nx/angular/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@nx/angular/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@nx/angular/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" + "nx": ">= 19 <= 21" } }, - "node_modules/@nx/angular/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@nx/angular/node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10.0.0" } }, "node_modules/@nx/cypress": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/cypress/-/cypress-18.3.5.tgz", - "integrity": "sha512-02wB/tuctBHO3IyOs4F1wMHc566BWcC4Trj4x9BAXj1fI8WI9GF1/tNF0Yzwf1pe9QKqmSFp9zg07+tus++eQg==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/cypress/-/cypress-19.8.8.tgz", + "integrity": "sha512-UCILA6S8YD9gPQFrI4lqeAGRsZXTz5fze/r5sKuhjySHx+WxjYukK5lTy0XZR8b2IqD9xm44aHWlkrdB/SrvAQ==", "dev": true, "license": "MIT", "dependencies": { - "@nrwl/cypress": "18.3.5", - "@nx/devkit": "18.3.5", - "@nx/eslint": "18.3.5", - "@nx/js": "18.3.5", + "@nrwl/cypress": "19.8.8", + "@nx/devkit": "19.8.8", + "@nx/eslint": "19.8.8", + "@nx/js": "19.8.8", "@phenomnomnominal/tsquery": "~5.0.1", "detect-port": "^1.5.1", - "semver": "^7.5.3", "tslib": "^2.3.0" }, "peerDependencies": { @@ -9727,45 +8655,35 @@ } } }, - "node_modules/@nx/cypress/node_modules/@nrwl/devkit": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/devkit/-/devkit-18.3.5.tgz", - "integrity": "sha512-DIvChKMe4q8CtIsbrumL/aYgf85H5vlT6eF3jnCCWORj6LTwoHtK8Q9ky1+uM82KIM0gaKd32NVDw+w64scHyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nx/devkit": "18.3.5" - } - }, "node_modules/@nx/cypress/node_modules/@nx/devkit": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/devkit/-/devkit-18.3.5.tgz", - "integrity": "sha512-9I0L17t0MN87fL4m4MjDiBxJIx7h5RQY/pTYtt5TBjye0ANb165JeE4oh3ibzfjMzXv42Aej2Gm+cOuSPwzT9g==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/devkit/-/devkit-19.8.8.tgz", + "integrity": "sha512-JZtx+2J/9g4OCaNWNxW2udGxEtje0RZ75pybK4ZieiIQVXPsrInN/bpSJSEWW3xt90GlsaFPif39rBkmy6uoHg==", "dev": true, "license": "MIT", "dependencies": { - "@nrwl/devkit": "18.3.5", + "@nrwl/devkit": "19.8.8", "ejs": "^3.1.7", "enquirer": "~2.3.6", "ignore": "^5.0.4", + "minimatch": "9.0.3", "semver": "^7.5.3", "tmp": "~0.2.1", "tslib": "^2.3.0", "yargs-parser": "21.1.1" }, "peerDependencies": { - "nx": ">= 16 <= 19" + "nx": ">= 19 <= 21" } }, "node_modules/@nx/devkit": { - "version": "19.8.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/devkit/-/devkit-19.8.0.tgz", - "integrity": "sha512-nPaKHF0m2KONlt8GXjN9EhFo+NOvJnFcK6ujKFFLAyZ4TACY4F1FCjSHFTjYI82j+WukzuyjSmY9wzxYughWIQ==", + "version": "20.0.6", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/devkit/-/devkit-20.0.6.tgz", + "integrity": "sha512-vUjVVEJgfq/roCzDDZDXduwnhVXl1MM5No2UELUka2oNBK09pPigdFxzUNh8XvmOyFskCGDTLKH/dAO5yTD5Bg==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@nrwl/devkit": "19.8.0", "ejs": "^3.1.7", "enquirer": "~2.3.6", "ignore": "^5.0.4", @@ -9776,51 +8694,54 @@ "yargs-parser": "21.1.1" }, "peerDependencies": { - "nx": ">= 17 <= 20" + "nx": ">= 19 <= 21" } }, "node_modules/@nx/eslint": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/eslint/-/eslint-18.3.5.tgz", - "integrity": "sha512-QLT6nEi7nLMLtKSmpWMCpE3SaRfFYqCcovOzhQpXPcjSUdL2q/zajO7zKE7OlFUkqulUMV+zYre1aK2MrQWzJQ==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/eslint/-/eslint-19.8.8.tgz", + "integrity": "sha512-g6tJCC6GMxWujDufv9mjOw6gFvMqhAvQecsqN5/ilxBA1nWkdcUUqS0y9KMHwfwmg8CEGmu89PydxpKzvqNNDg==", "license": "MIT", "dependencies": { - "@nx/devkit": "18.3.5", - "@nx/js": "18.3.5", - "@nx/linter": "18.3.5", - "eslint": "^8.0.0", + "@nx/devkit": "19.8.8", + "@nx/js": "19.8.8", + "@nx/linter": "19.8.8", + "semver": "^7.5.3", "tslib": "^2.3.0", "typescript": "~5.4.2" }, "peerDependencies": { - "js-yaml": "4.1.0" + "@zkochan/js-yaml": "0.0.7", + "eslint": "^8.0.0 || ^9.0.0" }, "peerDependenciesMeta": { - "js-yaml": { + "@zkochan/js-yaml": { "optional": true } } }, "node_modules/@nx/eslint-plugin": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/eslint-plugin/-/eslint-plugin-18.3.5.tgz", - "integrity": "sha512-34UymkcA9RzmLsOUe0w8R4NF975NfXKR88/LFDtbMfhUzn23P6P8tIO/WfT305Qh2Ubaz6VWLR/XiGWV3y37QQ==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/eslint-plugin/-/eslint-plugin-19.8.8.tgz", + "integrity": "sha512-SxFCNqXMlGYc2P7ES6GQ8gcY17V5pBpenEwqEXdq1aUgWMqquqYUFKHd2rVcBKA5DinD+dKvOwZwZeuM+7ZI5g==", "dev": true, "license": "MIT", "dependencies": { - "@nrwl/eslint-plugin-nx": "18.3.5", - "@nx/devkit": "18.3.5", - "@nx/js": "18.3.5", - "@typescript-eslint/type-utils": "^7.3.0", - "@typescript-eslint/utils": "^7.3.0", + "@eslint/compat": "^1.1.1", + "@nrwl/eslint-plugin-nx": "19.8.8", + "@nx/devkit": "19.8.8", + "@nx/js": "19.8.8", + "@typescript-eslint/type-utils": "^8.0.0", + "@typescript-eslint/utils": "^8.0.0", "chalk": "^4.1.0", "confusing-browser-globals": "^1.0.9", + "globals": "^15.9.0", "jsonc-eslint-parser": "^2.1.0", "semver": "^7.5.3", "tslib": "^2.3.0" }, "peerDependencies": { - "@typescript-eslint/parser": "^6.13.2 || ^7.0.0", + "@typescript-eslint/parser": "^6.13.2 || ^7.0.0 || ^8.0.0", "eslint-config-prettier": "^9.0.0" }, "peerDependenciesMeta": { @@ -9829,90 +8750,147 @@ } } }, - "node_modules/@nx/eslint-plugin/node_modules/@nrwl/devkit": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/devkit/-/devkit-18.3.5.tgz", - "integrity": "sha512-DIvChKMe4q8CtIsbrumL/aYgf85H5vlT6eF3jnCCWORj6LTwoHtK8Q9ky1+uM82KIM0gaKd32NVDw+w64scHyg==", + "node_modules/@nx/eslint-plugin/node_modules/@eslint/compat": { + "version": "1.2.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@eslint/compat/-/compat-1.2.2.tgz", + "integrity": "sha512-jhgiIrsw+tRfcBQ4BFl2C3vCrIUw2trCY0cnDvGZpwTtKCEDmZhAtMfrEUP/KpnwM6PrO0T+Ltm+ccW74olG3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^9.10.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@nx/eslint-plugin/node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@nx/eslint-plugin/node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@nx/eslint-plugin/node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nx/eslint-plugin/node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "peer": true, "dependencies": { - "@nx/devkit": "18.3.5" + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@nx/eslint-plugin/node_modules/@eslint/js": { + "version": "9.13.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@eslint/js/-/js-9.13.0.tgz", + "integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@nx/eslint-plugin/node_modules/@nx/devkit": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/devkit/-/devkit-18.3.5.tgz", - "integrity": "sha512-9I0L17t0MN87fL4m4MjDiBxJIx7h5RQY/pTYtt5TBjye0ANb165JeE4oh3ibzfjMzXv42Aej2Gm+cOuSPwzT9g==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/devkit/-/devkit-19.8.8.tgz", + "integrity": "sha512-JZtx+2J/9g4OCaNWNxW2udGxEtje0RZ75pybK4ZieiIQVXPsrInN/bpSJSEWW3xt90GlsaFPif39rBkmy6uoHg==", "dev": true, "license": "MIT", "dependencies": { - "@nrwl/devkit": "18.3.5", + "@nrwl/devkit": "19.8.8", "ejs": "^3.1.7", "enquirer": "~2.3.6", "ignore": "^5.0.4", + "minimatch": "9.0.3", "semver": "^7.5.3", "tmp": "~0.2.1", "tslib": "^2.3.0", "yargs-parser": "21.1.1" }, "peerDependencies": { - "nx": ">= 16 <= 19" + "nx": ">= 19 <= 21" } }, "node_modules/@nx/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@nx/eslint-plugin/node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", + "version": "8.12.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/scope-manager/-/scope-manager-8.12.2.tgz", + "integrity": "sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, "node_modules/@nx/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "version": "8.12.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/types/-/types-8.12.2.tgz", + "integrity": "sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==", "dev": true, "license": "MIT", "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -9920,23 +8898,23 @@ } }, "node_modules/@nx/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "version": "8.12.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/typescript-estree/-/typescript-estree-8.12.2.tgz", + "integrity": "sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -9948,159 +8926,333 @@ } } }, + "node_modules/@nx/eslint-plugin/node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@nx/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "version": "8.12.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/utils/-/utils-8.12.2.tgz", + "integrity": "sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/typescript-estree": "8.12.2" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^8.57.0 || ^9.0.0" } }, "node_modules/@nx/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "version": "8.12.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/visitor-keys/-/visitor-keys-8.12.2.tgz", + "integrity": "sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/types": "8.12.2", "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@nx/eslint-plugin/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@nx/eslint-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@nx/eslint-plugin/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@nx/eslint-plugin/node_modules/argparse": { + "version": "2.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0", + "peer": true + }, + "node_modules/@nx/eslint-plugin/node_modules/eslint": { + "version": "9.13.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/eslint/-/eslint-9.13.0.tgz", + "integrity": "sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.18.0", + "@eslint/core": "^0.7.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.13.0", + "@eslint/plugin-kit": "^0.2.0", + "@humanfs/node": "^0.16.5", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.3.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.1.0", + "eslint-visitor-keys": "^4.1.0", + "espree": "^10.2.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, - "node_modules/@nx/eslint-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@nx/eslint-plugin/node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@nx/eslint-plugin/node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@nx/eslint-plugin/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/@nx/eslint-plugin/node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", + "peer": true, "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "*" + } + }, + "node_modules/@nx/eslint-plugin/node_modules/espree": { + "version": "10.3.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://opencollective.com/eslint" } }, - "node_modules/@nx/eslint-plugin/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@nx/eslint-plugin/node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@nx/eslint-plugin/node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "flat-cache": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" + } + }, + "node_modules/@nx/eslint-plugin/node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@nx/eslint-plugin/node_modules/globals": { + "version": "15.11.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/globals/-/globals-15.11.0.tgz", + "integrity": "sha512-yeyNSjdbyVaWurlwCpcA6XNBrHTMIeDdj0/hnvX/OLJ9ekOXYbLsLinH/MucQyGvNnXhidTdNhTtJaffL2sMfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nx/eslint/node_modules/@nrwl/devkit": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/devkit/-/devkit-18.3.5.tgz", - "integrity": "sha512-DIvChKMe4q8CtIsbrumL/aYgf85H5vlT6eF3jnCCWORj6LTwoHtK8Q9ky1+uM82KIM0gaKd32NVDw+w64scHyg==", + "node_modules/@nx/eslint-plugin/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@nx/devkit": "18.3.5" + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@nx/eslint-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/@nx/eslint/node_modules/@nx/devkit": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/devkit/-/devkit-18.3.5.tgz", - "integrity": "sha512-9I0L17t0MN87fL4m4MjDiBxJIx7h5RQY/pTYtt5TBjye0ANb165JeE4oh3ibzfjMzXv42Aej2Gm+cOuSPwzT9g==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/devkit/-/devkit-19.8.8.tgz", + "integrity": "sha512-JZtx+2J/9g4OCaNWNxW2udGxEtje0RZ75pybK4ZieiIQVXPsrInN/bpSJSEWW3xt90GlsaFPif39rBkmy6uoHg==", "license": "MIT", "dependencies": { - "@nrwl/devkit": "18.3.5", + "@nrwl/devkit": "19.8.8", "ejs": "^3.1.7", "enquirer": "~2.3.6", "ignore": "^5.0.4", + "minimatch": "9.0.3", "semver": "^7.5.3", "tmp": "~0.2.1", "tslib": "^2.3.0", "yargs-parser": "21.1.1" }, "peerDependencies": { - "nx": ">= 16 <= 19" + "nx": ">= 19 <= 21" + } + }, + "node_modules/@nx/eslint/node_modules/typescript": { + "version": "5.4.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" } }, "node_modules/@nx/jest": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/jest/-/jest-18.3.5.tgz", - "integrity": "sha512-gWVTpSih3w258oYJGu1ELRoiRWleM1cke8OpB5mXjbtHszY0j7lK7gyTFg6rbuXSBB3dLlcgNLdY/vrvx5pzOQ==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/jest/-/jest-19.8.8.tgz", + "integrity": "sha512-CU1FnXj/6xSgzb2IF/OExlFYVqzpxvOAXNnAy327su13lhVKR5MLmk8RhSzx67l9kn7B5lD6c95cqqnIa0KZpA==", "dev": true, "license": "MIT", "dependencies": { "@jest/reporters": "^29.4.1", "@jest/test-result": "^29.4.1", - "@nrwl/jest": "18.3.5", - "@nx/devkit": "18.3.5", - "@nx/js": "18.3.5", + "@nrwl/jest": "19.8.8", + "@nx/devkit": "19.8.8", + "@nx/js": "19.8.8", "@phenomnomnominal/tsquery": "~5.0.1", "chalk": "^4.1.0", "identity-obj-proxy": "3.0.0", @@ -10109,100 +9261,36 @@ "jest-util": "^29.4.1", "minimatch": "9.0.3", "resolve.exports": "1.1.0", + "semver": "^7.5.3", "tslib": "^2.3.0", "yargs-parser": "21.1.1" } }, - "node_modules/@nx/jest/node_modules/@nrwl/devkit": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/devkit/-/devkit-18.3.5.tgz", - "integrity": "sha512-DIvChKMe4q8CtIsbrumL/aYgf85H5vlT6eF3jnCCWORj6LTwoHtK8Q9ky1+uM82KIM0gaKd32NVDw+w64scHyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nx/devkit": "18.3.5" - } - }, "node_modules/@nx/jest/node_modules/@nx/devkit": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/devkit/-/devkit-18.3.5.tgz", - "integrity": "sha512-9I0L17t0MN87fL4m4MjDiBxJIx7h5RQY/pTYtt5TBjye0ANb165JeE4oh3ibzfjMzXv42Aej2Gm+cOuSPwzT9g==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/devkit/-/devkit-19.8.8.tgz", + "integrity": "sha512-JZtx+2J/9g4OCaNWNxW2udGxEtje0RZ75pybK4ZieiIQVXPsrInN/bpSJSEWW3xt90GlsaFPif39rBkmy6uoHg==", "dev": true, "license": "MIT", "dependencies": { - "@nrwl/devkit": "18.3.5", + "@nrwl/devkit": "19.8.8", "ejs": "^3.1.7", "enquirer": "~2.3.6", "ignore": "^5.0.4", + "minimatch": "9.0.3", "semver": "^7.5.3", "tmp": "~0.2.1", "tslib": "^2.3.0", "yargs-parser": "21.1.1" }, "peerDependencies": { - "nx": ">= 16 <= 19" - } - }, - "node_modules/@nx/jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@nx/jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@nx/jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@nx/jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "nx": ">= 19 <= 21" } }, "node_modules/@nx/js": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/js/-/js-18.3.5.tgz", - "integrity": "sha512-fewtQXzDPZh+CcS2sfbSBgdx5tOXU/NbdUEwC8ZVlDZmuqIXW68Vh7mIgO7wJAY4Do3NHlL0ybz/Au0CNZE27g==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/js/-/js-19.8.8.tgz", + "integrity": "sha512-LFBa3gi0qEOKkDlTzPLUowzTV6VHfaDXv2YrQptbtKhRf57f3T4Q/aVf8cy1Nk4JDbfryFINis/X7j03dQxdMA==", "license": "MIT", "dependencies": { "@babel/core": "^7.23.2", @@ -10212,20 +9300,20 @@ "@babel/preset-env": "^7.23.2", "@babel/preset-typescript": "^7.22.5", "@babel/runtime": "^7.22.6", - "@nrwl/js": "18.3.5", - "@nx/devkit": "18.3.5", - "@nx/workspace": "18.3.5", - "@phenomnomnominal/tsquery": "~5.0.1", + "@nrwl/js": "19.8.8", + "@nx/devkit": "19.8.8", + "@nx/workspace": "19.8.8", "babel-plugin-const-enum": "^1.0.1", "babel-plugin-macros": "^2.8.0", "babel-plugin-transform-typescript-metadata": "^0.3.1", "chalk": "^4.1.0", "columnify": "^1.6.0", "detect-port": "^1.5.1", + "enquirer": "~2.3.6", "fast-glob": "3.2.7", - "fs-extra": "^11.1.0", "ignore": "^5.0.4", "js-tokens": "^4.0.0", + "jsonc-parser": "3.2.0", "minimatch": "9.0.3", "npm-package-arg": "11.0.1", "npm-run-path": "^4.0.1", @@ -10245,72 +9333,24 @@ } } }, - "node_modules/@nx/js/node_modules/@nrwl/devkit": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/devkit/-/devkit-18.3.5.tgz", - "integrity": "sha512-DIvChKMe4q8CtIsbrumL/aYgf85H5vlT6eF3jnCCWORj6LTwoHtK8Q9ky1+uM82KIM0gaKd32NVDw+w64scHyg==", - "license": "MIT", - "dependencies": { - "@nx/devkit": "18.3.5" - } - }, "node_modules/@nx/js/node_modules/@nx/devkit": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/devkit/-/devkit-18.3.5.tgz", - "integrity": "sha512-9I0L17t0MN87fL4m4MjDiBxJIx7h5RQY/pTYtt5TBjye0ANb165JeE4oh3ibzfjMzXv42Aej2Gm+cOuSPwzT9g==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/devkit/-/devkit-19.8.8.tgz", + "integrity": "sha512-JZtx+2J/9g4OCaNWNxW2udGxEtje0RZ75pybK4ZieiIQVXPsrInN/bpSJSEWW3xt90GlsaFPif39rBkmy6uoHg==", "license": "MIT", "dependencies": { - "@nrwl/devkit": "18.3.5", + "@nrwl/devkit": "19.8.8", "ejs": "^3.1.7", "enquirer": "~2.3.6", "ignore": "^5.0.4", + "minimatch": "9.0.3", "semver": "^7.5.3", "tmp": "~0.2.1", "tslib": "^2.3.0", "yargs-parser": "21.1.1" }, "peerDependencies": { - "nx": ">= 16 <= 19" - } - }, - "node_modules/@nx/js/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@nx/js/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@nx/js/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "nx": ">= 19 <= 21" } }, "node_modules/@nx/js/node_modules/fast-glob": { @@ -10329,13 +9369,37 @@ "node": ">=8" } }, - "node_modules/@nx/js/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", + "node_modules/@nx/js/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, "engines": { - "node": ">=8" + "node": ">= 6" + } + }, + "node_modules/@nx/js/node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "license": "MIT" + }, + "node_modules/@nx/js/node_modules/npm-package-arg": { + "version": "11.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/npm-package-arg/-/npm-package-arg-11.0.1.tgz", + "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", + "license": "ISC", + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/@nx/js/node_modules/ora": { @@ -10360,6 +9424,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@nx/js/node_modules/proc-log": { + "version": "3.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/@nx/js/node_modules/source-map": { "version": "0.6.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/source-map/-/source-map-0.6.1.tgz", @@ -10391,31 +9464,19 @@ "node": ">=8" } }, - "node_modules/@nx/js/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@nx/linter": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/linter/-/linter-18.3.5.tgz", - "integrity": "sha512-jCnJdLXvcmXdmw4gyHOETz6Kzwb5EHnnDpTSDW4zvzo7Fpf/Qnf+4AZRd7Uxcdt4Wbo5Yc/QuXUUIMnaNoi6UQ==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/linter/-/linter-19.8.8.tgz", + "integrity": "sha512-gbbYZuQLxv9BtWC0asyvkkPgr1jkgxFkPihTzEjN5JgriuxD3bXEqBiu9yAaWB1wR8nZZJBqugVHeJ08hP7AnA==", "license": "MIT", "dependencies": { - "@nx/eslint": "18.3.5" + "@nx/eslint": "19.8.8" } }, "node_modules/@nx/nx-darwin-arm64": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/nx-darwin-arm64/-/nx-darwin-arm64-18.3.5.tgz", - "integrity": "sha512-4I5UpZ/x2WO9OQyETXKjaYhXiZKUTYcLPewruRMODWu6lgTM9hHci0SqMQB+TWe3f80K8VT8J8x3+uJjvllGlg==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/nx-darwin-arm64/-/nx-darwin-arm64-19.8.8.tgz", + "integrity": "sha512-r6kG9T676/V2GzWy2RA+wGT1klC9r3AdcY6d4gSOCoqcel8ht9weGcPUB4ysMKDyR/Lf7WA5YisSkjFDc0O48A==", "cpu": [ "arm64" ], @@ -10429,9 +9490,9 @@ } }, "node_modules/@nx/nx-darwin-x64": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/nx-darwin-x64/-/nx-darwin-x64-18.3.5.tgz", - "integrity": "sha512-Drn6jOG237AD/s6OWPt06bsMj0coGKA5Ce1y5gfLhptOGk4S4UPE/Ay5YCjq+/yhTo1gDHzCHxH0uW2X9MN9Fg==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/nx-darwin-x64/-/nx-darwin-x64-19.8.8.tgz", + "integrity": "sha512-hNvPQDjYki0seRgeNjXY4frt8OLj7IfOOCmh/VbspwGp2xWwXbh8Zxy9fWyxp15XTqybIzvYuj+P2qosMkYmCg==", "cpu": [ "x64" ], @@ -10445,9 +9506,9 @@ } }, "node_modules/@nx/nx-freebsd-x64": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/nx-freebsd-x64/-/nx-freebsd-x64-18.3.5.tgz", - "integrity": "sha512-8tA8Yw0Iir4liFjffIFS5THTS3TtWY/No2tkVj91gwy/QQ/otvKbOyc5RCIPpbZU6GS3ZWfG92VyCSm06dtMFg==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/nx-freebsd-x64/-/nx-freebsd-x64-19.8.8.tgz", + "integrity": "sha512-PRAavzIcGVmpj8zUEl6XMVoJ8MHc7kKP11AsrO7o4pYnI0aHwT639dnhSVZ1lLtpouYJZ2u7tE6A4fV9y4X2hA==", "cpu": [ "x64" ], @@ -10461,9 +9522,9 @@ } }, "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-18.3.5.tgz", - "integrity": "sha512-BrPGAHM9FCGkB9/hbvlJhe+qtjmvpjIjYixGIlUxL3gGc8E/ucTyCnz5pRFFPFQlBM7Z/9XmbHvGPoUi/LYn5A==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-19.8.8.tgz", + "integrity": "sha512-sJEMnJFgrKo1LBDLbln7gH1blnwyO0M9/1+wuNtbanB63Xl177nGBZHts3y1HKt7S3yaVSwblmtFS5VD9U7HiQ==", "cpu": [ "arm" ], @@ -10477,9 +9538,9 @@ } }, "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-18.3.5.tgz", - "integrity": "sha512-/Xd0Q3LBgJeigJqXC/Jck/9l5b+fK+FCM0nRFMXgPXrhZPhoxWouFkoYl2F1Ofr+AQf4jup4DkVTB5r98uxSCA==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-19.8.8.tgz", + "integrity": "sha512-A+/8lNrIqsey/chkWOCCByob1s3AOlcIXVlmWo8YzzMTK4kBkmKGiWsV23QVAZOrgAwfpcuV5A5ZqEqCtnH8fA==", "cpu": [ "arm64" ], @@ -10493,9 +9554,9 @@ } }, "node_modules/@nx/nx-linux-arm64-musl": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-18.3.5.tgz", - "integrity": "sha512-r18qd7pUrl1haAZ/e9Q+xaFTsLJnxGARQcf/Y76q+K2psKmiUXoRlqd3HAOw43KTllaUJ5HkzLq2pIwg3p+xBw==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-19.8.8.tgz", + "integrity": "sha512-InWILcL5Ku6URttDavfCUwfbJouHvQl+/o/KNMGC1EIjCFfQdEAfwgybo9eNcUQl6Xl5vx5NkA5+Ff7wbkMZdw==", "cpu": [ "arm64" ], @@ -10509,9 +9570,9 @@ } }, "node_modules/@nx/nx-linux-x64-gnu": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-18.3.5.tgz", - "integrity": "sha512-vYrikG6ff4I9cvr3Ysk3y3gjQ9cDcvr3iAr+4qqcQ4qVE+OLL2++JDS6xfPvG/TbS3GTQpyy2STRBwiHgxTeJw==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.8.8.tgz", + "integrity": "sha512-LCfnm42cQUrrch/8RqVgC46bYovX/ZcbP44pmTgrkChfrmxDhdaIfi0m1aUWpfize6DvCWxvmg8VEaV+Cf4/cg==", "cpu": [ "x64" ], @@ -10525,9 +9586,9 @@ } }, "node_modules/@nx/nx-linux-x64-musl": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-18.3.5.tgz", - "integrity": "sha512-6np86lcYy3+x6kkW/HrBHIdNWbUu/MIsvMuNH5UXgyFs60l5Z7Cocay2f7WOaAbTLVAr0W7p4RxRPamHLRwWFA==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-19.8.8.tgz", + "integrity": "sha512-1noYDMQ0uZw0OeWe/JScx0QLNfPUy9fJLXwemRf5g2K69m0r/WRvTcWMa1+ZypPn75tp3fvIH+Nne1PS+REqYw==", "cpu": [ "x64" ], @@ -10541,9 +9602,9 @@ } }, "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-18.3.5.tgz", - "integrity": "sha512-H3p2ZVhHV1WQWTICrQUTplOkNId0y3c23X3A2fXXFDbWSBs0UgW7m55LhMcA9p0XZ7wDHgh+yFtVgu55TXLjug==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-19.8.8.tgz", + "integrity": "sha512-gVEiPn1hjATQMeZ9unEmOTDS42oVLItlgm9+oXSW2AJArO1Add+47+nxVPMeOSk5x0gK0EZJ5gGdM8929qYfRA==", "cpu": [ "arm64" ], @@ -10557,9 +9618,9 @@ } }, "node_modules/@nx/nx-win32-x64-msvc": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-18.3.5.tgz", - "integrity": "sha512-xFwKVTIXSgjdfxkpriqHv5NpmmFILTrWLEkUGSoimuRaAm1u15YWx/VmaUQ+UWuJnmgqvB/so4SMHSfNkq3ijA==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-19.8.8.tgz", + "integrity": "sha512-AkGmZnZoIY6lAWf7NKGzNFy2OrRj1vQjYCCi2FtB0QR+seX7PgvqD+pgalLhl5ZmteojKWSJlT9fitKp5K/Ezw==", "cpu": [ "x64" ], @@ -10573,157 +9634,91 @@ } }, "node_modules/@nx/storybook": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/storybook/-/storybook-18.3.5.tgz", - "integrity": "sha512-YU88QrnGKbeOa7x2vn5RuYYeWCmEfeftbfOHo0iwgT4hSuH0jG3HPjv1Rw7WgsaV77GAxu/SDUoSzHiQR+p3DQ==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/storybook/-/storybook-19.8.8.tgz", + "integrity": "sha512-XklrulSNUaAdlDajGQZv2IaCtnNSTEVALsGXg3XpYBj8cHdzyozIw9BvZk0HN2OLZeDaFPF6sZMOUwYFCLESPg==", "dev": true, "license": "MIT", "dependencies": { - "@nrwl/storybook": "18.3.5", - "@nx/cypress": "18.3.5", - "@nx/devkit": "18.3.5", - "@nx/eslint": "18.3.5", - "@nx/js": "18.3.5", + "@nrwl/storybook": "19.8.8", + "@nx/cypress": "19.8.8", + "@nx/devkit": "19.8.8", + "@nx/eslint": "19.8.8", + "@nx/js": "19.8.8", "@phenomnomnominal/tsquery": "~5.0.1", "semver": "^7.5.3", "tslib": "^2.3.0" } }, - "node_modules/@nx/storybook/node_modules/@nrwl/devkit": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/devkit/-/devkit-18.3.5.tgz", - "integrity": "sha512-DIvChKMe4q8CtIsbrumL/aYgf85H5vlT6eF3jnCCWORj6LTwoHtK8Q9ky1+uM82KIM0gaKd32NVDw+w64scHyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nx/devkit": "18.3.5" - } - }, "node_modules/@nx/storybook/node_modules/@nx/devkit": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/devkit/-/devkit-18.3.5.tgz", - "integrity": "sha512-9I0L17t0MN87fL4m4MjDiBxJIx7h5RQY/pTYtt5TBjye0ANb165JeE4oh3ibzfjMzXv42Aej2Gm+cOuSPwzT9g==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/devkit/-/devkit-19.8.8.tgz", + "integrity": "sha512-JZtx+2J/9g4OCaNWNxW2udGxEtje0RZ75pybK4ZieiIQVXPsrInN/bpSJSEWW3xt90GlsaFPif39rBkmy6uoHg==", "dev": true, "license": "MIT", "dependencies": { - "@nrwl/devkit": "18.3.5", + "@nrwl/devkit": "19.8.8", "ejs": "^3.1.7", "enquirer": "~2.3.6", "ignore": "^5.0.4", + "minimatch": "9.0.3", "semver": "^7.5.3", "tmp": "~0.2.1", "tslib": "^2.3.0", "yargs-parser": "21.1.1" }, "peerDependencies": { - "nx": ">= 16 <= 19" + "nx": ">= 19 <= 21" } }, "node_modules/@nx/web": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/web/-/web-18.3.5.tgz", - "integrity": "sha512-2A8pDN5H5NWsDcSMAtOXVEDZ5ltivZZoSYKLDzfIis/hVikJ8wI2rE1KgyoGNn5n0OTgyQYxH1HGUJ2C7Cj5xQ==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/web/-/web-19.8.8.tgz", + "integrity": "sha512-BK1EeT7BKHRVtAB+6Tlxb0jp4am900n69CZn+jzmYlvoqktpY3PsyRHwLmIiYcl2rA39s8IFH20SE5zBULCi7Q==", "license": "MIT", "dependencies": { - "@nrwl/web": "18.3.5", - "@nx/devkit": "18.3.5", - "@nx/js": "18.3.5", - "chalk": "^4.1.0", + "@nrwl/web": "19.8.8", + "@nx/devkit": "19.8.8", + "@nx/js": "19.8.8", "detect-port": "^1.5.1", "http-server": "^14.1.0", + "picocolors": "^1.1.0", "tslib": "^2.3.0" } }, - "node_modules/@nx/web/node_modules/@nrwl/devkit": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/devkit/-/devkit-18.3.5.tgz", - "integrity": "sha512-DIvChKMe4q8CtIsbrumL/aYgf85H5vlT6eF3jnCCWORj6LTwoHtK8Q9ky1+uM82KIM0gaKd32NVDw+w64scHyg==", - "license": "MIT", - "dependencies": { - "@nx/devkit": "18.3.5" - } - }, "node_modules/@nx/web/node_modules/@nx/devkit": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/devkit/-/devkit-18.3.5.tgz", - "integrity": "sha512-9I0L17t0MN87fL4m4MjDiBxJIx7h5RQY/pTYtt5TBjye0ANb165JeE4oh3ibzfjMzXv42Aej2Gm+cOuSPwzT9g==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/devkit/-/devkit-19.8.8.tgz", + "integrity": "sha512-JZtx+2J/9g4OCaNWNxW2udGxEtje0RZ75pybK4ZieiIQVXPsrInN/bpSJSEWW3xt90GlsaFPif39rBkmy6uoHg==", "license": "MIT", "dependencies": { - "@nrwl/devkit": "18.3.5", + "@nrwl/devkit": "19.8.8", "ejs": "^3.1.7", "enquirer": "~2.3.6", "ignore": "^5.0.4", + "minimatch": "9.0.3", "semver": "^7.5.3", "tmp": "~0.2.1", "tslib": "^2.3.0", "yargs-parser": "21.1.1" }, "peerDependencies": { - "nx": ">= 16 <= 19" - } - }, - "node_modules/@nx/web/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@nx/web/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@nx/web/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@nx/web/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "nx": ">= 19 <= 21" } }, "node_modules/@nx/webpack": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/webpack/-/webpack-18.3.5.tgz", - "integrity": "sha512-WXPMjIqD+XdpkVJdKsDyh9AdCZZ9/MNjmgiGDfVyCnOUzjWOCUgQ9tcyz60QEsSqSiQ6gI56f96wgZtmsCfb0w==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/webpack/-/webpack-19.8.8.tgz", + "integrity": "sha512-zTAsBhL13+4tkEjtlGb+g3k9aRG1tl1v+fYOKdG7uiK3lLIGDNrgbBOVjR7iQON51rD2WCXCovBrwqWtmbvcfQ==", "license": "MIT", "dependencies": { "@babel/core": "^7.23.2", - "@nrwl/webpack": "18.3.5", - "@nx/devkit": "18.3.5", - "@nx/js": "18.3.5", + "@module-federation/enhanced": "^0.6.0", + "@module-federation/sdk": "^0.6.0", + "@nrwl/webpack": "19.8.8", + "@nx/devkit": "19.8.8", + "@nx/js": "19.8.8", + "@phenomnomnominal/tsquery": "~5.0.1", "ajv": "^8.12.0", "autoprefixer": "^10.4.9", "babel-loader": "^9.1.2", @@ -10732,20 +9727,22 @@ "copy-webpack-plugin": "^10.2.4", "css-loader": "^6.4.0", "css-minimizer-webpack-plugin": "^5.0.0", + "express": "^4.19.2", "fork-ts-checker-webpack-plugin": "7.2.13", + "http-proxy-middleware": "^3.0.0", "less": "4.1.3", "less-loader": "11.1.0", "license-webpack-plugin": "^4.0.2", "loader-utils": "^2.0.3", "mini-css-extract-plugin": "~2.4.7", "parse5": "4.0.0", - "postcss": "^8.4.14", + "postcss": "^8.4.38", "postcss-import": "~14.1.0", "postcss-loader": "^6.1.1", "rxjs": "^7.8.0", "sass": "^1.42.1", "sass-loader": "^12.2.0", - "source-map-loader": "^3.0.0", + "source-map-loader": "^5.0.0", "style-loader": "^3.3.0", "stylus": "^0.59.0", "stylus-loader": "^7.1.0", @@ -10754,52 +9751,29 @@ "tsconfig-paths-webpack-plugin": "4.0.0", "tslib": "^2.3.0", "webpack": "^5.80.0", - "webpack-dev-server": "^4.9.3", + "webpack-dev-server": "^5.0.4", "webpack-node-externals": "^3.0.0", "webpack-subresource-integrity": "^5.1.0" } }, - "node_modules/@nx/webpack/node_modules/@nrwl/devkit": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/devkit/-/devkit-18.3.5.tgz", - "integrity": "sha512-DIvChKMe4q8CtIsbrumL/aYgf85H5vlT6eF3jnCCWORj6LTwoHtK8Q9ky1+uM82KIM0gaKd32NVDw+w64scHyg==", - "license": "MIT", - "dependencies": { - "@nx/devkit": "18.3.5" - } - }, "node_modules/@nx/webpack/node_modules/@nx/devkit": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/devkit/-/devkit-18.3.5.tgz", - "integrity": "sha512-9I0L17t0MN87fL4m4MjDiBxJIx7h5RQY/pTYtt5TBjye0ANb165JeE4oh3ibzfjMzXv42Aej2Gm+cOuSPwzT9g==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/devkit/-/devkit-19.8.8.tgz", + "integrity": "sha512-JZtx+2J/9g4OCaNWNxW2udGxEtje0RZ75pybK4ZieiIQVXPsrInN/bpSJSEWW3xt90GlsaFPif39rBkmy6uoHg==", "license": "MIT", "dependencies": { - "@nrwl/devkit": "18.3.5", + "@nrwl/devkit": "19.8.8", "ejs": "^3.1.7", "enquirer": "~2.3.6", "ignore": "^5.0.4", + "minimatch": "9.0.3", "semver": "^7.5.3", "tmp": "~0.2.1", "tslib": "^2.3.0", "yargs-parser": "21.1.1" }, "peerDependencies": { - "nx": ">= 16 <= 19" - } - }, - "node_modules/@nx/webpack/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "nx": ">= 19 <= 21" } }, "node_modules/@nx/webpack/node_modules/array-union": { @@ -10814,22 +9788,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nx/webpack/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/@nx/webpack/node_modules/copy-webpack-plugin": { "version": "10.2.4", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz", @@ -10870,26 +9828,49 @@ "node": ">=10" } }, - "node_modules/@nx/webpack/node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "node_modules/@nx/webpack/node_modules/css-loader": { + "version": "6.11.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" }, "engines": { - "node": ">=10.13.0" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, - "node_modules/@nx/webpack/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", + "node_modules/@nx/webpack/node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.3" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { "node": ">=10.13.0" @@ -10915,27 +9896,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nx/webpack/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@nx/webpack/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@nx/webpack/node_modules/less": { "version": "4.1.3", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/less/-/less-4.1.3.tgz", @@ -10962,6 +9922,26 @@ "source-map": "~0.6.0" } }, + "node_modules/@nx/webpack/node_modules/less-loader": { + "version": "11.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/less-loader/-/less-loader-11.1.0.tgz", + "integrity": "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==", + "license": "MIT", + "dependencies": { + "klona": "^2.0.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + } + }, "node_modules/@nx/webpack/node_modules/less/node_modules/source-map": { "version": "0.6.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/source-map/-/source-map-0.6.1.tgz", @@ -11117,39 +10097,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nx/webpack/node_modules/source-map-loader": { - "version": "3.0.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/source-map-loader/-/source-map-loader-3.0.2.tgz", - "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", - "license": "MIT", - "dependencies": { - "abab": "^2.0.5", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/@nx/webpack/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@nx/webpack/node_modules/ts-loader": { "version": "9.5.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ts-loader/-/ts-loader-9.5.1.tgz", @@ -11185,98 +10132,38 @@ } }, "node_modules/@nx/workspace": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/workspace/-/workspace-18.3.5.tgz", - "integrity": "sha512-C5+IhzKx6AUu8N+yURkYfDdDlv0NHkxsI1yqQIgLmqOsZ/nTNLps052QOTb6zYejSp+DbzkZ0H7SGXNO3Cd0+g==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/workspace/-/workspace-19.8.8.tgz", + "integrity": "sha512-CvD2fSTSt148yJagZVmGjyNIZ+q3IxPfVyAn+imH1Lui+rHz/6aijWWsAgIE62UKkNxBXyG4AV5N//y3Snv+mw==", "license": "MIT", "dependencies": { - "@nrwl/workspace": "18.3.5", - "@nx/devkit": "18.3.5", + "@nrwl/workspace": "19.8.8", + "@nx/devkit": "19.8.8", "chalk": "^4.1.0", "enquirer": "~2.3.6", - "nx": "18.3.5", + "nx": "19.8.8", "tslib": "^2.3.0", "yargs-parser": "21.1.1" } }, - "node_modules/@nx/workspace/node_modules/@nrwl/devkit": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nrwl/devkit/-/devkit-18.3.5.tgz", - "integrity": "sha512-DIvChKMe4q8CtIsbrumL/aYgf85H5vlT6eF3jnCCWORj6LTwoHtK8Q9ky1+uM82KIM0gaKd32NVDw+w64scHyg==", - "license": "MIT", - "dependencies": { - "@nx/devkit": "18.3.5" - } - }, "node_modules/@nx/workspace/node_modules/@nx/devkit": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/devkit/-/devkit-18.3.5.tgz", - "integrity": "sha512-9I0L17t0MN87fL4m4MjDiBxJIx7h5RQY/pTYtt5TBjye0ANb165JeE4oh3ibzfjMzXv42Aej2Gm+cOuSPwzT9g==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@nx/devkit/-/devkit-19.8.8.tgz", + "integrity": "sha512-JZtx+2J/9g4OCaNWNxW2udGxEtje0RZ75pybK4ZieiIQVXPsrInN/bpSJSEWW3xt90GlsaFPif39rBkmy6uoHg==", "license": "MIT", "dependencies": { - "@nrwl/devkit": "18.3.5", + "@nrwl/devkit": "19.8.8", "ejs": "^3.1.7", "enquirer": "~2.3.6", "ignore": "^5.0.4", + "minimatch": "9.0.3", "semver": "^7.5.3", "tmp": "~0.2.1", "tslib": "^2.3.0", "yargs-parser": "21.1.1" }, "peerDependencies": { - "nx": ">= 16 <= 19" - } - }, - "node_modules/@nx/workspace/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@nx/workspace/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@nx/workspace/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@nx/workspace/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "nx": ">= 19 <= 21" } }, "node_modules/@octokit/auth-token": { @@ -11442,9 +10329,9 @@ } }, "node_modules/@octokit/types": { - "version": "13.5.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@octokit/types/-/types-13.5.1.tgz", - "integrity": "sha512-F41lGiWBKPIWPBgjSvaDXTTQptBujnozENAK3S//nj7xsFdYdirImKlBB/hTjr+Vii68SM+8jG3UJWRa6DMuDA==", + "version": "13.6.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@octokit/types/-/types-13.6.1.tgz", + "integrity": "sha512-PHZE9Z+kWXb23Ndik8MKPirBPziOc0D2/3KH1P+6jK5nGWe96kadZuE4jev2/Jq7FvIfTlT2Ltg8Fv2x1v0a5g==", "dev": true, "license": "MIT", "dependencies": { @@ -11467,1606 +10354,280 @@ "version": "0.11.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, "license": "MIT", "optional": true, "engines": { "node": ">=14" } }, - "node_modules/@radix-ui/number": { - "version": "1.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/number/-/number-1.0.1.tgz", - "integrity": "sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.13.10" - } - }, - "node_modules/@radix-ui/primitive": { - "version": "1.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/primitive/-/primitive-1.0.1.tgz", - "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", + "node_modules/@renovate/pep440": { + "version": "1.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@renovate/pep440/-/pep440-1.0.0.tgz", + "integrity": "sha512-k3pZVxGEGpU7rpH507/9vxfFjuxX7qx4MSj9Fk+6zBsf/uZmAy8x97dNtZacbge7gP9TazbW1d7SEb5vsOmKlw==", "dev": true, - "license": "MIT", - "peer": true, + "license": "Apache-2.0", "dependencies": { - "@babel/runtime": "^7.13.10" + "xregexp": "4.4.1" } }, - "node_modules/@radix-ui/react-arrow": { - "version": "1.0.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz", - "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==", - "dev": true, + "node_modules/@rollup/plugin-json": { + "version": "6.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", + "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", + "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "@rollup/pluginutils": "^5.1.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-collection": { - "version": "1.0.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-collection/-/react-collection-1.0.3.tgz", - "integrity": "sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2" + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { + "rollup": { "optional": true } } }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "1.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", - "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", - "dev": true, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.3.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.0.tgz", + "integrity": "sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==", + "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-context": { - "version": "1.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-context/-/react-context-1.0.1.tgz", - "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.13.10" + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "rollup": "^2.78.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { - "@types/react": { + "rollup": { "optional": true } } }, - "node_modules/@radix-ui/react-direction": { - "version": "1.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-direction/-/react-direction-1.0.1.tgz", - "integrity": "sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==", - "dev": true, + "node_modules/@rollup/pluginutils": { + "version": "5.1.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/pluginutils/-/pluginutils-5.1.3.tgz", + "integrity": "sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==", + "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { - "@babel/runtime": "^7.13.10" + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { - "@types/react": { + "rollup": { "optional": true } } }, - "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.0.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.4.tgz", - "integrity": "sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==", - "dev": true, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.24.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.3.tgz", + "integrity": "sha512-ufb2CH2KfBWPJok95frEZZ82LtDl0A6QKTa8MoM+cWwDZvVGl5/jNb79pIhRvAalUu+7LD91VYR0nwRD799HkQ==", + "cpu": [ + "arm" + ], "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-escape-keydown": "1.0.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@radix-ui/react-focus-guards": { - "version": "1.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz", - "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==", - "dev": true, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.24.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.3.tgz", + "integrity": "sha512-iAHpft/eQk9vkWIV5t22V77d90CRofgR2006UiCjHcHJFVI1E0oBkQIAbz+pLtthFw3hWEmVB4ilxGyBf48i2Q==", + "cpu": [ + "arm64" + ], "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@radix-ui/react-focus-scope": { - "version": "1.0.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.3.tgz", - "integrity": "sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==", - "dev": true, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.24.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.3.tgz", + "integrity": "sha512-QPW2YmkWLlvqmOa2OwrfqLJqkHm7kJCIMq9kOz40Zo9Ipi40kf9ONG5Sz76zszrmIZZ4hgRIkez69YnTHgEz1w==", + "cpu": [ + "arm64" + ], "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@radix-ui/react-id": { - "version": "1.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-id/-/react-id-1.0.1.tgz", - "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", - "dev": true, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.24.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.3.tgz", + "integrity": "sha512-KO0pN5x3+uZm1ZXeIfDqwcvnQ9UEGN8JX5ufhmgH5Lz4ujjZMAnxQygZAVGemFWn+ZZC0FQopruV4lqmGMshow==", + "cpu": [ + "x64" + ], "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@radix-ui/react-popper": { - "version": "1.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-popper/-/react-popper-1.1.2.tgz", - "integrity": "sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==", - "dev": true, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.24.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.24.3.tgz", + "integrity": "sha512-CsC+ZdIiZCZbBI+aRlWpYJMSWvVssPuWqrDy/zi9YfnatKKSLFCe6fjna1grHuo/nVaHG+kiglpRhyBQYRTK4A==", + "cpu": [ + "arm64" + ], "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1", - "@radix-ui/react-use-rect": "1.0.1", - "@radix-ui/react-use-size": "1.0.1", - "@radix-ui/rect": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } + "optional": true, + "os": [ + "freebsd" + ] }, - "node_modules/@radix-ui/react-portal": { - "version": "1.0.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-portal/-/react-portal-1.0.3.tgz", - "integrity": "sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==", - "dev": true, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.24.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.24.3.tgz", + "integrity": "sha512-F0nqiLThcfKvRQhZEzMIXOQG4EeX61im61VYL1jo4eBxv4aZRmpin6crnBJQ/nWnCsjH5F6J3W6Stdm0mBNqBg==", + "cpu": [ + "x64" + ], "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } + "optional": true, + "os": [ + "freebsd" + ] }, - "node_modules/@radix-ui/react-primitive": { - "version": "1.0.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", - "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", - "dev": true, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.24.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.3.tgz", + "integrity": "sha512-KRSFHyE/RdxQ1CSeOIBVIAxStFC/hnBgVcaiCkQaVC+EYDtTe4X7z5tBkFyRoBgUGtB6Xg6t9t2kulnX6wJc6A==", + "cpu": [ + "arm" + ], "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@radix-ui/react-roving-focus": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz", - "integrity": "sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==", - "dev": true, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.24.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.3.tgz", + "integrity": "sha512-h6Q8MT+e05zP5BxEKz0vi0DhthLdrNEnspdLzkoFqGwnmOzakEHSlXfVyA4HJ322QtFy7biUAVFPvIDEDQa6rw==", + "cpu": [ + "arm" + ], "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-collection": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-controllable-state": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/primitive": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/primitive/-/primitive-1.1.0.tgz", - "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==", - "dev": true, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.24.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.3.tgz", + "integrity": "sha512-fKElSyXhXIJ9pqiYRqisfirIo2Z5pTTve5K438URf08fsypXrEkVmShkSfM8GJ1aUyvjakT+fn2W7Czlpd/0FQ==", + "cpu": [ + "arm64" + ], "license": "MIT", - "peer": true + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-collection": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", - "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==", - "dev": true, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.24.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.3.tgz", + "integrity": "sha512-YlddZSUk8G0px9/+V9PVilVDC6ydMz7WquxozToozSnfFK6wa6ne1ATUjUvjin09jp34p84milxlY5ikueoenw==", + "cpu": [ + "arm64" + ], "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-slot": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", - "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", - "dev": true, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.24.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.3.tgz", + "integrity": "sha512-yNaWw+GAO8JjVx3s3cMeG5Esz1cKVzz8PkTJSfYzE5u7A+NvGmbVFEHP+BikTIyYWuz0+DX9kaA3pH9Sqxp69g==", + "cpu": [ + "ppc64" + ], "license": "MIT", - "peer": true, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-context": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-context/-/react-context-1.1.0.tgz", - "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", - "dev": true, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.24.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.3.tgz", + "integrity": "sha512-lWKNQfsbpv14ZCtM/HkjCTm4oWTKTfxPmr7iPfp3AHSqyoTz5AgLemYkWLwOBWc+XxBbrU9SCokZP0WlBZM9lA==", + "cpu": [ + "riscv64" + ], "license": "MIT", - "peer": true, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-direction": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", - "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", - "dev": true, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.24.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.3.tgz", + "integrity": "sha512-HoojGXTC2CgCcq0Woc/dn12wQUlkNyfH0I1ABK4Ni9YXyFQa86Fkt2Q0nqgLfbhkyfQ6003i3qQk9pLh/SpAYw==", + "cpu": [ + "s390x" + ], "license": "MIT", - "peer": true, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-id": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-id/-/react-id-1.1.0.tgz", - "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", - "dev": true, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.24.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.3.tgz", + "integrity": "sha512-mnEOh4iE4USSccBOtcrjF5nj+5/zm6NcNhbSEfR3Ot0pxBwvEn5QVUXcuOwwPkapDtGZ6pT02xLoPaNv06w7KQ==", + "cpu": [ + "x64" + ], "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-primitive": { - "version": "2.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", - "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/react-slot": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-slot": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", - "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", - "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", - "dev": true, - "license": "MIT", - "peer": true, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", - "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", - "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", - "dev": true, - "license": "MIT", - "peer": true, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-select": { - "version": "1.2.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-select/-/react-select-1.2.2.tgz", - "integrity": "sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/number": "1.0.1", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-collection": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.4", - "@radix-ui/react-focus-guards": "1.0.1", - "@radix-ui/react-focus-scope": "1.0.3", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-popper": "1.1.2", - "@radix-ui/react-portal": "1.0.3", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-controllable-state": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1", - "@radix-ui/react-use-previous": "1.0.1", - "@radix-ui/react-visually-hidden": "1.0.3", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.5" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-separator": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-separator/-/react-separator-1.1.0.tgz", - "integrity": "sha512-3uBAs+egzvJBDZAzvb/n4NxxOYpnspmWxO2u5NbZ8Y6FM/NdrGSF9bop3Cf6F6C71z1rTSn8KV0Fo2ZVd79lGA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/react-primitive": "2.0.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", - "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", - "dev": true, - "license": "MIT", - "peer": true, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive": { - "version": "2.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", - "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/react-slot": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", - "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-slot": { - "version": "1.0.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", - "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toggle": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-toggle/-/react-toggle-1.1.0.tgz", - "integrity": "sha512-gwoxaKZ0oJ4vIgzsfESBuSgJNdc0rv12VhHgcqN0TEJmmZixXG/2XpsLK8kzNWYcnaoRIEEQc0bEi3dIvdUpjw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-controllable-state": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toggle-group": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.0.tgz", - "integrity": "sha512-PpTJV68dZU2oqqgq75Uzto5o/XfOVgkrJ9rulVmfTKxWp3HfUjHE6CP/WLRR4AzPX9HWxw7vFow2me85Yu+Naw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-roving-focus": "1.1.0", - "@radix-ui/react-toggle": "1.1.0", - "@radix-ui/react-use-controllable-state": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/primitive": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/primitive/-/primitive-1.1.0.tgz", - "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", - "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", - "dev": true, - "license": "MIT", - "peer": true, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-context": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-context/-/react-context-1.1.0.tgz", - "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", - "dev": true, - "license": "MIT", - "peer": true, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-direction": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", - "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", - "dev": true, - "license": "MIT", - "peer": true, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-primitive": { - "version": "2.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", - "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/react-slot": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-slot": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", - "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", - "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", - "dev": true, - "license": "MIT", - "peer": true, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", - "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toggle/node_modules/@radix-ui/primitive": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/primitive/-/primitive-1.1.0.tgz", - "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@radix-ui/react-toggle/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", - "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", - "dev": true, - "license": "MIT", - "peer": true, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toggle/node_modules/@radix-ui/react-primitive": { - "version": "2.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", - "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/react-slot": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toggle/node_modules/@radix-ui/react-slot": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", - "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toggle/node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", - "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", - "dev": true, - "license": "MIT", - "peer": true, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toggle/node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", - "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toolbar": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-toolbar/-/react-toolbar-1.1.0.tgz", - "integrity": "sha512-ZUKknxhMTL/4hPh+4DuaTot9aO7UD6Kupj4gqXCsBTayX1pD1L+0C2/2VZKXb4tIifQklZ3pf2hG9T+ns+FclQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-roving-focus": "1.1.0", - "@radix-ui/react-separator": "1.1.0", - "@radix-ui/react-toggle-group": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toolbar/node_modules/@radix-ui/primitive": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/primitive/-/primitive-1.1.0.tgz", - "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@radix-ui/react-toolbar/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", - "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", - "dev": true, - "license": "MIT", - "peer": true, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toolbar/node_modules/@radix-ui/react-context": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-context/-/react-context-1.1.0.tgz", - "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", - "dev": true, - "license": "MIT", - "peer": true, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toolbar/node_modules/@radix-ui/react-direction": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", - "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", - "dev": true, - "license": "MIT", - "peer": true, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toolbar/node_modules/@radix-ui/react-primitive": { - "version": "2.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", - "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/react-slot": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toolbar/node_modules/@radix-ui/react-slot": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", - "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", - "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", - "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.0.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", - "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", - "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-previous": { - "version": "1.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz", - "integrity": "sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-rect": { - "version": "1.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz", - "integrity": "sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/rect": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-size": { - "version": "1.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz", - "integrity": "sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-visually-hidden": { - "version": "1.0.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz", - "integrity": "sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/rect": { - "version": "1.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@radix-ui/rect/-/rect-1.0.1.tgz", - "integrity": "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.13.10" - } - }, - "node_modules/@renovate/pep440": { - "version": "1.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@renovate/pep440/-/pep440-1.0.0.tgz", - "integrity": "sha512-k3pZVxGEGpU7rpH507/9vxfFjuxX7qx4MSj9Fk+6zBsf/uZmAy8x97dNtZacbge7gP9TazbW1d7SEb5vsOmKlw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "xregexp": "4.4.1" - } - }, - "node_modules/@rollup/plugin-json": { - "version": "6.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", - "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.1.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "15.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.0.tgz", - "integrity": "sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.78.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils": { - "version": "5.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/pluginutils/-/pluginutils-5.1.2.tgz", - "integrity": "sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.22.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", - "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.22.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz", - "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.22.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", - "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.22.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz", - "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.22.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz", - "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.22.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz", - "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.22.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz", - "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.22.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz", - "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.22.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz", - "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.22.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz", - "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.22.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz", - "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.22.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", - "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.22.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz", - "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==", - "cpu": [ - "x64" - ], + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.24.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.3.tgz", + "integrity": "sha512-rMTzawBPimBQkG9NKpNHvquIUTQPzrnPxPbCY1Xt+mFkW7pshvyIS5kYgcf74goxXOQk0CP3EoOC1zcEezKXhw==", + "cpu": [ + "x64" + ], "license": "MIT", "optional": true, "os": [ @@ -13074,9 +10635,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.22.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz", - "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==", + "version": "4.24.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.3.tgz", + "integrity": "sha512-2lg1CE305xNvnH3SyiKwPVsTVLCg4TmNCF1z7PSHX2uZY2VbUpdkgAllVoISD7JO7zu+YynpWNSKAtOrX3AiuA==", "cpu": [ "arm64" ], @@ -13087,9 +10648,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.22.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz", - "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==", + "version": "4.24.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.3.tgz", + "integrity": "sha512-9SjYp1sPyxJsPWuhOCX6F4jUMXGbVVd5obVpoVEi8ClZqo52ViZewA6eFz85y8ezuOA+uJMP5A5zo6Oz4S5rVQ==", "cpu": [ "ia32" ], @@ -13100,9 +10661,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.22.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz", - "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==", + "version": "4.24.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.3.tgz", + "integrity": "sha512-HGZgRFFYrMrP3TJlq58nR1xy8zHKId25vhmm5S9jETEfDf6xybPxsavFTJaufe2zgOGYJBskGlj49CwtEuFhWQ==", "cpu": [ "x64" ], @@ -13113,13 +10674,13 @@ ] }, "node_modules/@rollup/wasm-node": { - "version": "4.22.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/wasm-node/-/wasm-node-4.22.4.tgz", - "integrity": "sha512-2AXpNT2gtSyGangSWTwmspOnu0wVMBLC6U/wJ8fs58JhtlAy+B3jNOuaN+7x9blilAoiwBk9187ybhrs7kaCpg==", + "version": "4.24.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@rollup/wasm-node/-/wasm-node-4.24.3.tgz", + "integrity": "sha512-lahpprfoJKm88bgp2IrDI/VRyZocsvGvemSkhrsbBTj9yqhkyIb7W5CZAdZWgeAibO5EIk2cN0yWCHcjohL1YQ==", "devOptional": true, "license": "MIT", "dependencies": { - "@types/estree": "1.0.5" + "@types/estree": "1.0.6" }, "bin": { "rollup": "dist/bin/rollup" @@ -13132,25 +10693,18 @@ "fsevents": "~2.3.2" } }, - "node_modules/@rollup/wasm-node/node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "devOptional": true, - "license": "MIT" - }, "node_modules/@schematics/angular": { - "version": "17.3.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@schematics/angular/-/angular-17.3.8.tgz", - "integrity": "sha512-2g4OmSyE9YGq50Uj7fNI26P/TSAFJ7ZuirwTF2O7Xc4XRQ29/tYIIqhezpNlTb6rlYblcQuMcUZBrMfWJHcqJw==", + "version": "18.2.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@schematics/angular/-/angular-18.2.8.tgz", + "integrity": "sha512-62Sr7/j/dlhZorxH4GzQgpJy0s162BVts0Q7knZuEacP4VL+IWOUE1NS9OFkh/cbomoyXBdoewkZ5Zd1dVX78w==", "license": "MIT", "dependencies": { - "@angular-devkit/core": "17.3.8", - "@angular-devkit/schematics": "17.3.8", - "jsonc-parser": "3.2.1" + "@angular-devkit/core": "18.2.8", + "@angular-devkit/schematics": "18.2.8", + "jsonc-parser": "3.3.1" }, "engines": { - "node": "^18.13.0 || >=20.9.0", + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } @@ -13206,16 +10760,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@sigstore/sign/node_modules/proc-log": { - "version": "4.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/@sigstore/tuf": { "version": "2.3.4", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@sigstore/tuf/-/tuf-2.3.4.tgz", @@ -13251,6 +10795,18 @@ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "license": "MIT" }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@sinonjs/commons": { "version": "3.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@sinonjs/commons/-/commons-3.0.1.tgz", @@ -13272,14 +10828,14 @@ } }, "node_modules/@smithy/abort-controller": { - "version": "3.1.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/abort-controller/-/abort-controller-3.1.4.tgz", - "integrity": "sha512-VupaALAQlXViW3/enTf/f5l5JZYSAxoJL7f0nanhNNKnww6DGCg1oYIuNP78KDugnkwthBO6iEcym16HhWV8RQ==", + "version": "3.1.6", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/abort-controller/-/abort-controller-3.1.6.tgz", + "integrity": "sha512-0XuhuHQlEqbNQZp7QxxrFTdVWdwxch4vjxYgfInF91hZFkPxf9QDrdQka0KfxFMPqLNzSw0b95uGTrLliQUavQ==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^3.4.2", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -13287,17 +10843,17 @@ } }, "node_modules/@smithy/config-resolver": { - "version": "3.0.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/config-resolver/-/config-resolver-3.0.8.tgz", - "integrity": "sha512-Tv1obAC18XOd2OnDAjSWmmthzx6Pdeh63FbLin8MlPiuJ2ATpKkq0NcNOJFr0dO+JmZXnwu8FQxKJ3TKJ3Hulw==", + "version": "3.0.10", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/config-resolver/-/config-resolver-3.0.10.tgz", + "integrity": "sha512-Uh0Sz9gdUuz538nvkPiyv1DZRX9+D15EKDtnQP5rYVAzM/dnYk3P8cg73jcxyOitPgT3mE3OVj7ky7sibzHWkw==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^3.1.7", - "@smithy/types": "^3.4.2", + "@smithy/node-config-provider": "^3.1.9", + "@smithy/types": "^3.6.0", "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.6", + "@smithy/util-middleware": "^3.0.8", "tslib": "^2.6.2" }, "engines": { @@ -13305,21 +10861,19 @@ } }, "node_modules/@smithy/core": { - "version": "2.4.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/core/-/core-2.4.6.tgz", - "integrity": "sha512-6lQQp99hnyuNNIzeTYSzCUXJHwvvFLY7hfdFGSJM95tjRDJGfzWYFRBXPaM9766LiiTsQ561KErtbufzUFSYUg==", + "version": "2.5.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/core/-/core-2.5.1.tgz", + "integrity": "sha512-DujtuDA7BGEKExJ05W5OdxCoyekcKT3Rhg1ZGeiUWaz2BJIWXjZmsG/DIP4W48GHno7AQwRsaCb8NcBgH3QZpg==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/middleware-endpoint": "^3.1.3", - "@smithy/middleware-retry": "^3.0.21", - "@smithy/middleware-serde": "^3.0.6", - "@smithy/protocol-http": "^4.1.3", - "@smithy/smithy-client": "^3.3.5", - "@smithy/types": "^3.4.2", + "@smithy/middleware-serde": "^3.0.8", + "@smithy/protocol-http": "^4.1.5", + "@smithy/types": "^3.6.0", "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-middleware": "^3.0.6", + "@smithy/util-middleware": "^3.0.8", + "@smithy/util-stream": "^3.2.1", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -13328,17 +10882,17 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "3.2.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.3.tgz", - "integrity": "sha512-VoxMzSzdvkkjMJNE38yQgx4CfnmT+Z+5EUXkg4x7yag93eQkVQgZvN3XBSHC/ylfBbLbAtdu7flTCChX9I+mVg==", + "version": "3.2.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.5.tgz", + "integrity": "sha512-4FTQGAsuwqTzVMmiRVTn0RR9GrbRfkP0wfu/tXWVHd2LgNpTY0uglQpIScXK4NaEyXbB3JmZt8gfVqO50lP8wg==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^3.1.7", - "@smithy/property-provider": "^3.1.6", - "@smithy/types": "^3.4.2", - "@smithy/url-parser": "^3.0.6", + "@smithy/node-config-provider": "^3.1.9", + "@smithy/property-provider": "^3.1.8", + "@smithy/types": "^3.6.0", + "@smithy/url-parser": "^3.0.8", "tslib": "^2.6.2" }, "engines": { @@ -13346,29 +10900,29 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "3.2.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.8.tgz", - "integrity": "sha512-Lqe0B8F5RM7zkw//6avq1SJ8AfaRd3ubFUS1eVp5WszV7p6Ne5hQ4dSuMHDpNRPhgTvj4va9Kd/pcVigHEHRow==", + "version": "3.2.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.9.tgz", + "integrity": "sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/protocol-http": "^4.1.3", - "@smithy/querystring-builder": "^3.0.6", - "@smithy/types": "^3.4.2", + "@smithy/protocol-http": "^4.1.4", + "@smithy/querystring-builder": "^3.0.7", + "@smithy/types": "^3.5.0", "@smithy/util-base64": "^3.0.0", "tslib": "^2.6.2" } }, "node_modules/@smithy/hash-node": { - "version": "3.0.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/hash-node/-/hash-node-3.0.6.tgz", - "integrity": "sha512-c/FHEdKK/7DU2z6ZE91L36ahyXWayR3B+FzELjnYq7wH5YqIseM24V+pWCS9kFn1Ln8OFGTf+pyYPiHZuX0s/Q==", + "version": "3.0.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/hash-node/-/hash-node-3.0.8.tgz", + "integrity": "sha512-tlNQYbfpWXHimHqrvgo14DrMAgUBua/cNoz9fMYcDmYej7MAmUcjav/QKQbFc3NrcPxeJ7QClER4tWZmfwoPng==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^3.4.2", + "@smithy/types": "^3.6.0", "@smithy/util-buffer-from": "^3.0.0", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" @@ -13378,14 +10932,14 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "3.0.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/invalid-dependency/-/invalid-dependency-3.0.6.tgz", - "integrity": "sha512-czM7Ioq3s8pIXht7oD+vmgy4Wfb4XavU/k/irO8NdXFFOx7YAlsCCcKOh/lJD1mJSYQqiR7NmpZ9JviryD/7AQ==", + "version": "3.0.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/invalid-dependency/-/invalid-dependency-3.0.8.tgz", + "integrity": "sha512-7Qynk6NWtTQhnGTTZwks++nJhQ1O54Mzi7fz4PqZOiYXb4Z1Flpb2yRvdALoggTS8xjtohWUM+RygOtB30YL3Q==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^3.4.2", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" } }, @@ -13404,15 +10958,15 @@ } }, "node_modules/@smithy/middleware-content-length": { - "version": "3.0.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/middleware-content-length/-/middleware-content-length-3.0.8.tgz", - "integrity": "sha512-VuyszlSO49WKh3H9/kIO2kf07VUwGV80QRiaDxUfP8P8UKlokz381ETJvwLhwuypBYhLymCYyNhB3fLAGBX2og==", + "version": "3.0.10", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/middleware-content-length/-/middleware-content-length-3.0.10.tgz", + "integrity": "sha512-T4dIdCs1d/+/qMpwhJ1DzOhxCZjZHbHazEPJWdB4GDi2HjIZllVzeBEcdJUN0fomV8DURsgOyrbEUzg3vzTaOg==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/protocol-http": "^4.1.3", - "@smithy/types": "^3.4.2", + "@smithy/protocol-http": "^4.1.5", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -13420,19 +10974,20 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "3.1.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.3.tgz", - "integrity": "sha512-KeM/OrK8MVFUsoJsmCN0MZMVPjKKLudn13xpgwIMpGTYpA8QZB2Xq5tJ+RE6iu3A6NhOI4VajDTwBsm8pwwrhg==", + "version": "3.2.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.1.tgz", + "integrity": "sha512-wWO3xYmFm6WRW8VsEJ5oU6h7aosFXfszlz3Dj176pTij6o21oZnzkCLzShfmRaaCHDkBXWBdO0c4sQAvLFP6zA==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/middleware-serde": "^3.0.6", - "@smithy/node-config-provider": "^3.1.7", - "@smithy/shared-ini-file-loader": "^3.1.7", - "@smithy/types": "^3.4.2", - "@smithy/url-parser": "^3.0.6", - "@smithy/util-middleware": "^3.0.6", + "@smithy/core": "^2.5.1", + "@smithy/middleware-serde": "^3.0.8", + "@smithy/node-config-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.9", + "@smithy/types": "^3.6.0", + "@smithy/url-parser": "^3.0.8", + "@smithy/util-middleware": "^3.0.8", "tslib": "^2.6.2" }, "engines": { @@ -13440,20 +10995,20 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "3.0.21", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/middleware-retry/-/middleware-retry-3.0.21.tgz", - "integrity": "sha512-/h0fElV95LekVVEJuSw+aI11S1Y3zIUwBc6h9ZbUv43Gl2weXsbQwjLoet6j/Qtb0phfrSxS6pNg6FqgJOWZkA==", + "version": "3.0.25", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/middleware-retry/-/middleware-retry-3.0.25.tgz", + "integrity": "sha512-m1F70cPaMBML4HiTgCw5I+jFNtjgz5z5UdGnUbG37vw6kh4UvizFYjqJGHvicfgKMkDL6mXwyPp5mhZg02g5sg==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^3.1.7", - "@smithy/protocol-http": "^4.1.3", - "@smithy/service-error-classification": "^3.0.6", - "@smithy/smithy-client": "^3.3.5", - "@smithy/types": "^3.4.2", - "@smithy/util-middleware": "^3.0.6", - "@smithy/util-retry": "^3.0.6", + "@smithy/node-config-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.5", + "@smithy/service-error-classification": "^3.0.8", + "@smithy/smithy-client": "^3.4.2", + "@smithy/types": "^3.6.0", + "@smithy/util-middleware": "^3.0.8", + "@smithy/util-retry": "^3.0.8", "tslib": "^2.6.2", "uuid": "^9.0.1" }, @@ -13462,14 +11017,14 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "3.0.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/middleware-serde/-/middleware-serde-3.0.6.tgz", - "integrity": "sha512-KKTUSl1MzOM0MAjGbudeaVNtIDo+PpekTBkCNwvfZlKndodrnvRo+00USatiyLOc0ujjO9UydMRu3O9dYML7ag==", + "version": "3.0.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/middleware-serde/-/middleware-serde-3.0.8.tgz", + "integrity": "sha512-Xg2jK9Wc/1g/MBMP/EUn2DLspN8LNt+GMe7cgF+Ty3vl+Zvu+VeZU5nmhveU+H8pxyTsjrAkci8NqY6OuvZnjA==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^3.4.2", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -13477,14 +11032,14 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "3.0.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/middleware-stack/-/middleware-stack-3.0.6.tgz", - "integrity": "sha512-2c0eSYhTQ8xQqHMcRxLMpadFbTXg6Zla5l0mwNftFCZMQmuhI7EbAJMx6R5eqfuV3YbJ3QGyS3d5uSmrHV8Khg==", + "version": "3.0.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/middleware-stack/-/middleware-stack-3.0.8.tgz", + "integrity": "sha512-d7ZuwvYgp1+3682Nx0MD3D/HtkmZd49N3JUndYWQXfRZrYEnCWYc8BHcNmVsPAp9gKvlurdg/mubE6b/rPS9MA==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^3.4.2", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -13492,16 +11047,16 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "3.1.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/node-config-provider/-/node-config-provider-3.1.7.tgz", - "integrity": "sha512-g3mfnC3Oo8pOI0dYuPXLtdW1WGVb3bR2tkV21GNkm0ZvQjLTtamXAwCWt/FCb0HGvKt3gHHmF1XerG0ICfalOg==", + "version": "3.1.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/node-config-provider/-/node-config-provider-3.1.9.tgz", + "integrity": "sha512-qRHoah49QJ71eemjuS/WhUXB+mpNtwHRWQr77J/m40ewBVVwvo52kYAmb7iuaECgGTTcYxHS4Wmewfwy++ueew==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/property-provider": "^3.1.6", - "@smithy/shared-ini-file-loader": "^3.1.7", - "@smithy/types": "^3.4.2", + "@smithy/property-provider": "^3.1.8", + "@smithy/shared-ini-file-loader": "^3.1.9", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -13509,17 +11064,17 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "3.2.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/node-http-handler/-/node-http-handler-3.2.3.tgz", - "integrity": "sha512-/gcm5DJ3k1b1zEInzBGAZC8ntJ+jwrz1NcSIu+9dSXd1FfG0G6QgkDI40tt8/WYUbHtLyo8fEqtm2v29koWo/w==", + "version": "3.2.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/node-http-handler/-/node-http-handler-3.2.5.tgz", + "integrity": "sha512-PkOwPNeKdvX/jCpn0A8n9/TyoxjGZB8WVoJmm9YzsnAgggTj4CrjpRHlTQw7dlLZ320n1mY1y+nTRUDViKi/3w==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/abort-controller": "^3.1.4", - "@smithy/protocol-http": "^4.1.3", - "@smithy/querystring-builder": "^3.0.6", - "@smithy/types": "^3.4.2", + "@smithy/abort-controller": "^3.1.6", + "@smithy/protocol-http": "^4.1.5", + "@smithy/querystring-builder": "^3.0.8", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -13527,14 +11082,14 @@ } }, "node_modules/@smithy/property-provider": { - "version": "3.1.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/property-provider/-/property-provider-3.1.6.tgz", - "integrity": "sha512-NK3y/T7Q/Bw+Z8vsVs9MYIQ5v7gOX7clyrXcwhhIBQhbPgRl6JDrZbusO9qWDhcEus75Tg+VCxtIRfo3H76fpw==", + "version": "3.1.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/property-provider/-/property-provider-3.1.8.tgz", + "integrity": "sha512-ukNUyo6rHmusG64lmkjFeXemwYuKge1BJ8CtpVKmrxQxc6rhUX0vebcptFA9MmrGsnLhwnnqeH83VTU9hwOpjA==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^3.4.2", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -13542,14 +11097,14 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "4.1.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/protocol-http/-/protocol-http-4.1.3.tgz", - "integrity": "sha512-GcbMmOYpH9iRqtC05RbRnc/0FssxSTHlmaNhYBTgSgNCYpdR3Kt88u5GAZTBmouzv+Zlj/VRv92J9ruuDeJuEw==", + "version": "4.1.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", + "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^3.4.2", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -13557,14 +11112,14 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "3.0.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/querystring-builder/-/querystring-builder-3.0.6.tgz", - "integrity": "sha512-sQe08RunoObe+Usujn9+R2zrLuQERi3CWvRO3BvnoWSYUaIrLKuAIeY7cMeDax6xGyfIP3x/yFWbEKSXvOnvVg==", + "version": "3.0.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/querystring-builder/-/querystring-builder-3.0.8.tgz", + "integrity": "sha512-btYxGVqFUARbUrN6VhL9c3dnSviIwBYD9Rz1jHuN1hgh28Fpv2xjU1HeCeDJX68xctz7r4l1PBnFhGg1WBBPuA==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^3.4.2", + "@smithy/types": "^3.6.0", "@smithy/util-uri-escape": "^3.0.0", "tslib": "^2.6.2" }, @@ -13573,14 +11128,14 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "3.0.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/querystring-parser/-/querystring-parser-3.0.6.tgz", - "integrity": "sha512-UJKw4LlEkytzz2Wq+uIdHf6qOtFfee/o7ruH0jF5I6UAuU+19r9QV7nU3P/uI0l6+oElRHmG/5cBBcGJrD7Ozg==", + "version": "3.0.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/querystring-parser/-/querystring-parser-3.0.8.tgz", + "integrity": "sha512-BtEk3FG7Ks64GAbt+JnKqwuobJNX8VmFLBsKIwWr1D60T426fGrV2L3YS5siOcUhhp6/Y6yhBw1PSPxA5p7qGg==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^3.4.2", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -13588,28 +11143,28 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "3.0.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/service-error-classification/-/service-error-classification-3.0.6.tgz", - "integrity": "sha512-53SpchU3+DUZrN7J6sBx9tBiCVGzsib2e4sc512Q7K9fpC5zkJKs6Z9s+qbMxSYrkEkle6hnMtrts7XNkMJJMg==", + "version": "3.0.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/service-error-classification/-/service-error-classification-3.0.8.tgz", + "integrity": "sha512-uEC/kCCFto83bz5ZzapcrgGqHOh/0r69sZ2ZuHlgoD5kYgXJEThCoTuw/y1Ub3cE7aaKdznb+jD9xRPIfIwD7g==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^3.4.2" + "@smithy/types": "^3.6.0" }, "engines": { "node": ">=16.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.7.tgz", - "integrity": "sha512-IA4K2qTJYXkF5OfVN4vsY1hfnUZjaslEE8Fsr/gGFza4TAC2A9NfnZuSY2srQIbt9bwtjHiAayrRVgKse4Q7fA==", + "version": "3.1.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.9.tgz", + "integrity": "sha512-/+OsJRNtoRbtsX0UpSgWVxFZLsJHo/4sTr+kBg/J78sr7iC+tHeOvOJrS5hCpVQ6sWBbhWLp1UNiuMyZhE6pmA==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^3.4.2", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -13617,18 +11172,18 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "4.1.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/signature-v4/-/signature-v4-4.1.4.tgz", - "integrity": "sha512-72MiK7xYukNsnLJI9NqvUHqTu0ziEsfMsYNlWpiJfuGQnCTFKpckThlEatirvcA/LmT1h7rRO+pJD06PYsPu9Q==", + "version": "4.2.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/signature-v4/-/signature-v4-4.2.1.tgz", + "integrity": "sha512-NsV1jF4EvmO5wqmaSzlnTVetemBS3FZHdyc5CExbDljcyJCEEkJr8ANu2JvtNbVg/9MvKAWV44kTrGS+Pi4INg==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.1.3", - "@smithy/types": "^3.4.2", + "@smithy/protocol-http": "^4.1.5", + "@smithy/types": "^3.6.0", "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-middleware": "^3.0.6", + "@smithy/util-middleware": "^3.0.8", "@smithy/util-uri-escape": "^3.0.0", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" @@ -13638,18 +11193,19 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "3.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/smithy-client/-/smithy-client-3.3.5.tgz", - "integrity": "sha512-7IZi8J3Dr9n3tX+lcpmJ/5tCYIqoXdblFBaPuv0SEKZFRpCxE+TqIWL6I3t7jLlk9TWu3JSvEZAhtjB9yvB+zA==", + "version": "3.4.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/smithy-client/-/smithy-client-3.4.2.tgz", + "integrity": "sha512-dxw1BDxJiY9/zI3cBqfVrInij6ShjpV4fmGHesGZZUiP9OSE/EVfdwdRz0PgvkEvrZHpsj2htRaHJfftE8giBA==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/middleware-endpoint": "^3.1.3", - "@smithy/middleware-stack": "^3.0.6", - "@smithy/protocol-http": "^4.1.3", - "@smithy/types": "^3.4.2", - "@smithy/util-stream": "^3.1.8", + "@smithy/core": "^2.5.1", + "@smithy/middleware-endpoint": "^3.2.1", + "@smithy/middleware-stack": "^3.0.8", + "@smithy/protocol-http": "^4.1.5", + "@smithy/types": "^3.6.0", + "@smithy/util-stream": "^3.2.1", "tslib": "^2.6.2" }, "engines": { @@ -13657,9 +11213,9 @@ } }, "node_modules/@smithy/types": { - "version": "3.4.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/types/-/types-3.4.2.tgz", - "integrity": "sha512-tHiFcfcVedVBHpmHUEUHOCCih8iZbIAYn9NvPsNzaPm/237I3imdDdZoOC8c87H5HBAVEa06tTgb+OcSWV9g5w==", + "version": "3.6.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/types/-/types-3.6.0.tgz", + "integrity": "sha512-8VXK/KzOHefoC65yRgCn5vG1cysPJjHnOVt9d0ybFQSmJgQj152vMn4EkYhGuaOmnnZvCPav/KnYyE6/KsNZ2w==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -13671,15 +11227,15 @@ } }, "node_modules/@smithy/url-parser": { - "version": "3.0.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/url-parser/-/url-parser-3.0.6.tgz", - "integrity": "sha512-47Op/NU8Opt49KyGpHtVdnmmJMsp2hEwBdyjuFB9M2V5QVOwA7pBhhxKN5z6ztKGrMw76gd8MlbPuzzvaAncuQ==", + "version": "3.0.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/url-parser/-/url-parser-3.0.8.tgz", + "integrity": "sha512-4FdOhwpTW7jtSFWm7SpfLGKIBC9ZaTKG5nBF0wK24aoQKQyDIKUw3+KFWCQ9maMzrgTJIuOvOnsV2lLGW5XjTg==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/querystring-parser": "^3.0.6", - "@smithy/types": "^3.4.2", + "@smithy/querystring-parser": "^3.0.8", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" } }, @@ -13754,16 +11310,16 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "3.0.21", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.21.tgz", - "integrity": "sha512-M/FhTBk4c/SsB91dD/M4gMGfJO7z/qJaM9+XQQIqBOf4qzZYMExnP7R4VdGwxxH8IKMGW+8F0I4rNtVRrcfPoA==", + "version": "3.0.25", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.25.tgz", + "integrity": "sha512-fRw7zymjIDt6XxIsLwfJfYUfbGoO9CmCJk6rjJ/X5cd20+d2Is7xjU5Kt/AiDt6hX8DAf5dztmfP5O82gR9emA==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/property-provider": "^3.1.6", - "@smithy/smithy-client": "^3.3.5", - "@smithy/types": "^3.4.2", + "@smithy/property-provider": "^3.1.8", + "@smithy/smithy-client": "^3.4.2", + "@smithy/types": "^3.6.0", "bowser": "^2.11.0", "tslib": "^2.6.2" }, @@ -13772,19 +11328,19 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "3.0.21", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.21.tgz", - "integrity": "sha512-NiLinPvF86U3S2Pdx/ycqd4bnY5dmFSPNL5KYRwbNjqQFS09M5Wzqk8BNk61/47xCYz1X/6KeiSk9qgYPTtuDw==", + "version": "3.0.25", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.25.tgz", + "integrity": "sha512-H3BSZdBDiVZGzt8TG51Pd2FvFO0PAx/A0mJ0EH8a13KJ6iUCdYnw/Dk/MdC1kTd0eUuUGisDFaxXVXo4HHFL1g==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/config-resolver": "^3.0.8", - "@smithy/credential-provider-imds": "^3.2.3", - "@smithy/node-config-provider": "^3.1.7", - "@smithy/property-provider": "^3.1.6", - "@smithy/smithy-client": "^3.3.5", - "@smithy/types": "^3.4.2", + "@smithy/config-resolver": "^3.0.10", + "@smithy/credential-provider-imds": "^3.2.5", + "@smithy/node-config-provider": "^3.1.9", + "@smithy/property-provider": "^3.1.8", + "@smithy/smithy-client": "^3.4.2", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -13792,15 +11348,15 @@ } }, "node_modules/@smithy/util-endpoints": { - "version": "2.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/util-endpoints/-/util-endpoints-2.1.2.tgz", - "integrity": "sha512-FEISzffb4H8DLzGq1g4MuDpcv6CIG15fXoQzDH9SjpRJv6h7J++1STFWWinilG0tQh9H1v2UKWG19Jjr2B16zQ==", + "version": "2.1.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/util-endpoints/-/util-endpoints-2.1.4.tgz", + "integrity": "sha512-kPt8j4emm7rdMWQyL0F89o92q10gvCUa6sBkBtDJ7nV2+P7wpXczzOfoDJ49CKXe5CCqb8dc1W+ZdLlrKzSAnQ==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^3.1.7", - "@smithy/types": "^3.4.2", + "@smithy/node-config-provider": "^3.1.9", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -13822,14 +11378,14 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "3.0.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/util-middleware/-/util-middleware-3.0.6.tgz", - "integrity": "sha512-BxbX4aBhI1O9p87/xM+zWy0GzT3CEVcXFPBRDoHAM+pV0eSW156pR+PSYEz0DQHDMYDsYAflC2bQNz2uaDBUZQ==", + "version": "3.0.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/util-middleware/-/util-middleware-3.0.8.tgz", + "integrity": "sha512-p7iYAPaQjoeM+AKABpYWeDdtwQNxasr4aXQEA/OmbOaug9V0odRVDy3Wx4ci8soljE/JXQo+abV0qZpW8NX0yA==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^3.4.2", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -13837,15 +11393,15 @@ } }, "node_modules/@smithy/util-retry": { - "version": "3.0.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/util-retry/-/util-retry-3.0.6.tgz", - "integrity": "sha512-BRZiuF7IwDntAbevqMco67an0Sr9oLQJqqRCsSPZZHYRnehS0LHDAkJk/pSmI7Z8c/1Vet294H7fY2fWUgB+Rg==", + "version": "3.0.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/util-retry/-/util-retry-3.0.8.tgz", + "integrity": "sha512-TCEhLnY581YJ+g1x0hapPz13JFqzmh/pMWL2KEFASC51qCfw3+Y47MrTmea4bUE5vsdxQ4F6/KFbUeSz22Q1ow==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/service-error-classification": "^3.0.6", - "@smithy/types": "^3.4.2", + "@smithy/service-error-classification": "^3.0.8", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -13853,16 +11409,16 @@ } }, "node_modules/@smithy/util-stream": { - "version": "3.1.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/util-stream/-/util-stream-3.1.8.tgz", - "integrity": "sha512-hoKOqSmb8FD3WLObuB5hwbM7bNIWgcnvkThokTvVq7J5PKjlLUK5qQQcB9zWLHIoSaIlf3VIv2OxZY2wtQjcRQ==", + "version": "3.2.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/util-stream/-/util-stream-3.2.1.tgz", + "integrity": "sha512-R3ufuzJRxSJbE58K9AEnL/uSZyVdHzud9wLS8tIbXclxKzoe09CRohj2xV8wpx5tj7ZbiJaKYcutMm1eYgz/0A==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/fetch-http-handler": "^3.2.8", - "@smithy/node-http-handler": "^3.2.3", - "@smithy/types": "^3.4.2", + "@smithy/fetch-http-handler": "^4.0.0", + "@smithy/node-http-handler": "^3.2.5", + "@smithy/types": "^3.6.0", "@smithy/util-base64": "^3.0.0", "@smithy/util-buffer-from": "^3.0.0", "@smithy/util-hex-encoding": "^3.0.0", @@ -13873,6 +11429,21 @@ "node": ">=16.0.0" } }, + "node_modules/@smithy/util-stream/node_modules/@smithy/fetch-http-handler": { + "version": "4.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/fetch-http-handler/-/fetch-http-handler-4.0.0.tgz", + "integrity": "sha512-MLb1f5tbBO2X6K4lMEKJvxeLooyg7guq48C2zKr4qM7F2Gpkz4dc+hdSgu77pCJ76jVqFBjZczHYAs6dp15N+g==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@smithy/protocol-http": "^4.1.5", + "@smithy/querystring-builder": "^3.0.8", + "@smithy/types": "^3.6.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, "node_modules/@smithy/util-uri-escape": { "version": "3.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", @@ -13903,9 +11474,9 @@ } }, "node_modules/@storybook/addon-actions": { - "version": "8.3.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/addon-actions/-/addon-actions-8.3.3.tgz", - "integrity": "sha512-cbpksmld7iADwDGXgojZ4r8LGI3YA3NP68duAHg2n1dtnx1oUaFK5wd6dbNuz7GdjyhIOIy3OKU1dAuylYNGOQ==", + "version": "8.3.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/addon-actions/-/addon-actions-8.3.5.tgz", + "integrity": "sha512-t8D5oo+4XfD+F8091wLa2y/CDd/W2lExCeol5Vm1tp5saO+u6f2/d7iykLhTowWV84Uohi3D073uFeyTAlGebg==", "dev": true, "license": "MIT", "dependencies": { @@ -13920,13 +11491,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.3" + "storybook": "^8.3.5" } }, "node_modules/@storybook/addon-backgrounds": { - "version": "8.3.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/addon-backgrounds/-/addon-backgrounds-8.3.3.tgz", - "integrity": "sha512-aX0OIrtjIB7UgSaiv20SFkfC1iWwJIGMPsPSJ5ZPhXIIOWIEBtSujh8YXwjDEXSC4DOHalmeT4bitRRe5KrVKA==", + "version": "8.3.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/addon-backgrounds/-/addon-backgrounds-8.3.5.tgz", + "integrity": "sha512-IQGjDujuw8+iSqKREdkL8I5E/5CAHZbfOWd4A75PQK2D6qZ0fu/xRwTOQOH4jP6xn/abvfACOdL6A0d5bU90ag==", "dev": true, "license": "MIT", "dependencies": { @@ -13939,13 +11510,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.3" + "storybook": "^8.3.5" } }, "node_modules/@storybook/addon-controls": { - "version": "8.3.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/addon-controls/-/addon-controls-8.3.3.tgz", - "integrity": "sha512-78xRtVpY7eX/Lti00JLgwYCBRB6ZcvzY3SWk0uQjEqcTnQGoQkVg2L7oWFDlDoA1LBY18P5ei2vu8MYT9GXU4g==", + "version": "8.3.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/addon-controls/-/addon-controls-8.3.5.tgz", + "integrity": "sha512-2eCVobUUvY1Rq7sp1U8Mx8t44VXwvi0E+hqyrsqOx5TTSC/FUQ+hNAX6GSYUcFIyQQ1ORpKNlUjAAdjxBv1ZHQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13959,21 +11530,21 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.3" + "storybook": "^8.3.5" } }, "node_modules/@storybook/addon-docs": { - "version": "8.3.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/addon-docs/-/addon-docs-8.3.3.tgz", - "integrity": "sha512-REUandqq1RnMNOhsocRwx5q2fdlBAYPTDFlKASYfEn4Ln5NgbQRGxOAWl7yXAAFzbDmUDU7K20hkauecF0tyMw==", + "version": "8.3.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/addon-docs/-/addon-docs-8.3.5.tgz", + "integrity": "sha512-MOVfo1bY8kXTzbvmWnx3UuSO4WNykFz7Edvb3mxltNyuW7UDRZGuIuSe32ddT/EtLJfurrC9Ja3yBy4KBUGnMA==", "dev": true, "license": "MIT", "dependencies": { "@mdx-js/react": "^3.0.0", - "@storybook/blocks": "8.3.3", - "@storybook/csf-plugin": "8.3.3", + "@storybook/blocks": "8.3.5", + "@storybook/csf-plugin": "8.3.5", "@storybook/global": "^5.0.0", - "@storybook/react-dom-shim": "8.3.3", + "@storybook/react-dom-shim": "8.3.5", "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", "fs-extra": "^11.1.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0", @@ -13987,25 +11558,40 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.3" + "storybook": "^8.3.5" + } + }, + "node_modules/@storybook/addon-docs/node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" } }, "node_modules/@storybook/addon-essentials": { - "version": "8.3.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/addon-essentials/-/addon-essentials-8.3.3.tgz", - "integrity": "sha512-E/uXoUYcg8ulG3lVbsEKb4v5hnMeGkq9YJqiZYKgVK7iRFa6p4HeVB1wU1adnm7RgjWvh+p0vQRo4KL2CTNXqw==", + "version": "8.3.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/addon-essentials/-/addon-essentials-8.3.5.tgz", + "integrity": "sha512-hXTtPuN4/IsXjUrkMPAuz1qKAl8DovdXpjQgjQs7jSAVx3kc4BZaGqJ3gaVenKtO8uDchmA92BoQygpkc8eWhw==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/addon-actions": "8.3.3", - "@storybook/addon-backgrounds": "8.3.3", - "@storybook/addon-controls": "8.3.3", - "@storybook/addon-docs": "8.3.3", - "@storybook/addon-highlight": "8.3.3", - "@storybook/addon-measure": "8.3.3", - "@storybook/addon-outline": "8.3.3", - "@storybook/addon-toolbars": "8.3.3", - "@storybook/addon-viewport": "8.3.3", + "@storybook/addon-actions": "8.3.5", + "@storybook/addon-backgrounds": "8.3.5", + "@storybook/addon-controls": "8.3.5", + "@storybook/addon-docs": "8.3.5", + "@storybook/addon-highlight": "8.3.5", + "@storybook/addon-measure": "8.3.5", + "@storybook/addon-outline": "8.3.5", + "@storybook/addon-toolbars": "8.3.5", + "@storybook/addon-viewport": "8.3.5", "ts-dedent": "^2.0.0" }, "funding": { @@ -14013,13 +11599,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.3" + "storybook": "^8.3.5" } }, "node_modules/@storybook/addon-highlight": { - "version": "8.3.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/addon-highlight/-/addon-highlight-8.3.3.tgz", - "integrity": "sha512-MB084xJM66rLU+iFFk34kjLUiAWzDiy6Kz4uZRa1CnNqEK0sdI8HaoQGgOxTIa2xgJor05/8/mlYlMkP/0INsQ==", + "version": "8.3.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/addon-highlight/-/addon-highlight-8.3.5.tgz", + "integrity": "sha512-ku0epul9aReCR3Gv/emwYnsqg3vgux5OmYMjoDcJC7s+LyfweSzLV/f5t9gSHazikJElh5TehtVkWbC4QfbGSw==", "dev": true, "license": "MIT", "dependencies": { @@ -14030,107 +11616,111 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.3" + "storybook": "^8.3.5" } }, - "node_modules/@storybook/addon-measure": { - "version": "8.3.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/addon-measure/-/addon-measure-8.3.3.tgz", - "integrity": "sha512-R20Z83gnxDRrocES344dw1Of/zDhe3XHSM6TLq80UQTJ9PhnMI+wYHQlK9DsdP3KiRkI+pQA6GCOp0s2ZRy5dg==", + "node_modules/@storybook/addon-interactions": { + "version": "8.3.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/addon-interactions/-/addon-interactions-8.3.5.tgz", + "integrity": "sha512-GtTy/A+mG7vDOahQr2avT4dpWtCRiFDSYcWyuQOZm10y8VDDw157HQM+FuhxjV9Owrrohy9F24oBUwRG8H3b5A==", "dev": true, "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", - "tiny-invariant": "^1.3.1" + "@storybook/instrumenter": "8.3.5", + "@storybook/test": "8.3.5", + "polished": "^4.2.2", + "ts-dedent": "^2.2.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.3" + "storybook": "^8.3.5" } }, - "node_modules/@storybook/addon-outline": { - "version": "8.3.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/addon-outline/-/addon-outline-8.3.3.tgz", - "integrity": "sha512-OwqYfieNuqSqWNtUZLu3UmsfQNnwA2UaSMBZyeC2Dte9Jd59PPYggcWmH+b0S6OTbYXWNAUK5U6WdK+X9Ypzdw==", + "node_modules/@storybook/addon-measure": { + "version": "8.3.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/addon-measure/-/addon-measure-8.3.5.tgz", + "integrity": "sha512-6GVehgbHhFIFS69xSfRV+12VK0cnuIAtZdp1J3eUCc2ATrcigqVjTM6wzZz6kBuX6O3dcusr7Wg46KtNliqLqg==", "dev": true, "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", - "ts-dedent": "^2.0.0" + "tiny-invariant": "^1.3.1" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.3" + "storybook": "^8.3.5" } }, - "node_modules/@storybook/addon-toolbars": { - "version": "8.3.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/addon-toolbars/-/addon-toolbars-8.3.3.tgz", - "integrity": "sha512-4WyiVqDm4hlJdENIVQg9pLNLdfhnNKa+haerYYSzTVjzYrUx0X6Bxafshq+sud6aRtSYU14abwP56lfW8hgTlA==", + "node_modules/@storybook/addon-outline": { + "version": "8.3.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/addon-outline/-/addon-outline-8.3.5.tgz", + "integrity": "sha512-dwmK6GzjEnQP9Yo0VnBUQtJkXZlXdfjWyskZ/IlUVc+IFdeeCtIiMyA92oMfHo8eXt0k1g21ZqMaIn7ZltOuHw==", "dev": true, "license": "MIT", + "dependencies": { + "@storybook/global": "^5.0.0", + "ts-dedent": "^2.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.3" + "storybook": "^8.3.5" } }, - "node_modules/@storybook/addon-viewport": { - "version": "8.3.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/addon-viewport/-/addon-viewport-8.3.3.tgz", - "integrity": "sha512-2S+UpbKAL+z1ppzUCkixjaem2UDMkfmm/kyJ1wm3A/ofGLYi4fjMSKNRckk+7NdolXGQJjBo0RcaotUTxFIFwQ==", + "node_modules/@storybook/addon-toolbars": { + "version": "8.3.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/addon-toolbars/-/addon-toolbars-8.3.5.tgz", + "integrity": "sha512-Ml2gc9q8WbteDvmuAZGgBxt5SqWMXzuTkMjlsA8EB53hlkN1w9esX4s8YtBeNqC3HKoUzcdq8uexSBqU8fDbSA==", "dev": true, "license": "MIT", - "dependencies": { - "memoizerific": "^1.11.3" - }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.3" + "storybook": "^8.3.5" } }, - "node_modules/@storybook/addons": { - "version": "7.6.17", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/addons/-/addons-7.6.17.tgz", - "integrity": "sha512-Ok18Y698Ccyg++MoUNJNHY0cXUvo8ETFIRLJk1g9ElJ70j6kPgNnzW2pAtZkBNmswHtofZ7pT156cj96k/LgfA==", + "node_modules/@storybook/addon-viewport": { + "version": "8.3.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/addon-viewport/-/addon-viewport-8.3.5.tgz", + "integrity": "sha512-FSWydoPiVWFXEittG7O1YgvuaqoU9Vb+qoq9XfP/hvQHHMDcMZvC40JaV8AnJeTXaM7ngIjcn9XDEfGbFfOzXw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@storybook/manager-api": "7.6.17", - "@storybook/preview-api": "7.6.17", - "@storybook/types": "7.6.17" + "memoizerific": "^1.11.3" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.3.5" } }, "node_modules/@storybook/angular": { - "version": "8.3.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/angular/-/angular-8.3.3.tgz", - "integrity": "sha512-CEBUcUrDVx5ZVV4GCXWHR8/AtKxlZjzUe1r9VyTR4+/G7gcQoCZtVKq/zwDOoJuKlKjwULm+wPXaaT+E74WbkQ==", + "version": "8.3.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/angular/-/angular-8.3.5.tgz", + "integrity": "sha512-KY2qk3dSu42PfAffqvaHXx9U/jnBH5HFTfQFa/Kbopr9KZzeX0st2ic1gQFBZyG8JdnryXNg7SE4Ynf+Cjw8Cw==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/builder-webpack5": "8.3.3", - "@storybook/components": "^8.3.3", - "@storybook/core-webpack": "8.3.3", + "@storybook/builder-webpack5": "8.3.5", + "@storybook/components": "^8.3.5", + "@storybook/core-webpack": "8.3.5", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "^8.3.3", - "@storybook/preview-api": "^8.3.3", - "@storybook/theming": "^8.3.3", + "@storybook/manager-api": "^8.3.5", + "@storybook/preview-api": "^8.3.5", + "@storybook/theming": "^8.3.5", "@types/node": "^22.0.0", "@types/react": "^18.0.37", "@types/react-dom": "^18.0.11", @@ -14165,7 +11755,7 @@ "@angular/platform-browser": ">=15.0.0 < 19.0.0", "@angular/platform-browser-dynamic": ">=15.0.0 < 19.0.0", "rxjs": "^6.0.0 || ^7.4.0", - "storybook": "^8.3.3", + "storybook": "^8.3.5", "typescript": "^4.0.0 || ^5.0.0", "zone.js": ">= 0.11.1 < 1.0.0" }, @@ -14176,9 +11766,9 @@ } }, "node_modules/@storybook/angular/node_modules/@storybook/components": { - "version": "8.3.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/components/-/components-8.3.3.tgz", - "integrity": "sha512-i2JYtesFGkdu+Hwuj+o9fLuO3yo+LPT1/8o5xBVYtEqsgDtEAyuRUWjSz8d8NPtzloGPOv5kvR6MokWDfbeMfw==", + "version": "8.3.6", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/components/-/components-8.3.6.tgz", + "integrity": "sha512-TXuoGZY7X3iixF45lXkYOFk8k2q9OHcqHyHyem1gATLLQXgyOvDgzm+VB7uKBNzssRQPEE+La70nfG8bq/viRw==", "dev": true, "license": "MIT", "funding": { @@ -14186,13 +11776,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.3" + "storybook": "^8.3.6" } }, "node_modules/@storybook/angular/node_modules/@storybook/manager-api": { - "version": "8.3.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/manager-api/-/manager-api-8.3.3.tgz", - "integrity": "sha512-Na4U+McOeVUJAR6qzJfQ6y2Qt0kUgEDUriNoAn+curpoKPTmIaZ79RAXBzIqBl31VyQKknKpZbozoRGf861YaQ==", + "version": "8.3.6", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/manager-api/-/manager-api-8.3.6.tgz", + "integrity": "sha512-Xt5VFZcL+G/9uzaHjzWFhxRNrP+4rPhSRKEvCZorAbC9+Hv+ZDs1JSZS5wMb4WKpXBZ0rwDVOLwngqbVtfRHuQ==", "dev": true, "license": "MIT", "funding": { @@ -14200,13 +11790,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.3" + "storybook": "^8.3.6" } }, "node_modules/@storybook/angular/node_modules/@storybook/preview-api": { - "version": "8.3.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/preview-api/-/preview-api-8.3.3.tgz", - "integrity": "sha512-GP2QlaF3BBQGAyo248N7549YkTQjCentsc1hUvqPnFWU4xfjkejbnFk8yLaIw0VbYbL7jfd7npBtjZ+6AnphMQ==", + "version": "8.3.6", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/preview-api/-/preview-api-8.3.6.tgz", + "integrity": "sha512-/Wxvb7wbI2O2iH63arRQQyyojA630vibdshkFjuC/u1nYdptEV1jkxa0OYmbZbKCn4/ze6uH4hfsKOpDPV9SWg==", "dev": true, "license": "MIT", "funding": { @@ -14214,13 +11804,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.3" + "storybook": "^8.3.6" } }, "node_modules/@storybook/angular/node_modules/@storybook/theming": { - "version": "8.3.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/theming/-/theming-8.3.3.tgz", - "integrity": "sha512-gWJKetI6XJQgkrvvry4ez10+jLaGNCQKi5ygRPM9N+qrjA3BB8F2LCuFUTBuisa4l64TILDNjfwP/YTWV5+u5A==", + "version": "8.3.6", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/theming/-/theming-8.3.6.tgz", + "integrity": "sha512-LQjUk6GXRW9ELkoBKuqzQKFUW+ajfGPfVELcfs3/VQX61VhthJ4olov4bGPc04wsmmFMgN/qODxT485IwOHfPQ==", "dev": true, "license": "MIT", "funding": { @@ -14228,50 +11818,17 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.3" + "storybook": "^8.3.6" } }, "node_modules/@storybook/angular/node_modules/@types/node": { - "version": "22.7.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/node/-/node-22.7.0.tgz", - "integrity": "sha512-MOdOibwBs6KW1vfqz2uKMlxq5xAfAZ98SZjO8e3XnAbFnTJtAspqhWk7hrdSAs9/Y14ZWMiy7/MxMUzAOadYEw==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/@storybook/angular/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@storybook/angular/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "22.8.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/node/-/node-22.8.4.tgz", + "integrity": "sha512-SpNNxkftTJOPk0oN+y2bIqurEXHTA2AOZ3EJDDKeJ5VzkvvORSvmQXGQarcOzWV1ac7DCaPBEdMDxBsM+d8jWw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "undici-types": "~6.19.8" } }, "node_modules/@storybook/angular/node_modules/enhanced-resolve": { @@ -14288,29 +11845,6 @@ "node": ">=10.13.0" } }, - "node_modules/@storybook/angular/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/angular/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@storybook/angular/node_modules/tsconfig-paths-webpack-plugin": { "version": "4.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.1.0.tgz", @@ -14326,26 +11860,10 @@ "node": ">=10.13.0" } }, - "node_modules/@storybook/api": { - "version": "7.6.17", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/api/-/api-7.6.17.tgz", - "integrity": "sha512-l92PI+5XL4zB/o4IBWFCKQWTXvPg9hR45DCJqlPHrLZStiR6Xj1mbrtOjUlgIOH+nYb/SZFZqO53hhrs7X4Nvg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@storybook/client-logger": "7.6.17", - "@storybook/manager-api": "7.6.17" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, "node_modules/@storybook/blocks": { - "version": "8.3.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/blocks/-/blocks-8.3.3.tgz", - "integrity": "sha512-8Vsvxqstop3xfbsx3Dn1nEjyxvQUcOYd8vpxyp2YumxYO8FlXIRuYL6HAkYbcX8JexsKvCZYxor52D2vUGIKZg==", + "version": "8.3.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/blocks/-/blocks-8.3.5.tgz", + "integrity": "sha512-8cHTdTywolTHlgwN8I7YH7saWAIjGzV617AwjhJ95AKlC0VtpO1gAFcAgCqr4DU9eMc+LZuvbnaU/RSvA5eCCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14371,7 +11889,7 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.3.3" + "storybook": "^8.3.5" }, "peerDependenciesMeta": { "react": { @@ -14383,13 +11901,13 @@ } }, "node_modules/@storybook/builder-webpack5": { - "version": "8.3.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/builder-webpack5/-/builder-webpack5-8.3.3.tgz", - "integrity": "sha512-4zBvHZoKjm+ZgZ6CpGEFlgGMfoSbHiKdwFLG+t/hV6zKDN/tmBC65KCjZ6pq/RUukvDJyfFLOiOZpc8JyTVFZw==", + "version": "8.3.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/builder-webpack5/-/builder-webpack5-8.3.5.tgz", + "integrity": "sha512-rhmfdiSlDn3Arki7IMYk11PO29rYuYM4LZ8GlNqREU7VUl/8Vngo/jFIa4pKaIns3ql1RrwzO1wm9JvuL/4ydA==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/core-webpack": "8.3.3", + "@storybook/core-webpack": "8.3.5", "@types/node": "^22.0.0", "@types/semver": "^7.3.4", "browser-assert": "^1.2.1", @@ -14422,7 +11940,7 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.3" + "storybook": "^8.3.5" }, "peerDependenciesMeta": { "typescript": { @@ -14431,13 +11949,13 @@ } }, "node_modules/@storybook/builder-webpack5/node_modules/@types/node": { - "version": "22.7.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/node/-/node-22.7.0.tgz", - "integrity": "sha512-MOdOibwBs6KW1vfqz2uKMlxq5xAfAZ98SZjO8e3XnAbFnTJtAspqhWk7hrdSAs9/Y14ZWMiy7/MxMUzAOadYEw==", + "version": "22.8.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/node/-/node-22.8.4.tgz", + "integrity": "sha512-SpNNxkftTJOPk0oN+y2bIqurEXHTA2AOZ3EJDDKeJ5VzkvvORSvmQXGQarcOzWV1ac7DCaPBEdMDxBsM+d8jWw==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "undici-types": "~6.19.8" } }, "node_modules/@storybook/builder-webpack5/node_modules/ajv": { @@ -14467,22 +11985,6 @@ "ajv": "^6.9.1" } }, - "node_modules/@storybook/builder-webpack5/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/@storybook/builder-webpack5/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -14494,23 +11996,6 @@ "concat-map": "0.0.1" } }, - "node_modules/@storybook/builder-webpack5/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/@storybook/builder-webpack5/node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/cosmiconfig/-/cosmiconfig-7.1.0.tgz", @@ -14528,6 +12013,42 @@ "node": ">=10" } }, + "node_modules/@storybook/builder-webpack5/node_modules/css-loader": { + "version": "6.11.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, "node_modules/@storybook/builder-webpack5/node_modules/fork-ts-checker-webpack-plugin": { "version": "8.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz", @@ -14554,55 +12075,25 @@ }, "peerDependencies": { "typescript": ">3.6.0", - "webpack": "^5.11.0" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "webpack": "^5.11.0" } }, - "node_modules/@storybook/builder-webpack5/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@storybook/builder-webpack5/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@storybook/builder-webpack5/node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": "*" + "node": ">=12" } }, - "node_modules/@storybook/builder-webpack5/node_modules/schema-utils": { + "node_modules/@storybook/builder-webpack5/node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { "version": "3.3.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", @@ -14621,165 +12112,82 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/@storybook/builder-webpack5/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@storybook/builder-webpack5/node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=14.14" } }, - "node_modules/@storybook/channels": { - "version": "7.6.17", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/channels/-/channels-7.6.17.tgz", - "integrity": "sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==", + "node_modules/@storybook/builder-webpack5/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@storybook/client-logger": "7.6.17", - "@storybook/core-events": "7.6.17", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } + "license": "MIT" }, - "node_modules/@storybook/channels/node_modules/@storybook/core-events": { - "version": "7.6.17", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/core-events/-/core-events-7.6.17.tgz", - "integrity": "sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==", + "node_modules/@storybook/builder-webpack5/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "MIT", - "peer": true, + "license": "ISC", "dependencies": { - "ts-dedent": "^2.0.0" + "brace-expansion": "^1.1.7" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": "*" } }, - "node_modules/@storybook/client-logger": { - "version": "7.6.17", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/client-logger/-/client-logger-7.6.17.tgz", - "integrity": "sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==", + "node_modules/@storybook/builder-webpack5/node_modules/webpack-dev-middleware": { + "version": "6.1.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/webpack-dev-middleware/-/webpack-dev-middleware-6.1.3.tgz", + "integrity": "sha512-A4ChP0Qj8oGociTs6UdlRUGANIGrCDL3y+pmQMc+dSsraXHCatFpmMey4mYELA+juqwUqwQsUgJJISXl1KWmiw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@storybook/global": "^5.0.0" + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/components": { - "version": "7.6.20", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/components/-/components-7.6.20.tgz", - "integrity": "sha512-0d8u4m558R+W5V+rseF/+e9JnMciADLXTpsILrG+TBhwECk0MctIWW18bkqkujdCm8kDZr5U2iM/5kS1Noy7Ug==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/react-select": "^1.2.2", - "@radix-ui/react-toolbar": "^1.0.4", - "@storybook/client-logger": "7.6.20", - "@storybook/csf": "^0.1.2", - "@storybook/global": "^5.0.0", - "@storybook/theming": "7.6.20", - "@storybook/types": "7.6.20", - "memoizerific": "^1.11.3", - "use-resize-observer": "^9.1.0", - "util-deprecate": "^1.0.2" + "engines": { + "node": ">= 14.15.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/components/node_modules/@storybook/channels": { - "version": "7.6.20", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/channels/-/channels-7.6.20.tgz", - "integrity": "sha512-4hkgPSH6bJclB2OvLnkZOGZW1WptJs09mhQ6j6qLjgBZzL/ZdD6priWSd7iXrmPiN5TzUobkG4P4Dp7FjkiO7A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@storybook/client-logger": "7.6.20", - "@storybook/core-events": "7.6.20", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/components/node_modules/@storybook/client-logger": { - "version": "7.6.20", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/client-logger/-/client-logger-7.6.20.tgz", - "integrity": "sha512-NwG0VIJQCmKrSaN5GBDFyQgTAHLNishUPLW1NrzqTDNAhfZUoef64rPQlinbopa0H4OXmlB+QxbQIb3ubeXmSQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/components/node_modules/@storybook/types": { - "version": "7.6.20", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/types/-/types-7.6.20.tgz", - "integrity": "sha512-GncdY3x0LpbhmUAAJwXYtJDUQEwfF175gsjH0/fxPkxPoV7Sef9TM41jQLJW/5+6TnZoCZP/+aJZTJtq3ni23Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@storybook/channels": "7.6.20", - "@types/babel__core": "^7.0.0", - "@types/express": "^4.7.0", - "file-system-cache": "2.3.0" + "webpack": "^5.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "peerDependenciesMeta": { + "webpack": { + "optional": true + } } }, "node_modules/@storybook/core": { - "version": "8.3.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/core/-/core-8.3.3.tgz", - "integrity": "sha512-pmf2bP3fzh45e56gqOuBT8sDX05hGdUKIZ/hcI84d5xmd6MeHiPW8th2v946wCHcxHzxib2/UU9vQUh+mB4VNw==", + "version": "8.4.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/core/-/core-8.4.0.tgz", + "integrity": "sha512-RlvkBNPPLbHtJQ5M3SKfLLtn5GssRBOLBbJLJf8HjraeDI+YRt+J9FVXqNa9aHhOGoxam+hFinmuy9gyMbPW1A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@storybook/csf": "^0.1.11", - "@types/express": "^4.17.21", "better-opn": "^3.0.2", "browser-assert": "^1.2.1", - "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0", + "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0", "esbuild-register": "^3.5.0", - "express": "^4.19.2", "jsdoc-type-pratt-parser": "^4.0.0", "process": "^0.11.10", "recast": "^0.23.5", @@ -14790,27 +12198,20 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/core-events": { - "version": "7.6.20", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/core-events/-/core-events-7.6.20.tgz", - "integrity": "sha512-tlVDuVbDiNkvPDFAu+0ou3xBBYbx9zUURQz4G9fAq0ScgBOs/bpzcRrFb4mLpemUViBAd47tfZKdH4MAX45KVQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ts-dedent": "^2.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "peerDependencies": { + "prettier": "^2 || ^3" + }, + "peerDependenciesMeta": { + "prettier": { + "optional": true + } } }, "node_modules/@storybook/core-server": { - "version": "8.3.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/core-server/-/core-server-8.3.3.tgz", - "integrity": "sha512-irR44iQ+I5ULJ2smRIglWmia9W/ioLsYxeH7/b2kA1TiTZE3GigizWQFlGzJf20snn1OKZ3f3CVpIlqT2Rh1aw==", + "version": "8.3.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/core-server/-/core-server-8.3.5.tgz", + "integrity": "sha512-HGXGijOHh4rW9lRqt4SZQ4QGgynSvgzQPLVHBF+CRUCfatX4ryfT6dsPyCpiz8foqRtvf0UufBO0F89o/ZPalQ==", "dev": true, "license": "MIT", "funding": { @@ -14818,13 +12219,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.3" + "storybook": "^8.3.5" } }, "node_modules/@storybook/core-webpack": { - "version": "8.3.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/core-webpack/-/core-webpack-8.3.3.tgz", - "integrity": "sha512-GKEpGGe8gzf+2BCZ4PeUb5JBcLPF3TS5fRrm8Zp5+iOc8Y51xfys2ifL3KqqZR0KLig9LcLlKMnFlSXPb4a7Cw==", + "version": "8.3.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/core-webpack/-/core-webpack-8.3.5.tgz", + "integrity": "sha512-mN8BHNc6lSGUf/nKgDr6XoTt1cX+Tap9RnKMUiROCDzfVlJPeJBrG4qrTOok7AwObzeDl9DNFyun6+pVgXJe7A==", "dev": true, "license": "MIT", "dependencies": { @@ -14836,31 +12237,17 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.3" + "storybook": "^8.3.5" } }, "node_modules/@storybook/core-webpack/node_modules/@types/node": { - "version": "22.7.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/node/-/node-22.7.0.tgz", - "integrity": "sha512-MOdOibwBs6KW1vfqz2uKMlxq5xAfAZ98SZjO8e3XnAbFnTJtAspqhWk7hrdSAs9/Y14ZWMiy7/MxMUzAOadYEw==", + "version": "22.8.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/node/-/node-22.8.4.tgz", + "integrity": "sha512-SpNNxkftTJOPk0oN+y2bIqurEXHTA2AOZ3EJDDKeJ5VzkvvORSvmQXGQarcOzWV1ac7DCaPBEdMDxBsM+d8jWw==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/@storybook/core/node_modules/semver": { - "version": "7.6.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "undici-types": "~6.19.8" } }, "node_modules/@storybook/csf": { @@ -14874,9 +12261,9 @@ } }, "node_modules/@storybook/csf-plugin": { - "version": "8.3.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/csf-plugin/-/csf-plugin-8.3.3.tgz", - "integrity": "sha512-7AD7ojpXr3THqpTcEI4K7oKUfSwt1hummgL/cASuQvEPOwAZCVZl2gpGtKxcXhtJXTkn3GMCAvlYMoe7O/1YWw==", + "version": "8.3.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/csf-plugin/-/csf-plugin-8.3.5.tgz", + "integrity": "sha512-ODVqNXwJt90hG7QW8I9w/XUyOGlr0l7XltmIJgXwB/2cYDvaGu3JV5Ybg7O0fxPV8uXk7JlRuUD8ZYv5Low6pA==", "dev": true, "license": "MIT", "dependencies": { @@ -14887,7 +12274,7 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.3" + "storybook": "^8.3.5" } }, "node_modules/@storybook/global": { @@ -14911,118 +12298,29 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/manager-api": { - "version": "7.6.17", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/manager-api/-/manager-api-7.6.17.tgz", - "integrity": "sha512-IJIV1Yc6yw1dhCY4tReHCfBnUKDqEBnMyHp3mbXpsaHxnxJZrXO45WjRAZIKlQKhl/Ge1CrnznmHRCmYgqmrWg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@storybook/channels": "7.6.17", - "@storybook/client-logger": "7.6.17", - "@storybook/core-events": "7.6.17", - "@storybook/csf": "^0.1.2", - "@storybook/global": "^5.0.0", - "@storybook/router": "7.6.17", - "@storybook/theming": "7.6.17", - "@storybook/types": "7.6.17", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3", - "store2": "^2.14.2", - "telejson": "^7.2.0", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/manager-api/node_modules/@storybook/core-events": { - "version": "7.6.17", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/core-events/-/core-events-7.6.17.tgz", - "integrity": "sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/manager-api/node_modules/@storybook/theming": { - "version": "7.6.17", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/theming/-/theming-7.6.17.tgz", - "integrity": "sha512-ZbaBt3KAbmBtfjNqgMY7wPMBshhSJlhodyMNQypv+95xLD/R+Az6aBYbpVAOygLaUQaQk4ar7H/Ww6lFIoiFbA==", + "node_modules/@storybook/instrumenter": { + "version": "8.3.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/instrumenter/-/instrumenter-8.3.5.tgz", + "integrity": "sha512-NLDXai5y2t1ITgHVK9chyL0rMFZbICCOGcnTbyWhkLbiEWZKPJ8FuB8+g+Ba6zwtCve1A1Cnb4O2LOWy7TgWQw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.6.17", "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" + "@vitest/utils": "^2.0.5", + "util": "^0.12.4" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/preview-api": { - "version": "7.6.17", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/preview-api/-/preview-api-7.6.17.tgz", - "integrity": "sha512-wLfDdI9RWo1f2zzFe54yRhg+2YWyxLZvqdZnSQ45mTs4/7xXV5Wfbv3QNTtcdw8tT3U5KRTrN1mTfTCiRJc0Kw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@storybook/channels": "7.6.17", - "@storybook/client-logger": "7.6.17", - "@storybook/core-events": "7.6.17", - "@storybook/csf": "^0.1.2", - "@storybook/global": "^5.0.0", - "@storybook/types": "7.6.17", - "@types/qs": "^6.9.5", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "synchronous-promise": "^2.0.15", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/preview-api/node_modules/@storybook/core-events": { - "version": "7.6.17", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/core-events/-/core-events-7.6.17.tgz", - "integrity": "sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "storybook": "^8.3.5" } }, "node_modules/@storybook/react-dom-shim": { - "version": "8.3.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/react-dom-shim/-/react-dom-shim-8.3.3.tgz", - "integrity": "sha512-0dPC9K7+K5+X/bt3GwYmh+pCpisUyKVjWsI+PkzqGnWqaXFakzFakjswowIAIO1rf7wYZR591x3ehUAyL2bJiQ==", + "version": "8.3.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/react-dom-shim/-/react-dom-shim-8.3.5.tgz", + "integrity": "sha512-Hf0UitJ/K0C7ajooooUK/PxOR4ihUWqsC7iCV1Gqth8U37dTeLMbaEO4PBwu0VQ+Ufg0N8BJLWfg7o6G4hrODw==", "dev": true, "license": "MIT", "funding": { @@ -15032,369 +12330,115 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.3.3" - } - }, - "node_modules/@storybook/router": { - "version": "7.6.17", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/router/-/router-7.6.17.tgz", - "integrity": "sha512-GnyC0j6Wi5hT4qRhSyT8NPtJfGmf82uZw97LQRWeyYu5gWEshUdM7aj40XlNiScd5cZDp0owO1idduVF2k2l2A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@storybook/client-logger": "7.6.17", - "memoizerific": "^1.11.3", - "qs": "^6.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "storybook": "^8.3.5" } }, - "node_modules/@storybook/theming": { - "version": "7.6.20", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/theming/-/theming-7.6.20.tgz", - "integrity": "sha512-iT1pXHkSkd35JsCte6Qbanmprx5flkqtSHC6Gi6Umqoxlg9IjiLPmpHbaIXzoC06DSW93hPj5Zbi1lPlTvRC7Q==", + "node_modules/@storybook/test": { + "version": "8.3.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/test/-/test-8.3.5.tgz", + "integrity": "sha512-1BXWsUGWk9FiKKelZZ55FDJdeoL8uRBHbjTYBRM2xJLhdNSvGzI4Tb3bkmxPpGn72Ua6AyldhlTxr2BpUFKOHA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.6.20", + "@storybook/csf": "^0.1.11", "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" + "@storybook/instrumenter": "8.3.5", + "@testing-library/dom": "10.4.0", + "@testing-library/jest-dom": "6.5.0", + "@testing-library/user-event": "14.5.2", + "@vitest/expect": "2.0.5", + "@vitest/spy": "2.0.5", + "util": "^0.12.4" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/theming/node_modules/@storybook/client-logger": { - "version": "7.6.20", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/client-logger/-/client-logger-7.6.20.tgz", - "integrity": "sha512-NwG0VIJQCmKrSaN5GBDFyQgTAHLNishUPLW1NrzqTDNAhfZUoef64rPQlinbopa0H4OXmlB+QxbQIb3ubeXmSQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "storybook": "^8.3.5" } }, - "node_modules/@storybook/types": { - "version": "7.6.17", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@storybook/types/-/types-7.6.17.tgz", - "integrity": "sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==", + "node_modules/@storybook/test/node_modules/@testing-library/jest-dom": { + "version": "6.5.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@testing-library/jest-dom/-/jest-dom-6.5.0.tgz", + "integrity": "sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@storybook/channels": "7.6.17", - "@types/babel__core": "^7.0.0", - "@types/express": "^4.7.0", - "file-system-cache": "2.3.0" + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "lodash": "^4.17.21", + "redent": "^3.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@swc-node/core": { - "version": "1.13.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc-node/core/-/core-1.13.3.tgz", - "integrity": "sha512-OGsvXIid2Go21kiNqeTIn79jcaX4l0G93X2rAnas4LFoDyA9wAwVK7xZdm+QsKoMn5Mus2yFLCc4OtX2dD/PWA==", - "devOptional": true, - "license": "MIT", "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "peerDependencies": { - "@swc/core": ">= 1.4.13", - "@swc/types": ">= 0.1" - } - }, - "node_modules/@swc-node/register": { - "version": "1.9.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc-node/register/-/register-1.9.1.tgz", - "integrity": "sha512-z//TBXJdRWXoISCXlQmVz+NMm8Qm/UvcfKiGC0tSJdfeVYf5EZkGqvk2OiRH4SIJ6OGFfS9T0YrvA2pDKzWtPA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@swc-node/core": "^1.13.1", - "@swc-node/sourcemap-support": "^0.5.0", - "colorette": "^2.0.20", - "debug": "^4.3.4", - "pirates": "^4.0.6", - "tslib": "^2.6.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "peerDependencies": { - "@swc/core": ">= 1.4.13", - "typescript": ">= 4.3" + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" } }, - "node_modules/@swc-node/sourcemap-support": { - "version": "0.5.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc-node/sourcemap-support/-/sourcemap-support-0.5.1.tgz", - "integrity": "sha512-JxIvIo/Hrpv0JCHSyRpetAdQ6lB27oFYhv0PKCNf1g2gUXOjpeR1exrXccRxLMuAV5WAmGFBwRnNOJqN38+qtg==", - "devOptional": true, + "node_modules/@storybook/test/node_modules/chalk": { + "version": "3.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, "license": "MIT", "dependencies": { - "source-map-support": "^0.5.21", - "tslib": "^2.6.3" - } - }, - "node_modules/@swc/core": { - "version": "1.5.29", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/core/-/core-1.5.29.tgz", - "integrity": "sha512-nvTtHJI43DUSOAf3h9XsqYg8YXKc0/N4il9y4j0xAkO0ekgDNo+3+jbw6MInawjKJF9uulyr+f5bAutTsOKVlw==", - "devOptional": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.8" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/swc" - }, - "optionalDependencies": { - "@swc/core-darwin-arm64": "1.5.29", - "@swc/core-darwin-x64": "1.5.29", - "@swc/core-linux-arm-gnueabihf": "1.5.29", - "@swc/core-linux-arm64-gnu": "1.5.29", - "@swc/core-linux-arm64-musl": "1.5.29", - "@swc/core-linux-x64-gnu": "1.5.29", - "@swc/core-linux-x64-musl": "1.5.29", - "@swc/core-win32-arm64-msvc": "1.5.29", - "@swc/core-win32-ia32-msvc": "1.5.29", - "@swc/core-win32-x64-msvc": "1.5.29" - }, - "peerDependencies": { - "@swc/helpers": "*" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependenciesMeta": { - "@swc/helpers": { - "optional": true - } - } - }, - "node_modules/@swc/core-darwin-arm64": { - "version": "1.5.29", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/core-darwin-arm64/-/core-darwin-arm64-1.5.29.tgz", - "integrity": "sha512-6F/sSxpHaq3nzg2ADv9FHLi4Fu2A8w8vP8Ich8gIl16D2htStlwnaPmCLjRswO+cFkzgVqy/l01gzNGWd4DFqA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-darwin-x64": { - "version": "1.5.29", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/core-darwin-x64/-/core-darwin-x64-1.5.29.tgz", - "integrity": "sha512-rF/rXkvUOTdTIfoYbmszbSUGsCyvqACqy1VeP3nXONS+LxFl4bRmRcUTRrblL7IE5RTMCKUuPbqbQSE2hK7bqg==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.5.29", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.5.29.tgz", - "integrity": "sha512-2OAPL8iWBsmmwkjGXqvuUhbmmoLxS1xNXiMq87EsnCNMAKohGc7wJkdAOUL6J/YFpean/vwMWg64rJD4pycBeg==", - "cpu": [ - "arm" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.5.29", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.5.29.tgz", - "integrity": "sha512-eH/Q9+8O5qhSxMestZnhuS1xqQMr6M7SolZYxiXJqxArXYILLCF+nq2R9SxuMl0CfjHSpb6+hHPk/HXy54eIRA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.5.29", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.5.29.tgz", - "integrity": "sha512-TERh2OICAJz+SdDIK9+0GyTUwF6r4xDlFmpoiHKHrrD/Hh3u+6Zue0d7jQ/he/i80GDn4tJQkHlZys+RZL5UZg==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.5.29", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.5.29.tgz", - "integrity": "sha512-WMDPqU7Ji9dJpA+Llek2p9t7pcy7Bob8ggPUvgsIlv3R/eesF9DIzSbrgl6j3EAEPB9LFdSafsgf6kT/qnvqFg==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-musl": { - "version": "1.5.29", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.5.29.tgz", - "integrity": "sha512-DO14glwpdKY4POSN0201OnGg1+ziaSVr6/RFzuSLggshwXeeyVORiHv3baj7NENhJhWhUy3NZlDsXLnRFkmhHQ==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.5.29", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.5.29.tgz", - "integrity": "sha512-V3Y1+a1zG1zpYXUMqPIHEMEOd+rHoVnIpO/KTyFwAmKVu8v+/xPEVx/AGoYE67x4vDAAvPQrKI3Aokilqa5yVg==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.5.29", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.5.29.tgz", - "integrity": "sha512-OrM6yfXw4wXhnVFosOJzarw0Fdz5Y0okgHfn9oFbTPJhoqxV5Rdmd6kXxWu2RiVKs6kGSJFZXHDeUq2w5rTIMg==", - "cpu": [ - "ia32" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.5.29", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.5.29.tgz", - "integrity": "sha512-eD/gnxqKyZQQR0hR7TMkIlJ+nCF9dzYmVVNbYZWuA1Xy94aBPUsEk3Uw3oG7q6R3ErrEUPP0FNf2ztEnv+I+dw==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "devOptional": true, - "license": "Apache-2.0" + "node_modules/@storybook/test/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true, + "license": "MIT" }, "node_modules/@swc/helpers": { "version": "0.5.13", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/helpers/-/helpers-0.5.13.tgz", "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "peer": true, "dependencies": { "tslib": "^2.4.0" } }, - "node_modules/@swc/types": { - "version": "0.1.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/types/-/types-0.1.12.tgz", - "integrity": "sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==", - "devOptional": true, - "license": "Apache-2.0", + "node_modules/@testing-library/dom": { + "version": "10.4.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@testing-library/dom/-/dom-10.4.0.tgz", + "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", + "dev": true, + "license": "MIT", "dependencies": { - "@swc/counter": "^0.1.3" + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" } }, "node_modules/@testing-library/jest-dom": { - "version": "6.4.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@testing-library/jest-dom/-/jest-dom-6.4.5.tgz", - "integrity": "sha512-AguB9yvTXmCnySBP1lWjfNNUwpbElsaQ567lt2VdGqAdHtpieLgjmcVyv1q7PMIvLbgpDdkWV5Ydv3FEejyp2A==", + "version": "6.6.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@testing-library/jest-dom/-/jest-dom-6.6.2.tgz", + "integrity": "sha512-P6GJD4yqc9jZLbe98j/EkyQDTPgqftohZF5FBkHY5BUERZmcf4HeO2k0XaefEg329ux2p21i1A1DmyQ1kKw2Jw==", "dev": true, "license": "MIT", "dependencies": { - "@adobe/css-tools": "^4.3.2", - "@babel/runtime": "^7.9.2", + "@adobe/css-tools": "^4.4.0", "aria-query": "^5.0.0", "chalk": "^3.0.0", "css.escape": "^1.5.1", @@ -15406,46 +12450,6 @@ "node": ">=14", "npm": ">=6", "yarn": ">=1" - }, - "peerDependencies": { - "@jest/globals": ">= 28", - "@types/bun": "latest", - "@types/jest": ">= 28", - "jest": ">= 28", - "vitest": ">= 0.32" - }, - "peerDependenciesMeta": { - "@jest/globals": { - "optional": true - }, - "@types/bun": { - "optional": true - }, - "@types/jest": { - "optional": true - }, - "jest": { - "optional": true - }, - "vitest": { - "optional": true - } - } - }, - "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@testing-library/jest-dom/node_modules/chalk": { @@ -15462,27 +12466,25 @@ "node": ">=8" } }, - "node_modules/@testing-library/jest-dom/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/@testing-library/jest-dom/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@testing-library/user-event": { + "version": "14.5.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@testing-library/user-event/-/user-event-14.5.2.tgz", + "integrity": "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" } }, "node_modules/@tootallnate/once": { @@ -15568,6 +12570,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", + "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -15651,26 +12669,6 @@ "@types/node": "*" } }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { "version": "1.0.6", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/estree/-/estree-1.0.6.tgz", @@ -15690,9 +12688,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.19.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", - "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "version": "4.19.6", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", "license": "MIT", "dependencies": { "@types/node": "*", @@ -15775,9 +12773,9 @@ } }, "node_modules/@types/jest": { - "version": "29.4.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/jest/-/jest-29.4.4.tgz", - "integrity": "sha512-qezb65VIH7X1wobSnd6Lvdve7PXSyQRa3dljTkhTtDhi603RvHQCshSlJcuyMLHJpeHgY3NKwvDJWxMOOHxGDQ==", + "version": "29.5.13", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/jest/-/jest-29.5.13.tgz", + "integrity": "sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg==", "dev": true, "license": "MIT", "dependencies": { @@ -15785,6 +12783,41 @@ "pretty-format": "^29.0.0" } }, + "node_modules/@types/jest/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/react-is": { + "version": "18.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/jsdom": { "version": "20.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/jsdom/-/jsdom-20.0.1.tgz", @@ -15811,9 +12844,9 @@ "license": "MIT" }, "node_modules/@types/lodash": { - "version": "4.17.9", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/lodash/-/lodash-4.17.9.tgz", - "integrity": "sha512-w9iWudx1XWOHW5lQRS9iKpK/XuRhnN+0T7HvdCCd802FYkT1AMTnxndJHGrNJwRoRHkslGr4S29tjm1cT7x/7w==", + "version": "4.17.13", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/lodash/-/lodash-4.17.13.tgz", + "integrity": "sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==", "dev": true, "license": "MIT" }, @@ -15840,10 +12873,19 @@ "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "license": "MIT" }, + "node_modules/@types/mute-stream": { + "version": "0.0.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/mute-stream/-/mute-stream-0.0.4.tgz", + "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/node": { - "version": "20.16.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/node/-/node-20.16.7.tgz", - "integrity": "sha512-QkDQjAY3gkvJNcZOWwzy3BN34RweT0OQ9zJyvLCU0kSK22dO2QYh/NHGfbEAYylPYzRB1/iXcojS79wOg5gFSw==", + "version": "20.17.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/node/-/node-20.17.3.tgz", + "integrity": "sha512-tSQrmKKatLDGnG92h40GD7FzUt0MjahaHwOME4VAFeeA/Xopayq5qLyQRy7Jg/pjgKIFBXuKcGhJo+UdYG55jQ==", "license": "MIT", "dependencies": { "undici-types": "~6.19.2" @@ -15884,9 +12926,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.9", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/react/-/react-18.3.9.tgz", - "integrity": "sha512-+BpAVyTpJkNWWSSnaLBk6ePpHLOGJKnEQNbINNovPWzvEUyAe3e+/d494QdEh71RekM/qV7lw6jzf1HGrJyAtQ==", + "version": "18.3.12", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", "dev": true, "license": "MIT", "dependencies": { @@ -15895,9 +12937,9 @@ } }, "node_modules/@types/react-dom": { - "version": "18.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/react-dom/-/react-dom-18.3.0.tgz", - "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "version": "18.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15912,16 +12954,15 @@ "license": "MIT" }, "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "version": "0.12.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", "license": "MIT" }, "node_modules/@types/semver": { "version": "7.5.8", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/semver/-/semver-7.5.8.tgz", "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true, "license": "MIT" }, "node_modules/@types/send": { @@ -15962,9 +13003,9 @@ "license": "MIT" }, "node_modules/@types/sizzle": { - "version": "2.3.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/sizzle/-/sizzle-2.3.8.tgz", - "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==", + "version": "2.3.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/sizzle/-/sizzle-2.3.9.tgz", + "integrity": "sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==", "dev": true, "license": "MIT" }, @@ -16044,6 +13085,12 @@ "@types/webidl-conversions": "*" } }, + "node_modules/@types/wrap-ansi": { + "version": "3.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", + "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==", + "license": "MIT" + }, "node_modules/@types/ws": { "version": "8.5.12", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/ws/-/ws-8.5.12.tgz", @@ -16080,17 +13127,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.10.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.10.0.tgz", - "integrity": "sha512-PzCr+a/KAef5ZawX7nbyNwBDtM1HdLIT53aSA2DDlxmxMngZ43O8SIePOeX8H5S+FHXeI6t97mTt/dDdzY4Fyw==", + "version": "7.18.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.10.0", - "@typescript-eslint/type-utils": "7.10.0", - "@typescript-eslint/utils": "7.10.0", - "@typescript-eslint/visitor-keys": "7.10.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -16114,14 +13161,14 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { - "version": "7.10.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/type-utils/-/type-utils-7.10.0.tgz", - "integrity": "sha512-D7tS4WDkJWrVkuzgm90qYw9RdgBcrWmbbRkrLA4d7Pg3w0ttVGDsvYGV19SH8gPR5L7OtcN5J1hTtyenO9xE9g==", + "version": "7.18.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.10.0", - "@typescript-eslint/utils": "7.10.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -16141,40 +13188,17 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "7.10.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/utils/-/utils-7.10.0.tgz", - "integrity": "sha512-olzif1Fuo8R8m/qKkzJqT7qwy16CzPRWBvERS0uvyc+DHd8AKbO4Jb7kpAvVzMmZm8TrHnI7hvjN4I05zow+tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.10.0", - "@typescript-eslint/types": "7.10.0", - "@typescript-eslint/typescript-estree": "7.10.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, "node_modules/@typescript-eslint/parser": { - "version": "7.10.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/parser/-/parser-7.10.0.tgz", - "integrity": "sha512-2EjZMA0LUW5V5tGQiaa2Gys+nKdfrn2xiTIBLR4fxmPmVSvgPcKNW+AE/ln9k0A4zDUti0J/GZXMDupQoI+e1w==", + "version": "7.18.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "7.10.0", - "@typescript-eslint/types": "7.10.0", - "@typescript-eslint/typescript-estree": "7.10.0", - "@typescript-eslint/visitor-keys": "7.10.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4" }, "engines": { @@ -16194,14 +13218,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.10.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/scope-manager/-/scope-manager-7.10.0.tgz", - "integrity": "sha512-7L01/K8W/VGl7noe2mgH0K7BE29Sq6KAbVmxurj8GGaPDZXPr8EEQ2seOeAS+mEV9DnzxBQB6ax6qQQ5C6P4xg==", + "version": "7.18.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.10.0", - "@typescript-eslint/visitor-keys": "7.10.0" + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -16212,41 +13236,53 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz", - "integrity": "sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==", - "dev": true, + "version": "8.12.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/type-utils/-/type-utils-8.12.2.tgz", + "integrity": "sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==", "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.2.0", - "@typescript-eslint/utils": "7.2.0", + "@typescript-eslint/typescript-estree": "8.12.2", + "@typescript-eslint/utils": "8.12.2", "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependencies": { - "eslint": "^8.56.0" - }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { + "version": "8.12.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/scope-manager/-/scope-manager-8.12.2.tgz", + "integrity": "sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/types/-/types-7.2.0.tgz", - "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", - "dev": true, + "version": "8.12.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/types/-/types-8.12.2.tgz", + "integrity": "sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==", "license": "MIT", "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -16254,23 +13290,22 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", - "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", - "dev": true, + "version": "8.12.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/typescript-estree/-/typescript-estree-8.12.2.tgz", + "integrity": "sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==", "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -16282,28 +13317,64 @@ } } }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { + "version": "8.12.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/utils/-/utils-8.12.2.tgz", + "integrity": "sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==", + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/typescript-estree": "8.12.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", - "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", - "dev": true, + "version": "8.12.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/visitor-keys/-/visitor-keys-8.12.2.tgz", + "integrity": "sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.2.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "8.12.2", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@typescript-eslint/types": { - "version": "7.10.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/types/-/types-7.10.0.tgz", - "integrity": "sha512-7fNj+Ya35aNyhuqrA1E/VayQX9Elwr8NKZ4WueClR3KwJ7Xx9jcCdOrLW04h51de/+gNbyFMs+IDxh5xIwfbNg==", + "version": "7.18.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", "dev": true, "license": "MIT", "engines": { @@ -16315,14 +13386,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.10.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/typescript-estree/-/typescript-estree-7.10.0.tgz", - "integrity": "sha512-LXFnQJjL9XIcxeVfqmNj60YhatpRLt6UhdlFwAkjNc6jSUlK8zQOl1oktAP8PlWFzPQC1jny/8Bai3/HPuvN5g==", + "version": "7.18.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "7.10.0", - "@typescript-eslint/visitor-keys": "7.10.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -16360,22 +13431,19 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/utils/-/utils-7.2.0.tgz", - "integrity": "sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==", + "version": "7.18.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/typescript-estree": "7.2.0", - "semver": "^7.5.4" + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -16385,119 +13453,136 @@ "eslint": "^8.56.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", - "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0" + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/types/-/types-7.2.0.tgz", - "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", - "dev": true, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "license": "ISC" + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", + "integrity": "sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==", "license": "MIT", "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=14.6.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", - "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", + "node_modules/@vitest/expect": { + "version": "2.0.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@vitest/expect/-/expect-2.0.5.tgz", + "integrity": "sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" + "@vitest/spy": "2.0.5", + "@vitest/utils": "2.0.5", + "chai": "^5.1.1", + "tinyrainbow": "^1.2.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://opencollective.com/vitest" } }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", - "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", + "node_modules/@vitest/expect/node_modules/@vitest/pretty-format": { + "version": "2.0.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@vitest/pretty-format/-/pretty-format-2.0.5.tgz", + "integrity": "sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.2.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" + "tinyrainbow": "^1.2.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://opencollective.com/vitest" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.10.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/visitor-keys/-/visitor-keys-7.10.0.tgz", - "integrity": "sha512-9ntIVgsi6gg6FIq9xjEO4VQJvwOqA3jaBFQJ/6TK5AvEup2+cECI6Fh7QiBxmfMHXU0V0J4RyPeOU1VDNzl9cg==", + "node_modules/@vitest/expect/node_modules/@vitest/utils": { + "version": "2.0.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@vitest/utils/-/utils-2.0.5.tgz", + "integrity": "sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.10.0", - "eslint-visitor-keys": "^3.4.3" + "@vitest/pretty-format": "2.0.5", + "estree-walker": "^3.0.3", + "loupe": "^3.1.1", + "tinyrainbow": "^1.2.0" }, - "engines": { - "node": "^18.18.0 || >=20.0.0" + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/expect/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "2.1.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@vitest/pretty-format/-/pretty-format-2.1.4.tgz", + "integrity": "sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^1.2.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://opencollective.com/vitest" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "license": "ISC" + "node_modules/@vitest/spy": { + "version": "2.0.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@vitest/spy/-/spy-2.0.5.tgz", + "integrity": "sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } }, - "node_modules/@vitejs/plugin-basic-ssl": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", - "integrity": "sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==", + "node_modules/@vitest/utils": { + "version": "2.1.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@vitest/utils/-/utils-2.1.4.tgz", + "integrity": "sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=14.6.0" + "dependencies": { + "@vitest/pretty-format": "2.1.4", + "loupe": "^3.1.2", + "tinyrainbow": "^1.2.0" }, - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + "funding": { + "url": "https://opencollective.com/vitest" } }, "node_modules/@webassemblyjs/ast": { @@ -16803,9 +13888,9 @@ } }, "node_modules/@zkochan/js-yaml": { - "version": "0.0.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", - "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", + "version": "0.0.7", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz", + "integrity": "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==", "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -16825,6 +13910,7 @@ "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/abab/-/abab-2.0.6.tgz", "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", "deprecated": "Use your platform's native atob() and btoa() methods instead", + "devOptional": true, "license": "BSD-3-Clause" }, "node_modules/abbrev": { @@ -16851,9 +13937,9 @@ } }, "node_modules/acorn": { - "version": "8.12.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "version": "8.14.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -16873,15 +13959,6 @@ "acorn-walk": "^8.0.2" } }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "license": "MIT", - "peerDependencies": { - "acorn": "^8" - } - }, "node_modules/acorn-import-attributes": { "version": "1.9.5", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", @@ -16949,13 +14026,12 @@ } }, "node_modules/adm-zip": { - "version": "0.5.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/adm-zip/-/adm-zip-0.5.12.tgz", - "integrity": "sha512-6TVU49mK6KZb4qG6xWaaM4C7sA/sgUMLy/JYMOzkcp3BvVLpW0fXDFQiIzAuxFCt/2+xD7fNIiPFAoLZPhVNLQ==", - "dev": true, + "version": "0.5.16", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/adm-zip/-/adm-zip-0.5.16.tgz", + "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", "license": "MIT", "engines": { - "node": ">=6.0" + "node": ">=12.0" } }, "node_modules/agent-base": { @@ -16985,15 +14061,15 @@ } }, "node_modules/ajv": { - "version": "8.12.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.17.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -17011,9 +14087,9 @@ } }, "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "version": "3.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", "license": "MIT", "dependencies": { "ajv": "^8.0.0" @@ -17111,45 +14187,29 @@ } }, "node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "devOptional": true, + "version": "5.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=8" } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-styles/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ansi-styles/node_modules/color-name": { - "version": "1.1.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" - }, "node_modules/any-promise": { "version": "1.3.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/any-promise/-/any-promise-1.3.0.tgz", @@ -17226,20 +14286,6 @@ "sprintf-js": "~1.0.2" } }, - "node_modules/aria-hidden": { - "version": "1.2.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/aria-hidden/-/aria-hidden-1.2.4.tgz", - "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/aria-query": { "version": "5.3.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/aria-query/-/aria-query-5.3.0.tgz", @@ -17280,23 +14326,6 @@ "node": ">=0.10.0" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/array-flatten/-/array-flatten-1.1.1.tgz", @@ -17307,6 +14336,7 @@ "version": "2.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -17389,6 +14419,16 @@ "inherits": "2.0.3" } }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, "node_modules/assign-symbols": { "version": "1.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -17405,7 +14445,6 @@ "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.0.1" }, @@ -17453,7 +14492,6 @@ "version": "1.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, "license": "ISC", "engines": { "node": ">= 4.0.0" @@ -17553,22 +14591,23 @@ "proxy-from-env": "^1.1.0" } }, - "node_modules/axios/node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" - }, "node_modules/axobject-query": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/axobject-query/-/axobject-query-4.0.0.tgz", - "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", + "version": "4.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", "dev": true, "license": "Apache-2.0", - "dependencies": { - "dequal": "^2.0.3" + "engines": { + "node": ">= 0.4" } }, + "node_modules/b4a": { + "version": "1.6.7", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/babel-jest/-/babel-jest-29.7.0.tgz", @@ -17591,62 +14630,6 @@ "@babel/core": "^7.8.0" } }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/babel-loader": { "version": "9.2.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/babel-loader/-/babel-loader-9.2.1.tgz", @@ -17802,6 +14785,7 @@ "version": "6.1.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "devOptional": true, "license": "BSD-3-Clause", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", @@ -17818,6 +14802,7 @@ "version": "5.2.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "devOptional": true, "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", @@ -17834,6 +14819,7 @@ "version": "6.3.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "devOptional": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -17890,57 +14876,25 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.9.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", - "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0", - "core-js-compat": "^3.34.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "version": "0.10.6", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", - "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "version": "0.6.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "@babel/helper-define-polyfill-provider": "^0.6.2" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -18005,6 +14959,14 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, + "node_modules/bare-events": { + "version": "2.5.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/bare-events/-/bare-events-2.5.0.tgz", + "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", + "dev": true, + "license": "Apache-2.0", + "optional": true + }, "node_modules/base": { "version": "0.11.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/base/-/base-0.11.2.tgz", @@ -18104,7 +15066,6 @@ "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "open": "^8.0.4" }, @@ -18112,6 +15073,63 @@ "node": ">=12.0.0" } }, + "node_modules/better-opn/node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/better-opn/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/better-opn/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/better-opn/node_modules/open": { + "version": "8.4.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/big.js": { "version": "5.2.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/big.js/-/big.js-5.2.2.tgz", @@ -18322,14 +15340,18 @@ } }, "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "version": "4.1.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/browserify-rsa/-/browserify-rsa-4.1.1.tgz", + "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", "dev": true, "license": "MIT", "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" + "bn.js": "^5.2.1", + "randombytes": "^2.1.0", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" } }, "node_modules/browserify-sign": { @@ -18354,13 +15376,6 @@ "node": ">= 0.12" } }, - "node_modules/browserify-sign/node_modules/isarray": { - "version": "1.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, "node_modules/browserify-sign/node_modules/readable-stream": { "version": "2.3.8", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/readable-stream/-/readable-stream-2.3.8.tgz", @@ -18412,9 +15427,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/browserslist/-/browserslist-4.24.0.tgz", - "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", + "version": "4.24.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", "funding": [ { "type": "opencollective", @@ -18431,10 +15446,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001663", - "electron-to-chromium": "^1.5.28", + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -18479,6 +15494,18 @@ "node": ">=6.9.0" } }, + "node_modules/btoa": { + "version": "1.2.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", + "license": "(MIT OR Apache-2.0)", + "bin": { + "btoa": "bin/btoa.js" + }, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/buffer": { "version": "5.7.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/buffer/-/buffer-5.7.1.tgz", @@ -18507,6 +15534,7 @@ "version": "1.2.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/buffer-alloc/-/buffer-alloc-1.2.0.tgz", "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, "license": "MIT", "dependencies": { "buffer-alloc-unsafe": "^1.1.0", @@ -18517,12 +15545,14 @@ "version": "1.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true, "license": "MIT" }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, "license": "MIT", "engines": { "node": "*" @@ -18532,6 +15562,7 @@ "version": "1.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/buffer-fill/-/buffer-fill-1.0.0.tgz", "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "dev": true, "license": "MIT" }, "node_modules/buffer-from": { @@ -18554,6 +15585,21 @@ "dev": true, "license": "MIT" }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/bytes/-/bytes-3.1.2.tgz", @@ -18652,6 +15698,19 @@ "node": ">=0.10.0" } }, + "node_modules/cache-content-type": { + "version": "1.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/cache-content-type/-/cache-content-type-1.0.1.tgz", + "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", + "license": "MIT", + "dependencies": { + "mime-types": "^2.1.18", + "ylru": "^1.2.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/cachedir": { "version": "2.4.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/cachedir/-/cachedir-2.4.0.tgz", @@ -18705,6 +15764,7 @@ "version": "5.3.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" @@ -18742,9 +15802,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001663", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz", - "integrity": "sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==", + "version": "1.0.30001675", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/caniuse-lite/-/caniuse-lite-1.0.30001675.tgz", + "integrity": "sha512-/wV1bQwPrkLiQMjaJF5yUMVM/VdRPOCU8QZ+PmG6uW6DvYSrNY1bpwHI/3mOcUosLaJCzYDi5o91IQB51ft6cg==", "funding": [ { "type": "opencollective", @@ -18778,18 +15838,37 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/chai": { + "version": "5.1.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/chalk": { - "version": "2.4.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/char-regex": { @@ -18806,8 +15885,19 @@ "version": "0.7.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true, "license": "MIT" }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, "node_modules/check-more-types": { "version": "2.24.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/check-more-types/-/check-more-types-2.24.0.tgz", @@ -18842,6 +15932,18 @@ "fsevents": "~2.3.2" } }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/chownr": { "version": "2.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chownr/-/chownr-2.0.0.tgz", @@ -18853,9 +15955,9 @@ } }, "node_modules/chromatic": { - "version": "11.10.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chromatic/-/chromatic-11.10.4.tgz", - "integrity": "sha512-nfgDpW5gQ4FtgV1lZXXfqLjONKDCh2K4vwI3dbZrtU1ObOL9THyAzpIdnK9LRcNSeisDLX+XFCryfMg1Ql2U2g==", + "version": "11.16.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chromatic/-/chromatic-11.16.3.tgz", + "integrity": "sha512-bckarRbZ3M1BvsmhLqEMschuQPk2FlSD9cvy8383JwoVvaIqLr0dv1tI/DPM4LMuXOjTjeBSZZINVH9r3RMiiA==", "dev": true, "license": "MIT", "bin": { @@ -19048,17 +16150,39 @@ } }, "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, + "version": "4.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", "license": "MIT", "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "license": "MIT" + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "7.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -19087,30 +16211,6 @@ "node": ">=12" } }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/cliui/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -19176,7 +16276,6 @@ "version": "4.6.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "devOptional": true, "license": "MIT", "engines": { "iojs": ">= 1.0.0", @@ -19277,16 +16376,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "license": "ISC", - "bin": { - "color-support": "bin.js" - } - }, "node_modules/colord": { "version": "2.9.3", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/colord/-/colord-2.9.3.tgz", @@ -19312,15 +16401,6 @@ "node": ">=8.0.0" } }, - "node_modules/columnify/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/columnify/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -19469,13 +16549,6 @@ "typedarray": "^0.0.6" } }, - "node_modules/concat-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, "node_modules/concat-stream/node_modules/readable-stream": { "version": "2.3.8", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/readable-stream/-/readable-stream-2.3.8.tgz", @@ -19566,9 +16639,9 @@ "license": "MIT" }, "node_modules/cookie": { - "version": "0.6.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -19580,6 +16653,19 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "license": "MIT" }, + "node_modules/cookies": { + "version": "0.9.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/cookies/-/cookies-0.9.1.tgz", + "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "keygrip": "~1.1.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/copy-anything": { "version": "2.0.6", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/copy-anything/-/copy-anything-2.0.6.tgz", @@ -19646,20 +16732,20 @@ } }, "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "version": "12.0.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz", + "integrity": "sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==", "license": "MIT", "dependencies": { - "fast-glob": "^3.2.11", + "fast-glob": "^3.3.2", "glob-parent": "^6.0.1", - "globby": "^13.1.1", + "globby": "^14.0.0", "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" + "schema-utils": "^4.2.0", + "serialize-javascript": "^6.0.2" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", @@ -19669,44 +16755,45 @@ "webpack": "^5.1.0" } }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "14.0.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/globby/-/globby-14.0.2.tgz", + "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.3" + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.2.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "node_modules/copy-webpack-plugin/node_modules/path-type": { + "version": "5.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", "license": "MIT", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/copy-webpack-plugin/node_modules/slash": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "version": "5.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "license": "MIT", "engines": { - "node": ">=12" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -19837,62 +16924,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/create-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/create-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/create-jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/create-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/create-require": { "version": "1.1.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/create-require/-/create-require-1.1.1.tgz", @@ -19900,9 +16931,10 @@ "license": "MIT" }, "node_modules/critters": { - "version": "0.0.22", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/critters/-/critters-0.0.22.tgz", - "integrity": "sha512-NU7DEcQZM2Dy8XTKFHxtdnIM/drE312j2T4PCVaSUcS0oBeyT/NImpRw/Ap0zOr/1SE7SgPK9tGPg1WK/sVakw==", + "version": "0.0.24", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/critters/-/critters-0.0.24.tgz", + "integrity": "sha512-Oyqew0FGM0wYUSNqR0L6AteO5MpMoUU0rhKRieXeiKs+PmRTxiJMyaunYB2KF6fQ3dzChXKCpbFOEJx3OQ1v/Q==", + "deprecated": "Ownership of Critters has moved to the Nuxt team, who will be maintaining the project going forward. If you'd like to keep using Critters, please switch to the actively-maintained fork at https://github.com/danielroe/beasties", "license": "Apache-2.0", "dependencies": { "chalk": "^4.1.0", @@ -19914,56 +16946,16 @@ "postcss-media-query-parser": "^0.2.3" } }, - "node_modules/critters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/critters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/cron-parser": { + "version": "4.9.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/cron-parser/-/cron-parser-4.9.0.tgz", + "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "luxon": "^3.2.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/critters/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/critters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node": ">=12.0.0" } }, "node_modules/cross-spawn": { @@ -20003,25 +16995,6 @@ "node": "*" } }, - "node_modules/css-blank-pseudo": { - "version": "3.0.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", - "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "bin": { - "css-blank-pseudo": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, "node_modules/css-declaration-sorter": { "version": "7.2.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", @@ -20034,42 +17007,23 @@ "postcss": "^8.0.9" } }, - "node_modules/css-has-pseudo": { - "version": "3.0.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", - "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "bin": { - "css-has-pseudo": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, "node_modules/css-loader": { - "version": "6.10.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/css-loader/-/css-loader-6.10.0.tgz", - "integrity": "sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==", + "version": "7.1.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/css-loader/-/css-loader-7.1.2.tgz", + "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", "license": "MIT", "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.4", - "postcss-modules-scope": "^3.1.1", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", "semver": "^7.5.4" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", @@ -20077,7 +17031,7 @@ }, "peerDependencies": { "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" + "webpack": "^5.27.0" }, "peerDependenciesMeta": { "@rspack/core": { @@ -20132,22 +17086,6 @@ } } }, - "node_modules/css-prefers-color-scheme": { - "version": "6.0.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", - "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", - "dev": true, - "license": "CC0-1.0", - "bin": { - "css-prefers-color-scheme": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, "node_modules/css-select": { "version": "5.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/css-select/-/css-select-5.1.0.tgz", @@ -20196,23 +17134,6 @@ "dev": true, "license": "MIT" }, - "node_modules/cssdb": { - "version": "7.11.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/cssdb/-/cssdb-7.11.2.tgz", - "integrity": "sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - } - ], - "license": "CC0-1.0" - }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/cssesc/-/cssesc-3.0.0.tgz", @@ -20375,13 +17296,6 @@ "dev": true, "license": "MIT" }, - "node_modules/cuint": { - "version": "0.2.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", - "dev": true, - "license": "MIT" - }, "node_modules/cyclist": { "version": "1.0.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/cyclist/-/cyclist-1.0.2.tgz", @@ -20390,22 +17304,21 @@ "license": "MIT" }, "node_modules/cypress": { - "version": "13.6.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/cypress/-/cypress-13.6.2.tgz", - "integrity": "sha512-TW3bGdPU4BrfvMQYv1z3oMqj71YI4AlgJgnrycicmPZAXtvywVFZW9DAToshO65D97rCWfG/kqMFsYB6Kp91gQ==", + "version": "13.15.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/cypress/-/cypress-13.15.1.tgz", + "integrity": "sha512-DwUFiKXo4lef9kA0M4iEhixFqoqp2hw8igr0lTqafRb9qtU3X0XGxKbkSYsUFdkrAkphc7MPDxoNPhk5pj9PVg==", "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { - "@cypress/request": "^3.0.0", + "@cypress/request": "^3.0.4", "@cypress/xvfb": "^1.2.4", - "@types/node": "^18.17.5", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", "arch": "^2.2.0", "blob-util": "^2.0.2", "bluebird": "^3.7.2", - "buffer": "^5.6.0", + "buffer": "^5.7.1", "cachedir": "^2.3.0", "chalk": "^4.1.0", "check-more-types": "^2.24.0", @@ -20423,7 +17336,7 @@ "figures": "^3.2.0", "fs-extra": "^9.1.0", "getos": "^3.2.1", - "is-ci": "^3.0.0", + "is-ci": "^3.0.1", "is-installed-globally": "~0.4.0", "lazy-ass": "^1.6.0", "listr2": "^3.8.3", @@ -20437,7 +17350,8 @@ "request-progress": "^3.0.0", "semver": "^7.5.3", "supports-color": "^8.1.1", - "tmp": "~0.2.1", + "tmp": "~0.2.3", + "tree-kill": "1.2.2", "untildify": "^4.0.0", "yauzl": "^2.10.0" }, @@ -20532,91 +17446,154 @@ "format-duration": "^2.0.0" } }, - "node_modules/cypress/node_modules/@types/node": { - "version": "18.19.51", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/node/-/node-18.19.51.tgz", - "integrity": "sha512-IIMkWEIVQDlBpi6pPeGqTqOx7KbzGC3EgIyH8NrxplXOwWw0uVl9vthJUMFrxD7kcEfcRp7jIkgpB28M6JnfWA==", + "node_modules/cypress/node_modules/bluebird": { + "version": "3.7.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } + "license": "MIT" }, - "node_modules/cypress/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/cypress/node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" }, "engines": { "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cypress/node_modules/bluebird": { - "version": "3.7.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "node_modules/cypress/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/cypress/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/cypress/node_modules/listr2": { + "version": "3.14.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/cypress/node_modules/listr2/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/cypress/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/cypress/node_modules/log-update": { + "version": "4.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cypress/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/cypress/node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "license": "MIT", "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/cypress/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/cypress/node_modules/proxy-from-env": { + "version": "1.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cypress/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { "node": ">=8" } @@ -20637,13 +17614,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/cypress/node_modules/undici-types": { - "version": "5.26.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true, - "license": "MIT" - }, "node_modules/dashdash": { "version": "1.14.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/dashdash/-/dashdash-1.14.1.tgz", @@ -20688,6 +17658,15 @@ "url": "https://opencollective.com/date-fns" } }, + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, "node_modules/dateformat": { "version": "4.6.3", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/dateformat/-/dateformat-4.6.3.tgz", @@ -20757,6 +17736,7 @@ "version": "4.2.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/decompress/-/decompress-4.2.1.tgz", "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "dev": true, "license": "MIT", "dependencies": { "decompress-tar": "^4.0.0", @@ -20776,6 +17756,7 @@ "version": "4.1.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/decompress-tar/-/decompress-tar-4.1.1.tgz", "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "dev": true, "license": "MIT", "dependencies": { "file-type": "^5.2.0", @@ -20790,6 +17771,7 @@ "version": "4.1.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "dev": true, "license": "MIT", "dependencies": { "decompress-tar": "^4.1.0", @@ -20806,6 +17788,7 @@ "version": "6.2.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/file-type/-/file-type-6.2.0.tgz", "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -20815,6 +17798,7 @@ "version": "4.1.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/decompress-targz/-/decompress-targz-4.1.1.tgz", "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "dev": true, "license": "MIT", "dependencies": { "decompress-tar": "^4.1.1", @@ -20829,6 +17813,7 @@ "version": "4.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/decompress-unzip/-/decompress-unzip-4.0.1.tgz", "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", + "dev": true, "license": "MIT", "dependencies": { "file-type": "^3.8.0", @@ -20844,44 +17829,28 @@ "version": "3.9.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/file-type/-/file-type-3.9.0.tgz", "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/deep-equal": { - "version": "2.2.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/deep-equal/-/deep-equal-2.2.3.tgz", - "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", "dev": true, "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.5", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.2", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.13" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, + "node_modules/deep-equal": { + "version": "1.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==", + "license": "MIT" + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/deep-is/-/deep-is-0.1.4.tgz", @@ -20897,6 +17866,34 @@ "node": ">=0.10.0" } }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/default-gateway": { "version": "6.0.3", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/default-gateway/-/default-gateway-6.0.3.tgz", @@ -20965,6 +17962,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/default-gateway/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, "node_modules/defaults": { "version": "1.0.4", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/defaults/-/defaults-1.0.4.tgz", @@ -20995,12 +17998,15 @@ } }, "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "version": "3.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/define-properties": { @@ -21044,6 +18050,12 @@ "node": ">=0.4.0" } }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "license": "MIT" + }, "node_modules/depd": { "version": "2.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/depd/-/depd-2.0.0.tgz", @@ -21101,6 +18113,15 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/detect-newline/-/detect-newline-3.1.0.tgz", @@ -21117,14 +18138,6 @@ "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "license": "MIT" }, - "node_modules/detect-node-es": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/detect-port": { "version": "1.6.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/detect-port/-/detect-port-1.6.1.tgz", @@ -21231,9 +18244,9 @@ } }, "node_modules/dom-accessibility-api": { - "version": "0.6.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", - "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "version": "0.5.16", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, "license": "MIT" }, @@ -21342,9 +18355,7 @@ "version": "16.4.5", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/dotenv/-/dotenv-16.4.5.tgz", "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "dev": true, "license": "BSD-2-Clause", - "peer": true, "engines": { "node": ">=12" }, @@ -21353,12 +18364,18 @@ } }, "node_modules/dotenv-expand": { - "version": "10.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/dotenv-expand/-/dotenv-expand-10.0.0.tgz", - "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "version": "11.0.6", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/dotenv-expand/-/dotenv-expand-11.0.6.tgz", + "integrity": "sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==", "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.4" + }, "engines": { "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, "node_modules/duplex-maker": { @@ -21387,13 +18404,6 @@ "stream-shift": "^1.0.0" } }, - "node_modules/duplexify/node_modules/isarray": { - "version": "1.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, "node_modules/duplexify/node_modules/readable-stream": { "version": "2.3.8", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/readable-stream/-/readable-stream-2.3.8.tgz", @@ -21431,7 +18441,6 @@ "version": "0.2.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "devOptional": true, "license": "MIT" }, "node_modules/ecc-jsbn": { @@ -21474,15 +18483,15 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.28", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/electron-to-chromium/-/electron-to-chromium-1.5.28.tgz", - "integrity": "sha512-VufdJl+rzaKZoYVUijN13QcXVF5dWPZANeFTLNy+OSpHdDL5ynXTF35+60RSBbaQYB1ae723lQXHCrf4pyLsMw==", + "version": "1.5.49", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/electron-to-chromium/-/electron-to-chromium-1.5.49.tgz", + "integrity": "sha512-ZXfs1Of8fDb6z7WEYZjXpgIRF6MEu8JdeGA0A40aZq6OQbS+eJpnnV49epZRna2DU/YsEjSQuGtQPPtvt6J65A==", "license": "ISC" }, "node_modules/elliptic": { - "version": "6.5.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/elliptic/-/elliptic-6.5.7.tgz", - "integrity": "sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==", + "version": "6.6.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/elliptic/-/elliptic-6.6.0.tgz", + "integrity": "sha512-dpwoQcLc/2WLQvJvLRHKZ+f9FgOdjnq11rurqwekGQygGPsYSK29OMMD2WalatiqQ+XGFDglTNixpPfI+lpaAA==", "dev": true, "license": "MIT", "dependencies": { @@ -21630,6 +18639,18 @@ "node": ">=6" } }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/err-code": { "version": "2.0.3", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/err-code/-/err-code-2.0.3.tgz", @@ -21680,27 +18701,6 @@ "node": ">= 0.4" } }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/es-module-lexer": { "version": "1.5.4", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/es-module-lexer/-/es-module-lexer-1.5.4.tgz", @@ -21708,41 +18708,42 @@ "license": "MIT" }, "node_modules/esbuild": { - "version": "0.19.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/esbuild/-/esbuild-0.19.12.tgz", - "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/esbuild/-/esbuild-0.23.0.tgz", + "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", "hasInstallScript": true, "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" + "@esbuild/aix-ppc64": "0.23.0", + "@esbuild/android-arm": "0.23.0", + "@esbuild/android-arm64": "0.23.0", + "@esbuild/android-x64": "0.23.0", + "@esbuild/darwin-arm64": "0.23.0", + "@esbuild/darwin-x64": "0.23.0", + "@esbuild/freebsd-arm64": "0.23.0", + "@esbuild/freebsd-x64": "0.23.0", + "@esbuild/linux-arm": "0.23.0", + "@esbuild/linux-arm64": "0.23.0", + "@esbuild/linux-ia32": "0.23.0", + "@esbuild/linux-loong64": "0.23.0", + "@esbuild/linux-mips64el": "0.23.0", + "@esbuild/linux-ppc64": "0.23.0", + "@esbuild/linux-riscv64": "0.23.0", + "@esbuild/linux-s390x": "0.23.0", + "@esbuild/linux-x64": "0.23.0", + "@esbuild/netbsd-x64": "0.23.0", + "@esbuild/openbsd-arm64": "0.23.0", + "@esbuild/openbsd-x64": "0.23.0", + "@esbuild/sunos-x64": "0.23.0", + "@esbuild/win32-arm64": "0.23.0", + "@esbuild/win32-ia32": "0.23.0", + "@esbuild/win32-x64": "0.23.0" } }, "node_modules/esbuild-register": { @@ -21751,7 +18752,6 @@ "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "debug": "^4.3.4" }, @@ -21760,15 +18760,15 @@ } }, "node_modules/esbuild-wasm": { - "version": "0.20.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/esbuild-wasm/-/esbuild-wasm-0.20.1.tgz", - "integrity": "sha512-6v/WJubRsjxBbQdz6izgvx7LsVFvVaGmSdwrFHmEzoVgfXL89hkKPoQHsnVI2ngOkcBUQT9kmAM1hVL1k/Av4A==", + "version": "0.23.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/esbuild-wasm/-/esbuild-wasm-0.23.0.tgz", + "integrity": "sha512-6jP8UmWy6R6TUUV8bMuC3ZyZ6lZKI56x0tkxyCIqWwRRJ/DgeQKneh/Oid5EoGoPFLrGNkz47ZEtWAYuiY/u9g==", "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/escalade": { @@ -21787,12 +18787,15 @@ "license": "MIT" }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "4.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/escodegen": { @@ -21832,6 +18835,7 @@ "version": "8.57.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/eslint/-/eslint-8.57.0.tgz", "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", @@ -21939,9 +18943,9 @@ } }, "node_modules/eslint-scope": { - "version": "8.0.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/eslint-scope/-/eslint-scope-8.0.2.tgz", - "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", + "version": "8.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -21983,30 +18987,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/eslint/node_modules/argparse": { "version": "2.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/argparse/-/argparse-2.0.1.tgz", @@ -22023,34 +19003,6 @@ "concat-map": "0.0.1" } }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/eslint-scope": { "version": "7.2.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/eslint-scope/-/eslint-scope-7.2.2.tgz", @@ -22067,18 +19019,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/eslint/node_modules/globals": { "version": "13.24.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/globals/-/globals-13.24.0.tgz", @@ -22094,15 +19034,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/js-yaml": { "version": "4.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/js-yaml/-/js-yaml-4.1.0.tgz", @@ -22145,18 +19076,6 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/type-fest": { "version": "0.20.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/type-fest/-/type-fest-0.20.2.tgz", @@ -22343,6 +19262,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, "node_modules/executable": { "version": "4.1.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/executable/-/executable-4.1.1.tgz", @@ -22451,6 +19377,18 @@ "dev": true, "license": "MIT" }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "license": "MIT", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/expect": { "version": "29.7.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/expect/-/expect-29.7.0.tgz", @@ -22476,9 +19414,9 @@ "license": "Apache-2.0" }, "node_modules/express": { - "version": "4.21.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "version": "4.21.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", @@ -22486,7 +19424,7 @@ "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -22557,6 +19495,7 @@ "version": "3.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, "license": "MIT", "dependencies": { "chardet": "^0.7.0", @@ -22571,6 +19510,7 @@ "version": "0.0.33", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" @@ -22682,25 +19622,19 @@ ], "license": "MIT" }, - "node_modules/fancy-log": { - "version": "2.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/fancy-log/-/fancy-log-2.0.0.tgz", - "integrity": "sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-support": "^1.1.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true, + "license": "MIT" + }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/fast-glob/-/fast-glob-3.3.2.tgz", @@ -22717,6 +19651,18 @@ "node": ">=8.6.0" } }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -22730,12 +19676,10 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/fast-uri/-/fast-uri-3.0.1.tgz", - "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", - "dev": true, - "license": "MIT", - "peer": true + "version": "3.0.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "license": "BSD-3-Clause" }, "node_modules/fast-xml-parser": { "version": "4.4.1", @@ -22806,6 +19750,7 @@ "version": "1.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, "license": "MIT", "dependencies": { "pend": "~1.2.0" @@ -22834,6 +19779,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -22852,38 +19806,11 @@ "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==", "license": "MIT" }, - "node_modules/file-system-cache": { - "version": "2.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/file-system-cache/-/file-system-cache-2.3.0.tgz", - "integrity": "sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "fs-extra": "11.1.1", - "ramda": "0.29.0" - } - }, - "node_modules/file-system-cache/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, "node_modules/file-type": { "version": "5.2.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/file-type/-/file-type-5.2.0.tgz", "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -23014,6 +19941,30 @@ "semver": "bin/semver.js" } }, + "node_modules/find-file-up": { + "version": "2.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/find-file-up/-/find-file-up-2.0.1.tgz", + "integrity": "sha512-qVdaUhYO39zmh28/JLQM5CoYN9byEOKEH4qfa8K1eNV17W0UUMJ9WgbR/hHFH+t5rcl+6RTb5UC7ck/I+uRkpQ==", + "license": "MIT", + "dependencies": { + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-pkg": { + "version": "2.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/find-pkg/-/find-pkg-2.0.0.tgz", + "integrity": "sha512-WgZ+nKbELDa6N3i/9nrHeNznm+lY3z4YfhDDWgW+5P0pdmMj26bxaxU11ookgY3NyP9GC7HvZ9etp0jRFqGEeQ==", + "license": "MIT", + "dependencies": { + "find-file-up": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/find-up/-/find-up-5.0.0.tgz", @@ -23070,13 +20021,6 @@ "readable-stream": "^2.3.6" } }, - "node_modules/flush-write-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, "node_modules/flush-write-stream/node_modules/readable-stream": { "version": "2.3.8", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/readable-stream/-/readable-stream-2.3.8.tgz", @@ -23154,7 +20098,6 @@ "version": "3.3.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/foreground-child/-/foreground-child-3.3.0.tgz", "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "devOptional": true, "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", @@ -23167,19 +20110,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "devOptional": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/forever-agent/-/forever-agent-0.6.1.tgz", @@ -23249,21 +20179,6 @@ "ajv": "^6.9.1" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -23274,22 +20189,6 @@ "concat-map": "0.0.1" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/cosmiconfig/-/cosmiconfig-7.1.0.tgz", @@ -23320,15 +20219,6 @@ "node": ">=12" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -23365,22 +20255,10 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/form-data": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "4.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", @@ -23453,13 +20331,6 @@ "readable-stream": "^2.0.0" } }, - "node_modules/from2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, "node_modules/from2/node_modules/readable-stream": { "version": "2.3.8", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/readable-stream/-/readable-stream-2.3.8.tgz", @@ -23493,6 +20364,15 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/front-matter": { + "version": "4.0.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/front-matter/-/front-matter-4.0.2.tgz", + "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", + "license": "MIT", + "dependencies": { + "js-yaml": "^3.13.1" + } + }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/fs-constants/-/fs-constants-1.0.0.tgz", @@ -23500,17 +20380,18 @@ "license": "MIT" }, "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "version": "9.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "license": "MIT", "dependencies": { + "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=14.14" + "node": ">=10" } }, "node_modules/fs-minipass": { @@ -23546,13 +20427,6 @@ "readable-stream": "1 || 2" } }, - "node_modules/fs-write-stream-atomic/node_modules/isarray": { - "version": "1.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, "node_modules/fs-write-stream-atomic/node_modules/readable-stream": { "version": "2.3.8", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/readable-stream/-/readable-stream-2.3.8.tgz", @@ -23622,16 +20496,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -23650,6 +20514,18 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-east-asian-width": { + "version": "1.3.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -23669,21 +20545,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-nonce": { - "version": "1.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/get-nonce/-/get-nonce-1.0.1.tgz", - "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "devOptional": true, "license": "MIT", "engines": { "node": ">=8.0.0" @@ -23693,6 +20559,7 @@ "version": "2.3.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/get-stream/-/get-stream-2.3.1.tgz", "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", + "dev": true, "license": "MIT", "dependencies": { "object-assign": "^4.0.1", @@ -23761,15 +20628,15 @@ } }, "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "license": "ISC", "dependencies": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" } }, "node_modules/glob-to-regexp": { @@ -23826,6 +20693,54 @@ "node": ">=10" } }, + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "license": "MIT", + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix/node_modules/ini": { + "version": "1.3.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/globals": { "version": "11.12.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/globals/-/globals-11.12.0.tgz", @@ -23839,6 +20754,7 @@ "version": "11.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, "license": "MIT", "dependencies": { "array-union": "^2.1.0", @@ -23880,43 +20796,31 @@ "license": "MIT" }, "node_modules/gzipper": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/gzipper/-/gzipper-7.2.0.tgz", - "integrity": "sha512-qwYQr7GWBXIm9Cdzud+tyM/s9N+QFzGDZoF9YR8RYJbDKOYowzjMDPEinFtm78EQeeYMC/FJW2FXY0bHkyUgsA==", + "version": "8.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/gzipper/-/gzipper-8.2.0.tgz", + "integrity": "sha512-JUvhzo8dHQWJp1eyYy1ShaPfcowsPbRc2rvwkD4LRyou/80UUz96bn+EOOYLWO4PG0Y5f3+UlUX9Gmu8RZhrtw==", "dev": true, "license": "GPL-3.0", "dependencies": { "@gfx/zopfli": "^1.0.15", - "commander": "^7.2.0", - "deep-equal": "^2.0.5", - "simple-zstd": "^1.4.0", - "uuid": "^8.3.2" + "commander": "^12.1.0", + "simple-zstd": "^1.4.2" }, "bin": { "gzipper": "bin/index.js" }, "engines": { - "node": ">=14" + "node": ">=20.11.0" } }, "node_modules/gzipper/node_modules/commander": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "version": "12.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "license": "MIT", "engines": { - "node": ">= 10" - } - }, - "node_modules/gzipper/node_modules/uuid": { - "version": "8.3.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "node": ">=18" } }, "node_modules/handle-thing": { @@ -23964,23 +20868,13 @@ "dev": true, "license": "(Apache-2.0 OR MPL-1.1)" }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "version": "4.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/has-property-descriptors": { @@ -24023,7 +20917,6 @@ "version": "1.0.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -24169,9 +21062,9 @@ } }, "node_modules/hast-util-to-string": { - "version": "3.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/hast-util-to-string/-/hast-util-to-string-3.0.0.tgz", - "integrity": "sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==", + "version": "3.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz", + "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==", "dev": true, "license": "MIT", "dependencies": { @@ -24203,6 +21096,18 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "license": "MIT", + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/hosted-git-info": { "version": "7.0.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/hosted-git-info/-/hosted-git-info-7.0.2.tgz", @@ -24233,12 +21138,6 @@ "wbuf": "^1.1.0" } }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, "node_modules/hpack.js/node_modules/readable-stream": { "version": "2.3.8", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/readable-stream/-/readable-stream-2.3.8.tgz", @@ -24269,6 +21168,16 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/hpagent": { + "version": "1.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/hpagent/-/hpagent-1.2.0.tgz", + "integrity": "sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -24337,9 +21246,9 @@ } }, "node_modules/html-webpack-plugin": { - "version": "5.6.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", - "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", + "version": "5.6.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", + "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", "devOptional": true, "license": "MIT", "dependencies": { @@ -24388,6 +21297,53 @@ "entities": "^4.4.0" } }, + "node_modules/http-assert": { + "version": "1.5.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/http-assert/-/http-assert-1.5.0.tgz", + "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", + "license": "MIT", + "dependencies": { + "deep-equal": "~1.0.1", + "http-errors": "~1.8.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-assert/node_modules/depd": { + "version": "1.1.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-assert/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-assert/node_modules/statuses": { + "version": "1.5.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/http-cache-semantics": { "version": "4.1.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", @@ -24466,27 +21422,20 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "version": "3.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/http-proxy-middleware/-/http-proxy-middleware-3.0.0.tgz", + "integrity": "sha512-36AV1fIaI2cWRzHo+rbcxhe3M3jUDCNzc4D5zRl57sEWRAxdXYtw7FSQKYY6PDKssiAKjLYypbssHk+xs/kMXw==", "license": "MIT", "dependencies": { - "@types/http-proxy": "^1.17.8", + "@types/http-proxy": "^1.17.10", + "debug": "^4.3.4", "http-proxy": "^1.18.1", "is-glob": "^4.0.1", "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" + "micromatch": "^4.0.5" }, "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/http-server": { @@ -24516,58 +21465,6 @@ "node": ">=12" } }, - "node_modules/http-server/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/http-server/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/http-server/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/http-server/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/http-server/node_modules/url-join": { "version": "4.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/url-join/-/url-join-4.0.1.tgz", @@ -24597,9 +21494,9 @@ "license": "MIT" }, "node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "version": "7.0.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", "license": "MIT", "dependencies": { "agent-base": "^7.0.2", @@ -24619,6 +21516,15 @@ "node": ">=8.12.0" } }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "license": "MIT", + "engines": { + "node": ">=10.18" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -24819,9 +21725,9 @@ "license": "ISC" }, "node_modules/ini": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", + "version": "4.1.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", "dev": true, "license": "ISC", "engines": { @@ -24838,91 +21744,6 @@ "tslib": "^2.0.0" } }, - "node_modules/inquirer": { - "version": "9.2.15", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/inquirer/-/inquirer-9.2.15.tgz", - "integrity": "sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==", - "license": "MIT", - "dependencies": { - "@ljharb/through": "^2.3.12", - "ansi-escapes": "^4.3.2", - "chalk": "^5.3.0", - "cli-cursor": "^3.1.0", - "cli-width": "^4.1.0", - "external-editor": "^3.1.0", - "figures": "^3.2.0", - "lodash": "^4.17.21", - "mute-stream": "1.0.0", - "ora": "^5.4.1", - "run-async": "^3.0.0", - "rxjs": "^7.8.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/inquirer/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/chalk": { - "version": "5.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "loose-envify": "^1.0.0" - } - }, "node_modules/ip-address": { "version": "9.0.5", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ip-address/-/ip-address-9.0.5.tgz", @@ -24996,42 +21817,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "license": "MIT" }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -25044,23 +21835,6 @@ "node": ">=8" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-buffer": { "version": "1.1.6", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-buffer/-/is-buffer-1.1.6.tgz", @@ -25138,22 +21912,6 @@ "node": ">= 0.4" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-descriptor": { "version": "1.0.3", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-descriptor/-/is-descriptor-1.0.3.tgz", @@ -25169,15 +21927,15 @@ } }, "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "version": "3.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "license": "MIT", "bin": { "is-docker": "cli.js" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -25206,12 +21964,15 @@ } }, "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "version": "4.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-generator-fn": { @@ -25228,7 +21989,6 @@ "version": "1.0.10", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" @@ -25252,6 +22012,24 @@ "node": ">=0.10.0" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-installed-globally": { "version": "0.4.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-installed-globally/-/is-installed-globally-0.4.0.tgz", @@ -25285,19 +22063,6 @@ "dev": true, "license": "MIT" }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-module": { "version": "1.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-module/-/is-module-1.0.0.tgz", @@ -25309,8 +22074,21 @@ "version": "4.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-natural-number/-/is-natural-number-4.0.1.tgz", "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==", + "dev": true, "license": "MIT" }, + "node_modules/is-network-error": { + "version": "1.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-network-error/-/is-network-error-1.1.0.tgz", + "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-number/-/is-number-7.0.0.tgz", @@ -25320,22 +22098,6 @@ "node": ">=0.12.0" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -25376,91 +22138,14 @@ "devOptional": true, "license": "MIT" }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-stream": { "version": "1.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, "node_modules/is-typed-array": { @@ -25498,36 +22183,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-what": { "version": "3.14.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-what/-/is-what-3.14.1.tgz", @@ -25538,22 +22193,24 @@ "version": "1.0.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "version": "3.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", "license": "MIT", "dependencies": { - "is-docker": "^2.0.0" + "is-inside-container": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-zst": { @@ -25564,10 +22221,9 @@ "license": "MIT" }, "node_modules/isarray": { - "version": "2.0.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, + "version": "1.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "license": "MIT" }, "node_modules/isexe": { @@ -25585,6 +22241,23 @@ "node": ">=0.10.0" } }, + "node_modules/isomorphic-rslog": { + "version": "0.0.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/isomorphic-rslog/-/isomorphic-rslog-0.0.4.tgz", + "integrity": "sha512-KwROYmorP1F97yiPCRENbvJRshPiWFLzU73CSzqO8jUVGiGK8d3RqrKBSTmSLc7MKse69LyYydTq6Xy0xBFE0g==", + "engines": { + "node": ">=14.17.6" + } + }, + "node_modules/isomorphic-ws": { + "version": "5.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", + "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, "node_modules/isstream": { "version": "0.1.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/isstream/-/isstream-0.1.2.tgz", @@ -25605,7 +22278,6 @@ "version": "6.0.3", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", - "devOptional": true, "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.23.9", @@ -25633,16 +22305,6 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/istanbul-lib-report/node_modules/make-dir": { "version": "4.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/make-dir/-/make-dir-4.0.0.tgz", @@ -25659,19 +22321,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", @@ -25715,7 +22364,6 @@ "version": "3.4.3", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "devOptional": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -25745,21 +22393,6 @@ "node": ">=10" } }, - "node_modules/jake/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/jake/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -25770,31 +22403,6 @@ "concat-map": "0.0.1" } }, - "node_modules/jake/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jake/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jake/node_modules/minimatch": { "version": "3.1.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/minimatch/-/minimatch-3.1.2.tgz", @@ -25807,18 +22415,6 @@ "node": "*" } }, - "node_modules/jake/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jasmine-marbles": { "version": "0.9.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jasmine-marbles/-/jasmine-marbles-0.9.2.tgz", @@ -25934,6 +22530,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/jest-changed-files/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "devOptional": true, + "license": "ISC" + }, "node_modules/jest-circus": { "version": "29.7.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jest-circus/-/jest-circus-29.7.0.tgz", @@ -25967,16 +22570,13 @@ } }, "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "5.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "devOptional": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" @@ -26000,23 +22600,6 @@ "npm": ">=6" } }, - "node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/jest-circus/node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/cosmiconfig/-/cosmiconfig-7.1.0.tgz", @@ -26051,29 +22634,28 @@ } } }, - "node_modules/jest-circus/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-circus/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jest-circus/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "devOptional": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-circus/node_modules/react-is": { + "version": "18.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "devOptional": true, + "license": "MIT" + }, "node_modules/jest-cli": { "version": "29.7.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jest-cli/-/jest-cli-29.7.0.tgz", @@ -26108,62 +22690,6 @@ } } }, - "node_modules/jest-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-config": { "version": "29.7.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jest-config/-/jest-config-29.7.0.tgz", @@ -26211,36 +22737,16 @@ } }, "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "5.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "devOptional": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-config/node_modules/ci-info": { @@ -26259,29 +22765,28 @@ "node": ">=8" } }, - "node_modules/jest-config/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jest-config/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "devOptional": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-config/node_modules/react-is": { + "version": "18.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "devOptional": true, + "license": "MIT" + }, "node_modules/jest-diff": { "version": "29.7.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jest-diff/-/jest-diff-29.7.0.tgz", @@ -26294,61 +22799,41 @@ "pretty-format": "^29.7.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-diff/node_modules/react-is": { + "version": "18.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, "node_modules/jest-docblock": { "version": "29.7.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jest-docblock/-/jest-docblock-29.7.0.tgz", @@ -26380,60 +22865,39 @@ } }, "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "5.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "devOptional": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest-each/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "devOptional": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jest-each/node_modules/react-is": { + "version": "18.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "devOptional": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/jest-environment-jsdom": { "version": "29.7.0", @@ -26532,16 +22996,6 @@ "node": ">=10.12.0" } }, - "node_modules/jest-junit/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-junit/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -26579,6 +23033,41 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-leak-detector/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/react-is": { + "version": "18.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "devOptional": true, + "license": "MIT" + }, "node_modules/jest-marbles": { "version": "3.0.6", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jest-marbles/-/jest-marbles-3.0.6.tgz", @@ -26609,60 +23098,39 @@ } }, "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "5.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "devOptional": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "devOptional": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jest-matcher-utils/node_modules/react-is": { + "version": "18.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "devOptional": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/jest-message-util": { "version": "29.7.0", @@ -26686,60 +23154,39 @@ } }, "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "5.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "devOptional": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "devOptional": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jest-message-util/node_modules/react-is": { + "version": "18.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "devOptional": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/jest-mock": { "version": "29.7.0", @@ -26775,9 +23222,9 @@ } }, "node_modules/jest-preset-angular": { - "version": "14.0.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jest-preset-angular/-/jest-preset-angular-14.0.4.tgz", - "integrity": "sha512-O4WhVRdfiN9TtJMbJbuVJxD3zn6fyOF2Pqvu12fvEVR6FxCN1S1POfR2nU1fRdP+rQZv7iiW+ttxsy+qkE8iCw==", + "version": "14.1.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jest-preset-angular/-/jest-preset-angular-14.1.1.tgz", + "integrity": "sha512-mWW2WlndHetTp4PQov05v7JE6HZQB5uTzGd+oW2RPH1OOTCLUKI8mSIU4DXCBJ4LDg5gIMMfqHsxT/Qmpu2dQQ==", "dev": true, "license": "MIT", "dependencies": { @@ -26795,14 +23242,49 @@ "esbuild": ">=0.15.13" }, "peerDependencies": { - "@angular-devkit/build-angular": ">=15.0.0 <18.0.0", - "@angular/compiler-cli": ">=15.0.0 <18.0.0", - "@angular/core": ">=15.0.0 <18.0.0", - "@angular/platform-browser-dynamic": ">=15.0.0 <18.0.0", + "@angular-devkit/build-angular": ">=15.0.0 <19.0.0", + "@angular/compiler-cli": ">=15.0.0 <19.0.0", + "@angular/core": ">=15.0.0 <19.0.0", + "@angular/platform-browser-dynamic": ">=15.0.0 <19.0.0", "jest": "^29.0.0", "typescript": ">=4.8" } }, + "node_modules/jest-preset-angular/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-preset-angular/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-preset-angular/node_modules/react-is": { + "version": "18.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, "node_modules/jest-regex-util": { "version": "29.6.3", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jest-regex-util/-/jest-regex-util-29.6.3.tgz", @@ -26848,49 +23330,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-resolve/node_modules/resolve.exports": { "version": "2.0.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/resolve.exports/-/resolve.exports-2.0.2.tgz", @@ -26901,19 +23340,6 @@ "node": ">=10" } }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-runner": { "version": "29.7.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jest-runner/-/jest-runner-29.7.0.tgz", @@ -26947,49 +23373,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-runner/node_modules/source-map": { "version": "0.6.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/source-map/-/source-map-0.6.1.tgz", @@ -27011,19 +23394,6 @@ "source-map": "^0.6.0" } }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-runtime": { "version": "29.7.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jest-runtime/-/jest-runtime-29.7.0.tgz", @@ -27058,62 +23428,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-snapshot": { "version": "29.7.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jest-snapshot/-/jest-snapshot-29.7.0.tgz", @@ -27147,60 +23461,39 @@ } }, "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "5.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "devOptional": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest-snapshot/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "devOptional": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jest-snapshot/node_modules/react-is": { + "version": "18.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "devOptional": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/jest-sonar-reporter": { "version": "2.0.0", @@ -27232,37 +23525,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/jest-util/node_modules/ci-info": { "version": "3.9.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ci-info/-/ci-info-3.9.0.tgz", @@ -27278,15 +23540,6 @@ "node": ">=8" } }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-util/node_modules/picomatch": { "version": "2.3.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/picomatch/-/picomatch-2.3.1.tgz", @@ -27299,18 +23552,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-validate": { "version": "29.7.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jest-validate/-/jest-validate-29.7.0.tgz", @@ -27330,16 +23571,13 @@ } }, "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "5.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "devOptional": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" @@ -27358,45 +23596,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest-validate/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "devOptional": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jest-validate/node_modules/react-is": { + "version": "18.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "devOptional": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/jest-watcher": { "version": "29.7.0", @@ -27418,62 +23638,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-worker": { "version": "29.7.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jest-worker/-/jest-worker-29.7.0.tgz", @@ -27489,15 +23653,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-8.1.1.tgz", @@ -27529,9 +23684,9 @@ "license": "BSD-3-Clause" }, "node_modules/js-sha256": { - "version": "0.10.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/js-sha256/-/js-sha256-0.10.1.tgz", - "integrity": "sha512-5obBtsz9301ULlsgggLg542s/jqtddfOpV5KJc4hajc9JV8GeY2gZHSVpYBn4nWqAUTJ9v+xwtbJ1mIBgIH5Vw==", + "version": "0.11.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/js-sha256/-/js-sha256-0.11.0.tgz", + "integrity": "sha512-6xNlKayMZvds9h1Y1VWc0fQHQ82BxTXizWPEtEeGvmOUYpBRy4gbWroHLpzowe6xiQhHpelCQiE7HEdznyBL9Q==", "license": "MIT" }, "node_modules/js-tokens": { @@ -27566,7 +23721,6 @@ "integrity": "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12.0.0" } @@ -27644,6 +23798,42 @@ "node": ">= 6" } }, + "node_modules/jsdom/node_modules/punycode": { + "version": "2.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/jsdom/node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "devOptional": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsdom/node_modules/universalify": { + "version": "0.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jsesc/-/jsesc-2.5.2.tgz", @@ -27737,9 +23927,9 @@ } }, "node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "version": "3.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", "license": "MIT" }, "node_modules/jsonfile": { @@ -27808,31 +23998,42 @@ } }, "node_modules/keycloak-angular": { - "version": "15.2.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/keycloak-angular/-/keycloak-angular-15.2.1.tgz", - "integrity": "sha512-7w8bkJQ9OBtBJt5eNfqnRG2IL9btvp8Stf2fpVipSE1C/qtd5UQ31skx735PMPgMTUFsdz/0VA32Gmsng54+Xg==", + "version": "16.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/keycloak-angular/-/keycloak-angular-16.0.1.tgz", + "integrity": "sha512-ytkL32R/tfHEyZ3txQtgH1y0WofW/D36zTbo2agDCYUtZETq0wAQ3E/4bVDUAr6ZKwotgAnIyOORfErnvDkXng==", "license": "MIT", "dependencies": { "tslib": "^2.3.1" }, "peerDependencies": { - "@angular/common": "^17", - "@angular/core": "^17", - "@angular/router": "^17", - "keycloak-js": "^18 || ^19 || ^20 || ^21 || ^22 || ^23 || ^24" + "@angular/common": "^18", + "@angular/core": "^18", + "@angular/router": "^18", + "keycloak-js": "^18 || ^19 || ^20 || ^21 || ^22 || ^23 || ^24 || ^25" } }, "node_modules/keycloak-js": { - "version": "23.0.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/keycloak-js/-/keycloak-js-23.0.7.tgz", - "integrity": "sha512-OmszsKzBhhm5yP4W1q/tMd+nNnKpOAdeVYcoGhphlv8Fj1bNk4wRTYzp7pn5BkvueLz7fhvKHz7uOc33524YrA==", + "version": "24.0.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/keycloak-js/-/keycloak-js-24.0.5.tgz", + "integrity": "sha512-VQOSn3j13DPB6OuavKAq+sRjDERhIKrXgBzekoHRstifPuyULILguugX6yxRUYFSpn3OMYUXmSX++tkdCupOjA==", "license": "Apache-2.0", "dependencies": { - "base64-js": "^1.5.1", - "js-sha256": "^0.10.1", + "js-sha256": "^0.11.0", "jwt-decode": "^4.0.0" } }, + "node_modules/keygrip": { + "version": "1.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/keygrip/-/keygrip-1.1.0.tgz", + "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", + "license": "MIT", + "dependencies": { + "tsscmp": "1.0.6" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/keyv/-/keyv-4.5.4.tgz", @@ -27870,6 +24071,102 @@ "node": ">= 8" } }, + "node_modules/koa": { + "version": "2.15.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/koa/-/koa-2.15.3.tgz", + "integrity": "sha512-j/8tY9j5t+GVMLeioLaxweJiKUayFhlGqNTzf2ZGwL0ZCQijd2RLHK0SLW5Tsko8YyyqCZC2cojIb0/s62qTAg==", + "license": "MIT", + "dependencies": { + "accepts": "^1.3.5", + "cache-content-type": "^1.0.0", + "content-disposition": "~0.5.2", + "content-type": "^1.0.4", + "cookies": "~0.9.0", + "debug": "^4.3.2", + "delegates": "^1.0.0", + "depd": "^2.0.0", + "destroy": "^1.0.4", + "encodeurl": "^1.0.2", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.3.0", + "http-errors": "^1.6.3", + "is-generator-function": "^1.0.7", + "koa-compose": "^4.1.0", + "koa-convert": "^2.0.0", + "on-finished": "^2.3.0", + "only": "~0.0.2", + "parseurl": "^1.3.2", + "statuses": "^1.5.0", + "type-is": "^1.6.16", + "vary": "^1.1.2" + }, + "engines": { + "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4" + } + }, + "node_modules/koa-compose": { + "version": "4.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/koa-compose/-/koa-compose-4.1.0.tgz", + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", + "license": "MIT" + }, + "node_modules/koa-convert": { + "version": "2.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/koa-convert/-/koa-convert-2.0.0.tgz", + "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", + "license": "MIT", + "dependencies": { + "co": "^4.6.0", + "koa-compose": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/koa/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/koa/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/koa/node_modules/http-errors/node_modules/depd": { + "version": "1.1.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/koa/node_modules/statuses": { + "version": "1.5.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/launch-editor": { "version": "2.9.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/launch-editor/-/launch-editor-2.9.1.tgz", @@ -27917,23 +24214,29 @@ } }, "node_modules/less-loader": { - "version": "11.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/less-loader/-/less-loader-11.1.0.tgz", - "integrity": "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==", + "version": "12.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/less-loader/-/less-loader-12.2.0.tgz", + "integrity": "sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==", "license": "MIT", - "dependencies": { - "klona": "^2.0.4" - }, "engines": { - "node": ">= 14.15.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { + "@rspack/core": "0.x || 1.x", "less": "^3.5.0 || ^4.0.0", "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, "node_modules/less/node_modules/make-dir": { @@ -28033,99 +24336,120 @@ } }, "node_modules/lines-and-columns": { - "version": "2.0.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/lines-and-columns/-/lines-and-columns-2.0.4.tgz", - "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", + "version": "2.0.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/listr2": { - "version": "3.14.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", - "dev": true, + "version": "8.2.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/listr2/-/listr2-8.2.4.tgz", + "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==", "license": "MIT", "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.1", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } - } - }, - "node_modules/listr2/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node": ">=18.0.0" } }, "node_modules/listr2/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "version": "6.2.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/listr2/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "node_modules/listr2/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "license": "MIT" + }, + "node_modules/listr2/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/listr2/node_modules/string-width": { + "version": "7.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/listr2/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, + "version": "9.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/lmdb": { + "version": "3.0.13", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/lmdb/-/lmdb-3.0.13.tgz", + "integrity": "sha512-UGe+BbaSUQtAMZobTb4nHvFMrmvuAQKSeaqAX2meTEQjfsbpl5sxdHD8T72OnwD4GU9uwNhYXIVe4QGs8N9Zyw==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "msgpackr": "^1.10.2", + "node-addon-api": "^6.1.0", + "node-gyp-build-optional-packages": "5.2.2", + "ordered-binary": "^1.4.1", + "weak-lru-cache": "^1.2.2" + }, + "bin": { + "download-lmdb-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "3.0.13", + "@lmdb/lmdb-darwin-x64": "3.0.13", + "@lmdb/lmdb-linux-arm": "3.0.13", + "@lmdb/lmdb-linux-arm64": "3.0.13", + "@lmdb/lmdb-linux-x64": "3.0.13", + "@lmdb/lmdb-win32-x64": "3.0.13" + } + }, + "node_modules/lmdb/node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "license": "MIT" + }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/loader-runner/-/loader-runner-4.3.0.tgz", @@ -28136,9 +24460,9 @@ } }, "node_modules/loader-utils": { - "version": "3.2.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "version": "3.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", "license": "MIT", "engines": { "node": ">= 12.13.0" @@ -28171,6 +24495,12 @@ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", "license": "MIT" }, + "node_modules/lodash.clonedeepwith": { + "version": "4.5.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/lodash.clonedeepwith/-/lodash.clonedeepwith-4.5.0.tgz", + "integrity": "sha512-QRBRSxhbtsX1nc0baxSkkK5WlVTTm/s48DSukcGcWZwIyI8Zz+lB+kFiELJXtzfH4Aj6kMWQ1VWW4U5uUDgZMA==", + "license": "MIT" + }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -28246,116 +24576,195 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "7.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "environment": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/log-update/node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "restore-cursor": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, + "node_modules/log-update/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "license": "MIT" + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", "license": "MIT", "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" + "get-east-asian-width": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/log-update/node_modules/onetime": { + "version": "7.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "mimic-function": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, + "version": "7.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/log4js": { + "version": "6.9.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "license": "Apache-2.0", + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/long-timeout": { + "version": "0.1.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/long-timeout/-/long-timeout-0.1.1.tgz", + "integrity": "sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==", + "license": "MIT" + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" @@ -28364,6 +24773,13 @@ "loose-envify": "cli.js" } }, + "node_modules/loupe": { + "version": "3.1.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/loupe/-/loupe-3.1.2.tgz", + "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", + "dev": true, + "license": "MIT" + }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/lower-case/-/lower-case-2.0.2.tgz", @@ -28383,22 +24799,39 @@ "yallist": "^3.0.2" } }, - "node_modules/magic-string": { - "version": "0.30.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/magic-string/-/magic-string-0.30.8.tgz", - "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "node_modules/luxon": { + "version": "3.5.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/luxon/-/luxon-3.5.0.tgz", + "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==", "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, "engines": { "node": ">=12" } }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.11", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, "node_modules/make-dir": { "version": "1.3.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/make-dir/-/make-dir-1.3.0.tgz", "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, "license": "MIT", "dependencies": { "pify": "^3.0.0" @@ -28411,6 +24844,7 @@ "version": "3.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/pify/-/pify-3.0.0.tgz", "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -28446,16 +24880,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/make-fetch-happen/node_modules/proc-log": { - "version": "4.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/makeerror/-/makeerror-1.0.12.tgz", @@ -28572,13 +24996,6 @@ "node": ">=4.3.0 <5.0.0 || >=5.10" } }, - "node_modules/memory-fs/node_modules/isarray": { - "version": "1.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, "node_modules/memory-fs/node_modules/readable-stream": { "version": "2.3.8", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/readable-stream/-/readable-stream-2.3.8.tgz", @@ -28741,6 +25158,18 @@ "node": ">=6" } }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/min-indent/-/min-indent-1.0.1.tgz", @@ -28752,9 +25181,9 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "2.8.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.1.tgz", - "integrity": "sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA==", + "version": "2.9.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", + "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", "license": "MIT", "dependencies": { "schema-utils": "^4.0.0", @@ -28812,7 +25241,6 @@ "version": "7.1.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "devOptional": true, "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" @@ -28882,37 +25310,6 @@ "devOptional": true, "license": "ISC" }, - "node_modules/minipass-json-stream": { - "version": "1.0.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/minipass-json-stream/-/minipass-json-stream-1.0.2.tgz", - "integrity": "sha512-myxeeTm57lYs8pH2nxPzmEEg8DGIgW+9mv6D4JZD2pa81I/OBjeU7PtICXV6c9eRGTA5JMDsuIPUZRCyBMYNhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-json-stream/node_modules/yallist": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, "node_modules/minipass-pipeline": { "version": "1.2.4", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", @@ -29035,13 +25432,6 @@ "node": ">=4.0.0" } }, - "node_modules/mississippi/node_modules/isarray": { - "version": "1.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, "node_modules/mississippi/node_modules/readable-stream": { "version": "2.3.8", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/readable-stream/-/readable-stream-2.3.8.tgz", @@ -29114,9 +25504,9 @@ } }, "node_modules/mocha": { - "version": "10.7.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/mocha/-/mocha-10.7.3.tgz", - "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", + "version": "10.8.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/mocha/-/mocha-10.8.1.tgz", + "integrity": "sha512-WxSpEWgF03HfgNKBuysfK40DUaOSVX5zxgLDoieMGO+zyE69iq2eQ1vBypvIJ5mOPKpuVAqWiTbt4Orj7L6wVw==", "dev": true, "license": "MIT", "peer": true, @@ -29150,34 +25540,6 @@ "node": ">= 14.0.0" } }, - "node_modules/mocha/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/mocha/node_modules/argparse": { "version": "2.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/argparse/-/argparse-2.0.1.tgz", @@ -29199,20 +25561,6 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mocha/node_modules/glob": { "version": "8.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/glob/-/glob-8.1.0.tgz", @@ -29235,17 +25583,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/mocha/node_modules/js-yaml": { "version": "4.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/js-yaml/-/js-yaml-4.1.0.tgz", @@ -29395,16 +25732,6 @@ "node": ">=10.0.0" } }, - "node_modules/mochawesome-merge/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/mochawesome-merge/node_modules/cliui": { "version": "6.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/cliui/-/cliui-6.0.0.tgz", @@ -29599,128 +25926,19 @@ "marge": "bin/cli.js" } }, - "node_modules/mochawesome-report-generator/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/mochawesome-report-generator/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/mochawesome-report-generator/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/mochawesome-report-generator/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/mochawesome-report-generator/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mochawesome/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/mochawesome/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/mochawesome/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/mochawesome/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "version": "10.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, "engines": { - "node": ">=8" + "node": ">=12" } }, "node_modules/mochawesome/node_modules/strip-ansi": { @@ -29736,19 +25954,6 @@ "node": ">=8" } }, - "node_modules/mochawesome/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/mochawesome/node_modules/uuid": { "version": "8.3.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/uuid/-/uuid-8.3.2.tgz", @@ -29770,9 +25975,9 @@ } }, "node_modules/moment-timezone": { - "version": "0.5.45", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/moment-timezone/-/moment-timezone-0.5.45.tgz", - "integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==", + "version": "0.5.46", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/moment-timezone/-/moment-timezone-0.5.46.tgz", + "integrity": "sha512-ZXm9b36esbe7OmdABqIWJuBBiLLwAjrN7CE+7sYdCCx82Nabt1wHDj8TVseS59QIlfFPbOoiBPm6ca9BioG4hw==", "dev": true, "license": "MIT", "dependencies": { @@ -29870,6 +26075,37 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/msgpackr": { + "version": "1.11.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/msgpackr/-/msgpackr-1.11.0.tgz", + "integrity": "sha512-I8qXuuALqJe5laEBYoFykChhSXLikZmUhccjGsPuSJ/7uPip2TJ7lwdIQwWSAi0jGZDXv4WOP8Qg65QZRuXxXw==", + "license": "MIT", + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz", + "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "5.2.2" + }, + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" + } + }, "node_modules/multicast-dns": { "version": "7.2.5", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/multicast-dns/-/multicast-dns-7.2.5.tgz", @@ -29905,9 +26141,9 @@ } }, "node_modules/nan": { - "version": "2.20.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/nan/-/nan-2.20.0.tgz", - "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==", + "version": "2.22.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/nan/-/nan-2.22.0.tgz", + "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==", "dev": true, "license": "MIT", "optional": true @@ -30021,15 +26257,15 @@ } }, "node_modules/ng-packagr": { - "version": "17.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ng-packagr/-/ng-packagr-17.3.0.tgz", - "integrity": "sha512-kMSqxeDgv88SWCoapWNRRN1UdBgwu9/Pw/j7u2WFGmzrIWUFivNWBBSSL94kMxr2La+Z9wMwiL8EwKNvmCpg2A==", + "version": "18.2.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ng-packagr/-/ng-packagr-18.2.1.tgz", + "integrity": "sha512-dy9ZDpZb3QpAz+Y/m8VAu7ctr2VrnRU3gmQwJagnNybVJtCsKn3lZA3IW7Z7GTLoG5IALSPouiCgiB/C8ozv7w==", "devOptional": true, "license": "MIT", "dependencies": { - "@rollup/plugin-json": "^6.0.1", + "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^15.2.3", - "@rollup/wasm-node": "^4.5.0", + "@rollup/wasm-node": "^4.18.0", "ajv": "^8.12.0", "ansi-colors": "^4.1.3", "browserslist": "^4.22.1", @@ -30038,7 +26274,7 @@ "commander": "^12.0.0", "convert-source-map": "^2.0.0", "dependency-graph": "^1.0.0", - "esbuild-wasm": "^0.20.0", + "esbuild": "^0.23.0", "fast-glob": "^3.3.1", "find-cache-dir": "^3.3.2", "injection-js": "^2.4.0", @@ -30054,17 +26290,16 @@ "ng-packagr": "cli/main.js" }, "engines": { - "node": "^18.13.0 || >=20.9.0" + "node": "^18.19.1 || >=20.11.1" }, "optionalDependencies": { - "esbuild": "^0.20.0", - "rollup": "^4.5.0" + "rollup": "^4.18.0" }, "peerDependencies": { - "@angular/compiler-cli": "^17.0.0 || ^17.2.0-next.0 || ^17.3.0-next.0", + "@angular/compiler-cli": "^18.0.0 || ^18.2.0-next.0", "tailwindcss": "^2.0.0 || ^3.0.0", "tslib": "^2.3.0", - "typescript": ">=5.2 <5.5" + "typescript": ">=5.4 <5.6" }, "peerDependenciesMeta": { "tailwindcss": { @@ -30072,397 +26307,6 @@ } } }, - "node_modules/ng-packagr/node_modules/@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/ng-packagr/node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/ng-packagr/node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/ng-packagr/node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/ng-packagr/node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/ng-packagr/node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/ng-packagr/node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/ng-packagr/node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/ng-packagr/node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/ng-packagr/node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/ng-packagr/node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/ng-packagr/node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/ng-packagr/node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/ng-packagr/node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/ng-packagr/node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/ng-packagr/node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/ng-packagr/node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/ng-packagr/node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/ng-packagr/node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/ng-packagr/node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/ng-packagr/node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/ng-packagr/node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/ng-packagr/node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/ng-packagr/node_modules/commander": { "version": "12.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/commander/-/commander-12.1.0.tgz", @@ -30480,46 +26324,6 @@ "devOptional": true, "license": "MIT" }, - "node_modules/ng-packagr/node_modules/esbuild": { - "version": "0.20.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" - } - }, "node_modules/nice-napi": { "version": "1.0.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/nice-napi/-/nice-napi-1.0.2.tgz", @@ -30559,19 +26363,6 @@ "license": "MIT", "optional": true }, - "node_modules/node-downloader-helper": { - "version": "2.1.9", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/node-downloader-helper/-/node-downloader-helper-2.1.9.tgz", - "integrity": "sha512-FSvAol2Z8UP191sZtsUZwHIN0eGoGue3uEXGdWIH5228e9KH1YHXT7fN8Oa33UGf+FbqGTQg3sJfrRGzmVCaJA==", - "dev": true, - "license": "MIT", - "bin": { - "ndh": "bin/ndh" - }, - "engines": { - "node": ">=14.18" - } - }, "node_modules/node-forge": { "version": "1.3.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/node-forge/-/node-forge-1.3.1.tgz", @@ -30618,6 +26409,20 @@ "node-gyp-build-test": "build-test.js" } }, + "node_modules/node-gyp-build-optional-packages": { + "version": "5.2.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", + "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.1" + }, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, "node_modules/node-gyp/node_modules/glob": { "version": "10.4.5", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/glob/-/glob-10.4.5.tgz", @@ -30665,16 +26470,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/node-gyp/node_modules/proc-log": { - "version": "4.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/node-gyp/node_modules/which": { "version": "4.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/which/-/which-4.0.0.tgz", @@ -30749,13 +26544,6 @@ "dev": true, "license": "ISC" }, - "node_modules/node-libs-browser/node_modules/isarray": { - "version": "1.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, "node_modules/node-libs-browser/node_modules/path-browserify": { "version": "0.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/path-browserify/-/path-browserify-0.0.1.tgz", @@ -30763,13 +26551,6 @@ "dev": true, "license": "MIT" }, - "node_modules/node-libs-browser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true, - "license": "MIT" - }, "node_modules/node-libs-browser/node_modules/readable-stream": { "version": "2.3.8", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/readable-stream/-/readable-stream-2.3.8.tgz", @@ -30825,6 +26606,20 @@ "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "license": "MIT" }, + "node_modules/node-schedule": { + "version": "2.1.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/node-schedule/-/node-schedule-2.1.1.tgz", + "integrity": "sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==", + "license": "MIT", + "dependencies": { + "cron-parser": "^4.2.0", + "long-timeout": "0.1.1", + "sorted-array-functions": "^1.3.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/nopt": { "version": "7.2.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/nopt/-/nopt-7.2.1.tgz", @@ -30911,13 +26706,14 @@ } }, "node_modules/npm-package-arg": { - "version": "11.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/npm-package-arg/-/npm-package-arg-11.0.1.tgz", - "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", + "version": "11.0.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/npm-package-arg/-/npm-package-arg-11.0.3.tgz", + "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", + "dev": true, "license": "ISC", "dependencies": { "hosted-git-info": "^7.0.0", - "proc-log": "^3.0.0", + "proc-log": "^4.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^5.0.0" }, @@ -30939,9 +26735,9 @@ } }, "node_modules/npm-pick-manifest": { - "version": "9.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz", - "integrity": "sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg==", + "version": "9.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz", + "integrity": "sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==", "dev": true, "license": "ISC", "dependencies": { @@ -30955,17 +26751,17 @@ } }, "node_modules/npm-registry-fetch": { - "version": "16.2.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/npm-registry-fetch/-/npm-registry-fetch-16.2.1.tgz", - "integrity": "sha512-8l+7jxhim55S85fjiDGJ1rZXBWGtRLi1OSb4Z3BPLObPuIaeKRlPRiYMSHU4/81ck3t71Z+UwDDl47gcpmfQQA==", + "version": "17.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz", + "integrity": "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/redact": "^1.1.0", + "@npmcli/redact": "^2.0.0", + "jsonparse": "^1.3.1", "make-fetch-happen": "^13.0.0", "minipass": "^7.0.2", "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", "npm-package-arg": "^11.0.0", "proc-log": "^4.0.0" @@ -30974,16 +26770,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm-registry-fetch/node_modules/proc-log": { - "version": "4.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -31009,39 +26795,39 @@ } }, "node_modules/nwsapi": { - "version": "2.2.12", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/nwsapi/-/nwsapi-2.2.12.tgz", - "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==", + "version": "2.2.13", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/nwsapi/-/nwsapi-2.2.13.tgz", + "integrity": "sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==", "devOptional": true, "license": "MIT" }, "node_modules/nx": { - "version": "18.3.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/nx/-/nx-18.3.5.tgz", - "integrity": "sha512-wWcvwoTgiT5okdrG0RIWm1tepC17bDmSpw+MrOxnjfBjARQNTURkiq4U6cxjCVsCxNHxCrlAaBSQLZeBgJZTzQ==", + "version": "19.8.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/nx/-/nx-19.8.8.tgz", + "integrity": "sha512-Qvxy87uX8/Mre+GgXn5+uf3ehMn1mqO35UwJChVGWbuKJUELqrwvDRPfWcXNfwKniBmUL89gtO18OOZigx8YCw==", "hasInstallScript": true, "license": "MIT", "dependencies": { - "@nrwl/tao": "18.3.5", + "@napi-rs/wasm-runtime": "0.2.4", + "@nrwl/tao": "19.8.8", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "3.0.0-rc.46", - "@zkochan/js-yaml": "0.0.6", - "axios": "^1.6.0", + "@zkochan/js-yaml": "0.0.7", + "axios": "^1.7.4", "chalk": "^4.1.0", "cli-cursor": "3.1.0", "cli-spinners": "2.6.1", "cliui": "^8.0.1", - "dotenv": "~16.3.1", - "dotenv-expand": "~10.0.0", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", "enquirer": "~2.3.6", "figures": "3.2.0", "flat": "^5.0.2", - "fs-extra": "^11.1.0", + "front-matter": "^4.0.2", "ignore": "^5.0.4", "jest-diff": "^29.4.1", - "js-yaml": "4.1.0", "jsonc-parser": "3.2.0", - "lines-and-columns": "~2.0.3", + "lines-and-columns": "2.0.3", "minimatch": "9.0.3", "node-machine-id": "1.1.12", "npm-run-path": "^4.0.1", @@ -31062,16 +26848,16 @@ "nx-cloud": "bin/nx-cloud.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "18.3.5", - "@nx/nx-darwin-x64": "18.3.5", - "@nx/nx-freebsd-x64": "18.3.5", - "@nx/nx-linux-arm-gnueabihf": "18.3.5", - "@nx/nx-linux-arm64-gnu": "18.3.5", - "@nx/nx-linux-arm64-musl": "18.3.5", - "@nx/nx-linux-x64-gnu": "18.3.5", - "@nx/nx-linux-x64-musl": "18.3.5", - "@nx/nx-win32-arm64-msvc": "18.3.5", - "@nx/nx-win32-x64-msvc": "18.3.5" + "@nx/nx-darwin-arm64": "19.8.8", + "@nx/nx-darwin-x64": "19.8.8", + "@nx/nx-freebsd-x64": "19.8.8", + "@nx/nx-linux-arm-gnueabihf": "19.8.8", + "@nx/nx-linux-arm64-gnu": "19.8.8", + "@nx/nx-linux-arm64-musl": "19.8.8", + "@nx/nx-linux-x64-gnu": "19.8.8", + "@nx/nx-linux-x64-musl": "19.8.8", + "@nx/nx-win32-arm64-msvc": "19.8.8", + "@nx/nx-win32-x64-msvc": "19.8.8" }, "peerDependencies": { "@swc-node/register": "^1.8.0", @@ -31086,91 +26872,65 @@ } } }, - "node_modules/nx/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/nx/node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/nx/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/nx/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" + "bin": { + "is-docker": "cli.js" }, "engines": { "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nx/node_modules/argparse": { - "version": "2.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" - }, - "node_modules/nx/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/nx/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/nx/node_modules/dotenv": { - "version": "16.3.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/dotenv/-/dotenv-16.3.2.tgz", - "integrity": "sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" + "is-docker": "^2.0.0" }, - "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" - } - }, - "node_modules/nx/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/nx/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/nx/node_modules/jsonc-parser": { "version": "3.2.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jsonc-parser/-/jsonc-parser-3.2.0.tgz", "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "license": "MIT" }, + "node_modules/nx/node_modules/open": { + "version": "8.4.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/nx/node_modules/ora": { "version": "5.3.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ora/-/ora-5.3.0.tgz", @@ -31205,18 +26965,6 @@ "node": ">=8" } }, - "node_modules/nx/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/nx/node_modules/tar-stream": { "version": "2.2.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tar-stream/-/tar-stream-2.2.0.tgz", @@ -31237,6 +26985,7 @@ "version": "4.1.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -31319,23 +27068,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-is": { - "version": "1.1.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/object-keys/-/object-keys-1.1.1.tgz", @@ -31442,18 +27174,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/only": { + "version": "0.0.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/only/-/only-0.0.2.tgz", + "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==" + }, "node_modules/open": { - "version": "8.4.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "version": "10.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", "license": "MIT", "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -31508,55 +27246,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/ora/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -31569,17 +27258,11 @@ "node": ">=8" } }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "node_modules/ordered-binary": { + "version": "1.5.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ordered-binary/-/ordered-binary-1.5.2.tgz", + "integrity": "sha512-JTo+4+4Fw7FreyAvlSLjb1BBVaxEQAacmjD3jjuyPZclpbEghTvQZbXBb2qPd2LeIMxiHwXBZUcpmG2Gl/mDEA==", + "license": "MIT" }, "node_modules/os-browserify": { "version": "0.3.0", @@ -31592,6 +27275,7 @@ "version": "1.0.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -31651,16 +27335,20 @@ } }, "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "version": "6.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/p-retry/-/p-retry-6.2.0.tgz", + "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==", "license": "MIT", "dependencies": { - "@types/retry": "0.12.0", + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", "retry": "^0.13.1" }, "engines": { - "node": ">=8" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-retry/node_modules/retry": { @@ -31682,40 +27370,38 @@ } }, "node_modules/package-json-from-dist": { - "version": "1.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "devOptional": true, + "version": "1.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "license": "BlueOak-1.0.0" }, "node_modules/pacote": { - "version": "17.0.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/pacote/-/pacote-17.0.6.tgz", - "integrity": "sha512-cJKrW21VRE8vVTRskJo78c/RCvwJCn1f4qgfxL4w77SOWrTCRcmfkYHlHtS0gqpgjv3zhXflRtgsrUCX5xwNnQ==", + "version": "18.0.6", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/pacote/-/pacote-18.0.6.tgz", + "integrity": "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==", "dev": true, "license": "ISC", "dependencies": { "@npmcli/git": "^5.0.0", "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/package-json": "^5.1.0", "@npmcli/promise-spawn": "^7.0.0", - "@npmcli/run-script": "^7.0.0", + "@npmcli/run-script": "^8.0.0", "cacache": "^18.0.0", "fs-minipass": "^3.0.0", "minipass": "^7.0.2", "npm-package-arg": "^11.0.0", "npm-packlist": "^8.0.0", "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^16.0.0", - "proc-log": "^3.0.0", + "npm-registry-fetch": "^17.0.0", + "proc-log": "^4.0.0", "promise-retry": "^2.0.1", - "read-package-json": "^7.0.0", - "read-package-json-fast": "^3.0.0", "sigstore": "^2.2.0", "ssri": "^10.0.0", "tar": "^6.1.11" }, "bin": { - "pacote": "lib/bin.js" + "pacote": "bin/index.js" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -31740,13 +27426,6 @@ "readable-stream": "^2.1.5" } }, - "node_modules/parallel-transform/node_modules/isarray": { - "version": "1.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, "node_modules/parallel-transform/node_modules/readable-stream": { "version": "2.3.8", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/readable-stream/-/readable-stream-2.3.8.tgz", @@ -31860,13 +27539,22 @@ "node": ">= 0.10" } }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/parse5": { - "version": "7.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "version": "7.2.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/parse5/-/parse5-7.2.1.tgz", + "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", "license": "MIT", "dependencies": { - "entities": "^4.4.0" + "entities": "^4.5.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" @@ -31980,7 +27668,6 @@ "version": "1.11.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "devOptional": true, "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", @@ -31997,7 +27684,6 @@ "version": "10.4.3", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "devOptional": true, "license": "ISC" }, "node_modules/path-to-regexp": { @@ -32015,6 +27701,16 @@ "node": ">=8" } }, + "node_modules/pathval": { + "version": "2.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, "node_modules/pbkdf2": { "version": "3.1.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/pbkdf2/-/pbkdf2-3.1.2.tgz", @@ -32044,13 +27740,6 @@ "through2": "^2.0.3" } }, - "node_modules/peek-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, "node_modules/peek-stream/node_modules/readable-stream": { "version": "2.3.8", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/readable-stream/-/readable-stream-2.3.8.tgz", @@ -32099,6 +27788,7 @@ "version": "1.2.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, "license": "MIT" }, "node_modules/performance-now": { @@ -32109,15 +27799,15 @@ "license": "MIT" }, "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "version": "1.1.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/picomatch/-/picomatch-4.0.1.tgz", - "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", + "version": "4.0.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "license": "MIT", "engines": { "node": ">=12" @@ -32139,6 +27829,7 @@ "version": "2.0.4", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/pinkie/-/pinkie-2.0.4.tgz", "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -32148,6 +27839,7 @@ "version": "2.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, "license": "MIT", "dependencies": { "pinkie": "^2.0.0" @@ -32167,9 +27859,9 @@ } }, "node_modules/piscina": { - "version": "4.4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/piscina/-/piscina-4.4.0.tgz", - "integrity": "sha512-+AQduEJefrOApE4bV7KRmp3N2JnnyErlVqq4P/jmko4FPz9Z877BCccl/iB3FdrWSUkvbGV9Kan/KllJgat3Vg==", + "version": "4.6.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/piscina/-/piscina-4.6.1.tgz", + "integrity": "sha512-z30AwWGtQE+Apr+2WBZensP2lIvwoaMcOPkQlIEmSGMJNUvaYACylPYrQM6wSdUNJlnDVMSpLv7xTMJqlVshOA==", "license": "MIT", "optionalDependencies": { "nice-napi": "^1.0.2" @@ -32357,26 +28049,6 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-attribute-case-insensitive": { - "version": "5.0.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", - "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, "node_modules/postcss-calc": { "version": "9.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-calc/-/postcss-calc-9.0.1.tgz", @@ -32393,82 +28065,6 @@ "postcss": "^8.2.2" } }, - "node_modules/postcss-clamp": { - "version": "4.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=7.6.0" - }, - "peerDependencies": { - "postcss": "^8.4.6" - } - }, - "node_modules/postcss-color-functional-notation": { - "version": "4.2.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", - "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-color-hex-alpha": { - "version": "8.0.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", - "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-color-rebeccapurple": { - "version": "7.1.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", - "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, "node_modules/postcss-colormin": { "version": "6.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-colormin/-/postcss-colormin-6.1.0.tgz", @@ -32503,86 +28099,6 @@ "postcss": "^8.4.31" } }, - "node_modules/postcss-custom-media": { - "version": "8.0.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", - "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/postcss-custom-properties": { - "version": "12.1.11", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", - "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-custom-selectors": { - "version": "6.0.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", - "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/postcss-dir-pseudo-class": { - "version": "6.0.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", - "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, "node_modules/postcss-discard-comments": { "version": "6.0.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", @@ -32631,122 +28147,6 @@ "postcss": "^8.4.31" } }, - "node_modules/postcss-double-position-gradients": { - "version": "3.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", - "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-env-function": { - "version": "4.0.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-env-function/-/postcss-env-function-4.0.6.tgz", - "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-visible": { - "version": "6.0.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", - "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-within": { - "version": "5.0.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", - "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-font-variant": { - "version": "5.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-gap-properties": { - "version": "3.0.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", - "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", - "dev": true, - "license": "CC0-1.0", - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-image-set-function": { - "version": "4.0.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", - "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, "node_modules/postcss-import": { "version": "14.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-import/-/postcss-import-14.1.0.tgz", @@ -32764,16 +28164,6 @@ "postcss": "^8.0.0" } }, - "node_modules/postcss-initial": { - "version": "4.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "postcss": "^8.0.0" - } - }, "node_modules/postcss-js": { "version": "4.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-js/-/postcss-js-4.0.1.tgz", @@ -32794,27 +28184,6 @@ "postcss": "^8.4.21" } }, - "node_modules/postcss-lab-function": { - "version": "4.2.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", - "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, "node_modules/postcss-load-config": { "version": "4.0.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-load-config/-/postcss-load-config-4.0.2.tgz", @@ -32852,9 +28221,9 @@ } }, "node_modules/postcss-load-config/node_modules/yaml": { - "version": "2.5.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/yaml/-/yaml-2.5.1.tgz", - "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", + "version": "2.6.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/yaml/-/yaml-2.6.0.tgz", + "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==", "devOptional": true, "license": "ISC", "bin": { @@ -32939,32 +28308,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/postcss-logical": { - "version": "5.0.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-logical/-/postcss-logical-5.0.4.tgz", - "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", - "dev": true, - "license": "CC0-1.0", - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-media-minmax": { - "version": "5.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", - "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, "node_modules/postcss-media-query-parser": { "version": "0.2.3", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", @@ -33154,27 +28497,6 @@ "postcss": "^8.2.14" } }, - "node_modules/postcss-nesting": { - "version": "10.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-nesting/-/postcss-nesting-10.2.0.tgz", - "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, "node_modules/postcss-normalize-charset": { "version": "6.0.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", @@ -33308,29 +28630,6 @@ "postcss": "^8.4.31" } }, - "node_modules/postcss-opacity-percentage": { - "version": "1.1.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", - "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", - "dev": true, - "funding": [ - { - "type": "kofi", - "url": "https://ko-fi.com/mrcgrtz" - }, - { - "type": "liberapay", - "url": "https://liberapay.com/mrcgrtz" - } - ], - "license": "MIT", - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, "node_modules/postcss-ordered-values": { "version": "6.0.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", @@ -33347,144 +28646,6 @@ "postcss": "^8.4.31" } }, - "node_modules/postcss-overflow-shorthand": { - "version": "3.0.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", - "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-page-break": { - "version": "3.0.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "postcss": "^8" - } - }, - "node_modules/postcss-place": { - "version": "7.0.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-place/-/postcss-place-7.0.5.tgz", - "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-preset-env": { - "version": "7.8.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", - "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "@csstools/postcss-cascade-layers": "^1.1.1", - "@csstools/postcss-color-function": "^1.1.1", - "@csstools/postcss-font-format-keywords": "^1.0.1", - "@csstools/postcss-hwb-function": "^1.0.2", - "@csstools/postcss-ic-unit": "^1.0.1", - "@csstools/postcss-is-pseudo-class": "^2.0.7", - "@csstools/postcss-nested-calc": "^1.0.0", - "@csstools/postcss-normalize-display-values": "^1.0.1", - "@csstools/postcss-oklab-function": "^1.1.1", - "@csstools/postcss-progressive-custom-properties": "^1.3.0", - "@csstools/postcss-stepped-value-functions": "^1.0.1", - "@csstools/postcss-text-decoration-shorthand": "^1.0.0", - "@csstools/postcss-trigonometric-functions": "^1.0.2", - "@csstools/postcss-unset-value": "^1.0.2", - "autoprefixer": "^10.4.13", - "browserslist": "^4.21.4", - "css-blank-pseudo": "^3.0.3", - "css-has-pseudo": "^3.0.4", - "css-prefers-color-scheme": "^6.0.3", - "cssdb": "^7.1.0", - "postcss-attribute-case-insensitive": "^5.0.2", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^4.2.4", - "postcss-color-hex-alpha": "^8.0.4", - "postcss-color-rebeccapurple": "^7.1.1", - "postcss-custom-media": "^8.0.2", - "postcss-custom-properties": "^12.1.10", - "postcss-custom-selectors": "^6.0.3", - "postcss-dir-pseudo-class": "^6.0.5", - "postcss-double-position-gradients": "^3.1.2", - "postcss-env-function": "^4.0.6", - "postcss-focus-visible": "^6.0.4", - "postcss-focus-within": "^5.0.4", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.5", - "postcss-image-set-function": "^4.0.7", - "postcss-initial": "^4.0.1", - "postcss-lab-function": "^4.2.1", - "postcss-logical": "^5.0.4", - "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.2.0", - "postcss-opacity-percentage": "^1.1.2", - "postcss-overflow-shorthand": "^3.0.4", - "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.5", - "postcss-pseudo-class-any-link": "^7.1.6", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "7.1.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", - "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, "node_modules/postcss-reduce-initial": { "version": "6.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", @@ -33516,36 +28677,6 @@ "postcss": "^8.4.31" } }, - "node_modules/postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "postcss": "^8.0.3" - } - }, - "node_modules/postcss-selector-not": { - "version": "6.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", - "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, "node_modules/postcss-selector-parser": { "version": "6.1.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", @@ -33590,88 +28721,6 @@ "postcss": "^8.4.31" } }, - "node_modules/postcss-url": { - "version": "10.1.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-url/-/postcss-url-10.1.3.tgz", - "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "make-dir": "~3.1.0", - "mime": "~2.5.2", - "minimatch": "~3.0.4", - "xxhashjs": "~0.2.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-url/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/postcss-url/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/postcss-url/node_modules/mime": { - "version": "2.5.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/postcss-url/node_modules/minimatch": { - "version": "3.0.8", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/postcss-url/node_modules/semver": { - "version": "6.3.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", @@ -33704,30 +28753,26 @@ } }, "node_modules/prettier-plugin-organize-imports": { - "version": "3.2.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-3.2.4.tgz", - "integrity": "sha512-6m8WBhIp0dfwu0SkgfOxJqh+HpdyfqSSLfKKRZSFbDuEQXDDndb8fTpRWkUrX/uBenkex3MgnVk0J3b3Y5byog==", + "version": "4.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.1.0.tgz", + "integrity": "sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==", "dev": true, "license": "MIT", "peerDependencies": { - "@volar/vue-language-plugin-pug": "^1.0.4", - "@volar/vue-typescript": "^1.0.4", "prettier": ">=2.0", - "typescript": ">=2.9" + "typescript": ">=2.9", + "vue-tsc": "^2.1.0" }, "peerDependenciesMeta": { - "@volar/vue-language-plugin-pug": { - "optional": true - }, - "@volar/vue-typescript": { + "vue-tsc": { "optional": true } } }, "node_modules/prettier-plugin-tailwindcss": { - "version": "0.5.14", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.5.14.tgz", - "integrity": "sha512-Puaz+wPUAhFp8Lo9HuciYKM2Y2XExESjeT+9NQoVFXZsPPnc9VYss2SpxdQ6vbatmt8/4+SN0oe0I1cPDABg9Q==", + "version": "0.6.8", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.8.tgz", + "integrity": "sha512-dGu3kdm7SXPkiW4nzeWKCl3uoImdd5CTZEJGxyypEPL37Wj0HT2pLqjrvSei1nTeuQfO4PUfjeW5cTUNRLZ4sA==", "dev": true, "license": "MIT", "engines": { @@ -33745,6 +28790,7 @@ "prettier-plugin-import-sort": "*", "prettier-plugin-jsdoc": "*", "prettier-plugin-marko": "*", + "prettier-plugin-multiline-arrays": "*", "prettier-plugin-organize-attributes": "*", "prettier-plugin-organize-imports": "*", "prettier-plugin-sort-imports": "*", @@ -33782,6 +28828,9 @@ "prettier-plugin-marko": { "optional": true }, + "prettier-plugin-multiline-arrays": { + "optional": true + }, "prettier-plugin-organize-attributes": { "optional": true }, @@ -33824,23 +28873,25 @@ } }, "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "version": "27.5.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", + "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "react-is": "^17.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -33850,9 +28901,10 @@ } }, "node_modules/proc-log": { - "version": "3.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "version": "4.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -33888,16 +28940,6 @@ "duplex-maker": "^1.0.0" } }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -33953,9 +28995,9 @@ "license": "MIT" }, "node_modules/properties-file": { - "version": "3.5.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/properties-file/-/properties-file-3.5.7.tgz", - "integrity": "sha512-f47I5uaVJJnE3KilDi9vfXT6Bc/6rrRgsJ8L55CUcalnsurxG+jwkGzAAqvyXDixK+ejzvO80Q8OngwDWErk3Q==", + "version": "3.5.9", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/properties-file/-/properties-file-3.5.9.tgz", + "integrity": "sha512-04pqpblRKTG7S6Juyx2rYdAwJJ+hK9SIycmDwwic1T+m3Ek6nBSKvHalIoF10RNpx7Xi3891JZZkyIIVCJETaQ==", "dev": true, "license": "MIT", "engines": { @@ -33976,10 +29018,9 @@ } }, "node_modules/proxy-from-env": { - "version": "1.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true, + "version": "1.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "license": "MIT" }, "node_modules/prr": { @@ -34053,13 +29094,11 @@ } }, "node_modules/punycode": { - "version": "2.3.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", - "engines": { - "node": ">=6" - } + "version": "1.4.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true, + "license": "MIT" }, "node_modules/pure-rand": { "version": "6.1.0", @@ -34129,17 +29168,18 @@ ], "license": "MIT" }, - "node_modules/ramda": { - "version": "0.29.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ramda/-/ramda-0.29.0.tgz", - "integrity": "sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==", + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", "dev": true, - "license": "MIT", - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ramda" - } + "license": "MIT" + }, + "node_modules/rambda": { + "version": "9.3.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/rambda/-/rambda-9.3.0.tgz", + "integrity": "sha512-cl/7DCCKNxmsbc0dXZTJTY08rvDdzLhVfE6kPBson1fWzDapLzv0RKSzjpmAqP53fkQqAvq05gpUVHTrUNsuxg==", + "license": "MIT" }, "node_modules/randombytes": { "version": "2.1.0", @@ -34189,7 +29229,6 @@ "version": "18.3.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" @@ -34229,7 +29268,6 @@ "version": "18.3.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", @@ -34240,86 +29278,11 @@ } }, "node_modules/react-is": { - "version": "18.3.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" - }, - "node_modules/react-remove-scroll": { - "version": "2.5.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", - "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "react-remove-scroll-bar": "^2.3.3", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-remove-scroll-bar": { - "version": "2.3.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", - "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "react-style-singleton": "^2.2.1", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-style-singleton": { - "version": "2.2.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/react-style-singleton/-/react-style-singleton-2.2.1.tgz", - "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "version": "17.0.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "get-nonce": "^1.0.0", - "invariant": "^2.2.4", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } + "license": "MIT" }, "node_modules/read-cache": { "version": "1.0.0", @@ -34330,74 +29293,6 @@ "pify": "^2.3.0" } }, - "node_modules/read-package-json": { - "version": "7.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/read-package-json/-/read-package-json-7.0.1.tgz", - "integrity": "sha512-8PcDiZ8DXUjLf687Ol4BR8Bpm2umR7vhoZOzNRt+uxD9GpBh/K+CAAALVIiYFknmvlmyg7hM7BSNUXPaCCqd0Q==", - "deprecated": "This package is no longer supported. Please use @npmcli/package-json instead.", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast": { - "version": "3.0.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", - "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", - "dev": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json/node_modules/glob": { - "version": "10.4.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/read-package-json/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/readable-stream/-/readable-stream-3.6.2.tgz", @@ -34442,7 +29337,6 @@ "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ast-types": "^0.16.1", "esprima": "~4.0.0", @@ -34460,7 +29354,6 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -34538,35 +29431,16 @@ "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==", "license": "MIT" }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "version": "6.1.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/regexpu-core/-/regexpu-core-6.1.1.tgz", + "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", "license": "MIT", "dependencies": { - "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.11.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" }, @@ -34574,24 +29448,34 @@ "node": ">=4" } }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "license": "MIT" + }, "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "version": "0.11.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/regjsparser/-/regjsparser-0.11.2.tgz", + "integrity": "sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA==", "license": "BSD-2-Clause", "dependencies": { - "jsesc": "~0.5.0" + "jsesc": "~3.0.2" }, "bin": { "regjsparser": "bin/parser" } }, "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "version": "3.0.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "license": "MIT", "bin": { "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" } }, "node_modules/rehype-external-links": { @@ -34663,16 +29547,6 @@ "strip-ansi": "^6.0.1" } }, - "node_modules/renderkid/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/renderkid/node_modules/css-select": { "version": "4.3.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/css-select/-/css-select-4.3.0.tgz", @@ -34870,10 +29744,24 @@ "node": ">=8" } }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve-from": { "version": "5.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -34949,6 +29837,12 @@ "node": ">=8" } }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, "node_modules/ret": { "version": "0.1.15", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ret/-/ret-0.1.15.tgz", @@ -34983,7 +29877,6 @@ "version": "1.4.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/rfdc/-/rfdc-1.4.1.tgz", "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true, "license": "MIT" }, "node_modules/rimraf": { @@ -35014,12 +29907,12 @@ } }, "node_modules/rollup": { - "version": "4.22.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/rollup/-/rollup-4.22.4.tgz", - "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==", + "version": "4.24.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/rollup/-/rollup-4.24.3.tgz", + "integrity": "sha512-HBW896xR5HGmoksbi3JBDtmVzWiPAYqp7wip50hjQ67JbDz61nyoMPdqu1DvVW9asYb2M65Z20ZHsyJCMqMyDg==", "license": "MIT", "dependencies": { - "@types/estree": "1.0.5" + "@types/estree": "1.0.6" }, "bin": { "rollup": "dist/bin/rollup" @@ -35029,38 +29922,37 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.22.4", - "@rollup/rollup-android-arm64": "4.22.4", - "@rollup/rollup-darwin-arm64": "4.22.4", - "@rollup/rollup-darwin-x64": "4.22.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", - "@rollup/rollup-linux-arm-musleabihf": "4.22.4", - "@rollup/rollup-linux-arm64-gnu": "4.22.4", - "@rollup/rollup-linux-arm64-musl": "4.22.4", - "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", - "@rollup/rollup-linux-riscv64-gnu": "4.22.4", - "@rollup/rollup-linux-s390x-gnu": "4.22.4", - "@rollup/rollup-linux-x64-gnu": "4.22.4", - "@rollup/rollup-linux-x64-musl": "4.22.4", - "@rollup/rollup-win32-arm64-msvc": "4.22.4", - "@rollup/rollup-win32-ia32-msvc": "4.22.4", - "@rollup/rollup-win32-x64-msvc": "4.22.4", + "@rollup/rollup-android-arm-eabi": "4.24.3", + "@rollup/rollup-android-arm64": "4.24.3", + "@rollup/rollup-darwin-arm64": "4.24.3", + "@rollup/rollup-darwin-x64": "4.24.3", + "@rollup/rollup-freebsd-arm64": "4.24.3", + "@rollup/rollup-freebsd-x64": "4.24.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.24.3", + "@rollup/rollup-linux-arm-musleabihf": "4.24.3", + "@rollup/rollup-linux-arm64-gnu": "4.24.3", + "@rollup/rollup-linux-arm64-musl": "4.24.3", + "@rollup/rollup-linux-powerpc64le-gnu": "4.24.3", + "@rollup/rollup-linux-riscv64-gnu": "4.24.3", + "@rollup/rollup-linux-s390x-gnu": "4.24.3", + "@rollup/rollup-linux-x64-gnu": "4.24.3", + "@rollup/rollup-linux-x64-musl": "4.24.3", + "@rollup/rollup-win32-arm64-msvc": "4.24.3", + "@rollup/rollup-win32-ia32-msvc": "4.24.3", + "@rollup/rollup-win32-x64-msvc": "4.24.3", "fsevents": "~2.3.2" } }, - "node_modules/rollup/node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "license": "MIT" - }, - "node_modules/run-async": { - "version": "3.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/run-async/-/run-async-3.0.0.tgz", - "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", "license": "MIT", "engines": { - "node": ">=0.12.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/run-parallel": { @@ -35141,12 +30033,6 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, - "node_modules/safevalues": { - "version": "0.3.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/safevalues/-/safevalues-0.3.4.tgz", - "integrity": "sha512-LRneZZRXNgjzwG4bDQdOTSbze3fHm1EAKN/8bePxnlEZiBmkYEDggaHbuvHI9/hoqHbGfsEA7tWS9GhYHZBBsw==", - "license": "Apache-2.0" - }, "node_modules/sanitize-filename-ts": { "version": "1.0.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/sanitize-filename-ts/-/sanitize-filename-ts-1.0.2.tgz", @@ -35157,9 +30043,9 @@ } }, "node_modules/sass": { - "version": "1.71.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/sass/-/sass-1.71.1.tgz", - "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", + "version": "1.77.6", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/sass/-/sass-1.77.6.tgz", + "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", "license": "MIT", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -35174,9 +30060,9 @@ } }, "node_modules/sass-loader": { - "version": "14.1.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/sass-loader/-/sass-loader-14.1.1.tgz", - "integrity": "sha512-QX8AasDg75monlybel38BZ49JP5Z+uSKfKwF2rO7S74BywaRmGQMUBw9dtkS+ekyM/QnP+NOrRYq8ABMZ9G8jw==", + "version": "16.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/sass-loader/-/sass-loader-16.0.0.tgz", + "integrity": "sha512-n13Z+3rU9A177dk4888czcVFiC8CL9dii4qpXWUg3YIIgZEvi9TCFKjOQcbK0kJM7DJu9VucrZFddvNfYCPwtw==", "license": "MIT", "dependencies": { "neo-async": "^2.6.2" @@ -35237,7 +30123,6 @@ "version": "0.23.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/scheduler/-/scheduler-0.23.2.tgz", "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" @@ -35262,6 +30147,23 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/schema-utils/node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, "node_modules/secure-compare": { "version": "3.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/secure-compare/-/secure-compare-3.0.1.tgz", @@ -35272,6 +30174,7 @@ "version": "1.0.6", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/seek-bzip/-/seek-bzip-1.0.6.tgz", "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "dev": true, "license": "MIT", "dependencies": { "commander": "^2.8.1" @@ -35285,6 +30188,7 @@ "version": "2.20.3", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, "license": "MIT" }, "node_modules/select-hose": { @@ -35307,13 +30211,10 @@ } }, "node_modules/semver": { - "version": "7.6.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.3", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -35321,24 +30222,6 @@ "node": ">=10" } }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, "node_modules/send": { "version": "0.19.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/send/-/send-0.19.0.tgz", @@ -35513,22 +30396,6 @@ "node": ">= 0.4" } }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/set-value": { "version": "2.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/set-value/-/set-value-2.0.1.tgz", @@ -35656,10 +30523,16 @@ } }, "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" + "version": "4.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/sigstore": { "version": "2.3.1", @@ -35703,37 +30576,35 @@ "version": "3.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, + "version": "5.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "version": "6.2.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" @@ -35962,44 +30833,131 @@ } }, "node_modules/sonarqube-scanner": { - "version": "3.5.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/sonarqube-scanner/-/sonarqube-scanner-3.5.0.tgz", - "integrity": "sha512-MiIJhFv8p/ePlTO0A1uC6UOxfIjSnjEw3sZ1G8q9mt6y2W/q/QrE/XWo0zCKkS8flmX0T2fjEuaDHnS/P9QQmw==", + "version": "4.2.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/sonarqube-scanner/-/sonarqube-scanner-4.2.5.tgz", + "integrity": "sha512-7Hs8Or1ZmgzIh4DLavRVlmrKfoQo+x6DFr7Aw3BnMRswlflalObKKJrj10/A2J2bfYd7iqkt1DXeIoTXNJrCkg==", "dev": true, "license": "LGPL-3.0-only", "dependencies": { "adm-zip": "0.5.12", - "fancy-log": "2.0.0", - "https-proxy-agent": "7.0.4", + "axios": "1.7.7", + "commander": "12.0.0", + "fs-extra": "11.2.0", + "hpagent": "1.2.0", "jest-sonar-reporter": "2.0.0", - "mkdirp": "3.0.1", - "node-downloader-helper": "2.1.9", - "progress": "2.0.3", - "slugify": "1.6.6" + "node-forge": "^1.3.1", + "properties-file": "3.5.4", + "proxy-from-env": "^1.1.0", + "semver": "7.6.0", + "slugify": "1.6.6", + "tar-stream": "3.1.7" }, "bin": { - "sonar-scanner": "src/bin/sonar-scanner" + "sonar-scanner": "bin/sonar-scanner" }, "engines": { - "node": ">= 16" + "node": ">= 18" } }, - "node_modules/sonarqube-scanner/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "node_modules/sonarqube-scanner/node_modules/adm-zip": { + "version": "0.5.12", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/adm-zip/-/adm-zip-0.5.12.tgz", + "integrity": "sha512-6TVU49mK6KZb4qG6xWaaM4C7sA/sgUMLy/JYMOzkcp3BvVLpW0fXDFQiIzAuxFCt/2+xD7fNIiPFAoLZPhVNLQ==", "dev": true, "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" + "engines": { + "node": ">=6.0" + } + }, + "node_modules/sonarqube-scanner/node_modules/commander": { + "version": "12.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/commander/-/commander-12.0.0.tgz", + "integrity": "sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/sonarqube-scanner/node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/sonarqube-scanner/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" }, "engines": { "node": ">=10" + } + }, + "node_modules/sonarqube-scanner/node_modules/properties-file": { + "version": "3.5.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/properties-file/-/properties-file-3.5.4.tgz", + "integrity": "sha512-OGQPWZ4j9ENDKBl+wUHqNtzayGF5sLlVcmjcqEMUUHeCbUSggDndii+kjcBDPj3GQvqYB9sUEc4siX36wx4glw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/sonarqube-scanner/node_modules/semver": { + "version": "7.6.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sonarqube-scanner/node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" } }, + "node_modules/sonarqube-scanner/node_modules/yallist": { + "version": "4.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/sorted-array-functions": { + "version": "1.3.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz", + "integrity": "sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==", + "license": "MIT" + }, "node_modules/source-list-map": { "version": "2.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/source-list-map/-/source-list-map-2.0.1.tgz", @@ -36325,36 +31283,14 @@ "node": ">= 0.8" } }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "internal-slot": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/store2": { - "version": "2.14.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/store2/-/store2-2.14.3.tgz", - "integrity": "sha512-4QcZ+yx7nzEFiV4BMLnr/pRa5HYzNITX2ri0Zh6sT9EyQHbBHacC6YigllUPU9X3D0f/22QCgfokpKs52YRrUg==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/storybook": { - "version": "8.3.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/storybook/-/storybook-8.3.3.tgz", - "integrity": "sha512-FG2KAVQN54T9R6voudiEftehtkXtLO+YVGP2gBPfacEdDQjY++ld7kTbHzpTT/bpCDx7Yq3dqOegLm9arVJfYw==", + "version": "8.4.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/storybook/-/storybook-8.4.0.tgz", + "integrity": "sha512-hLfXPtqfoQUMKVortxXdnQoUwDwtH85eSj9LbqGT/z1f/gLLYGNG3Mv3QbsRjHXhn+EfYffh7wuLpAn+Cicijw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@storybook/core": "8.3.3" + "@storybook/core": "8.4.0" }, "bin": { "getstorybook": "bin/index.cjs", @@ -36364,28 +31300,12 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" - } - }, - "node_modules/storybook-tailwind-dark-mode": { - "version": "1.0.22", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/storybook-tailwind-dark-mode/-/storybook-tailwind-dark-mode-1.0.22.tgz", - "integrity": "sha512-I0HSVCuvo3OkaGDnCjLM7V1OYmQccrUCAGZ5ZaJfl9s3e93WA6DKFpQRbuoSidci+PTy+KvgrINgE08rA16bWA==", - "dev": true, - "license": "MIT", + }, "peerDependencies": { - "@storybook/addons": "^7.0.0", - "@storybook/api": "^7.0.0", - "@storybook/components": "^7.0.0", - "@storybook/core-events": "^7.0.0", - "@storybook/theming": "^7.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "prettier": "^2 || ^3" }, "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { + "prettier": { "optional": true } } @@ -36401,13 +31321,6 @@ "readable-stream": "^2.0.2" } }, - "node_modules/stream-browserify/node_modules/isarray": { - "version": "1.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, "node_modules/stream-browserify/node_modules/readable-stream": { "version": "2.3.8", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/readable-stream/-/readable-stream-2.3.8.tgz", @@ -36466,13 +31379,6 @@ "xtend": "^4.0.0" } }, - "node_modules/stream-http/node_modules/isarray": { - "version": "1.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, "node_modules/stream-http/node_modules/readable-stream": { "version": "2.3.8", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/readable-stream/-/readable-stream-2.3.8.tgz", @@ -36513,6 +31419,67 @@ "dev": true, "license": "MIT" }, + "node_modules/streamroller": { + "version": "3.1.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", + "license": "MIT", + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/streamroller/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/streamroller/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/streamroller/node_modules/universalify": { + "version": "0.1.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/streamx": { + "version": "2.20.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/streamx/-/streamx-2.20.1.tgz", + "integrity": "sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/string_decoder/-/string_decoder-1.3.0.tgz", @@ -36536,16 +31503,6 @@ "node": ">=10" } }, - "node_modules/string-length/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/string-length/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -36578,7 +31535,6 @@ "version": "4.2.3", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "devOptional": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -36589,11 +31545,10 @@ "node": ">=8" } }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "license": "MIT", "engines": { "node": ">=8" @@ -36603,7 +31558,6 @@ "version": "6.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "devOptional": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -36612,10 +31566,10 @@ "node": ">=8" } }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/string-width/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "license": "MIT", "engines": { "node": ">=8" @@ -36637,7 +31591,6 @@ "version": "7.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "devOptional": true, "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -36654,7 +31607,6 @@ "version": "6.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "devOptional": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -36663,14 +31615,16 @@ "node": ">=8" } }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true, + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/strip-bom": { @@ -36687,6 +31641,7 @@ "version": "2.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/strip-dirs/-/strip-dirs-2.1.0.tgz", "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "dev": true, "license": "MIT", "dependencies": { "is-natural-number": "^4.0.1" @@ -36910,15 +31865,15 @@ } }, "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -36984,18 +31939,11 @@ "devOptional": true, "license": "MIT" }, - "node_modules/synchronous-promise": { - "version": "2.0.17", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/synchronous-promise/-/synchronous-promise-2.0.17.tgz", - "integrity": "sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true - }, "node_modules/tailwind-merge": { - "version": "2.5.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tailwind-merge/-/tailwind-merge-2.5.2.tgz", - "integrity": "sha512-kjEBm+pvD+6eAwzJL2Bi+02/9LFLal1Gs61+QB7HvTfQQ0aXwC5LGT8PEt1gS0CWKktKe6ysPTAy3cBC5MeiIg==", + "version": "2.5.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tailwind-merge/-/tailwind-merge-2.5.4.tgz", + "integrity": "sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==", + "dev": true, "license": "MIT", "funding": { "type": "github", @@ -37003,9 +31951,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.4.13", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tailwindcss/-/tailwindcss-3.4.13.tgz", - "integrity": "sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==", + "version": "3.4.14", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tailwindcss/-/tailwindcss-3.4.14.tgz", + "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==", "devOptional": true, "license": "MIT", "dependencies": { @@ -37040,19 +31988,6 @@ "node": ">=14.0.0" } }, - "node_modules/tailwindcss/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "devOptional": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/tailwindcss/node_modules/lilconfig": { "version": "2.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/lilconfig/-/lilconfig-2.1.0.tgz", @@ -37112,6 +32047,7 @@ "version": "1.6.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tar-stream/-/tar-stream-1.6.2.tgz", "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, "license": "MIT", "dependencies": { "bl": "^1.0.0", @@ -37130,22 +32066,18 @@ "version": "1.2.3", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/bl/-/bl-1.2.3.tgz", "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dev": true, "license": "MIT", "dependencies": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" } }, - "node_modules/tar-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, "node_modules/tar-stream/node_modules/readable-stream": { "version": "2.3.8", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", @@ -37161,12 +32093,14 @@ "version": "5.1.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, "license": "MIT" }, "node_modules/tar-stream/node_modules/string_decoder": { "version": "1.1.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" @@ -37243,9 +32177,9 @@ } }, "node_modules/terser": { - "version": "5.29.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/terser/-/terser-5.29.1.tgz", - "integrity": "sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ==", + "version": "5.31.6", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/terser/-/terser-5.31.6.tgz", + "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -37319,15 +32253,6 @@ "ajv": "^6.9.1" } }, - "node_modules/terser-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/terser-webpack-plugin/node_modules/jest-worker": { "version": "27.5.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/jest-worker/-/jest-worker-27.5.1.tgz", @@ -37391,6 +32316,7 @@ "version": "6.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "devOptional": true, "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", @@ -37405,6 +32331,7 @@ "version": "1.1.11", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "devOptional": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -37415,6 +32342,7 @@ "version": "3.1.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "devOptional": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -37423,6 +32351,13 @@ "node": "*" } }, + "node_modules/text-decoder": { + "version": "1.2.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/text-decoder/-/text-decoder-1.2.1.tgz", + "integrity": "sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/text-table/-/text-table-0.2.0.tgz", @@ -37452,6 +32387,18 @@ "node": ">=0.8" } }, + "node_modules/thingies": { + "version": "1.21.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/thingies/-/thingies-1.21.0.tgz", + "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", + "license": "Unlicense", + "engines": { + "node": ">=10.18" + }, + "peerDependencies": { + "tslib": "^2" + } + }, "node_modules/throttleit": { "version": "1.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/throttleit/-/throttleit-1.0.1.tgz", @@ -37504,6 +32451,46 @@ "dev": true, "license": "MIT" }, + "node_modules/tinyrainbow": { + "version": "1.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "3.0.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "6.1.57", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tldts/-/tldts-6.1.57.tgz", + "integrity": "sha512-Oy7yDXK8meJl8vPMOldzA+MtueAJ5BrH4l4HXwZuj2AtfoQbLjmTJmjNWPUcAo+E/ibHn7QlqMS0BOcXJFJyHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.57" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.57", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tldts-core/-/tldts-core-6.1.57.tgz", + "integrity": "sha512-lXnRhuQpx3zU9EONF9F7HfcRLvN1uRYUBIiKL+C/gehC/77XTU+Jye6ui86GA3rU6FjlJ0triD1Tkjt2F/2lEg==", + "dev": true, + "license": "MIT" + }, "node_modules/tmp": { "version": "0.2.3", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tmp/-/tmp-0.2.3.tgz", @@ -37531,17 +32518,9 @@ "version": "1.1.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/to-buffer/-/to-buffer-1.1.1.tgz", "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true, "license": "MIT" }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/to-object-path": { "version": "0.3.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/to-object-path/-/to-object-path-0.3.0.tgz", @@ -37606,29 +32585,16 @@ } }, "node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", - "devOptional": true, + "version": "5.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tough-cookie/-/tough-cookie-5.0.0.tgz", + "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "tldts": "^6.1.32" }, "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" + "node": ">=16" } }, "node_modules/tr46": { @@ -37641,7 +32607,33 @@ "punycode": "^2.1.1" }, "engines": { - "node": ">=12" + "node": ">=12" + } + }, + "node_modules/tr46/node_modules/punycode": { + "version": "2.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tree-dump": { + "version": "1.0.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tree-dump/-/tree-dump-1.0.2.tgz", + "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, "node_modules/tree-kill": { @@ -37740,19 +32732,6 @@ } } }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.6.3", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/ts-loader": { "version": "8.4.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ts-loader/-/ts-loader-8.4.0.tgz", @@ -37774,49 +32753,6 @@ "webpack": "*" } }, - "node_modules/ts-loader/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ts-loader/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ts-loader/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/ts-loader/node_modules/loader-utils": { "version": "2.0.4", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/loader-utils/-/loader-utils-2.0.4.tgz", @@ -37832,19 +32768,6 @@ "node": ">=8.9.0" } }, - "node_modules/ts-loader/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ts-node": { "version": "10.9.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ts-node/-/ts-node-10.9.1.tgz", @@ -37978,39 +32901,6 @@ "tsconfig-paths": "^3.9.0" } }, - "node_modules/tsconfig-paths-webpack-plugin/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/tsconfig-paths-webpack-plugin/node_modules/chalk": { - "version": "4.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/tsconfig-paths-webpack-plugin/node_modules/enhanced-resolve": { "version": "5.17.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", @@ -38025,16 +32915,6 @@ "node": ">=10.13.0" } }, - "node_modules/tsconfig-paths-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/tsconfig-paths-webpack-plugin/node_modules/json5": { "version": "1.0.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/json5/-/json5-1.0.2.tgz", @@ -38058,19 +32938,6 @@ "node": ">=4" } }, - "node_modules/tsconfig-paths-webpack-plugin/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/tsconfig-paths-webpack-plugin/node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -38094,11 +32961,20 @@ } }, "node_modules/tslib": { - "version": "2.7.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "version": "2.8.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tslib/-/tslib-2.8.0.tgz", + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", "license": "0BSD" }, + "node_modules/tsscmp": { + "version": "1.0.6", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", + "license": "MIT", + "engines": { + "node": ">=0.6.x" + } + }, "node_modules/tty-browserify": { "version": "0.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/tty-browserify/-/tty-browserify-0.0.0.tgz", @@ -38226,9 +33102,9 @@ "license": "MIT" }, "node_modules/typescript": { - "version": "5.4.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "version": "5.5.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -38256,6 +33132,7 @@ "version": "1.4.3", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, "license": "MIT", "dependencies": { "buffer": "^5.2.1", @@ -38263,12 +33140,16 @@ } }, "node_modules/undici": { - "version": "6.11.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/undici/-/undici-6.11.1.tgz", - "integrity": "sha512-KyhzaLJnV1qa3BSHdj4AZ2ndqI0QWPxYzaIOio0WzcEJB9gvuysprJSLtpvc2D9mhR9jPDUk7xlJlZbH2KR5iw==", + "version": "5.28.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/undici/-/undici-5.28.4.tgz", + "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", + "dev": true, "license": "MIT", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, "engines": { - "node": ">=18.0" + "node": ">=14.0" } }, "node_modules/undici-types": { @@ -38317,6 +33198,18 @@ "node": ">=4" } }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/union": { "version": "0.5.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/union/-/union-0.5.0.tgz", @@ -38451,13 +33344,13 @@ } }, "node_modules/unplugin": { - "version": "1.14.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/unplugin/-/unplugin-1.14.1.tgz", - "integrity": "sha512-lBlHbfSFPToDYp9pjXlUEFVxYLaue9f9T1HC+4OHlmj+HnMDdz9oZY+erXfoCe/5V/7gKUSY2jpXPb9S7f0f/w==", + "version": "1.15.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/unplugin/-/unplugin-1.15.0.tgz", + "integrity": "sha512-jTPIs63W+DUEDW207ztbaoO7cQ4p5aVaB823LSlxpsFEU3Mykwxf3ZGC/wzxFJeZlASZYgVrWeo7LgOrqJZ8RA==", "dev": true, "license": "MIT", "dependencies": { - "acorn": "^8.12.1", + "acorn": "^8.14.0", "webpack-virtual-modules": "^0.6.2" }, "engines": { @@ -38524,13 +33417,6 @@ "node": ">=0.10.0" } }, - "node_modules/unset-value/node_modules/isarray": { - "version": "1.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, "node_modules/untildify": { "version": "4.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/untildify/-/untildify-4.0.0.tgz", @@ -38542,21 +33428,19 @@ } }, "node_modules/upath": { - "version": "1.2.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, + "version": "2.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", "license": "MIT", - "optional": true, "engines": { "node": ">=4", "yarn": "*" } }, "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "version": "1.1.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "funding": [ { "type": "opencollective", @@ -38573,8 +33457,8 @@ ], "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, "bin": { "update-browserslist-db": "cli.js" @@ -38592,6 +33476,15 @@ "punycode": "^2.1.0" } }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/urix": { "version": "0.1.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/urix/-/urix-0.1.0.tgz", @@ -38643,13 +33536,6 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/url/node_modules/punycode": { - "version": "1.4.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true, - "license": "MIT" - }, "node_modules/use": { "version": "3.1.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/use/-/use-3.1.1.tgz", @@ -38660,259 +33546,607 @@ "node": ">=0.10.0" } }, - "node_modules/use-callback-ref": { - "version": "1.3.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/use-callback-ref/-/use-callback-ref-1.3.2.tgz", - "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", + "license": "(WTFPL OR MIT)" + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "tslib": "^2.0.0" + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/validator": { + "version": "13.12.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/validator/-/validator-13.12.0.tgz", + "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vite": { + "version": "5.4.6", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/vite/-/vite-5.4.6.tgz", + "integrity": "sha512-IeL5f8OO5nylsgzd9tq4qD2QqI0k2CQLGrWD0rCN0EQJZpBK5vJAx0I+GDkMOXxQX/OfFHMuLIx6ddAxGX/k+Q==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "node": ">=12" } }, - "node_modules/use-resize-observer": { - "version": "9.1.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/use-resize-observer/-/use-resize-observer-9.1.0.tgz", - "integrity": "sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==", - "dev": true, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], "license": "MIT", - "peer": true, - "dependencies": { - "@juggle/resize-observer": "^3.3.1" - }, - "peerDependencies": { - "react": "16.8.0 - 18", - "react-dom": "16.8.0 - 18" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/use-sidecar": { - "version": "1.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/use-sidecar/-/use-sidecar-1.1.2.tgz", - "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", - "dev": true, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], "license": "MIT", - "peer": true, - "dependencies": { - "detect-node-es": "^1.1.0", - "tslib": "^2.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "node": ">=12" } }, - "node_modules/utf8-byte-length": { - "version": "1.0.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", - "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", - "license": "(WTFPL OR MIT)" - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dev": true, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.4.0" + "node": ">=12" } }, - "node_modules/uuid": { - "version": "9.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" ], "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "license": "MIT" - }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", - "devOptional": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=10.12.0" + "node": ">=12" } }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/validate-npm-package-name": { - "version": "5.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", - "license": "ISC", + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/validator": { - "version": "13.12.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/validator/-/validator-13.12.0.tgz", - "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", - "dev": true, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 0.10" + "node": ">=12" } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 0.8" + "node": ">=12" } }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "engines": [ - "node >=0.6.0" + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" ], "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/vite": { - "version": "5.1.7", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/vite/-/vite-5.1.7.tgz", - "integrity": "sha512-sgnEEFTZYMui/sTlH1/XEnVNHMujOahPLGMxn1+5sIT45Xjng1Ec1K78jRP15dSmVgg5WBin9yO81j3o9OxofA==", + "node_modules/vite/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "esbuild": "^0.19.3", - "postcss": "^8.4.35", - "rollup": "^4.2.0" - }, "bin": { - "vite": "bin/vite.js" + "esbuild": "bin/esbuild" }, "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" + "node": ">=12" }, "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "node_modules/vm-browserify": { @@ -38953,9 +34187,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.4.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", @@ -39204,14 +34438,6 @@ "node": ">=0.10.0" } }, - "node_modules/watchpack-chokidar2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT", - "optional": true - }, "node_modules/watchpack-chokidar2/node_modules/micromatch": { "version": "3.1.10", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/micromatch/-/micromatch-3.1.10.tgz", @@ -39305,6 +34531,18 @@ "node": ">=0.10.0" } }, + "node_modules/watchpack-chokidar2/node_modules/upath": { + "version": "1.2.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, "node_modules/wbuf": { "version": "1.7.3", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/wbuf/-/wbuf-1.7.3.tgz", @@ -39323,6 +34561,12 @@ "defaults": "^1.0.3" } }, + "node_modules/weak-lru-cache": { + "version": "1.2.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "license": "MIT" + }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -39334,9 +34578,9 @@ } }, "node_modules/webpack": { - "version": "5.94.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/webpack/-/webpack-5.94.0.tgz", - "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", + "version": "5.95.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/webpack/-/webpack-5.95.0.tgz", + "integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==", "license": "MIT", "dependencies": { "@types/estree": "^1.0.5", @@ -39380,19 +34624,20 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "6.1.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/webpack-dev-middleware/-/webpack-dev-middleware-6.1.2.tgz", - "integrity": "sha512-Wu+EHmX326YPYUpQLKmKbTyZZJIB8/n6R09pTmB03kJmnMsVPTo9COzHZFr01txwaCAuZvfBJE4ZCHRcKs5JaQ==", + "version": "7.4.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz", + "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==", "license": "MIT", "dependencies": { "colorette": "^2.0.10", - "memfs": "^3.4.12", + "memfs": "^4.6.0", "mime-types": "^2.1.31", + "on-finished": "^2.4.1", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", @@ -39407,55 +34652,74 @@ } } }, + "node_modules/webpack-dev-middleware/node_modules/memfs": { + "version": "4.14.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/memfs/-/memfs-4.14.0.tgz", + "integrity": "sha512-JUeY0F/fQZgIod31Ja1eJgiSxLn7BfQlCnqhwXFBzFHEw63OdLK7VJUJ7bnzNsWgCyoUP5tEp1VRY8rDaYzqOA==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/json-pack": "^1.0.3", + "@jsonjoy.com/util": "^1.3.0", + "tree-dump": "^1.0.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">= 4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + } + }, "node_modules/webpack-dev-server": { - "version": "4.15.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", - "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", - "license": "MIT", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", + "version": "5.0.4", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz", + "integrity": "sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==", + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", "colorette": "^2.0.10", "compression": "^1.7.4", "connect-history-api-fallback": "^2.0.0", "default-gateway": "^6.0.3", "express": "^4.17.3", "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", + "html-entities": "^2.4.0", "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "rimraf": "^5.0.5", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" + "webpack-dev-middleware": "^7.1.0", + "ws": "^8.16.0" }, "bin": { "webpack-dev-server": "bin/webpack-dev-server.js" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" + "webpack": "^5.0.0" }, "peerDependenciesMeta": { "webpack": { @@ -39466,6 +34730,50 @@ } } }, + "node_modules/webpack-dev-server/node_modules/glob": { + "version": "10.4.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { + "version": "2.0.7", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", + "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, "node_modules/webpack-dev-server/node_modules/ipaddr.js": { "version": "2.2.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ipaddr.js/-/ipaddr.js-2.2.0.tgz", @@ -39475,27 +34783,34 @@ "node": ">= 10" } }, - "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", - "license": "MIT", + "node_modules/webpack-dev-server/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">= 12.13.0" + "node": ">=16 || 14 >=14.17" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-dev-server/node_modules/rimraf": { + "version": "5.0.10", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/webpack-hot-middleware": { @@ -39510,16 +34825,6 @@ "strip-ansi": "^6.0.0" } }, - "node_modules/webpack-hot-middleware/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/webpack-hot-middleware/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -39534,17 +34839,17 @@ } }, "node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "version": "6.0.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", - "wildcard": "^2.0.0" + "wildcard": "^2.0.1" }, "engines": { - "node": ">=10.0.0" + "node": ">=18.0.0" } }, "node_modules/webpack-node-externals": { @@ -39683,19 +34988,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/webpack/node_modules/watchpack": { - "version": "2.4.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -39782,42 +35074,6 @@ "node": ">= 8" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/which-module": { "version": "2.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/which-module/-/which-module-2.0.1.tgz", @@ -39904,7 +35160,6 @@ "version": "7.0.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -39918,37 +35173,10 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "devOptional": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -39957,30 +35185,6 @@ "node": ">=8" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -40013,6 +35217,13 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "devOptional": true, + "license": "ISC" + }, "node_modules/ws": { "version": "8.18.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ws/-/ws-8.18.0.tgz", @@ -40072,21 +35283,12 @@ "version": "4.0.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.4" } }, - "node_modules/xxhashjs": { - "version": "0.2.2", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/xxhashjs/-/xxhashjs-0.2.2.tgz", - "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cuint": "^0.2.2" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/y18n/-/y18n-5.0.8.tgz", @@ -40184,12 +35386,22 @@ "version": "2.10.0", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, + "node_modules/ylru": { + "version": "1.4.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/ylru/-/ylru-1.4.0.tgz", + "integrity": "sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/yn": { "version": "3.1.1", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/yn/-/yn-3.1.1.tgz", @@ -40211,10 +35423,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", + "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zone.js": { - "version": "0.14.6", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/zone.js/-/zone.js-0.14.6.tgz", - "integrity": "sha512-vyRNFqofdaHVdWAy7v3Bzmn84a1JHWSjpuTZROT/uYn8I3p2cmo7Ro9twFmYRQDPhiYOV7QLk0hhY4JJQVqS6Q==", + "version": "0.14.10", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/zone.js/-/zone.js-0.14.10.tgz", + "integrity": "sha512-YGAhaO7J5ywOXW6InXNlLmfU194F8lVgu7bRntUF3TiG8Y3nBK0x1UJJuHUP/e8IyihkjCYqhCScpSwnlaSRkQ==", "license": "MIT" } } diff --git a/alfa-client/package.json b/alfa-client/package.json index 7579b9ef693524a7443ad99e90af357b64885bc6..15566f3bb98956b3f22fa5508e1eb2c1bd073439 100644 --- a/alfa-client/package.json +++ b/alfa-client/package.json @@ -1,6 +1,6 @@ { "name": "alfa", - "version": "1.1.0-SNAPSHOT", + "version": "1.2.0-SNAPSHOT", "license": "MIT", "scripts": { "start": "nx run alfa:serve --port 4300 --disable-host-check", @@ -47,120 +47,117 @@ "cypress:open-admin": "npx cypress open --project apps/admin-e2e", "workspace-generator": "nx workspace-generator", "storybook": "nx storybook design-system", - "ci-storybook": "nx build-storybook design-system && nx container design-system" + "ci-storybook": "nx storybook build design-system && nx container design-system" }, "private": true, "dependencies": { - "@angular/animations": "17.3.10", - "@angular/cdk": "17.3.10", - "@angular/common": "17.3.10", - "@angular/core": "17.3.10", - "@angular/forms": "17.3.10", - "@angular/material": "17.3.10", - "@angular/material-date-fns-adapter": "17.3.10", - "@angular/platform-browser": "17.3.10", - "@angular/platform-browser-dynamic": "17.3.10", - "@angular/router": "17.3.10", - "@keycloak/keycloak-admin-client": "^24.0.4", - "@ngrx/component-store": "17.2.0", - "@ngrx/effects": "17.2.0", - "@ngrx/entity": "17.2.0", - "@ngrx/router-store": "17.2.0", - "@ngrx/store": "17.2.0", - "@ngxp/rest": "10.0.0", - "@nx/angular": "18.3.5", + "@angular/animations": "18.2.8", + "@angular/cdk": "18.2.8", + "@angular/common": "18.2.8", + "@angular/core": "18.2.8", + "@angular/forms": "18.2.8", + "@angular/material": "18.2.8", + "@angular/material-date-fns-adapter": "18.2.8", + "@angular/platform-browser": "18.2.8", + "@angular/platform-browser-dynamic": "18.2.8", + "@angular/router": "18.2.8", + "@keycloak/keycloak-admin-client": "^24.0.5", + "@ngrx/component-store": "18.1.0", + "@ngrx/effects": "18.1.0", + "@ngrx/entity": "18.1.0", + "@ngrx/operators": "^18.0.0", + "@ngrx/router-store": "18.1.0", + "@ngrx/store": "18.1.0", + "@ngxp/rest": "^11.0.0", + "@nx/angular": "19.8.8", "angular-oauth2-oidc": "17.0.2", "angular-oauth2-oidc-jwks": "17.0.2", "class-variance-authority": "^0.7.0", "date-fns": "^2.30.0", - "decompress": "^4.2.1", "file-saver": "2.0.5", "include-media": "^1.4.10", "js-base64": "^3.7.7", - "keycloak-angular": "15.2.1", - "keycloak-js": "^23.0.6", + "keycloak-angular": "16.0.1", + "keycloak-js": "^24.0.5", "lodash-es": "4.17.21", "rxjs": "~7.8.1", "sanitize-filename-ts": "^1.0.2", - "tailwind-merge": "^2.3.0", "tslib": "^2.3.0", "typeface-roboto": "1.1.13", - "zone.js": "0.14.6" + "zone.js": "0.14.10" }, "devDependencies": { - "@angular-devkit/build-angular": "17.3.8", - "@angular-devkit/core": "17.3.8", - "@angular-devkit/schematics": "17.3.8", - "@angular-eslint/eslint-plugin": "17.3.0", - "@angular-eslint/eslint-plugin-template": "17.3.0", - "@angular-eslint/template-parser": "17.3.0", - "@angular/cli": "~17.3.8", - "@angular/compiler-cli": "17.3.10", - "@angular/language-service": "17.3.10", + "@angular-devkit/build-angular": "18.2.8", + "@angular-devkit/core": "18.2.8", + "@angular-devkit/schematics": "18.2.8", + "@angular-eslint/eslint-plugin": "18.3.1", + "@angular-eslint/eslint-plugin-template": "18.3.1", + "@angular-eslint/template-parser": "18.3.1", + "@angular/cli": "~18.2.0", + "@angular/compiler-cli": "18.2.8", + "@angular/language-service": "18.2.8", "@bahmutov/cypress-extends": "1.1.0", "@chromatic-com/storybook": "^1.4.0", "@cypress/webpack-batteries-included-preprocessor": "^2.4.1", "@cypress/webpack-preprocessor": "^5.17.1", - "@faker-js/faker": "^6.3.1", - "@ngrx/schematics": "17.2.0", - "@ngrx/store-devtools": "17.2.0", + "@faker-js/faker": "^9.0.3", + "@ngrx/schematics": "18.1.0", + "@ngrx/store-devtools": "18.1.0", "@nx-tools/container-metadata": "^6.0.1", "@nx-tools/nx-container": "^6.0.1", - "@nx/cypress": "18.3.5", - "@nx/eslint": "18.3.5", - "@nx/eslint-plugin": "18.3.5", - "@nx/jest": "18.3.5", - "@nx/js": "18.3.5", - "@nx/storybook": "18.3.5", - "@nx/web": "18.3.5", - "@nx/workspace": "18.3.5", - "@schematics/angular": "17.3.8", - "@storybook/addon-essentials": "^8.1.4", - "@storybook/angular": "^8.1.4", - "@storybook/core-server": "^8.1.4", - "@swc-node/register": "1.9.1", - "@swc/core": "~1.5.7", - "@testing-library/jest-dom": "6.4.5", + "@nx/cypress": "19.8.8", + "@nx/eslint": "19.8.8", + "@nx/eslint-plugin": "19.8.8", + "@nx/jest": "19.8.8", + "@nx/js": "19.8.8", + "@nx/storybook": "19.8.8", + "@nx/web": "19.8.8", + "@nx/workspace": "19.8.8", + "@schematics/angular": "18.2.8", + "@storybook/addon-essentials": "^8.3.5", + "@storybook/addon-interactions": "^8.3.5", + "@storybook/angular": "^8.3.5", + "@storybook/core-server": "^8.3.5", + "@testing-library/jest-dom": "^6.4.5", "@types/file-saver": "2.0.7", - "@types/jest": "29.4.4", + "@types/jest": "29.5.13", "@types/lodash-es": "4.17.12", "@types/node": "^20.12.12", - "@typescript-eslint/eslint-plugin": "7.10.0", - "@typescript-eslint/parser": "7.10.0", + "@typescript-eslint/eslint-plugin": "7.18.0", + "@typescript-eslint/parser": "7.18.0", + "@typescript-eslint/utils": "^7.16.0", "autoprefixer": "^10.4.19", - "cypress": "13.6.2", + "cypress": "13.15.1", "cypress-file-upload": "5.0.8", "cypress-mochawesome-reporter": "3.8", "cypress-real-events": "^1.12.0", "cypress-timestamps": "^1.2.3", + "decompress": "^4.2.1", "eslint": "8.57.0", "eslint-config-prettier": "9.1.0", "eslint-plugin-cypress": "2.15.1", - "gzipper": "^7.2.0", + "gzipper": "^8.1.0", "jasmine-marbles": "~0.9.2", - "jest": "^29.4.3", - "jest-environment-jsdom": "^29.4.3", + "jest": "29.7.0", + "jest-environment-jsdom": "29.7.0", "jest-junit": "^16.0.0", "jest-marbles": "3.0.6", - "jest-preset-angular": "14.0.4", + "jest-preset-angular": "14.1.1", "jest-sonar-reporter": "^2.0.0", "jsonc-eslint-parser": "^2.4.0", - "mongodb": "4.17.2", - "ng-mocks": "^14.12.2", - "ng-packagr": "17.3.0", - "nx": "18.3.5", - "postcss": "^8.4.38", - "postcss-import": "~14.1.0", - "postcss-preset-env": "~7.8.3", - "postcss-url": "~10.1.3", + "mongodb": "^4.17.2", + "ng-mocks": "^14.13.1", + "ng-packagr": "18.2.1", + "nx": "19.8.8", "prettier": "^3.2.5", - "prettier-plugin-organize-imports": "^3.2.4", - "prettier-plugin-tailwindcss": "^0.5.14", - "sonarqube-scanner": "3.5.0", - "storybook-tailwind-dark-mode": "^1.0.22", - "tailwindcss": "^3.4.3", + "prettier-plugin-organize-imports": "^4.1.0", + "prettier-plugin-tailwindcss": "^0.6.8", + "sonarqube-scanner": "^4.2.5", + "storybook": "^8.3.5", + "tailwind-merge": "^2.5.4", + "tailwindcss": "^3.4.14", "ts-jest": "^29.1.0", "ts-node": "10.9.1", - "typescript": "5.4.5" + "typescript": "5.5.4" } } \ No newline at end of file diff --git a/alfa-client/pom.xml b/alfa-client/pom.xml index 8e8395494a1b55f9399a9d7c997e6697e19ebb14..1db71743e5cc3a907ed88af1a2119597108c6003 100644 --- a/alfa-client/pom.xml +++ b/alfa-client/pom.xml @@ -29,7 +29,7 @@ <parent> <groupId>de.ozgcloud.alfa</groupId> <artifactId>alfa</artifactId> - <version>2.14.0-SNAPSHOT</version> + <version>2.16.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> diff --git a/alfa-client/run_helm_test.sh b/alfa-client/run_helm_test.sh new file mode 100755 index 0000000000000000000000000000000000000000..3fe6199df068b9c8b31b1cb39a1cff113339d871 --- /dev/null +++ b/alfa-client/run_helm_test.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +set -e +set -x + +helm template ./src/main/helm/ -f ./src/test/helm-linter-values.yaml +helm lint -f src/test/helm-linter-values.yaml ./src/main/helm/ +cd src/main/helm && helm unittest -f '../../test/helm/*.yaml' . + diff --git a/alfa-client/src/main/helm/Chart.yaml b/alfa-client/src/main/helm/Chart.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5ab647efd68f962b707bae9e7fd04b72b0c77613 --- /dev/null +++ b/alfa-client/src/main/helm/Chart.yaml @@ -0,0 +1,30 @@ +# +# 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. +# + +apiVersion: v1 +appVersion: '1.0' +description: A Helm chart for Alfa Client +name: alfa-client +version: 0.0.0-MANAGED-BY-JENKINS +icon: https://simpleicons.org/icons/helm.svg diff --git a/alfa-client/src/main/helm/templates/_helpers.tpl b/alfa-client/src/main/helm/templates/_helpers.tpl new file mode 100644 index 0000000000000000000000000000000000000000..300ff51779a0f4679bbc8f31a990f406078947da --- /dev/null +++ b/alfa-client/src/main/helm/templates/_helpers.tpl @@ -0,0 +1,80 @@ + +{{/* error check 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec) */}} +{{/* Namespace */}} +{{- define "app.namespace" -}} +{{- if gt (len (.Release.Namespace)) 63 -}} +{{- fail (printf ".Release.Namespace %s ist zu lang (max. 63 Zeichen)" .Release.Namespace) -}} +{{- end -}} +{{ printf "%s" .Release.Namespace }} +{{- end -}} + +{{/* Chart: Name + Version */}} +{{- define "app.chart" -}} +{{- if gt (len (printf "%s-%s" .Chart.Name .Chart.Version)) 63 -}} +{{- fail (printf ".Chart.Name-.Chart.Version %s-%s ist zu lang (max. 63 Zeichen)" .Chart.Name .Chart.Version) -}} +{{- end -}} +{{ printf "%s-%s" .Chart.Name .Chart.Version }} +{{- end -}} + +{{/* Managed-by -> On Helm, this value is always Helm */}} +{{- define "app.managedBy" -}} +{{- if gt (len (.Release.Service)) 63 -}} +{{- fail (printf ".Release.Service %s ist zu lang (max. 63 Zeichen)" .Release.Service) -}} +{{- end -}} +{{ printf "%s" .Release.Service }} +{{- end -}} + + +{{/* Default Labels: Helm recommended best-practice labels https://helm.sh/docs/chart_best_practices/labels/ */}} +{{- define "app.defaultLabels" }} +app.kubernetes.io/instance: alfa-client +app.kubernetes.io/managed-by: {{ include "app.managedBy" . }} +app.kubernetes.io/name: {{ .Release.Name }} +app.kubernetes.io/namespace: {{ include "app.namespace" . }} +app.kubernetes.io/part-of: ozgcloud +app.kubernetes.io/version: {{ .Chart.Version }} +helm.sh/chart: {{ include "app.chart" . }} +{{- end -}} + +{{- define "app.matchLabels" }} +app.kubernetes.io/name: {{ .Release.Name }} +app.kubernetes.io/namespace: {{ include "app.namespace" . }} +{{- end -}} + +{{- define "app.serviceAccountName" -}} +{{ printf "%s" ( (.Values.serviceAccount).name | default "alfa-client-service-account" ) }} +{{- end -}} + + +{{- define "app.baseDomain" -}} +{{- printf "%s.%s" (include "app.ozgcloudBezeichner" .) (include "app.baseUrl" .) }} +{{- end -}} + +{{- define "app.ozgcloudBezeichner" -}} +{{- required "ozgcloud.bezeichner muss angegeben sein" (.Values.ozgcloud).bezeichner -}} +{{- if lt 46 (len (.Values.ozgcloud).bezeichner) -}} +{{ fail (printf "ozgcloud.bezeichner %s ist zu lang (max. 46 Zeichen)" (.Values.ozgcloud).bezeichner) }} +{{- end -}} +{{- end -}} + +{{- define "app.baseUrl" -}} +{{- required "baseUrl muss angegeben sein" .Values.baseUrl }} +{{- end -}} + +{{- define "app.getCustomList" -}} +{{- with (.Values.env).customList -}} +{{- if kindIs "map" . -}} +{{ include "app.dictToList" . }} +{{- else if kindIs "slice" . -}} +{{ . | toYaml }} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "app.dictToList" -}} +{{- $customList := list -}} +{{- range $key, $value := . -}} +{{- $customList = append $customList (dict "name" $key "value" $value) }} +{{- end -}} +{{- $customList | toYaml -}} +{{- end -}} \ No newline at end of file diff --git a/alfa-client/src/main/helm/templates/deployment.yaml b/alfa-client/src/main/helm/templates/deployment.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2f2e951bb88e2e8ef5597021e838f6875e98ff7b --- /dev/null +++ b/alfa-client/src/main/helm/templates/deployment.yaml @@ -0,0 +1,122 @@ +# +# 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. +# + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ .Release.Name }} + namespace: {{ include "app.namespace" . }} + labels: + {{- include "app.defaultLabels" . | indent 4 }} +spec: + progressDeadlineSeconds: 600 + replicas: {{ .Values.replicaCount }} + revisionHistoryLimit: 10 + selector: + matchLabels: + {{- include "app.matchLabels" . | indent 6 }} + strategy: + rollingUpdate: + maxSurge: 1 + maxUnavailable: 0 + type: RollingUpdate + template: + metadata: + labels: + {{- include "app.defaultLabels" . | indent 8 }} + component: alfa-client + spec: + {{- if (.Values.serviceAccount).create }} + serviceAccountName: {{ include "app.serviceAccountName" . }} + {{- end }} + topologySpreadConstraints: + - maxSkew: 1 + topologyKey: kubernetes.io/hostname + whenUnsatisfiable: ScheduleAnyway + labelSelector: + matchLabels: + app.kubernetes.io/name: {{ .Release.Name }} + + containers: + - env: + {{- with include "app.getCustomList" . }} +{{ . | indent 8 }} + {{- end }} + + image: "{{ .Values.image.repo }}/{{ .Values.image.name }}:{{ coalesce (.Values.image).tag "latest" }}" + imagePullPolicy: Always + name: alfa-client + + startupProbe: + httpGet: + path: / + port: 8080 + scheme: HTTP + timeoutSeconds: 1 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 3 + readinessProbe: + httpGet: + path: / + port: 8080 + scheme: HTTP + timeoutSeconds: 1 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 3 + + resources: + {{- with .Values.resources }} +{{ toYaml . | indent 10 }} + {{- end }} + securityContext: + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: false + runAsNonRoot: true + {{- with (.Values.securityContext).runAsUser }} + runAsUser: {{ . }} + {{- end }} + {{- with (.Values.securityContext).runAsGroup }} + runAsGroup: {{ . }} + {{- end }} + stdin: true + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + tty: true + + + dnsConfig: {} + dnsPolicy: ClusterFirst + imagePullSecrets: + - name: {{ required "imagePullSecret must be set" .Values.imagePullSecret }} + restartPolicy: Always + {{- with .Values.hostAliases }} + hostAliases: +{{ toYaml . | indent 8 }} + {{- end }} + schedulerName: default-scheduler + securityContext: {} + terminationGracePeriodSeconds: 30 diff --git a/alfa-client/src/main/helm/templates/ingress.yaml b/alfa-client/src/main/helm/templates/ingress.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9b132c168e1d2b889ace828273b9a2f4be9f97f0 --- /dev/null +++ b/alfa-client/src/main/helm/templates/ingress.yaml @@ -0,0 +1,40 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: {{ .Release.Name }} + namespace: {{ include "app.namespace" . }} + annotations: + {{- if (.Values.ingress).certManagerAnnotations -}} + {{- range (.Values.ingress).certManagerAnnotations }} +{{ . | indent 4 }} + {{- end }} + {{- else if (.Values.ingress).use_staging_cert }} + cert-manager.io/cluster-issuer: letsencrypt-staging + {{- else }} + cert-manager.io/cluster-issuer: letsencrypt-prod + {{- end }} +spec: + {{- if (.Values.ingress).className }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + rules: + - http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: {{ .Release.Name }} + port: + number: 8080 + + + host: {{ include "app.baseDomain" . }} + tls: + - hosts: + - {{ include "app.baseDomain" . }} + {{- if (.Values.ingress).tlsSecretName }} + secretName: {{ (.Values.ingress).tlsSecretName }} + {{- else }} + secretName: {{ .Values.ozgcloud.bezeichner }}-{{ .Release.Name }}-tls + {{- end }} \ No newline at end of file diff --git a/alfa-client/src/main/helm/templates/network_policy.yaml b/alfa-client/src/main/helm/templates/network_policy.yaml new file mode 100644 index 0000000000000000000000000000000000000000..be4beaee8f68051efd4fe81f5b951026b23f2d95 --- /dev/null +++ b/alfa-client/src/main/helm/templates/network_policy.yaml @@ -0,0 +1,31 @@ +{{- if not (.Values.networkPolicy).disabled }} +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: network-policy-alfa-client + namespace: {{ .Release.Namespace }} +spec: + podSelector: + matchLabels: + {{- include "app.matchLabels" . | indent 6 }} + policyTypes: + - Ingress + - Egress + ingress: + - ports: + - port: 8080 +{{- with (.Values.networkPolicy).additionalIngressConfigLocal }} +{{ toYaml . | indent 2 }} +{{- end }} +{{- with (.Values.networkPolicy).additionalIngressConfigGlobal }} +{{ toYaml . | indent 2 }} +{{- end }} + egress: +{{- with (.Values.networkPolicy).additionalEgressConfigLocal }} +{{ toYaml . | indent 2 }} +{{- end }} +{{- with (.Values.networkPolicy).additionalEgressConfigGlobal }} +{{ toYaml . | indent 2 }} +{{- end }} + +{{- end }} \ No newline at end of file diff --git a/alfa-client/src/main/helm/templates/service.yaml b/alfa-client/src/main/helm/templates/service.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f880d0a8b0ad3d20a1a6171e748dd9ddc8332eb6 --- /dev/null +++ b/alfa-client/src/main/helm/templates/service.yaml @@ -0,0 +1,43 @@ +# +# 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. +# + +apiVersion: v1 +kind: Service +metadata: + name: {{ .Release.Name }} + namespace: {{ include "app.namespace" . }} + labels: + {{- include "app.defaultLabels" . | indent 4 }} + component: alfa-client-service +spec: + type: ClusterIP + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + + selector: + {{- include "app.matchLabels" . | indent 4 }} + component: alfa-client \ No newline at end of file diff --git a/alfa-client/src/main/helm/values.yaml b/alfa-client/src/main/helm/values.yaml new file mode 100644 index 0000000000000000000000000000000000000000..01563f82eb895a00dd6a35619b38c5a7bb717d27 --- /dev/null +++ b/alfa-client/src/main/helm/values.yaml @@ -0,0 +1,6 @@ +image: + repo: docker.ozg-sh.de + name: alfa-client + tag: 0.1.0 # [default: latest] +replicaCount: 1 + diff --git a/alfa-client/src/test/helm-linter-values.yaml b/alfa-client/src/test/helm-linter-values.yaml new file mode 100644 index 0000000000000000000000000000000000000000..243fca6113fc6e4e0f69479e0178e775f2d0c21f --- /dev/null +++ b/alfa-client/src/test/helm-linter-values.yaml @@ -0,0 +1,34 @@ +# +# 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. +# + +baseUrl: test.sh.ozg-cloud.de + +ozgcloud: + bezeichner: helm + +imagePullSecret: test-image-secret + +networkPolicy: + dnsServerNamespace: dummy-dns + diff --git a/alfa-client/src/test/helm/deployment_63_char_test.yaml b/alfa-client/src/test/helm/deployment_63_char_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9aa0a8de91f7f17a01ff1120fa8be31e5aa2fa3d --- /dev/null +++ b/alfa-client/src/test/helm/deployment_63_char_test.yaml @@ -0,0 +1,53 @@ +# +# 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. +# + +suite: test deyploment less than 63 chars +release: + name: alfa-client + namespace: sh-helm-test + +templates: + - templates/deployment.yaml +set: + imagePullSecret: test-image-secret + +tests: + - it: should fail on .Release.Namespace length longer than 63 characters + release: + namespace: test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 + asserts: + - failedTemplate: + errorMessage: .Release.Namespace test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 ist zu lang (max. 63 Zeichen) + - it: should not fail on .Release.Namespace length less than 63 characters + asserts: + - notFailedTemplate: {} + - it: should fail on .Chart.Name-.Chart.Version length longer than 63 characters + chart: + version: 1.0-test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 + asserts: + - failedTemplate: + errorMessage: .Chart.Name-.Chart.Version alfa-client-1.0-test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 ist zu lang (max. 63 Zeichen) + - it: should not fail on .Chart.Name-.Chart.Version length less than 63 characters + asserts: + - notFailedTemplate: {} \ No newline at end of file diff --git a/alfa-client/src/test/helm/deployment_container_basic_test.yaml b/alfa-client/src/test/helm/deployment_container_basic_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..98f94de514785c7cd5401ca79e7abe053e868d6a --- /dev/null +++ b/alfa-client/src/test/helm/deployment_container_basic_test.yaml @@ -0,0 +1,47 @@ +# +# 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. +# + +suite: test deployment container basics +release: + name: alfa-client + namespace: sh-helm-test +templates: + - templates/deployment.yaml +set: + imagePullSecret: test-image-secret + +tests: + - it: should have correct values for container image, name, imagePullPolicy + asserts: + - equal: + path: spec.template.spec.containers[0].image + value: docker.ozg-sh.de/alfa-client:0.1.0 + - equal: + path: spec.template.spec.containers[0].name + value: alfa-client + - equal: + path: spec.template.spec.containers[0].imagePullPolicy + value: Always + + diff --git a/alfa-client/src/test/helm/deployment_container_other_values_test.yaml b/alfa-client/src/test/helm/deployment_container_other_values_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f8f356b2e2cb81c04ac7664a9e3c1b70958e0363 --- /dev/null +++ b/alfa-client/src/test/helm/deployment_container_other_values_test.yaml @@ -0,0 +1,49 @@ + + # +# 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. +# + +suite: test deployment container other values +release: + name: alfa-client + namespace: sh-helm-test +templates: + - templates/deployment.yaml +set: + imagePullSecret: test-image-secret + +tests: + - it: should have correct values for container terminationMessagePolicy, terminationMessagePath, stdin, tty + asserts: + - equal: + path: spec.template.spec.containers[0].terminationMessagePolicy + value: File + - equal: + path: spec.template.spec.containers[0].terminationMessagePath + value: /dev/termination-log + - equal: + path: spec.template.spec.containers[0].stdin + value: true + - equal: + path: spec.template.spec.containers[0].tty + value: true \ No newline at end of file diff --git a/alfa-client/src/test/helm/deployment_container_security_context_test.yaml b/alfa-client/src/test/helm/deployment_container_security_context_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..063aac4ae72c7c885a472a2c76b9e10aa3592a0b --- /dev/null +++ b/alfa-client/src/test/helm/deployment_container_security_context_test.yaml @@ -0,0 +1,66 @@ +# +# 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. +# + +suite: test deployment container security context +release: + name: alfa-client + namespace: sh-helm-test +templates: + - templates/deployment.yaml +set: + imagePullSecret: test-image-secret + +tests: + - it: check default values of spec.containers[0].securityContext + asserts: + - equal: + path: spec.template.spec.containers[0].securityContext.allowPrivilegeEscalation + value: false + - equal: + path: spec.template.spec.containers[0].securityContext.privileged + value: false + - equal: + path: spec.template.spec.containers[0].securityContext.readOnlyRootFilesystem + value: false + - equal: + path: spec.template.spec.containers[0].securityContext.runAsNonRoot + value: true + - isNull: + path: spec.template.spec.containers[0].securityContext.runAsUser + - isNull: + path: spec.template.spec.containers[0].securityContext.runAsGroup + - it: check containers runAsUser + set: + securityContext.runAsUser: 1000 + asserts: + - equal: + path: spec.template.spec.containers[0].securityContext.runAsUser + value: 1000 + - it: check runAsGroup + set: + securityContext.runAsGroup: 1000 + asserts: + - equal: + path: spec.template.spec.containers[0].securityContext.runAsGroup + value: 1000 \ No newline at end of file diff --git a/alfa-client/src/test/helm/deployment_defaults_labels_test.yaml b/alfa-client/src/test/helm/deployment_defaults_labels_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..d1ff0f164c2da7abff8098487ba39fb834ceba38 --- /dev/null +++ b/alfa-client/src/test/helm/deployment_defaults_labels_test.yaml @@ -0,0 +1,69 @@ +# +# 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. +# + +suite: test deployment default labels +release: + name: alfa-client + namespace: sh-helm-test +templates: + - templates/deployment.yaml +set: + imagePullSecret: test-image-secret + +tests: + - it: check metadata.labels + asserts: + - equal: + path: metadata.labels + value: + app.kubernetes.io/instance: alfa-client + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: alfa-client + app.kubernetes.io/namespace: sh-helm-test + app.kubernetes.io/part-of: ozgcloud + app.kubernetes.io/version: 0.0.0-MANAGED-BY-JENKINS + helm.sh/chart: alfa-client-0.0.0-MANAGED-BY-JENKINS + + - it: should set spec.selector.matchLabels + asserts: + - equal: + path: spec.selector.matchLabels + value: + app.kubernetes.io/name: alfa-client + app.kubernetes.io/namespace: sh-helm-test + + + - it: should have correct deyploment spec.template.metadata.labels + asserts: + - equal: + path: spec.template.metadata.labels + value: + app.kubernetes.io/instance: alfa-client + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: alfa-client + app.kubernetes.io/namespace: sh-helm-test + app.kubernetes.io/part-of: ozgcloud + app.kubernetes.io/version: 0.0.0-MANAGED-BY-JENKINS + component: alfa-client + helm.sh/chart: alfa-client-0.0.0-MANAGED-BY-JENKINS \ No newline at end of file diff --git a/alfa-client/src/test/helm/deployment_defaults_topologySpreadConstraints_test.yaml b/alfa-client/src/test/helm/deployment_defaults_topologySpreadConstraints_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1f50b122dcdacdecb722422553e2158907a09971 --- /dev/null +++ b/alfa-client/src/test/helm/deployment_defaults_topologySpreadConstraints_test.yaml @@ -0,0 +1,50 @@ +# +# 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. +# + +suite: test deployment topology spread constrains +release: + name: alfa-client + namespace: sh-helm-test +templates: + - templates/deployment.yaml +set: + imagePullSecret: test-image-secret + +tests: + - it: check default values of spec.template.spec.topologySpreadConstraints + asserts: + - isKind: + of: Deployment + - equal: + path: spec.template.spec.topologySpreadConstraints[0].maxSkew + value: 1 + - equal: + path: spec.template.spec.topologySpreadConstraints[0].topologyKey + value: kubernetes.io/hostname + - equal: + path: spec.template.spec.topologySpreadConstraints[0].whenUnsatisfiable + value: ScheduleAnyway + - equal: + path: spec.template.spec.topologySpreadConstraints[0].labelSelector.matchLabels["app.kubernetes.io/name"] + value: alfa-client \ No newline at end of file diff --git a/alfa-client/src/test/helm/deployment_env_test.yaml b/alfa-client/src/test/helm/deployment_env_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..802602a558241461dbc490613146e339aee00802 --- /dev/null +++ b/alfa-client/src/test/helm/deployment_env_test.yaml @@ -0,0 +1,72 @@ +# +# 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. +# + +suite: test deployment container environments +templates: + - templates/deployment.yaml +set: + imagePullSecret: test-image-secret + +tests: + - it: check customList as list + set: + env.customList: + - name: my_test_environment_name + value: "A test value" + - name: test_environment + value: "B test value" + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: my_test_environment_name + value: "A test value" + - contains: + path: spec.template.spec.containers[0].env + content: + name: test_environment + value: "B test value" + - it: check customList as dict + set: + env.customList: + my_test_environment_name: "A test value" + test_environment: "B test value" + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: my_test_environment_name + value: "A test value" + - contains: + path: spec.template.spec.containers[0].env + content: + name: test_environment + value: "B test value" + + - it: check customList test value is not set by default + asserts: + - isEmpty: + path: spec.template.spec.containers[0].env + + diff --git a/alfa-client/src/test/helm/deployment_host_aliases_test.yaml b/alfa-client/src/test/helm/deployment_host_aliases_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ad5d1f8f66a03d2e87fc591fb3b06ae84f0d0077 --- /dev/null +++ b/alfa-client/src/test/helm/deployment_host_aliases_test.yaml @@ -0,0 +1,52 @@ +# +# 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. +# + +suite: deployment host aliases +release: + name: alfa-client + namespace: sh-helm-test +templates: + - templates/deployment.yaml +set: + imagePullSecret: test-image-secret +tests: + - it: should not set spec.template.spec.hostAliases + asserts: + - isNull: + path: spec.template.spec.hostAliases + - it: should set spec.template.spec.hostAliases + set: + hostAliases: + - ip: "127.0.0.1" + hostname: + - "eins" + - "zwei" + asserts: + - contains: + path: spec.template.spec.hostAliases + content: + ip: "127.0.0.1" + hostname: + - "eins" + - "zwei" diff --git a/alfa-client/src/test/helm/deployment_imagepull_secret_test.yaml b/alfa-client/src/test/helm/deployment_imagepull_secret_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..96e8e2b6e5bf8d735102854d8a1cc4195c5710de --- /dev/null +++ b/alfa-client/src/test/helm/deployment_imagepull_secret_test.yaml @@ -0,0 +1,44 @@ +# +# 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. +# + +suite: test deployment image pull secret +release: + name: alfa-client + namespace: sh-helm-test +templates: + - templates/deployment.yaml + + +tests: + - it: should use correct imagePull secret + set: + imagePullSecret: test-image-secret + asserts: + - equal: + path: spec.template.spec.imagePullSecrets[0].name + value: test-image-secret + - it: should fail template when image pull secret not set + asserts: + - failedTemplate: + errormessage: imagePullSecret must be set \ No newline at end of file diff --git a/alfa-client/src/test/helm/deployment_resources_test.yaml b/alfa-client/src/test/helm/deployment_resources_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c053aeb0639d0c495699aa85667f1fddb6c6a82e --- /dev/null +++ b/alfa-client/src/test/helm/deployment_resources_test.yaml @@ -0,0 +1,60 @@ +# +# 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. +# + +suite: test deployment container resources +release: + name: alfa-client +templates: + - templates/deployment.yaml +set: + imagePullSecret: test-image-secret + +tests: + - it: should generate resources when values set + set: + resources: + limits: + cpu: 11m + memory: 22Mi + requests: + cpu: 33m + memory: 44Mi + asserts: + - equal: + path: spec.template.spec.containers[0].resources.limits.cpu + value: 11m + - equal: + path: spec.template.spec.containers[0].resources.limits.memory + value: 22Mi + - equal: + path: spec.template.spec.containers[0].resources.requests.cpu + value: 33m + - equal: + path: spec.template.spec.containers[0].resources.requests.memory + value: 44Mi + - it: should not generate resources when values not set + asserts: + - isEmpty: + path: spec.template.spec.containers[0].resources + diff --git a/alfa-client/src/test/helm/deyploment_general_value_test.yaml b/alfa-client/src/test/helm/deyploment_general_value_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..081ae623bd6c0db6b518a0eb7753fc0632b03fe1 --- /dev/null +++ b/alfa-client/src/test/helm/deyploment_general_value_test.yaml @@ -0,0 +1,74 @@ +# +# 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. +# + +suite: test deployment general values +release: + name: alfa-client + namespace: sh-helm-test +templates: + - templates/deployment.yaml +set: + imagePullSecret: test-image-secret + + +tests: + - it: should have correct apiVersion + asserts: + - isKind: + of: Deployment + - isAPIVersion: + of: "apps/v1" + + - it: should have correct deployment metadata + asserts: + - equal: + path: metadata.name + value: alfa-client + - equal: + path: metadata.namespace + value: sh-helm-test + + + - it: should have correct deyployment general spec values + asserts: + - equal: + path: spec.progressDeadlineSeconds + value: 600 + - equal: + path: spec.replicas + value: 1 + - equal: + path: spec.revisionHistoryLimit + value: 10 + - it: should have correct deployment spec strategy values + asserts: + - equal: + path: spec.strategy + value: + rollingUpdate: + maxSurge: 1 + maxUnavailable: 0 + type: RollingUpdate + + diff --git a/alfa-client/src/test/helm/ingress_tests.yaml b/alfa-client/src/test/helm/ingress_tests.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1f1fa4729a117bfc02ccb9e5afc442b87f92d39b --- /dev/null +++ b/alfa-client/src/test/helm/ingress_tests.yaml @@ -0,0 +1,168 @@ +# +# 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. +# + +suite: test ingress.yaml +release: + name: alfa-client + namespace: sh-helm-test +templates: + - templates/ingress.yaml + +tests: + - it: check ingress kind + set: + ozgcloud: + bezeichner: helm + baseUrl: test.by.ozg-cloud.de + asserts: + - isKind: + of: Ingress + - it: should create default ingress tls + set: + ozgcloud: + bezeichner: helm + baseUrl: test.by.ozg-cloud.de + asserts: + - equal: + path: spec.tls[0].secretName + value: helm-alfa-client-tls + - it: should set ingress tls + set: + ingress: + tlsSecretName: client-tls + ozgcloud: + bezeichner: helm + baseUrl: test.by.ozg-cloud.de + asserts: + - equal: + path: spec.tls[0].secretName + value: client-tls + + - it: should not create ingress tls/ingressClass by default + set: + ozgcloud: + bezeichner: helm + baseUrl: test.by.ozg-cloud.de + asserts: + - isNull: + path: spec.ingressClassName + - it: should set ingress tls/ingressClass + set: + ingress: + className: ingress + ozgcloud: + bezeichner: helm + baseUrl: test.by.ozg-cloud.de + asserts: + - equal: + path: spec.ingressClassName + value: ingress + + + - it: should use default letsencrypt-prod cluster-issuer + set: + ozgcloud: + bezeichner: helm + baseUrl: test.by.ozg-cloud.de + asserts: + - equal: + path: metadata.annotations["cert-manager.io/cluster-issuer"] + value: letsencrypt-prod + + - it: should use letsencrypt-staging cluster-issuer + set: + ingress.use_staging_cert: true + ozgcloud: + bezeichner: helm + baseUrl: test.by.ozg-cloud.de + asserts: + - equal: + path: metadata.annotations["cert-manager.io/cluster-issuer"] + value: letsencrypt-staging + + - it: should use letsencrypt-prod cluster-issuer + set: + ingress.use_staging_cert: false + ozgcloud: + bezeichner: helm + baseUrl: test.by.ozg-cloud.de + asserts: + - equal: + path: metadata.annotations["cert-manager.io/cluster-issuer"] + value: letsencrypt-prod + + - it: should create tls hosts name correctly + set: + ozgcloud: + bezeichner: helm + baseUrl: test.by.ozg-cloud.de + asserts: + - equal: + path: spec.tls[0].hosts[0] + value: helm.test.by.ozg-cloud.de + + - it: should create rules correctly + set: + ozgcloud: + bezeichner: helm + baseUrl: test.by.ozg-cloud.de + asserts: + - equal: + path: spec.rules[0].http.paths[0] + value: + path: / + pathType: Prefix + backend: + service: + name: alfa-client + port: + number: 8080 + + + - it: should set hostname + set: + ozgcloud: + bezeichner: helm + baseUrl: test.by.ozg-cloud.de + asserts: + - equal: + path: spec.rules[0].host + value: helm.test.by.ozg-cloud.de + - it: should fail template when baseUrl not set + set: + ozgcloud: + bezeichner: helm + asserts: + - failedTemplate: + errormessage: baseUrl muss angegeben sein + + - it: should fail template when bezeichner not set + set: + ozgcloud: + baseUrl: test.by.ozg-cloud.de + asserts: + - failedTemplate: + errormessage: ozgcloud.bezeichner muss angegeben sein + + \ No newline at end of file diff --git a/alfa-client/src/test/helm/network_policy_test.yaml b/alfa-client/src/test/helm/network_policy_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..55468aaf0a2032297a684f32e0c8fa06248f8766 --- /dev/null +++ b/alfa-client/src/test/helm/network_policy_test.yaml @@ -0,0 +1,132 @@ +# +# Copyright (C) 2024 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. +# + +suite: network policy alfa-client test +release: + name: alfa-client + namespace: by-helm-test +templates: + - templates/network_policy.yaml + +tests: + - it: should match apiVersion + asserts: + - isAPIVersion: + of: networking.k8s.io/v1 + - it: should match kind + asserts: + - isKind: + of: NetworkPolicy + - it: validate metadata + asserts: + - equal: + path: metadata + value: + name: network-policy-alfa-client + namespace: by-helm-test + + - it: should add additionalIngressConfig local + set: + networkPolicy: + additionalIngressConfigLocal: + - from: + - podSelector: + matchLabels: + component: client2 + asserts: + - contains: + path: spec.ingress + content: + from: + - podSelector: + matchLabels: + component: client2 + - it: should add additionalIngressConfig global + set: + networkPolicy: + additionalIngressConfigGlobal: + - from: + - podSelector: + matchLabels: + component: client2 + asserts: + - contains: + path: spec.ingress + content: + from: + - podSelector: + matchLabels: + component: client2 + + - it: should add additionalEgressConfig local + set: + networkPolicy: + additionalEgressConfigLocal: + - to: + - ipBlock: + cidr: 1.2.3.4/32 + asserts: + - contains: + path: spec.egress + content: + to: + - ipBlock: + cidr: 1.2.3.4/32 + + - it: should add additionalEgressConfig global + set: + networkPolicy: + additionalEgressConfigGlobal: + - to: + - ipBlock: + cidr: 1.2.3.4/32 + asserts: + - contains: + path: spec.egress + content: + to: + - ipBlock: + cidr: 1.2.3.4/32 + + + - it: test network policy disabled + set: + networkPolicy: + disabled: true + asserts: + - hasDocuments: + count: 0 + + - it: test network policy unset should be disabled + set: + networkPolicy: + disabled: false + asserts: + - hasDocuments: + count: 1 + + - it: test network policy should be enabled by default + asserts: + - hasDocuments: + count: 1 \ No newline at end of file diff --git a/alfa-client/src/test/helm/service_test.yaml b/alfa-client/src/test/helm/service_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c5ac4691125d01fe6a9ec94c336bbda918b48e33 --- /dev/null +++ b/alfa-client/src/test/helm/service_test.yaml @@ -0,0 +1,66 @@ +# +# 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. +# + +suite: test service +release: + name: alfa-client + namespace: sh-helm-test +templates: + - templates/service.yaml +tests: + - it: should have the label component with correct value + asserts: + - isKind: + of: Service + - isAPIVersion: + of: v1 + - equal: + path: metadata.labels.component + value: alfa-client-service + - it: should be of type ClusterIP + asserts: + - equal: + path: spec.type + value: ClusterIP + + - it: selector should contain the component label with correct value + asserts: + - equal: + path: spec.selector.component + value: alfa-client + + - it: selector should contain helm recommended labels name and namespace + asserts: + - equal: + path: spec.selector + value: + app.kubernetes.io/name: alfa-client + app.kubernetes.io/namespace: sh-helm-test + component: alfa-client + + - it: check component label for service + asserts: + - equal: + path: metadata.labels["component"] + value: alfa-client-service \ No newline at end of file diff --git a/alfa-client/tsconfig.base.json b/alfa-client/tsconfig.base.json index 718027c42393e9c9066bb1b65c2287c66654a873..1123019a134bc3716bf6280a1115b72261f6a2db 100644 --- a/alfa-client/tsconfig.base.json +++ b/alfa-client/tsconfig.base.json @@ -41,6 +41,8 @@ "@alfa-client/navigation-shared": ["libs/navigation-shared/src/index.ts"], "@alfa-client/postfach": ["libs/postfach/src/index.ts"], "@alfa-client/postfach-shared": ["libs/postfach-shared/src/index.ts"], + "@alfa-client/resource-redirect": ["libs/resource-redirect/src/index.ts"], + "@alfa-client/resource-redirect-shared": ["libs/resource-redirect-shared/src/index.ts"], "@alfa-client/tech-shared": ["libs/tech-shared/src/index.ts"], "@alfa-client/test-utils": ["libs/test-utils/src/index.ts"], "@alfa-client/ui": ["libs/ui/src/index.ts"], @@ -55,9 +57,12 @@ "@alfa-client/vorgang-shared-ui": ["libs/vorgang-shared-ui/src/index.ts"], "@alfa-client/wiedervorlage": ["libs/wiedervorlage/src/index.ts"], "@alfa-client/wiedervorlage-shared": ["libs/wiedervorlage-shared/src/index.ts"], + "@alfa-client/zustaendige-stelle": ["libs/zustaendige-stelle/src/index.ts"], + "@alfa-client/zustaendige-stelle-shared": ["libs/zustaendige-stelle-shared/src/index.ts"], "@ods/component": ["libs/design-component/src/index.ts"], "@ods/system": ["libs/design-system/src/index.ts"], - "authentication": ["libs/authentication/src/index.ts"] + "authentication": ["libs/authentication/src/index.ts"], + "@alfa-client/common-lib": ["libs/common-lib/src/index.ts"] } }, "exclude": ["node_modules", "tmp"] diff --git a/alfa-server/pom.xml b/alfa-server/pom.xml index 2e9313095672888c2e1a95fedb74f716eb0dd417..395a93395a2c9011c8e0c5f17ce437fced4d31a8 100644 --- a/alfa-server/pom.xml +++ b/alfa-server/pom.xml @@ -5,7 +5,7 @@ <parent> <groupId>de.ozgcloud.alfa</groupId> <artifactId>alfa</artifactId> - <version>2.14.0-SNAPSHOT</version> + <version>2.16.0-SNAPSHOT</version> </parent> <artifactId>alfa-server</artifactId> @@ -24,11 +24,6 @@ <artifactId>alfa-service</artifactId> <version>${project.version}</version> </dependency> - <dependency> - <groupId>de.ozgcloud.alfa</groupId> - <artifactId>alfa-xdomea</artifactId> - <version>${project.version}</version> - </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> diff --git a/alfa-server/src/main/resources/application-local.yml b/alfa-server/src/main/resources/application-local.yml index 74743fd293aab8aeda88d286548ff33e73ea55d7..55772b0d1f753624c45b82c5f343f689cdf96eb7 100644 --- a/alfa-server/src/main/resources/application-local.yml +++ b/alfa-server/src/main/resources/application-local.yml @@ -14,6 +14,10 @@ grpc: negotiationType: PLAINTEXT vorgang-manager: negotiationType: PLAINTEXT + zufi-manager: + negotiationType: PLAINTEXT + archive-manager: + negotiationType: PLAINTEXT ozgcloud: feature: diff --git a/alfa-server/src/main/resources/application.yml b/alfa-server/src/main/resources/application.yml index f5642fefecceda5c3f88a333ad14c835c5394bc1..aaf3f0290c0eb6de18d5e6e208c4b7886e463486 100644 --- a/alfa-server/src/main/resources/application.yml +++ b/alfa-server/src/main/resources/application.yml @@ -66,6 +66,9 @@ grpc: zufi-manager: address: static://127.0.0.1:9190 negotiationType: TLS + archive-manager: + address: static://127.0.0.1:9090 + negotiationType: TLS ozgcloud: auth: diff --git a/alfa-service/pom.xml b/alfa-service/pom.xml index e7ae7b5424b45b6d10d3e854e64ad139859a03ef..544b215e4e6c71ebf477ae61bdccbed75fa89f4b 100644 --- a/alfa-service/pom.xml +++ b/alfa-service/pom.xml @@ -31,7 +31,7 @@ <parent> <groupId>de.ozgcloud.alfa</groupId> <artifactId>alfa</artifactId> - <version>2.14.0-SNAPSHOT</version> + <version>2.16.0-SNAPSHOT</version> </parent> <artifactId>alfa-service</artifactId> @@ -135,6 +135,10 @@ <groupId>de.ozgcloud.zufi</groupId> <artifactId>zufi-manager-interface</artifactId> </dependency> + <dependency> + <groupId>de.ozgcloud.archive</groupId> + <artifactId>archive-manager-interface</artifactId> + </dependency> <!-- tools --> <dependency> diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/attachment/AttachmentByVorgangController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/attachment/AttachmentByVorgangController.java new file mode 100644 index 0000000000000000000000000000000000000000..10b1131c4cf583be35f5e2dd6f3f104763bc84ec --- /dev/null +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/attachment/AttachmentByVorgangController.java @@ -0,0 +1,56 @@ +package de.ozgcloud.alfa.attachment; + +import java.io.OutputStream; + +import org.springframework.hateoas.CollectionModel; +import org.springframework.hateoas.EntityModel; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; + +import de.ozgcloud.alfa.common.binaryfile.BinaryFileModelAssembler; +import de.ozgcloud.alfa.common.file.OzgFile; +import de.ozgcloud.alfa.common.file.OzgFileService; +import de.ozgcloud.alfa.common.zipdownload.ZipDownloadService; +import de.ozgcloud.alfa.vorgang.VorgangController; +import lombok.RequiredArgsConstructor; + +@RestController +@RequestMapping(AttachmentByVorgangController.PATH) +@RequiredArgsConstructor +public class AttachmentByVorgangController { + static final String PATH = "/api/vorgang/{vorgangId}/attachments"; // NOSONAR + static final String APPLICATION_ZIP_VALUE = "application/zip"; + + private final OzgFileService fileService; + private final ZipDownloadService zipDownloadService; + private final VorgangController vorgangController; + private final BinaryFileModelAssembler modelAssembler; + + @GetMapping + public CollectionModel<EntityModel<OzgFile>> getAllByVorgang(@PathVariable String vorgangId) { + return modelAssembler.toCollectionModel(fileService.getAttachments(vorgangId)); + } + + @GetMapping(produces = APPLICATION_ZIP_VALUE) + public ResponseEntity<StreamingResponseBody> download(@PathVariable String vorgangId) { + return ResponseEntity.ok() + .header(HttpHeaders.CONTENT_DISPOSITION, String.format("attachment; filename=%s", buildZipName(vorgangId))) + .contentType(MediaType.valueOf(APPLICATION_ZIP_VALUE)) + .body(out -> createZipFile(out, vorgangId)); + } + + String buildZipName(String vorgangId) { + return vorgangController.getVorgang(vorgangId).getNummer() + "_Anhaenge.zip"; + } + + void createZipFile(OutputStream out, String vorgangId) { + var ozgFiles = fileService.getAttachments(vorgangId); + zipDownloadService.write(ozgFiles.toList(), out); + } +} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/attachment/AttachmentController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/attachment/AttachmentController.java deleted file mode 100644 index 1211543468abb21bc9b39b98408cd8075adc1710..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/attachment/AttachmentController.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * 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. - */ -package de.ozgcloud.alfa.attachment; - -import java.io.OutputStream; - -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileModelAssembler; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileService; -import de.ozgcloud.alfa.common.zipdownload.ZipDownloadService; -import de.ozgcloud.alfa.vorgang.VorgangController; -import lombok.RequiredArgsConstructor; - -@RestController -@RequestMapping(AttachmentController.PATH) -@RequiredArgsConstructor -public class AttachmentController { - - static final String PATH = "/api/attachments"; // NOSONAR - - static final String PARAM_EINGANG_ID = "eingangId"; - - private final OzgFileService fileService; - private final BinaryFileModelAssembler modelAssembler; - - @GetMapping(params = PARAM_EINGANG_ID) - public CollectionModel<EntityModel<OzgFile>> getAllByEingang(@RequestParam String eingangId) { - return modelAssembler.toCollectionModel(fileService.getAttachmentsByEingang(eingangId)); - } - - @RestController - @RequestMapping(AttachmentsByVorgangController.PATH) - @RequiredArgsConstructor - public static class AttachmentsByVorgangController { - static final String PATH = "/api/vorgang/{vorgangId}/attachments"; // NOSONAR - - private final OzgFileService fileService; - private final ZipDownloadService zipDownloadService; - private final VorgangController vorgangController; - - @GetMapping(params = PARAM_EINGANG_ID, produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) - public ResponseEntity<StreamingResponseBody> download(@PathVariable String vorgangId, @RequestParam String eingangId) { - return ResponseEntity.ok() - .header(HttpHeaders.CONTENT_DISPOSITION, String.format("attachment; filename=%s", buildZipName(vorgangId))) - .contentType(MediaType.APPLICATION_OCTET_STREAM) - .body(out -> createZipFile(out, eingangId)); - } - - String buildZipName(String vorgangId) { - return vorgangController.getVorgang(vorgangId).getNummer() + "_Anhaenge.zip"; - } - - void createZipFile(OutputStream out, String eingangId) { - var ozgFiles = fileService.getAttachmentsByEingang(eingangId); - zipDownloadService.write(ozgFiles.toList(), out); - } - } - -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/Collaboration.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/Collaboration.java index a6e8f794e96951c0eb215b97dc73b49205ce0234..b062636d2f66051bde94792e7904d7d40a67acba 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/Collaboration.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/Collaboration.java @@ -17,7 +17,8 @@ public class Collaboration implements CommandBody { private String collaborationVorgangId; private String titel; - private String anfrage; + private String beschreibung; + private int collaborationLevel; @LinkedResource(controllerClass = OrganisationsEinheitController.class) private String zustaendigeStelle; diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessor.java index c8c7378a3ea53c202a34f4cf8582a30e71b8da09..2f8f332a5e4ebdf81d10932bdf138c53767de8cf 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessor.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessor.java @@ -6,6 +6,7 @@ import java.util.Objects; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.hateoas.EntityModel; +import org.springframework.hateoas.Link; import org.springframework.hateoas.LinkRelation; import org.springframework.hateoas.server.RepresentationModelProcessor; import org.springframework.stereotype.Component; @@ -23,6 +24,7 @@ class CollaborationVorgangProcessor implements RepresentationModelProcessor<Enti static final LinkRelation REL_COLLABORATIONS = LinkRelation.of("collaborations"); static final LinkRelation REL_SEARCH_ORGANISATIONS_EINHEIT = LinkRelation.of("searchOrganisationsEinheit"); + static final LinkRelation REL_SEARCH_FACHSTELLE = LinkRelation.of("searchFachstelle"); private final CurrentUserService currentUserService; private final CollaborationService collaborationService; @@ -37,8 +39,17 @@ class CollaborationVorgangProcessor implements RepresentationModelProcessor<Enti return ModelBuilder.fromModel(model) .ifMatch(() -> !collaborationService.hasCollaboration(vorgang.getId())) - .addLink(linkTo(methodOn(OrganisationsEinheitController.class).search(null)).withRel(REL_SEARCH_ORGANISATIONS_EINHEIT)) + .addLinks(buildSearchOrganisationsEinheitLink(), buildSearchFachstelleLink()) .addLink(linkTo(methodOn(CollaborationController.class).getAllByVorgangId(vorgang.getId())).withRel(REL_COLLABORATIONS)) .buildModel(); } + + private Link buildSearchOrganisationsEinheitLink() { + return linkTo(methodOn(OrganisationsEinheitController.class).search(null)).withRel( + REL_SEARCH_ORGANISATIONS_EINHEIT); + } + + private Link buildSearchFachstelleLink() { + return linkTo(methodOn(FachstelleController.class).search(null)).withRel(REL_SEARCH_FACHSTELLE); + } } diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/Fachstelle.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/Fachstelle.java new file mode 100644 index 0000000000000000000000000000000000000000..dc0ca936a8669357d14d1f230a690865f9ba1b9a --- /dev/null +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/Fachstelle.java @@ -0,0 +1,17 @@ +package de.ozgcloud.alfa.collaboration; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +import lombok.Builder; +import lombok.Getter; + +@Builder +@Getter +class Fachstelle { + + @JsonIgnore + private String id; + private String name; + private String anschrift; + private String email; +} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleController.java new file mode 100644 index 0000000000000000000000000000000000000000..bcd29e1f7d3b2ee40aaf053f9df7ababfa8c9f26 --- /dev/null +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleController.java @@ -0,0 +1,36 @@ +package de.ozgcloud.alfa.collaboration; + +import java.util.Optional; + +import org.springframework.hateoas.CollectionModel; +import org.springframework.hateoas.EntityModel; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import lombok.RequiredArgsConstructor; + +@RestController +@RequestMapping(FachstelleController.PATH) +@RequiredArgsConstructor +class FachstelleController { + + static final String PATH = "/api/fachstelles"; // NOSONAR + static final String SEARCH_BY_PARAM = "searchBy"; + + private final FachstelleService service; + private final FachstelleModelAssembler modelAssembler; + + @GetMapping(params = { SEARCH_BY_PARAM }) + public CollectionModel<EntityModel<Fachstelle>> search(@RequestParam String searchBy) { + return modelAssembler.toCollectionModel(service.searchFachstellen(searchBy).toList()); + } + + @GetMapping("/{id}") + public ResponseEntity<EntityModel<Fachstelle>> getById(@PathVariable String id) { + return ResponseEntity.of(Optional.of(service.getById(id)).map(modelAssembler::toModel)); + } +} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..d49894f65226e39cecf3d8cd70edc9b07096e628 --- /dev/null +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleMapper.java @@ -0,0 +1,14 @@ +package de.ozgcloud.alfa.collaboration; + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelle; + +@Mapper +interface FachstelleMapper { + + @Mapping(target = "name", source = "firmenName") + @Mapping(target = "email", source = "emailAdresse") + Fachstelle fromGrpc(GrpcFachstelle fachstelle); +} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleModelAssembler.java new file mode 100644 index 0000000000000000000000000000000000000000..e60a3bc77ec38fe4f5795224fd683d44e672fce9 --- /dev/null +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleModelAssembler.java @@ -0,0 +1,30 @@ +package de.ozgcloud.alfa.collaboration; + +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; + +import jakarta.annotation.Nonnull; + +import org.springframework.hateoas.CollectionModel; +import org.springframework.hateoas.EntityModel; +import org.springframework.hateoas.server.RepresentationModelAssembler; +import org.springframework.stereotype.Component; + +import de.ozgcloud.alfa.common.ModelBuilder; + +@Component +class FachstelleModelAssembler + implements RepresentationModelAssembler<Fachstelle, EntityModel<Fachstelle>> { + + @Override + public EntityModel<Fachstelle> toModel(@Nonnull Fachstelle entity) { + return ModelBuilder.fromEntity(entity) + .addLink(linkTo(FachstelleController.class).slash(entity.getId()).withSelfRel()) + .buildModel(); + } + + @Override + public CollectionModel<EntityModel<Fachstelle>> toCollectionModel(Iterable<? extends Fachstelle> entities) { + return RepresentationModelAssembler.super.toCollectionModel(entities) + .add(linkTo(FachstelleController.class).withSelfRel()); + } +} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleRemoteService.java new file mode 100644 index 0000000000000000000000000000000000000000..e1cd1d62e7e2aac9314d9fcd0f63c75dbcc3d575 --- /dev/null +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleRemoteService.java @@ -0,0 +1,46 @@ +package de.ozgcloud.alfa.collaboration; + +import java.util.stream.Stream; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import de.ozgcloud.alfa.common.GrpcUtil; +import de.ozgcloud.zufi.grpc.fachstelle.FachstelleServiceGrpc.FachstelleServiceBlockingStub; +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleGetRequest; +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleGetResponse; +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleSearchRequest; +import net.devh.boot.grpc.client.inject.GrpcClient; + +@Service +class FachstelleRemoteService { + + @GrpcClient(GrpcUtil.ZUFI_MANAGER_GRPC_CLIENT) + private FachstelleServiceBlockingStub serviceStub; + + @Autowired + private FachstelleMapper fachstelleMapper; + + public Stream<Fachstelle> search(String searchBy) { + var response = serviceStub.search(buildSearchRequest(searchBy)); + return response.getFachstellenList().stream().map(fachstelleMapper::fromGrpc); + } + + private GrpcFachstelleSearchRequest buildSearchRequest(String searchBy) { + return GrpcFachstelleSearchRequest.newBuilder().setSearchBy(searchBy).build(); + } + + public Fachstelle getById(String id) { + var request = buildGetByIdRequest(id); + var response = serviceStub.getById(request); + return getFachstelleFromGetByIdResponse(response); + } + + GrpcFachstelleGetRequest buildGetByIdRequest(String id) { + return GrpcFachstelleGetRequest.newBuilder().setId(id).build(); + } + + Fachstelle getFachstelleFromGetByIdResponse(GrpcFachstelleGetResponse response) { + return fachstelleMapper.fromGrpc(response.getFachstelle()); + } +} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleService.java new file mode 100644 index 0000000000000000000000000000000000000000..cb01bbf26c45e800598380b66f692069941a98c0 --- /dev/null +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleService.java @@ -0,0 +1,23 @@ +package de.ozgcloud.alfa.collaboration; + +import java.util.stream.Stream; + +import org.springframework.stereotype.Service; + +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Service +class FachstelleService { + + private final FachstelleRemoteService remoteService; + + public Fachstelle getById(String id) { + return remoteService.getById(id); + } + + public Stream<Fachstelle> searchFachstellen(String searchBy) { + return remoteService.search(searchBy); + } + +} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/GrpcUtil.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/GrpcUtil.java index fc033f658d18ce1a5726b631e32ab7b591c5817f..610a0cc4324df0ed3d3a7bd110b4a13b2b7ebfe3 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/GrpcUtil.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/common/GrpcUtil.java @@ -40,6 +40,8 @@ public class GrpcUtil { public static final String ZUFI_MANAGER_GRPC_CLIENT = "zufi-manager"; + public static final String ARCHIVE_MANAGER_GRPC_CLIENT = "archive-manager"; + public static final String SERVICE_KEY = "GRPC_SERVICE"; public static Key<String> keyOfString(String key) { diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/file/OzgFileRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/file/OzgFileRemoteService.java index 6b1577082e0c2bdc7d53344547265a77ad5e452e..d8c4a4e1d04bd53c9a2b0125a33e5c04da59e3e1 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/file/OzgFileRemoteService.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/common/file/OzgFileRemoteService.java @@ -29,7 +29,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import de.ozgcloud.alfa.common.GrpcUtil; -import de.ozgcloud.alfa.common.callcontext.ContextService; import de.ozgcloud.vorgang.grpc.file.FileServiceGrpc.FileServiceBlockingStub; import de.ozgcloud.vorgang.grpc.file.GrpcGetAttachmentsRequest; import de.ozgcloud.vorgang.grpc.file.GrpcGetRepresentationsRequest; @@ -41,33 +40,29 @@ public class OzgFileRemoteService { @GrpcClient(GrpcUtil.VORGANG_MANAGER_GRPC_CLIENT) private FileServiceBlockingStub fileServiceStub; @Autowired - private ContextService contextService; - @Autowired private OzgFileMapper fileMapper; - public Stream<OzgFile> getAttachmentsByEingang(String eingangId) { - var response = fileServiceStub.getAttachments(buildGrpcGetAttachmentsRequest(eingangId)); + public Stream<OzgFile> getAttachments(String vorgangId) { + var response = fileServiceStub.getAttachments(buildGrpcGetAttachmentsRequest(vorgangId)); return response.getFileList().stream().map(fileMapper::toFile); } - private GrpcGetAttachmentsRequest buildGrpcGetAttachmentsRequest(String eingangId) { + private GrpcGetAttachmentsRequest buildGrpcGetAttachmentsRequest(String vorgangId) { return GrpcGetAttachmentsRequest.newBuilder() - .setContext(contextService.createCallContext()) - .setEingangId(eingangId) + .setVorgangId(vorgangId) .build(); } - public Stream<OzgFile> getRepresentationsByEingang(String eingangId) { - var response = fileServiceStub.getRepresentations(buildGrpcGetRepresentationsRequest(eingangId)); + public Stream<OzgFile> getRepresentations(String vorgangId) { + var response = fileServiceStub.getRepresentations(buildGrpcGetRepresentationsRequest(vorgangId)); return response.getFileList().stream().map(fileMapper::toFile); } - private GrpcGetRepresentationsRequest buildGrpcGetRepresentationsRequest(String eingangId) { + private GrpcGetRepresentationsRequest buildGrpcGetRepresentationsRequest(String vorgangId) { return GrpcGetRepresentationsRequest.newBuilder() - .setContext(contextService.createCallContext()) - .setEingangId(eingangId) + .setVorgangId(vorgangId) .build(); } } \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/file/OzgFileService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/file/OzgFileService.java index 63e9bdb12be7eb045d6eb0d3876fd1694ac4ee08..9041fa12dcfd1d8e7cecc99af58a94fa4cbeb6dc 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/file/OzgFileService.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/common/file/OzgFileService.java @@ -34,11 +34,11 @@ public class OzgFileService { @Autowired private OzgFileRemoteService remoteService; - public Stream<OzgFile> getAttachmentsByEingang(String eingangId) { - return remoteService.getAttachmentsByEingang(eingangId); + public Stream<OzgFile> getAttachments(String vorgangId) { + return remoteService.getAttachments(vorgangId); } - public Stream<OzgFile> getRepresentationsByEingang(String eingangId) { - return remoteService.getRepresentationsByEingang(eingangId); + public Stream<OzgFile> getRepresentations(String vorgangId) { + return remoteService.getRepresentations(vorgangId); } } \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportRemoteService.java new file mode 100644 index 0000000000000000000000000000000000000000..a4c82201787069c1c46f7f8d265181feef7230de --- /dev/null +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportRemoteService.java @@ -0,0 +1,20 @@ +package de.ozgcloud.alfa.export; + +import org.springframework.stereotype.Service; + +import de.ozgcloud.alfa.common.GrpcUtil; +import de.ozgcloud.archive.grpc.export.ExportServiceGrpc.ExportServiceBlockingStub; +import de.ozgcloud.archive.grpc.export.GrpcExportVorgangRequest; +import net.devh.boot.grpc.client.inject.GrpcClient; + +@Service +class ExportRemoteService { + + @GrpcClient(GrpcUtil.ARCHIVE_MANAGER_GRPC_CLIENT) + private ExportServiceBlockingStub exportServiceStub; + + public ExportedVorgangFile exportVorgang(String vorgangId) { + var responseIterator = exportServiceStub.exportVorgang(GrpcExportVorgangRequest.newBuilder().setVorgangId(vorgangId).build()); + return new StreamedExportedVorgangFile(responseIterator); + } +} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportVorgangController.java similarity index 64% rename from alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangController.java rename to alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportVorgangController.java index 052b36cd92c182aad9838aefe8f108b358af4e65..abd43c474649b916f33e8992f21d44784bb332ff 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangController.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportVorgangController.java @@ -1,7 +1,5 @@ package de.ozgcloud.alfa.export; -import java.util.UUID; - import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -13,27 +11,21 @@ import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBo import lombok.RequiredArgsConstructor; -@RequiredArgsConstructor @RestController @RequestMapping(ExportVorgangController.PATH) +@RequiredArgsConstructor public class ExportVorgangController { static final String PATH = "/api/vorgangs"; // NOSONAR - private static final String EXPORT_FILENAME_TEMPLATE = "%s_Abgabe.Abgabe.0401.xdomea"; - - private final ExportService xDomeaService; + private final ExportRemoteService exportRemoteService; @GetMapping(value = "{vorgangId}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) - public ResponseEntity<StreamingResponseBody> exportToXdomea(@PathVariable String vorgangId) { - var filenameId = UUID.randomUUID().toString(); + public ResponseEntity<StreamingResponseBody> exportVorgang(@PathVariable String vorgangId) { + var exportedVorgangFile = exportRemoteService.exportVorgang(vorgangId); return ResponseEntity.ok() - .header(HttpHeaders.CONTENT_DISPOSITION, String.format("attachment; filename=%s", buildZipFilename(filenameId))) + .header(HttpHeaders.CONTENT_DISPOSITION, String.format("attachment; filename=%s", exportedVorgangFile.getFileName())) .contentType(MediaType.APPLICATION_OCTET_STREAM) - .body(out -> xDomeaService.writeExport(vorgangId, filenameId, out)); - } - - String buildZipFilename(String filenameId) { - return String.format(EXPORT_FILENAME_TEMPLATE, filenameId); + .body(exportedVorgangFile::writeToOutputStream); } } diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java similarity index 96% rename from alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java rename to alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java index b7621e342cb52f19593b07ee03384b25285feb6e..8c570cff79bdad0796683d6ecaf92888c841138f 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java @@ -33,7 +33,7 @@ class ExportVorgangProcessor implements RepresentationModelProcessor<EntityModel return ModelBuilder.fromModel(model) .ifMatch(IS_VORGANG_ABGESCHLOSSEN) - .addLink(linkTo(methodOn(ExportVorgangController.class).exportToXdomea(vorgang.getId())).withRel(REL_EXPORT)) + .addLink(linkTo(methodOn(ExportVorgangController.class).exportVorgang(vorgang.getId())).withRel(REL_EXPORT)) .buildModel(); } } diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportedVorgangFile.java b/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportedVorgangFile.java new file mode 100644 index 0000000000000000000000000000000000000000..e778a5a905885776809922c99ca8c27a5f595f92 --- /dev/null +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportedVorgangFile.java @@ -0,0 +1,11 @@ +package de.ozgcloud.alfa.export; + +import java.io.IOException; +import java.io.OutputStream; + +interface ExportedVorgangFile { + + String getFileName(); + + void writeToOutputStream(OutputStream outputStream) throws IOException; +} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/export/StreamedExportedVorgangFile.java b/alfa-service/src/main/java/de/ozgcloud/alfa/export/StreamedExportedVorgangFile.java new file mode 100644 index 0000000000000000000000000000000000000000..4e87099e63b8e3c896b37f8ddf3728b3f2a1dbda --- /dev/null +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/export/StreamedExportedVorgangFile.java @@ -0,0 +1,35 @@ +package de.ozgcloud.alfa.export; + +import java.io.IOException; +import java.io.OutputStream; +import java.util.Iterator; + +import de.ozgcloud.archive.grpc.export.GrpcExportVorgangResponse; +import de.ozgcloud.common.errorhandling.TechnicalException; +import lombok.Getter; + +class StreamedExportedVorgangFile implements ExportedVorgangFile { + + @Getter + private final String fileName; + private final Iterator<GrpcExportVorgangResponse> responseIterator; + + public StreamedExportedVorgangFile(Iterator<GrpcExportVorgangResponse> responseIterator) { + this.fileName = getFileNameFrom(responseIterator); + this.responseIterator = responseIterator; + } + + static String getFileNameFrom(Iterator<GrpcExportVorgangResponse> responseIterator) { + if (!responseIterator.hasNext()) { + throw new TechnicalException("Response is empty"); + } + return responseIterator.next().getVorgangFile().getFileName(); + } + + @Override + public void writeToOutputStream(OutputStream outputStream) throws IOException { + while (responseIterator.hasNext()) { + outputStream.write(responseIterator.next().getVorgangFile().getFileContent().toByteArray()); + } + } +} diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component.scss b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/OrganisationsEinheitSettings.java similarity index 76% rename from alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component.scss rename to alfa-service/src/main/java/de/ozgcloud/alfa/postfach/OrganisationsEinheitSettings.java index 9a08a5aabce6cc4cdbb268c4190a8d67f82f19e5..f5d1f19f53554a619d68368c49e5445c978d8c73 100644 --- a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-email-benachrichtigung-container/user-settings-email-benachrichtigung-container.component.scss +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/OrganisationsEinheitSettings.java @@ -1,9 +1,5 @@ -/** - * 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 - * +/* + * Copyright (c) 2024. * Lizenziert unter der EUPL, Version 1.2 oder - sobald * diese von der Europäischen Kommission genehmigt wurden - * Folgeversionen der EUPL ("Lizenz"); @@ -21,3 +17,16 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ + +package de.ozgcloud.alfa.postfach; + +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@Builder +public class OrganisationsEinheitSettings { + private String signatur; +} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachProperties.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachProperties.java index e6d7b0dea5e3fd6e4951c8df5447ab43a45d2a97..5a7e9f401ebea5b79c3db5c5e3ef8e069c247cfb 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachProperties.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachProperties.java @@ -1,5 +1,27 @@ +/* + * Copyright (c) 2024. + * 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. + */ + package de.ozgcloud.alfa.postfach; +import java.util.Map; + import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.context.annotation.Configuration; @@ -21,4 +43,9 @@ public class PostfachProperties { */ private String signatur = ""; + /** + * Settings that are linked to an Organisationseinheit. Configured by administration config server. + */ + private Map<String, Map<String, Object>> organisationsEinheitSettings = Map.of(); + } diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachSettingsService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachSettingsService.java index e42fc707246eba12df26de9cb20c31a6f6598262..0d3ff32f19a6e7e7a5383f1e77cb47c680ff0674 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachSettingsService.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachSettingsService.java @@ -1,5 +1,6 @@ package de.ozgcloud.alfa.postfach; +import java.util.Map; import java.util.Objects; import java.util.Optional; @@ -15,6 +16,8 @@ import lombok.RequiredArgsConstructor; @Service class PostfachSettingsService { + static final String FIELD_SIGNATUR = "signatur"; + private PostfachConfigGroup postfachConfigGroup; private final PostfachMailRemoteService remoteService; @@ -35,14 +38,15 @@ class PostfachSettingsService { .reply(isReplyToMessageAllowed(vorgang)) .build()) .settings(Settings.builder() - .signatur(getSignatur()) + .signatur(getSignatur(vorgang.getOrganisationseinheitenID())) .build()) .build(); } - String getSignatur() { + String getSignatur(String organisationseinheitenID) { refreshPostfachProperties(); - return postfachProperties.getSignatur(); + var settings = getOrganisationsEinheitSettings(organisationseinheitenID); + return settings.map(OrganisationsEinheitSettings::getSignatur).orElseGet(postfachProperties::getSignatur); } void refreshPostfachProperties() { @@ -71,4 +75,13 @@ class PostfachSettingsService { .findFirst() .orElse(false); } + + Optional<OrganisationsEinheitSettings> getOrganisationsEinheitSettings(final String organisationId) { + return Optional.ofNullable(postfachProperties.getOrganisationsEinheitSettings().get(organisationId)).map(this::mapOrganisationsEinheitSettings); + } + + OrganisationsEinheitSettings mapOrganisationsEinheitSettings(Map<String, Object> organisationsEinheitSettings) { + var signatur = Optional.ofNullable(organisationsEinheitSettings.get(FIELD_SIGNATUR)).map(Object::toString).orElse(null); + return OrganisationsEinheitSettings.builder().signatur(signatur).build(); + } } diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/representation/RepresentationController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/representation/RepresentationByVorgangController.java similarity index 79% rename from alfa-service/src/main/java/de/ozgcloud/alfa/representation/RepresentationController.java rename to alfa-service/src/main/java/de/ozgcloud/alfa/representation/RepresentationByVorgangController.java index 28913930a067740c12c8bf214423b59426f22c54..d7731c004ba71684e7d6a752ec78433b367f8aa6 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/representation/RepresentationController.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/representation/RepresentationByVorgangController.java @@ -26,8 +26,8 @@ package de.ozgcloud.alfa.representation; import org.springframework.hateoas.CollectionModel; import org.springframework.hateoas.EntityModel; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import de.ozgcloud.alfa.common.binaryfile.BinaryFileModelAssembler; @@ -36,20 +36,17 @@ import de.ozgcloud.alfa.common.file.OzgFileService; import lombok.RequiredArgsConstructor; @RestController -@RequestMapping(RepresentationController.PATH) +@RequestMapping(RepresentationByVorgangController.PATH) @RequiredArgsConstructor -public class RepresentationController { - - static final String PATH = "/api/representations"; // NOSONAR - - static final String PARAM_EINGANG_ID = "eingangId"; +public class RepresentationByVorgangController { + static final String PATH = "/api/vorgang/{vorgangId}/representations"; // NOSONAR private final OzgFileService fileService; private final BinaryFileModelAssembler modelAssembler; - @GetMapping(params = PARAM_EINGANG_ID) - public CollectionModel<EntityModel<OzgFile>> getAllByEingang(@RequestParam String eingangId) { - return modelAssembler.toCollectionModel(fileService.getRepresentationsByEingang(eingangId)); + @GetMapping + public CollectionModel<EntityModel<OzgFile>> getAll(@PathVariable String vorgangId) { + return modelAssembler.toCollectionModel(fileService.getRepresentations(vorgangId)); } } diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangURIResolver.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangURIResolver.java index c3b6a185dce5c3e3189fabe78e6301c23ccce5a0..ef7dd0f094e2d9de16eb92c08ec8242fbe584c0a 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangURIResolver.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangURIResolver.java @@ -15,7 +15,7 @@ class VorgangURIResolver implements OzgcloudResourceURIResolver { static final String REL_NAME = "vorgang"; - private final Pattern pattern = Pattern.compile("ozgcloud://[^/]+/vorgangs/([0-9a-fA-F]+)"); + private final Pattern pattern = Pattern.compile(".+/vorgangs/([^/]+)"); @Override public Optional<Link> resolve(String uri) { diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessor.java index 6b111ac3c55ed436df4b141e6115ba419d599905..68ab090f6a599fa547808abbf62e6ffc43075cf3 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessor.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessor.java @@ -36,8 +36,7 @@ import org.springframework.hateoas.LinkRelation; import org.springframework.hateoas.server.RepresentationModelProcessor; import org.springframework.stereotype.Component; -import de.ozgcloud.alfa.attachment.AttachmentController; -import de.ozgcloud.alfa.attachment.AttachmentController.AttachmentsByVorgangController; +import de.ozgcloud.alfa.attachment.AttachmentByVorgangController; import de.ozgcloud.alfa.common.ModelBuilder; import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; import de.ozgcloud.alfa.common.user.CurrentUserService; @@ -46,7 +45,7 @@ import de.ozgcloud.alfa.common.user.UserRole; import de.ozgcloud.alfa.historie.HistorieController; import de.ozgcloud.alfa.kommentar.KommentarController.KommentarByVorgangController; import de.ozgcloud.alfa.postfach.PostfachMailController; -import de.ozgcloud.alfa.representation.RepresentationController; +import de.ozgcloud.alfa.representation.RepresentationByVorgangController; import de.ozgcloud.alfa.vorgang.VorgangProperties.VorgangProperty; import de.ozgcloud.alfa.vorgang.forwarding.ForwardingController; import lombok.RequiredArgsConstructor; @@ -91,14 +90,13 @@ class VorgangWithEingangProcessor implements RepresentationModelProcessor<Entity return ModelBuilder.fromModel(model) .addLink(linkTo(KommentarByVorgangController.class).slash(vorgang.getId()).slash("kommentars").withRel(REL_KOMMENTARE)) .ifMatch(HAS_ATTACHMENTS) - .addLinks(linkTo(methodOn(AttachmentController.class).getAllByEingang(vorgang.getEingang().getId())) + .addLinks(linkTo(methodOn(AttachmentByVorgangController.class).getAllByVorgang(vorgang.getId())) .withRel(REL_ATTACHMENTS), - linkTo(methodOn(AttachmentsByVorgangController.class).download(vorgang.getId(), vorgang.getEingang().getId())) + linkTo(methodOn(AttachmentByVorgangController.class).download(vorgang.getId())) .withRel(REL_DOWNLOAD_ATTACHMENTS)) .ifMatch(HAS_REPRESENTATIONS) - .addLink(vorgangWithEingang -> linkTo( - methodOn(RepresentationController.class).getAllByEingang(vorgangWithEingang.getEingang().getId())) - .withRel(REL_REPRESENTATIONS)) + .addLink(linkTo(methodOn(RepresentationByVorgangController.class).getAll(vorgang.getId())) + .withRel(REL_REPRESENTATIONS)) .ifMatch(this::isPostfachConfigured) .addLink(linkTo(methodOn(PostfachMailController.class).getAll(vorgang.getId())).withRel(REL_POSTFACH_MAILS)) .ifMatch(this::isEinheitlicherAnsprechpartner) diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageModelAssembler.java index f184cadabc7a23ac7cc60926932aa89dd352e398..e2b4eba3859767b941c08e447533687d1244d070 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageModelAssembler.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageModelAssembler.java @@ -37,8 +37,6 @@ import org.springframework.stereotype.Component; import de.ozgcloud.alfa.common.CollectionModelBuilder; import de.ozgcloud.alfa.common.ModelBuilder; import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; -import de.ozgcloud.alfa.kommentar.KommentarCommandController.KommentarCommandByVorgangController; -import de.ozgcloud.alfa.kommentar.KommentarController; import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; import de.ozgcloud.alfa.vorgang.VorgangController; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/attachment/AttachmentsByVorgangControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/attachment/AttachmentByVorgangControllerTest.java similarity index 72% rename from alfa-service/src/test/java/de/ozgcloud/alfa/attachment/AttachmentsByVorgangControllerTest.java rename to alfa-service/src/test/java/de/ozgcloud/alfa/attachment/AttachmentByVorgangControllerTest.java index 54638cb8a8390236ab8fc1c155d8ff3e33759779..0f3a90126e5da1db42e63875315efdb160947cb6 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/attachment/AttachmentsByVorgangControllerTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/attachment/AttachmentByVorgangControllerTest.java @@ -15,6 +15,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import org.mockito.ArgumentMatchers; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; @@ -26,23 +27,22 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders; import com.thedeanda.lorem.LoremIpsum; -import de.ozgcloud.alfa.attachment.AttachmentController.AttachmentsByVorgangController; import de.ozgcloud.alfa.common.binaryfile.BinaryFileModelAssembler; +import de.ozgcloud.alfa.common.file.OzgFile; import de.ozgcloud.alfa.common.file.OzgFileService; import de.ozgcloud.alfa.common.file.OzgFileTestFactory; import de.ozgcloud.alfa.common.zipdownload.ZipDownloadService; -import de.ozgcloud.alfa.vorgang.EingangTestFactory; import de.ozgcloud.alfa.vorgang.VorgangController; import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; import lombok.SneakyThrows; -class AttachmentsByVorgangControllerTest { +class AttachmentByVorgangControllerTest { @Spy @InjectMocks - private AttachmentsByVorgangController controller; + private AttachmentByVorgangController controller; @Mock private BinaryFileModelAssembler modelAssembler; @Mock @@ -59,6 +59,38 @@ class AttachmentsByVorgangControllerTest { mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); } + @Nested + class TestGetAttachmentsByVorgang { + + @BeforeEach + void mockFileService() { + when(fileService.getAttachments(VorgangHeaderTestFactory.ID)).thenReturn(Stream.of(OzgFileTestFactory.create())); + } + + @SneakyThrows + @Test + void shouldResponseWithStatusOk() { + var result = callEndpoint(); + + result.andExpect(status().isOk()); + } + + @SneakyThrows + @Test + void shouldCallModelAssembler() { + callEndpoint(); + + verify(modelAssembler).toCollectionModel(ArgumentMatchers.<Stream<OzgFile>>any()); + } + + @SneakyThrows + private ResultActions callEndpoint() { + return mockMvc.perform( + get(AttachmentByVorgangController.PATH.replace("{vorgangId}", VorgangHeaderTestFactory.ID)) + .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)); + } + } + @DisplayName("Download") @Nested class TestDownload { @@ -98,7 +130,7 @@ class AttachmentsByVorgangControllerTest { void shouldHaveContentType() { var response = doRequest(); - response.andExpect(header().string(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE)); + response.andExpect(header().string(HttpHeaders.CONTENT_TYPE, AttachmentByVorgangController.APPLICATION_ZIP_VALUE)); } @SneakyThrows @@ -106,16 +138,15 @@ class AttachmentsByVorgangControllerTest { void shouldWriteZipFile() { doRequest(); - verify(controller).createZipFile(any(), eq(EingangTestFactory.ID)); + verify(controller).createZipFile(any(), eq(VorgangHeaderTestFactory.ID)); } @SneakyThrows private ResultActions doRequest() { return mockMvc.perform(asyncDispatch( - mockMvc.perform(get(AttachmentsByVorgangController.PATH.replace("{vorgangId}", VorgangHeaderTestFactory.ID) + "?eingangId=" - + EingangTestFactory.ID) - .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_OCTET_STREAM_VALUE)) - .andReturn())) + mockMvc.perform(get(AttachmentByVorgangController.PATH.replace("{vorgangId}", VorgangHeaderTestFactory.ID)) + .header(HttpHeaders.ACCEPT, AttachmentByVorgangController.APPLICATION_ZIP_VALUE)) + .andReturn())) .andExpect(status().isOk()); } } @@ -159,13 +190,13 @@ class AttachmentsByVorgangControllerTest { void shouldGetAttachments() { callController(); - verify(fileService).getAttachmentsByEingang(EingangTestFactory.ID); + verify(fileService).getAttachments(VorgangHeaderTestFactory.ID); } @Test void shouldCallZipDownloadService() { var ozgFile = OzgFileTestFactory.create(); - when(fileService.getAttachmentsByEingang(EingangTestFactory.ID)).thenReturn(Stream.of(ozgFile)); + when(fileService.getAttachments(VorgangHeaderTestFactory.ID)).thenReturn(Stream.of(ozgFile)); callController(); @@ -173,7 +204,7 @@ class AttachmentsByVorgangControllerTest { } private void callController() { - controller.createZipFile(outputStream, EingangTestFactory.ID); + controller.createZipFile(outputStream, VorgangHeaderTestFactory.ID); } } } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationControllerTest.java index 87122cbb75c58ec12784d345654fd573f534ed70..71f1d8153365c3971e4333b3a7bc48789ba34447 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationControllerTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationControllerTest.java @@ -115,12 +115,12 @@ class CollaborationControllerTest { @SneakyThrows @Test - void shouldHaveAnfrage() { + void shouldHaveBeschreibung() { var response = performRequest(); System.out.println(response.andReturn().getResponse().getContentAsString()); - response.andExpect(jsonPath("$.content[0].anfrage").value(CollaborationTestFactory.ANFRAGE)); + response.andExpect(jsonPath("$.content[0].beschreibung").value(CollaborationTestFactory.BESCHREIBUNG)); } @SneakyThrows diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationTestFactory.java index 133acf57bb11cd6d048f2c578405f4ceadd4ae4b..9959f1a2b18e38db081c5bb62847213b3353a81f 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationTestFactory.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationTestFactory.java @@ -11,7 +11,7 @@ public class CollaborationTestFactory { public static final String VORGANG_ID = UUID.randomUUID().toString(); public static final String COLLABORATION_VORGANG_ID = UUID.randomUUID().toString(); public static final String TITEL = LoremIpsum.getInstance().getWords(7); - public static final String ANFRAGE = LoremIpsum.getInstance().getParagraphs(2, 5); + public static final String BESCHREIBUNG = LoremIpsum.getInstance().getParagraphs(2, 5); public static final String ZUSTAENDIGE_STELLE = OrganisationsEinheitTestFactory.ID; public static Collaboration create() { @@ -24,7 +24,7 @@ public class CollaborationTestFactory { .vorgangId(VORGANG_ID) .collaborationVorgangId(COLLABORATION_VORGANG_ID) .titel(TITEL) - .anfrage(ANFRAGE) + .beschreibung(BESCHREIBUNG) .zustaendigeStelle(ZUSTAENDIGE_STELLE); } } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessorTest.java index 8e28fca8d28c0752644af390b656228fef93ea26..3405bc823306e74d16121db6f7b4d4ebfce30213 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessorTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessorTest.java @@ -121,11 +121,10 @@ class CollaborationVorgangProcessorTest { } @Test - void shouldHaveThreeLinks() { + void shouldHaveFourLinks() { var model = callProcessor(); - assertThat(model.getLinks()).hasSize(3); - + assertThat(model.getLinks()).hasSize(4); } @Test @@ -141,6 +140,19 @@ class CollaborationVorgangProcessorTest { .isEqualTo(expectedHref); } + @Test + void shouldAddSearchFachstelleLink() { + var expectedHref = UriComponentsBuilder.fromUriString(FachstelleController.PATH) + .queryParam(FachstelleController.SEARCH_BY_PARAM, "{" + FachstelleController.SEARCH_BY_PARAM + "}") + .build().toString(); + + var model = callProcessor(); + + assertThat(model.getLink(CollaborationVorgangProcessor.REL_SEARCH_FACHSTELLE)).get() + .extracting(Link::getHref) + .isEqualTo(expectedHref); + } + @Test void shouldAddCollaborationsLink() { var expectedHref = UriComponentsBuilder.fromUriString(CollaborationController.PATH) diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleControllerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..ddf4b076a8e4bdc3588ffaac5d4ad285e1aeb706 --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleControllerTest.java @@ -0,0 +1,204 @@ +package de.ozgcloud.alfa.collaboration; + +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import java.util.List; +import java.util.stream.Stream; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.springframework.hateoas.CollectionModel; +import org.springframework.hateoas.EntityModel; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import com.thedeanda.lorem.LoremIpsum; + +import lombok.SneakyThrows; + +class FachstelleControllerTest { + + @InjectMocks + private FachstelleController controller; + + @Mock + private FachstelleService service; + + @Mock + private FachstelleModelAssembler modelAssembler; + + private MockMvc mockMvc; + + @BeforeEach + void initTest() { + mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); + } + + @Nested + class TestGetById { + + private final Fachstelle fachstelle = FachstelleTestFactory.create(); + + @BeforeEach + void mockService() { + when(service.getById(FachstelleTestFactory.ID)).thenReturn(fachstelle); + } + + @SneakyThrows + @Test + void shouldCallFachstelleService() { + performRequest(); + + verify(service).getById(FachstelleTestFactory.ID); + } + + @Test + void shouldCallAssembler() { + performRequest(); + + verify(modelAssembler).toModel(fachstelle); + } + + @SneakyThrows + @Test + void shouldReturnStatusOk() { + when(modelAssembler.toModel(fachstelle)).thenReturn(EntityModel.of(fachstelle)); + + var response = performRequest(); + + response.andExpect(status().isOk()); + } + + @SneakyThrows + @Test + void shouldHaveFachstelleName() { + when(modelAssembler.toModel(fachstelle)).thenReturn(EntityModel.of(fachstelle)); + + var response = performRequest(); + + response.andExpect(jsonPath("$.name").value(FachstelleTestFactory.NAME)); + } + + @SneakyThrows + @Test + void shouldHaveFachstelleAnschrift() { + when(modelAssembler.toModel(fachstelle)).thenReturn(EntityModel.of(fachstelle)); + + var response = performRequest(); + + response.andExpect(jsonPath("$.anschrift").value(FachstelleTestFactory.ANSCHRIFT)); + } + + @SneakyThrows + @Test + void shouldHaveFachstelleEmail() { + when(modelAssembler.toModel(fachstelle)).thenReturn(EntityModel.of(fachstelle)); + + var response = performRequest(); + + response.andExpect(jsonPath("$.email").value(FachstelleTestFactory.EMAIL)); + } + + @SneakyThrows + private ResultActions performRequest() { + return mockMvc.perform(get(FachstelleController.PATH + "/" + FachstelleTestFactory.ID)); + } + } + + @Nested + class TestSearch { + + private final Fachstelle fachstelle1 = FachstelleTestFactory.create(); + private final Fachstelle fachstelle2 = FachstelleTestFactory.createBuilder() + .name(LoremIpsum.getInstance().getName()) + .build(); + private final String searchBy = LoremIpsum.getInstance().getWords(5); + private final List<Fachstelle> fachstellen = List.of(fachstelle1, fachstelle2); + + @BeforeEach + void setUpMocks() { + when(service.searchFachstellen(searchBy)).thenReturn(Stream.of(fachstelle1, fachstelle2)); + when(modelAssembler.toCollectionModel(fachstellen)) + .thenReturn( + CollectionModel.of(List.of(EntityModel.of(fachstelle1), EntityModel.of(fachstelle2)))); + } + + @Test + void shouldCallService() { + performRequest(); + + verify(service).searchFachstellen(searchBy); + } + + @Test + void shouldCallModelAssembler() { + performRequest(); + + verify(modelAssembler).toCollectionModel(fachstellen); + } + + @SneakyThrows + @Test + void shouldReturnStatusOk() { + var response = performRequest(); + + response.andExpect(status().isOk()); + } + + @Test + @SneakyThrows + void shouldHaveFirstFachstelleName() { + var response = performRequest(); + response.andExpect(jsonPath("$.content[0].name").value(fachstelle1.getName())); + } + + @Test + @SneakyThrows + void shouldHaveFirstFachstelleAnschrift() { + var response = performRequest(); + response.andExpect(jsonPath("$.content[0].anschrift").value(fachstelle1.getAnschrift())); + } + + @Test + @SneakyThrows + void shouldHaveFirstFachstelleEmail() { + var response = performRequest(); + response.andExpect(jsonPath("$.content[0].email").value(fachstelle1.getEmail())); + } + + @Test + @SneakyThrows + void shouldHaveSecondFachstelleName() { + var response = performRequest(); + response.andExpect(jsonPath("$.content[1].name").value(fachstelle2.getName())); + } + + @Test + @SneakyThrows + void shouldHaveSecondFachstelleAnschrift() { + var response = performRequest(); + response.andExpect(jsonPath("$.content[1].anschrift").value(fachstelle2.getAnschrift())); + } + + @Test + @SneakyThrows + void shouldHaveSecondFachstelleEmail() { + var response = performRequest(); + response.andExpect(jsonPath("$.content[1].email").value(fachstelle2.getEmail())); + } + + @SneakyThrows + private ResultActions performRequest() { + return mockMvc.perform(get(FachstelleController.PATH) + .param("searchBy", searchBy)).andExpect(status().isOk()); + + } + } + +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..8bb0960fabb0593dd525330af8b2ab429ec4f0c9 --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleMapperTest.java @@ -0,0 +1,23 @@ +package de.ozgcloud.alfa.collaboration; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; + +class FachstelleMapperTest { + + private final FachstelleMapper mapper = Mappers.getMapper(FachstelleMapper.class); + + @Nested + class TestFromGrpc { + + @Test + void shouldMap() { + var fachstelle = mapper.fromGrpc(GrpcFachstelleTestFactory.create()); + + assertThat(fachstelle).usingRecursiveComparison().isEqualTo(FachstelleTestFactory.create()); + } + } +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleModelAssemblerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..60648fb04e3db34553c83c4c2106dca2dafc8ce3 --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleModelAssemblerTest.java @@ -0,0 +1,71 @@ +package de.ozgcloud.alfa.collaboration; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.util.List; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.Spy; +import org.springframework.hateoas.CollectionModel; +import org.springframework.hateoas.EntityModel; +import org.springframework.hateoas.IanaLinkRelations; +import org.springframework.hateoas.Link; + +class FachstelleModelAssemblerTest { + + @Spy + private FachstelleModelAssembler assembler; + + @Nested + class TestToModel { + + @Test + void shouldHaveSelfLink() { + var model = assembler.toModel(FachstelleTestFactory.create()); + + assertHaveSelfLink(model); + } + + private void assertHaveSelfLink(EntityModel<Fachstelle> model) { + assertThat(model.getLink(IanaLinkRelations.SELF_VALUE)).isPresent().get().extracting(Link::getHref) + .isEqualTo(FachstelleController.PATH + "/" + FachstelleTestFactory.ID); + } + } + + @Nested + class TestToCollectionModel { + + private Fachstelle fachstelle = FachstelleTestFactory.create(); + + @Test + void shouldCallToModel() { + callAssembler(); + + verify(assembler).toModel(fachstelle); + } + + @Test + void shouldHaveSelfLink() { + var model = callAssembler(); + + assertThat(model.getLink(IanaLinkRelations.SELF_VALUE)).isPresent().get().extracting(Link::getHref) + .isEqualTo(FachstelleController.PATH); + } + + @Test + void shouldContainEntityModel() { + var entityModel = EntityModel.of(fachstelle); + doReturn(entityModel).when(assembler).toModel(fachstelle); + + var model = callAssembler(); + + assertThat(model).containsExactly(entityModel); + } + + private CollectionModel<EntityModel<Fachstelle>> callAssembler() { + return assembler.toCollectionModel(List.of(fachstelle)); + } + } +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleRemoteServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..3c198085096656667a7cd7324f749f810cca41cd --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleRemoteServiceTest.java @@ -0,0 +1,169 @@ +package de.ozgcloud.alfa.collaboration; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.util.stream.Stream; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentMatcher; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; + +import com.thedeanda.lorem.LoremIpsum; + +import de.ozgcloud.zufi.grpc.fachstelle.FachstelleServiceGrpc.FachstelleServiceBlockingStub; +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleGetRequest; +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleGetResponse; +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleSearchRequest; +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleSearchResponse; + +class FachstelleRemoteServiceTest { + + @Spy + @InjectMocks + private FachstelleRemoteService service; + + @Mock + private FachstelleServiceBlockingStub serviceStub; + + @Mock + private FachstelleMapper fachstelleMapper; + + @Nested + class TestSearch { + + private final String searchBy = LoremIpsum.getInstance().getWords(5); + private final GrpcFachstelleSearchResponse grpcFachstelleSearchResponse = GrpcFachstelleSearchResponseTestFactory + .create(); + + @BeforeEach + void setUpMocks() { + when(serviceStub.search(argThat(requestContainsSearchBy()))).thenReturn(grpcFachstelleSearchResponse); + } + + @Test + void shouldCallGrpcStub() { + callService(); + + verify(serviceStub).search(argThat(requestContainsSearchBy())); + } + + @Test + void shouldCallMapper() { + callService().toList(); + + verify(fachstelleMapper).fromGrpc(GrpcFachstelleSearchResponseTestFactory.FACHSTELLE); + } + + @Test + void shouldReturnFachstelle() { + var fachstelle = FachstelleTestFactory.create(); + when(fachstelleMapper.fromGrpc(GrpcFachstelleSearchResponseTestFactory.FACHSTELLE)).thenReturn(fachstelle); + + var fachstellen = callService(); + + assertThat(fachstellen).containsExactly(fachstelle); + } + + private Stream<Fachstelle> callService() { + return service.search(searchBy); + } + + private ArgumentMatcher<GrpcFachstelleSearchRequest> requestContainsSearchBy() { + return request -> request.getSearchBy().equals(searchBy); + } + } + + @Nested + class TestGetById { + + private final GrpcFachstelleGetRequest request = GrpcFachstelleGetRequestTestFactory.create(); + private final GrpcFachstelleGetResponse response = GrpcFachstelleGetResponseTestFactory.create(); + private final Fachstelle fachstelle = FachstelleTestFactory.create(); + + @BeforeEach + void setUp() { + doReturn(request).when(service).buildGetByIdRequest(FachstelleTestFactory.ID); + when(serviceStub.getById(request)).thenReturn(response); + doReturn(fachstelle).when(service).getFachstelleFromGetByIdResponse(response); + } + + @Test + void shouldBuildRequest() { + callService(); + + verify(service).buildGetByIdRequest(FachstelleTestFactory.ID); + } + + @Test + void shouldCallGrpcStub() { + callService(); + + verify(serviceStub).getById(request); + } + + @Test + void shouldBuildResponse() { + callService(); + + verify(service).getFachstelleFromGetByIdResponse(response); + } + + @Test + void shouldReturnFachstelle() { + var get = service.getById(FachstelleTestFactory.ID); + + assertThat(get).isEqualTo(fachstelle); + } + + private Fachstelle callService() { + return service.getById(FachstelleTestFactory.ID); + } + } + + @Nested + class TestBuildGetByIdRequest { + + @Test + void shouldHaveId() { + var request = service.buildGetByIdRequest(FachstelleTestFactory.ID); + + assertThat(request.getId()).isEqualTo(FachstelleTestFactory.ID); + } + } + + @Nested + class TestGetFachstelleFromGetByIdResponse { + + private final GrpcFachstelleGetResponse response = GrpcFachstelleGetResponseTestFactory.create(); + private final Fachstelle fachstelle = FachstelleTestFactory.create(); + + @BeforeEach + void setUp() { + when(fachstelleMapper.fromGrpc(response.getFachstelle())).thenReturn(fachstelle); + } + + @Test + void shouldCallMapper() { + callService(); + + verify(fachstelleMapper).fromGrpc(response.getFachstelle()); + } + + @Test + void shouldReturnFachstelle() { + var built = callService(); + + assertThat(built).isEqualTo(fachstelle); + } + + private Fachstelle callService() { + return service.getFachstelleFromGetByIdResponse(response); + } + } +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..52d6e1c0f361e937a5648f1a5f801cc6918b931a --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleServiceTest.java @@ -0,0 +1,71 @@ +package de.ozgcloud.alfa.collaboration; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.util.stream.Stream; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; + +import com.thedeanda.lorem.LoremIpsum; + +class FachstelleServiceTest { + + @InjectMocks + private FachstelleService service; + + @Mock + private FachstelleRemoteService remoteService; + + @Nested + class TestGetById { + + @Test + void shouldCallRemoteService() { + service.getById(FachstelleTestFactory.ID); + + verify(remoteService).getById(FachstelleTestFactory.ID); + } + + @Test + void shouldReturnFachstelle() { + var fachstelle = FachstelleTestFactory.create(); + when(remoteService.getById(FachstelleTestFactory.ID)).thenReturn(fachstelle); + + var gotFachstelle = service.getById(FachstelleTestFactory.ID); + + assertThat(gotFachstelle).isEqualTo(fachstelle); + } + } + + @Nested + class TestSearchFachstellen { + + private final String searchBy = LoremIpsum.getInstance().getWords(5); + + @Test + void shouldCallRemoteService() { + callService(); + + verify(remoteService).search(searchBy); + } + + @Test + void shouldReturnFachstellen() { + var fachstelle = FachstelleTestFactory.create(); + when(remoteService.search(searchBy)).thenReturn(Stream.of(fachstelle)); + + var fachstellen = callService(); + + assertThat(fachstellen).containsExactly(fachstelle); + } + + private Stream<Fachstelle> callService() { + return service.searchFachstellen(searchBy); + } + } + +} \ No newline at end of file diff --git a/alfa-client/libs/user-profile/src/lib/user-icon/user-icon.component.scss b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleTestFactory.java similarity index 55% rename from alfa-client/libs/user-profile/src/lib/user-icon/user-icon.component.scss rename to alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleTestFactory.java index dda9a87b9b1c6fb2dd5bca49aba7183be674d65c..5e672ba9eee4f7a31eca972ce2f27c061c504429 100644 --- a/alfa-client/libs/user-profile/src/lib/user-icon/user-icon.component.scss +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleTestFactory.java @@ -1,5 +1,5 @@ -/** - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den * Ministerpräsidenten des Landes Schleswig-Holstein * Staatskanzlei * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung @@ -21,41 +21,27 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -@use 'sass:map'; -@use '@angular/material' as mat; -@import 'variables'; +package de.ozgcloud.alfa.collaboration; -.user-profile { - width: 36px; - height: 36px; - border-radius: 50%; - position: relative; - overflow: hidden; +import java.util.UUID; - &.initials { - background-color: #3e3e3e; - color: #fff; - display: flex; - justify-content: center; - align-items: center; - font-size: 18px; - } -} +import com.thedeanda.lorem.LoremIpsum; -mat-icon { - color: $grey; - position: absolute; - left: 50%; - top: 50%; - transform: scale(1.78) translate(-50%, -50%); - transform-origin: left top; -} +public class FachstelleTestFactory { + public static final String ID = UUID.randomUUID().toString(); + public static final String NAME = LoremIpsum.getInstance().getName(); + public static final String ANSCHRIFT = LoremIpsum.getInstance().getCity(); + public static final String EMAIL = LoremIpsum.getInstance().getEmail(); -span { - line-height: 1; -} + public static Fachstelle create() { + return createBuilder().build(); + } -mat-icon.unavailable { - background-color: #fff; - color: mat.get-color-from-palette($warnPalette); + public static Fachstelle.FachstelleBuilder createBuilder() { + return Fachstelle.builder() + .id(ID) + .name(NAME) + .anschrift(ANSCHRIFT) + .email(EMAIL); + } } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFachstelleGetRequestTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFachstelleGetRequestTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..40f825c7251eee1e0843ff75cdcc574688beda7a --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFachstelleGetRequestTestFactory.java @@ -0,0 +1,19 @@ +package de.ozgcloud.alfa.collaboration; + +import java.util.UUID; + +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleGetRequest; + +class GrpcFachstelleGetRequestTestFactory { + + public static final String ID = UUID.randomUUID().toString(); + + public static GrpcFachstelleGetRequest create() { + return createBuilder().build(); + } + + public static GrpcFachstelleGetRequest.Builder createBuilder() { + return GrpcFachstelleGetRequest.newBuilder().setId(ID); + } + +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFachstelleGetResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFachstelleGetResponseTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..81e88e61f4a69fdbfd1556d078f6c9d245d147d4 --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFachstelleGetResponseTestFactory.java @@ -0,0 +1,18 @@ +package de.ozgcloud.alfa.collaboration; + +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelle; +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleGetResponse; + +class GrpcFachstelleGetResponseTestFactory { + + public static final GrpcFachstelle GRPC_FACHSTELLE = GrpcFachstelleTestFactory.create(); + + public static GrpcFachstelleGetResponse create() { + return createBuilder().build(); + } + + public static GrpcFachstelleGetResponse.Builder createBuilder() { + return GrpcFachstelleGetResponse.newBuilder().setFachstelle(GRPC_FACHSTELLE); + } + +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFachstelleSearchResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFachstelleSearchResponseTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..08690947d040853e63ff6b9052f3d87706abaad6 --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFachstelleSearchResponseTestFactory.java @@ -0,0 +1,19 @@ +package de.ozgcloud.alfa.collaboration; + +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelle; +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleSearchResponse; + +public class GrpcFachstelleSearchResponseTestFactory { + + public static final GrpcFachstelle FACHSTELLE = GrpcFachstelleTestFactory.create(); + + public static GrpcFachstelleSearchResponse create() { + return createBuilder() + .build(); + } + + public static GrpcFachstelleSearchResponse.Builder createBuilder() { + return GrpcFachstelleSearchResponse.newBuilder() + .addFachstellen(FACHSTELLE); + } +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFachstelleTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFachstelleTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..b5460b4feaf0d7d61ecd0c6d89509df8c4d2b889 --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFachstelleTestFactory.java @@ -0,0 +1,23 @@ +package de.ozgcloud.alfa.collaboration; + +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelle; + +public class GrpcFachstelleTestFactory { + public static final String ID = FachstelleTestFactory.ID; + public static final String NAME = FachstelleTestFactory.NAME; + public static final String ANSCHRIFT = FachstelleTestFactory.ANSCHRIFT; + public static final String EMAIL = FachstelleTestFactory.EMAIL; + + public static GrpcFachstelle create() { + return createBuilder().build(); + } + + public static GrpcFachstelle.Builder createBuilder() { + return GrpcFachstelle.newBuilder() + .setId(ID) + .setFirmenName(NAME) + .setAnschrift(ANSCHRIFT) + .setEmailAdresse(EMAIL); + } + +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/file/OzgFileRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/file/OzgFileRemoteServiceTest.java index 72bbe175b6bf69fe5d31d0ada39c9c0be50eada9..5f6571512cd3660298c0d89cef73903d48addbf8 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/file/OzgFileRemoteServiceTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/common/file/OzgFileRemoteServiceTest.java @@ -26,7 +26,6 @@ package de.ozgcloud.alfa.common.file; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; -import java.util.stream.Collectors; import java.util.stream.Stream; import org.junit.jupiter.api.BeforeEach; @@ -36,11 +35,9 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import de.ozgcloud.alfa.attachment.GrpcGetAttachmentsResponseTestFactory; -import de.ozgcloud.alfa.common.GrpcCallContextTestFactory; import de.ozgcloud.alfa.common.callcontext.ContextService; import de.ozgcloud.alfa.representation.GrpcGetRepresentationsResponseTestFactory; -import de.ozgcloud.alfa.vorgang.EingangTestFactory; -import de.ozgcloud.vorgang.grpc.command.GrpcCallContext; +import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; import de.ozgcloud.vorgang.grpc.file.FileServiceGrpc.FileServiceBlockingStub; import de.ozgcloud.vorgang.grpc.file.GrpcGetAttachmentsRequest; import de.ozgcloud.vorgang.grpc.file.GrpcGetAttachmentsResponse; @@ -58,15 +55,8 @@ class OzgFileRemoteServiceTest { @Mock private ContextService contextService; - private GrpcCallContext callContext = GrpcCallContextTestFactory.create(); - - @BeforeEach - void mockContextService() { - when(contextService.createCallContext()).thenReturn(callContext); - } - @Nested - class TestGetAttachmentsByEingang { + class TestGetAttachments { private final GrpcGetAttachmentsResponse response = GrpcGetAttachmentsResponseTestFactory.create(); @@ -75,13 +65,6 @@ class OzgFileRemoteServiceTest { when(serviceStub.getAttachments(any())).thenReturn(response); } - @Test - void shouldCallContextService() { - doServiceCall(); - - verify(contextService).createCallContext(); - } - @Test void shouldCallFileStub() { doServiceCall(); @@ -98,16 +81,16 @@ class OzgFileRemoteServiceTest { } private Stream<OzgFile> forceActionsDone(Stream<OzgFile> stream) { - return stream.collect(Collectors.toList()).stream(); + return stream.toList().stream(); } private Stream<OzgFile> doServiceCall() { - return remoteService.getAttachmentsByEingang(EingangTestFactory.ID); + return remoteService.getAttachments(VorgangHeaderTestFactory.ID); } } @Nested - class TestGetRepresentationsByEingang { + class TestGetRepresentations { private final GrpcGetRepresentationsResponse response = GrpcGetRepresentationsResponseTestFactory.create(); @@ -116,13 +99,6 @@ class OzgFileRemoteServiceTest { when(serviceStub.getRepresentations(any())).thenReturn(response); } - @Test - void shouldCallContextService() { - doServiceCall(); - - verify(contextService).createCallContext(); - } - @Test void shouldCallFileStub() { doServiceCall(); @@ -139,11 +115,11 @@ class OzgFileRemoteServiceTest { } private Stream<OzgFile> forceActionsDone(Stream<OzgFile> stream) { - return stream.collect(Collectors.toList()).stream(); + return stream.toList().stream(); } private Stream<OzgFile> doServiceCall() { - return remoteService.getRepresentationsByEingang(EingangTestFactory.ID); + return remoteService.getRepresentations(VorgangHeaderTestFactory.ID); } } -} \ No newline at end of file +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/file/OzgFileServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/file/OzgFileServiceTest.java index 0cde31348cb7ee6eb9dcb1e36a01b3dd0c522356..320e1fede704fb20116eddc40ba3fe2ec15f4e40 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/file/OzgFileServiceTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/common/file/OzgFileServiceTest.java @@ -30,7 +30,7 @@ import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; import org.mockito.Mock; -import de.ozgcloud.alfa.vorgang.EingangTestFactory; +import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; class OzgFileServiceTest { @@ -40,24 +40,24 @@ class OzgFileServiceTest { private OzgFileRemoteService remoteService; @Nested - class TestGetAttachmentsByEingang { + class TestGetAttachments { @Test void shouldCallRemoteService() { - service.getAttachmentsByEingang(EingangTestFactory.ID); + service.getAttachments(VorgangHeaderTestFactory.ID); - verify(remoteService).getAttachmentsByEingang(EingangTestFactory.ID); + verify(remoteService).getAttachments(VorgangHeaderTestFactory.ID); } } @Nested - class TestGetRepresentationsByEingang { + class TestGetRepresentations { @Test void shouldCallRemoteService() { - service.getRepresentationsByEingang(EingangTestFactory.ID); + service.getRepresentations(VorgangHeaderTestFactory.ID); - verify(remoteService).getRepresentationsByEingang(EingangTestFactory.ID); + verify(remoteService).getRepresentations(VorgangHeaderTestFactory.ID); } } -} \ No newline at end of file +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/export/ExportRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/export/ExportRemoteServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..e2d36e6134f13ed1a8377584aaf555daeb23bc20 --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/export/ExportRemoteServiceTest.java @@ -0,0 +1,68 @@ +package de.ozgcloud.alfa.export; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.util.Iterator; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentMatcher; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.Spy; + +import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; +import de.ozgcloud.archive.grpc.export.ExportServiceGrpc.ExportServiceBlockingStub; +import de.ozgcloud.archive.grpc.export.GrpcExportVorgangRequest; +import de.ozgcloud.archive.grpc.export.GrpcExportVorgangResponse; + +class ExportRemoteServiceTest { + + @Spy + @InjectMocks + private ExportRemoteService service; + @Mock + private ExportServiceBlockingStub exportServiceStub; + + @Nested + class TestExportVorgang { + + public static final String VORGANG_ID = VorgangHeaderTestFactory.ID; + + private static final ArgumentMatcher<GrpcExportVorgangRequest> HAS_VORGANG_ID = request -> request.getVorgangId().equals(VorgangHeaderTestFactory.ID); + + @Mock + private Iterator<GrpcExportVorgangResponse> responseIterator; + private MockedStatic<StreamedExportedVorgangFile> mockedStaticExportedFile; + + @BeforeEach + void init() { + mockedStaticExportedFile = mockStatic(StreamedExportedVorgangFile.class); + mockedStaticExportedFile.when(() -> StreamedExportedVorgangFile.getFileNameFrom(responseIterator)).thenReturn(GrpcFileTestFactory.FILE_NAME); + when(exportServiceStub.exportVorgang(any(GrpcExportVorgangRequest.class))).thenReturn(responseIterator); + } + + @AfterEach + void cleanup() { + mockedStaticExportedFile.close(); + } + + @Test + void shouldExportVorgang() { + service.exportVorgang(VORGANG_ID); + + verify(exportServiceStub).exportVorgang(argThat(HAS_VORGANG_ID)); + } + + @Test + void shouldReturnExportedVorgangFile() { + var exportedVorgangFile = service.exportVorgang(VORGANG_ID); + + assertThat(exportedVorgangFile).isInstanceOf(StreamedExportedVorgangFile.class).extracting("responseIterator").isEqualTo(responseIterator); + } + } +} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportVorgangControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/export/ExportVorgangControllerTest.java similarity index 55% rename from alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportVorgangControllerTest.java rename to alfa-service/src/test/java/de/ozgcloud/alfa/export/ExportVorgangControllerTest.java index e83d251ba893e0efd9df548cdbe29846ebd4240c..57f0063280880e67b654368c8c68f081d7dd5a3f 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportVorgangControllerTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/export/ExportVorgangControllerTest.java @@ -1,17 +1,15 @@ package de.ozgcloud.alfa.export; -import static org.assertj.core.api.AssertionsForClassTypes.*; import static org.mockito.Mockito.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; +import java.io.OutputStream; import java.util.UUID; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; @@ -21,7 +19,6 @@ import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.ResultActions; import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import de.ozgcloud.alfa.common.AlfaTestUtils; import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; class ExportVorgangControllerTest { @@ -29,9 +26,8 @@ class ExportVorgangControllerTest { @Spy @InjectMocks private ExportVorgangController controller; - @Mock - private ExportService xDomeaService; + private ExportRemoteService exportRemoteService; private MockMvc mockMvc; @@ -41,50 +37,42 @@ class ExportVorgangControllerTest { } @Nested - class TestBuildZipFilename { + class TestExportVorgang { - @Test - void shouldMatchPattern() { - var filename = controller.buildZipFilename(UUID.randomUUID().toString()); + public static final String VORGANG_ID = VorgangHeaderTestFactory.ID; + public static final String EXPORTED_VORGANG_FILENAME = UUID.randomUUID().toString(); - assertThat(filename).matches(AlfaTestUtils.uuidRegexWithSuffix("_Abgabe.Abgabe.0401.xdomea")); - } - } - - @Nested - class TestExportToXdomea { - - private static final String VORGANG_EXPORT_FILENAME = "00000000-0000-0000-0000-000000000000_Abgabe.Abgabe.0401.xml"; - - @Captor - private ArgumentCaptor<String> filenameIdArgumentCaptor; + @Mock + private ExportedVorgangFile exportedVorgangFile; @BeforeEach void init() { - doReturn(VORGANG_EXPORT_FILENAME).when(controller).buildZipFilename(anyString()); + when(exportedVorgangFile.getFileName()).thenReturn(EXPORTED_VORGANG_FILENAME); + when(exportRemoteService.exportVorgang(VORGANG_ID)).thenReturn(exportedVorgangFile); } @Test - void shouldHaveContentDispositonHeader() throws Exception { - doRequest().andExpect(header().string(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + VORGANG_EXPORT_FILENAME)); + void shouldExportVorgang() throws Exception { + doRequest(); + + verify(exportRemoteService).exportVorgang(VORGANG_ID); } @Test - void shouldCallXdomeaService() throws Exception { - doRequest(); + void shouldHaveContentDispositonHeader() throws Exception { + doRequest().andExpect(header().string(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + EXPORTED_VORGANG_FILENAME)); + } - verify(xDomeaService).writeExport(eq(VorgangHeaderTestFactory.ID), filenameIdArgumentCaptor.capture(), any()); - assertThat(filenameIdArgumentCaptor.getValue()).matches(AlfaTestUtils.UUID_REGEX); + @Test + void shouldHaveContentTypeHeader() throws Exception { + doRequest().andExpect(header().string(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM.toString())); } @Test - void shouldUseUUIDAsFilenameId() throws Exception { + void shouldWriteFileToOutputStream() throws Exception { doRequest(); - verify(controller).buildZipFilename(filenameIdArgumentCaptor.capture()); - - assertThat(filenameIdArgumentCaptor.getValue()).matches(AlfaTestUtils.UUID_REGEX); - + verify(exportedVorgangFile).writeToOutputStream(any(OutputStream.class)); } private ResultActions doRequest() throws Exception { diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportVorgangProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/export/ExportVorgangProcessorTest.java similarity index 100% rename from alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportVorgangProcessorTest.java rename to alfa-service/src/test/java/de/ozgcloud/alfa/export/ExportVorgangProcessorTest.java diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/export/GrpcExportVorgangResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/export/GrpcExportVorgangResponseTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..6fb86287921347fa6d9eaecdb12e20ca5450a3bb --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/export/GrpcExportVorgangResponseTestFactory.java @@ -0,0 +1,22 @@ +package de.ozgcloud.alfa.export; + +import de.ozgcloud.archive.grpc.export.GrpcExportVorgangResponse; +import de.ozgcloud.archive.grpc.export.GrpcFile; + +class GrpcExportVorgangResponseTestFactory { + + public static final GrpcFile VORGANG_FILE_WITH_NAME = GrpcFileTestFactory.createWithName(); + public static final GrpcFile VORGANG_FILE_WITH_CONTENT = GrpcFileTestFactory.createWithContent(); + + public static GrpcExportVorgangResponse createWithName() { + return createBuilder().setVorgangFile(VORGANG_FILE_WITH_NAME).build(); + } + + public static GrpcExportVorgangResponse createWithContent() { + return createBuilder().setVorgangFile(VORGANG_FILE_WITH_CONTENT).build(); + } + + public static GrpcExportVorgangResponse.Builder createBuilder() { + return GrpcExportVorgangResponse.newBuilder(); + } +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/export/GrpcFileTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/export/GrpcFileTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..2d07f97a0e54a5d6484ecd24c6a872037124b517 --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/export/GrpcFileTestFactory.java @@ -0,0 +1,24 @@ +package de.ozgcloud.alfa.export; + +import com.google.protobuf.ByteString; +import com.thedeanda.lorem.LoremIpsum; + +import de.ozgcloud.archive.grpc.export.GrpcFile; + +class GrpcFileTestFactory { + + public static final String FILE_NAME = LoremIpsum.getInstance().getName(); + public static final ByteString FILE_CONTENT = ByteString.copyFromUtf8(LoremIpsum.getInstance().getWords(10)); + + public static GrpcFile createWithName() { + return createBuilder().setFileName(FILE_NAME).build(); + } + + public static GrpcFile createWithContent() { + return createBuilder().setFileContent(FILE_CONTENT).build(); + } + + public static GrpcFile.Builder createBuilder() { + return GrpcFile.newBuilder(); + } +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/export/StreamedExportedVorgangFileTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/export/StreamedExportedVorgangFileTest.java new file mode 100644 index 0000000000000000000000000000000000000000..293aa49bce8008b40bd9f52e38ad0335bdf5e735 --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/export/StreamedExportedVorgangFileTest.java @@ -0,0 +1,153 @@ +package de.ozgcloud.alfa.export; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.io.IOException; +import java.io.OutputStream; +import java.util.Iterator; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.mockito.MockedStatic; + +import com.google.protobuf.ByteString; +import com.thedeanda.lorem.LoremIpsum; + +import de.ozgcloud.archive.grpc.export.GrpcExportVorgangResponse; +import de.ozgcloud.common.errorhandling.TechnicalException; + +class StreamedExportedVorgangFileTest { + + @Mock + private Iterator<GrpcExportVorgangResponse> responseIterator; + + @Nested + class TestContructor { + + private MockedStatic<StreamedExportedVorgangFile> mockedStatic; + + @BeforeEach + void init() { + mockedStatic = mockStatic(StreamedExportedVorgangFile.class); + mockedStatic.when(() -> StreamedExportedVorgangFile.getFileNameFrom(responseIterator)).thenReturn(GrpcFileTestFactory.FILE_NAME); + } + + @AfterEach + void cleanup() { + mockedStatic.close(); + } + + @Test + void shouldGetFileNameFromResponseIterator() { + new StreamedExportedVorgangFile(responseIterator); + + mockedStatic.verify(() -> StreamedExportedVorgangFile.getFileNameFrom(responseIterator)); + } + + @Test + void shouldSetFileName() { + var exportedVorgangFile = new StreamedExportedVorgangFile(responseIterator); + + assertThat(exportedVorgangFile.getFileName()).isEqualTo(GrpcFileTestFactory.FILE_NAME); + } + } + + @Nested + class TestGetFileNameFrom { + + @Nested + class OnEmptyResponse { + + @BeforeEach + void init() { + when(responseIterator.hasNext()).thenReturn(false); + } + + @Test + void shouldThrowException() { + assertThatExceptionOfType(TechnicalException.class).isThrownBy(TestGetFileNameFrom.this::callTestedMethod); + } + } + + @Nested + class OnNotEmptyResponse { + + @BeforeEach + void init() { + when(responseIterator.hasNext()).thenReturn(true); + when(responseIterator.next()).thenReturn(GrpcExportVorgangResponseTestFactory.createWithName()); + } + + @Test + void shouldCallHasNext() { + callTestedMethod(); + + verify(responseIterator).hasNext(); + } + + @Test + void shouldCallNextOnce() { + callTestedMethod(); + + verify(responseIterator, times(1)).next(); + } + + @Test + void shouldReturnFileName() { + var fileName = callTestedMethod(); + + assertThat(fileName).isEqualTo(GrpcFileTestFactory.FILE_NAME); + } + } + + private String callTestedMethod() { + return StreamedExportedVorgangFile.getFileNameFrom(responseIterator); + } + } + + @Nested + class TestWriteToOutputStream { + + public static final ByteString FILE_CONTENT_1 = GrpcFileTestFactory.FILE_CONTENT; + public static final ByteString FILE_CONTENT_2 = ByteString.copyFromUtf8(LoremIpsum.getInstance().getWords(8)); + + @Mock + private OutputStream outputStream; + + private MockedStatic<StreamedExportedVorgangFile> mockedStatic; + + @BeforeEach + void init() { + mockedStatic = mockStatic(StreamedExportedVorgangFile.class); + mockedStatic.when(() -> StreamedExportedVorgangFile.getFileNameFrom(responseIterator)).thenReturn(GrpcFileTestFactory.FILE_NAME); + when(responseIterator.hasNext()) + .thenReturn(true) + .thenReturn(true) + .thenReturn(false); + when(responseIterator.next()) + .thenReturn(GrpcExportVorgangResponseTestFactory.createWithContent()) + .thenReturn(GrpcExportVorgangResponseTestFactory.createBuilder().setVorgangFile( + GrpcFileTestFactory.createBuilder().setFileContent(FILE_CONTENT_2).build() + ).build()); + } + + @AfterEach + void cleanup() { + mockedStatic.close(); + } + + @Test + void shouldWriteFileContentInOrder() throws IOException { + var orderVerifier = inOrder(outputStream); + + new StreamedExportedVorgangFile(responseIterator).writeToOutputStream(outputStream); + + orderVerifier.verify(outputStream).write(FILE_CONTENT_1.toByteArray()); + orderVerifier.verify(outputStream).write(FILE_CONTENT_2.toByteArray()); + } + } +} diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-menu-button/user-settings-menu-button.component.ts b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/OrganisationsEinheitSettingsTestFactory.java similarity index 55% rename from alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-menu-button/user-settings-menu-button.component.ts rename to alfa-service/src/test/java/de/ozgcloud/alfa/postfach/OrganisationsEinheitSettingsTestFactory.java index e952c3b73d18d4ee756c56cabfc23f2a3d2cb5d5..3704afd3e6e53302b1fdff0f7883260cd332ff88 100644 --- a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-menu-button/user-settings-menu-button.component.ts +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/OrganisationsEinheitSettingsTestFactory.java @@ -1,9 +1,5 @@ /* - * 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 - * + * Copyright (c) 2024. * Lizenziert unter der EUPL, Version 1.2 oder - sobald * diese von der Europäischen Kommission genehmigt wurden - * Folgeversionen der EUPL ("Lizenz"); @@ -21,13 +17,22 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Component, Input } from '@angular/core'; -@Component({ - selector: 'alfa-user-settings-menu-button', - templateUrl: './user-settings-menu-button.component.html', - styleUrls: ['./user-settings-menu-button.component.scss'], -}) -export class UserSettingsMenuButtonComponent { - @Input() matMenuTriggerFor: string; +package de.ozgcloud.alfa.postfach; + +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +class OrganisationsEinheitSettingsTestFactory { + public static final String TEST_SIGNATUR = "Test organisationseinheit signatur"; + + static OrganisationsEinheitSettings create() { + return createBuilder().build(); + } + + static OrganisationsEinheitSettings.OrganisationsEinheitSettingsBuilder createBuilder() { + return new OrganisationsEinheitSettings.OrganisationsEinheitSettingsBuilder() + .signatur(TEST_SIGNATUR); + } } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachPropertiesTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachPropertiesTest.java new file mode 100644 index 0000000000000000000000000000000000000000..4a880a875df7f52489823ab29804ad3f0ba96c6c --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachPropertiesTest.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2024. + * 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. + */ + +package de.ozgcloud.alfa.postfach; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.TestPropertySource; + +@SpringBootTest(classes = { PostfachPropertiesTestConfiguration.class }) +class PostfachPropertiesTest { + private static final String ORGANISATIONSEINHEITEN_ID = "oe1"; + private static final String TEST_SIG = "test1"; + private static final String TEST_ORGANISATIONS_SIG = OrganisationsEinheitSettingsTestFactory.TEST_SIGNATUR; + + @DisplayName("Test loading postfach configuration") + @Nested + @TestPropertySource(properties = { + PostfachProperties.PREFIX + ".signatur=" + TEST_SIG, + PostfachProperties.PREFIX + ".organisations-einheit-settings." + ORGANISATIONSEINHEITEN_ID + ".signatur=" + TEST_ORGANISATIONS_SIG, + }) + class TestLoadingPostfachProperties { + + @Autowired + private PostfachProperties postfachProperties; + + @Nested + class TestInitialization { + + @Test + void shouldHaveProperties() { + assertThat(postfachProperties).isNotNull(); + } + + @Test + void shouldHaveOrganisationsEinheitSettings() { + assertThat(postfachProperties.getOrganisationsEinheitSettings()).isNotNull(); + } + } + } + + @DisplayName("Test mapping organisations einheit settings") + @Nested + @TestPropertySource(properties = { + PostfachProperties.PREFIX + ".signatur=" + TEST_SIG, + PostfachProperties.PREFIX + ".organisations-einheit-settings.oe1.signatur=" + TEST_ORGANISATIONS_SIG, + }) + class TestMapOrganisationsEinheitSettings { + + @Autowired + private PostfachProperties postfachProperties; + + @Test + void shouldHaveOrganisationsEinheit() { + var props = postfachProperties.getOrganisationsEinheitSettings(); + + assertThat(props).containsKey(ORGANISATIONSEINHEITEN_ID); + } + + @Test + void shouldHaveOrganisationsEinheitSetting() { + assertThat(postfachProperties.getOrganisationsEinheitSettings().get(ORGANISATIONSEINHEITEN_ID)).hasFieldOrPropertyWithValue("signatur", + TEST_ORGANISATIONS_SIG); + } + } +} diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-menu-button/user-settings-menu-button.component.scss b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachPropertiesTestConfiguration.java similarity index 62% rename from alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-menu-button/user-settings-menu-button.component.scss rename to alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachPropertiesTestConfiguration.java index b72d7213d6993a8f359da154e01d6f0154db6a54..0ad3591f8955244f52afbebae68225d0a43e0d62 100644 --- a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings-menu-button/user-settings-menu-button.component.scss +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachPropertiesTestConfiguration.java @@ -1,9 +1,5 @@ -/** - * 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 - * +/* + * Copyright (c) 2024. * Lizenziert unter der EUPL, Version 1.2 oder - sobald * diese von der Europäischen Kommission genehmigt wurden - * Folgeversionen der EUPL ("Lizenz"); @@ -21,6 +17,18 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -ozgcloud-icon-button-with-spinner { - display: block; -} + +package de.ozgcloud.alfa.postfach; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableConfigurationProperties(PostfachProperties.class) +class PostfachPropertiesTestConfiguration { + + @Autowired + private PostfachProperties postfachProperties; + +} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachSettingsServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachSettingsServiceTest.java index 2898c5ecf7fde5ead5dab2eb396bbeeae8f3861d..6a5a5e6c6ffb0555d0bc1cde94d73d5a532ef0c9 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachSettingsServiceTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachSettingsServiceTest.java @@ -3,7 +3,11 @@ package de.ozgcloud.alfa.postfach; import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; +import java.util.Collections; import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -19,6 +23,7 @@ import org.springframework.test.util.ReflectionTestUtils; import com.thedeanda.lorem.LoremIpsum; +import de.ozgcloud.alfa.collaboration.OrganisationsEinheitTestFactory; import de.ozgcloud.alfa.common.FeatureToggleProperties; import de.ozgcloud.alfa.vorgang.ServiceKontoTestFactory; import de.ozgcloud.alfa.vorgang.VorgangHeadTestFactory; @@ -62,7 +67,7 @@ class PostfachSettingsServiceTest { } @Test - void shoulCallRemoteServiceOnlyOnce() { + void shouldCallRemoteServiceOnlyOnce() { when(remoteService.getPostfachConfig()).thenReturn(PostfachConfigGroupTestFactory.create()); callService(); @@ -128,12 +133,12 @@ class PostfachSettingsServiceTest { void shouldGetSignatur() { callService(); - verify(service).getSignatur(); + verify(service).getSignatur(vorgang.getOrganisationseinheitenID()); } @Test void shouldSetSignatur() { - doReturn(SettingsTestFactory.SIGNATUR).when(service).getSignatur(); + doReturn(SettingsTestFactory.SIGNATUR).when(service).getSignatur(vorgang.getOrganisationseinheitenID()); var postfach = callService(); @@ -156,24 +161,60 @@ class PostfachSettingsServiceTest { } @Test - void shouldGetSignatur() { + void shouldGetOrganisationEinheitSettings() { callService(); - verify(postfachProperties).getSignatur(); + verify(service).getOrganisationsEinheitSettings(OrganisationsEinheitTestFactory.ID); + } + + @Nested + class OnExistingOrganisationsEinheitSignatur { + + @BeforeEach + void setUp() { + doReturn(Optional.of(OrganisationsEinheitSettingsTestFactory.create())).when(service) + .getOrganisationsEinheitSettings(OrganisationsEinheitTestFactory.ID); + } + + @Test + void shouldReturnOrganisationsEinheitSignatur() { + var signatur = callService(); + + assertThat(signatur).isEqualTo(OrganisationsEinheitSettingsTestFactory.TEST_SIGNATUR); + } } - @Test - void shouldReturnSignatur() { - when(postfachProperties.getSignatur()).thenReturn(SettingsTestFactory.SIGNATUR); + @Nested + class OnNoOrganisationsEinheitSignatur { + + @BeforeEach + void setUp() { + doReturn(Optional.empty()).when(service) + .getOrganisationsEinheitSettings(OrganisationsEinheitTestFactory.ID); + } + + @Test + void shouldGetSignatur() { + callService(); + + verify(postfachProperties).getSignatur(); + + } + + @Test + void shouldReturnSignatur() { + when(postfachProperties.getSignatur()).thenReturn(SettingsTestFactory.SIGNATUR); - var signatur = callService(); + var signatur = callService(); + + assertThat(signatur).isEqualTo(SettingsTestFactory.SIGNATUR); + } - assertThat(signatur).isEqualTo(SettingsTestFactory.SIGNATUR); } private String callService() { - return service.getSignatur(); + return service.getSignatur(OrganisationsEinheitTestFactory.ID); } } @@ -317,4 +358,65 @@ class PostfachSettingsServiceTest { ReflectionTestUtils.setField(service, "postfachConfigGroup", postfachConfigGroup); } + @Nested + class TestGetOrganisationsEinheitSettings { + + private final OrganisationsEinheitSettings organisationsEinheitSettings = OrganisationsEinheitSettingsTestFactory.create(); + private final Map<String, Object> organisationsEinheitSettingsMap = Map.of(PostfachSettingsService.FIELD_SIGNATUR, OrganisationsEinheitSettingsTestFactory.TEST_SIGNATUR); + + @BeforeEach + void setUp() { + when(postfachProperties.getOrganisationsEinheitSettings()).thenReturn( + Map.of(OrganisationsEinheitTestFactory.ID, organisationsEinheitSettingsMap)); + } + + @Test + void shouldGetOrganisationsEinheitSettings() { + service.getOrganisationsEinheitSettings(OrganisationsEinheitTestFactory.ID); + + verify(postfachProperties).getOrganisationsEinheitSettings(); + } + + @Test + void shouldMapToOrganisationsEinheitSettings() { + service.getOrganisationsEinheitSettings(OrganisationsEinheitTestFactory.ID); + + verify(service).mapOrganisationsEinheitSettings(organisationsEinheitSettingsMap); + } + + @Test + void shouldReturnSettings() { + var settings = service.getOrganisationsEinheitSettings(OrganisationsEinheitTestFactory.ID); + + assertThat(settings).isPresent().get().usingRecursiveComparison().isEqualTo(organisationsEinheitSettings); + } + + @Test + void shouldReturnEmpty() { + var settings = service.getOrganisationsEinheitSettings(UUID.randomUUID().toString()); + + assertThat(settings).isEmpty(); + } + } + + @Nested + class TestMapOrganisationsEinheitSettings { + + private final String signatur = LoremIpsum.getInstance().getWords(2); + private final Map<String, Object> organisationsEinheitSettings = Map.of(PostfachSettingsService.FIELD_SIGNATUR, signatur); + + @Test + void shouldMap() { + var settings = service.mapOrganisationsEinheitSettings(organisationsEinheitSettings); + + assertThat(settings.getSignatur()).isEqualTo(signatur); + } + + @Test + void shouldReturnSettingsWithNullSignatur() { + var settings = service.mapOrganisationsEinheitSettings(Collections.emptyMap()); + + assertThat(settings.getSignatur()).isNull(); + } + } } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/attachment/AttachmentControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/representation/RepresentationByVorgangControllerTest.java similarity index 67% rename from alfa-service/src/test/java/de/ozgcloud/alfa/attachment/AttachmentControllerTest.java rename to alfa-service/src/test/java/de/ozgcloud/alfa/representation/RepresentationByVorgangControllerTest.java index 7e7b3a6e20a4aa2ca117acb79ece432c7d5cf57c..bacd8d37cd39d528a54d0eb3b778ecef9da5dc46 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/attachment/AttachmentControllerTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/representation/RepresentationByVorgangControllerTest.java @@ -21,9 +21,8 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.alfa.attachment; +package de.ozgcloud.alfa.representation; -import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @@ -31,12 +30,13 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import java.util.stream.Stream; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -import org.mockito.ArgumentMatchers; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; +import org.springframework.hateoas.CollectionModel; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.ResultActions; import org.springframework.test.web.servlet.setup.MockMvcBuilders; @@ -45,50 +45,52 @@ import de.ozgcloud.alfa.common.binaryfile.BinaryFileModelAssembler; import de.ozgcloud.alfa.common.file.OzgFile; import de.ozgcloud.alfa.common.file.OzgFileService; import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.common.zipdownload.ZipDownloadService; +import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; import lombok.SneakyThrows; -class AttachmentControllerTest { +class RepresentationByVorgangControllerTest { @Spy @InjectMocks - private AttachmentController controller; + private RepresentationByVorgangController controller; @Mock private BinaryFileModelAssembler modelAssembler; @Mock private OzgFileService fileService; - @Mock - private ZipDownloadService zipDownloadService; private MockMvc mockMvc; @BeforeEach - void initTest() { + void init() { mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); } @Nested - class TestGetAttachmentsByEingang { + class TestGetRepresentations { + + Stream<OzgFile> representations = Stream.of(OzgFileTestFactory.create()); @BeforeEach void mockFileService() { - when(fileService.getAttachmentsByEingang(anyString())).thenReturn(Stream.of(OzgFileTestFactory.create())); + when(fileService.getRepresentations(VorgangHeaderTestFactory.ID)).thenReturn(representations); + when(modelAssembler.toCollectionModel(representations)).thenReturn(CollectionModel.empty()); } @SneakyThrows + @DisplayName("should return ok") @Test - void shouldResponseWithStatusOk() { + void shouldReturnOk() { var result = callEndpoint(); result.andExpect(status().isOk()); } - @SneakyThrows + @DisplayName("should call file service") @Test - void shoudlCallFileService() { + void shouldCallFileService() { callEndpoint(); - verify(fileService).getAttachmentsByEingang(any()); + verify(fileService).getRepresentations(VorgangHeaderTestFactory.ID); } @SneakyThrows @@ -96,12 +98,21 @@ class AttachmentControllerTest { void shouldCallModelAssembler() { callEndpoint(); - verify(modelAssembler).toCollectionModel(ArgumentMatchers.<Stream<OzgFile>>any()); + verify(modelAssembler).toCollectionModel(representations); + } + + @SneakyThrows + @DisplayName("should return entity") + @Test + void shouldReturnEntity() { + var result = callEndpoint(); + + result.andExpect(jsonPath("$.content").isEmpty()); } @SneakyThrows private ResultActions callEndpoint() { - return mockMvc.perform(get(AttachmentController.PATH).param(AttachmentController.PARAM_EINGANG_ID, "1")); + return mockMvc.perform(get(RepresentationByVorgangController.PATH, VorgangHeaderTestFactory.ID)); } } } \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/representation/RepresentationControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/representation/RepresentationControllerTest.java deleted file mode 100644 index baa2ecbbff4cb2b1ddf4e43ac192d10109088069..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/representation/RepresentationControllerTest.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * 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. - */ -package de.ozgcloud.alfa.representation; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentMatchers; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileModelAssembler; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileService; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import lombok.SneakyThrows; - -class RepresentationControllerTest { - - @Spy - @InjectMocks - private RepresentationController controller; - @Mock - private BinaryFileModelAssembler modelAssembler; - @Mock - private OzgFileService fileService; - - private MockMvc mockMvc; - - @BeforeEach - void init() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @Nested - class TestGetRepresentationsByEingang { - - @BeforeEach - void mockFileService() { - when(fileService.getRepresentationsByEingang(anyString())).thenReturn(Stream.of(OzgFileTestFactory.create())); - } - - @SneakyThrows - @Test - void shouldCallEndpoint() { - callEndpoint(); - } - - @SneakyThrows - @Test - void shouldCallFileService() { - callEndpoint(); - - verify(fileService).getRepresentationsByEingang(any()); - } - - @SneakyThrows - @Test - void shouldCallModelAssembler() { - callEndpoint(); - - verify(modelAssembler).toCollectionModel(ArgumentMatchers.<Stream<OzgFile>>any()); - } - - @SneakyThrows - private void callEndpoint() { - mockMvc.perform(get(RepresentationController.PATH).param(RepresentationController.PARAM_EINGANG_ID, "1")).andExpect(status().isOk()); - } - } - -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/resource/OzgcloudResourceControllerITCase.java b/alfa-service/src/test/java/de/ozgcloud/alfa/resource/OzgcloudResourceControllerITCase.java index a545d2ee05325037544e883b529b7c39d4d9c991..3efe0e5735528b084a6137ecea2a6dbb584182d0 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/resource/OzgcloudResourceControllerITCase.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/resource/OzgcloudResourceControllerITCase.java @@ -31,34 +31,35 @@ class OzgcloudResourceControllerITCase { class TestGetOzgcloudResource { private static final String VORGANG_ID = AlfaTestUtils.createMongoDbObjectId(); + private static final String VALID_URI = "dns:///dummy.service:123/vorgangs/" + VORGANG_ID; + private static final String INVALID_URI = "dns:///dummy.service:123/" + VORGANG_ID; @Test void shouldReturnStatusOk() throws Exception { - var response = doRequest("ozgcloud://test.de/vorgangs/" + VORGANG_ID); + var response = doRequest("dns:///test.de/vorgangs/" + VORGANG_ID); response.andExpect(status().isOk()); } @Test void shouldHaveVorgangLink() throws Exception { - var response = doRequest("ozgcloud://test.de/vorgangs/" + VORGANG_ID); + var response = doRequest(VALID_URI); response.andExpect(jsonPath("$._links.vorgang.href").value(StringEndsWith.endsWith("/api/vorgangs/" + VORGANG_ID))); } @Test void shouldHaveSelfLink() throws Exception { - var uri = "ozgcloud://test.de/vorgangs/" + VORGANG_ID; - var encodedUri = URLEncoder.encode(uri, StandardCharsets.UTF_8); + var encodedUri = URLEncoder.encode(VALID_URI, StandardCharsets.UTF_8); - var response = doRequest(uri); + var response = doRequest(VALID_URI); response.andExpect(jsonPath("$._links.self.href").value(StringEndsWith.endsWith(OzgcloudResourceController.PATH + "?uri=" + encodedUri))); } @Test void shouldReturnStatusNotFound() throws Exception { - var response = doRequest("dummy://test.de"); + var response = doRequest(INVALID_URI); response.andExpect(status().isNotFound()); } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangURIResolverTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangURIResolverTest.java index 1d691c621cc7e42d207861ccb6503bd04026a74c..fe493066849d1b8d0bc63a63146fab402886d97c 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangURIResolverTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangURIResolverTest.java @@ -2,15 +2,14 @@ package de.ozgcloud.alfa.vorgang; import static org.assertj.core.api.Assertions.*; +import java.util.stream.Stream; + import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; +import org.junit.jupiter.params.provider.MethodSource; import org.springframework.hateoas.Link; import org.springframework.hateoas.LinkRelation; -import de.ozgcloud.alfa.common.AlfaTestUtils; - class VorgangURIResolverTest { private VorgangURIResolver resolver = new VorgangURIResolver(); @@ -18,24 +17,20 @@ class VorgangURIResolverTest { @Nested class TestResolve { - private final String VORGANG_ID = AlfaTestUtils.createMongoDbObjectId(); - private final String VORGANG_URI = "ozgcloud://dummy.de/vorgangs/" + VORGANG_ID; + private static final String VORGANG_ID = VorgangHeaderTestFactory.ID; @ParameterizedTest - @ValueSource(strings = { - "http://dummy.de/vorgangs/123", - "ozgcloud://dummy.de/res-a/123", - "ozgcloud://dummy.de/xyz/vorgangs/123", - "ozgcloud://dummy.de/vorgangs/xyz/123" }) + @MethodSource("invalidVorgangUris") void shouldReturnEmptyIfUriIsNotRecognized(String uri) { var result = resolver.resolve(uri); assertThat(result).isEmpty(); } - @Test - void shouldReturnLink() { - var result = resolver.resolve(VORGANG_URI); + @ParameterizedTest + @MethodSource("validVorgangUris") + void shouldReturnLink(String uri) { + var result = resolver.resolve(uri); assertThat(result).isPresent(); } @@ -43,19 +38,35 @@ class VorgangURIResolverTest { @Nested class TestVorgangLink { - @Test - void shouldHaveCorrectRelValue() { - var result = resolver.resolve(VORGANG_URI); + @ParameterizedTest + @MethodSource("de.ozgcloud.alfa.vorgang.VorgangURIResolverTest$TestResolve#validVorgangUris") + void shouldHaveCorrectRelValue(String uri) { + var result = resolver.resolve(uri); assertThat(result).get().extracting(Link::getRel).extracting(LinkRelation::value).isEqualTo(VorgangURIResolver.REL_NAME); } - @Test - void shouldHaveHrefOfVorgang() { - var result = resolver.resolve(VORGANG_URI); + @ParameterizedTest + @MethodSource("de.ozgcloud.alfa.vorgang.VorgangURIResolverTest$TestResolve#validVorgangUris") + void shouldHaveHrefOfVorgang(String uri) { + var result = resolver.resolve(uri); assertThat(result).get().extracting(Link::getHref).isEqualTo("/api/vorgangs/" + VORGANG_ID); } } + + private static Stream<String> validVorgangUris() { + return Stream.of( + "dns:///dummy.service/vorgangs/" + VORGANG_ID, + "dns:///dummy.service:123/vorgangs/" + VORGANG_ID, + "http://dummy.web.url/vorgangs/" + VORGANG_ID); + } + + private static Stream<String> invalidVorgangUris() { + return Stream.of("dns:///dummy.service/res-a/" + VORGANG_ID, + "dns:///dummy.service/" + VORGANG_ID, + "dns:///dummy.service/vorgangs/xyz/" + VORGANG_ID, + "dns:///dummy.service/vorgangs/" + VORGANG_ID + "/" + VORGANG_ID); + } } } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessorTest.java index 988b8cd04b8df6ae58cb6923785235828ebd5447..a145ca8b23e05f8d925e015a8e5cc9cb6f739357 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessorTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessorTest.java @@ -67,7 +67,7 @@ class VorgangWithEingangProcessorTest { @Mock private VorgangProcessorProperties vorgangProcessorProperties; - private UserProfileUrlProvider urlProvider = new UserProfileUrlProvider(); + private final UserProfileUrlProvider urlProvider = new UserProfileUrlProvider(); @DisplayName("Attachments") @Nested @@ -82,7 +82,7 @@ class VorgangWithEingangProcessorTest { @Nested class TestLink { - private static final String PATH = "/api/attachments?eingangId=" + EingangTestFactory.ID; + private static final String PATH = "/api/vorgang/" + VorgangHeaderTestFactory.ID + "/attachments"; private final LinkRelation linkRel = VorgangWithEingangProcessor.REL_ATTACHMENTS; @DisplayName("should be present if attachments exists") @@ -105,7 +105,7 @@ class VorgangWithEingangProcessorTest { @Nested class TestDownloadLink { - private static final String PATH = "/api/vorgang/" + VorgangHeaderTestFactory.ID + "/attachments?eingangId=" + EingangTestFactory.ID; + private static final String PATH = "/api/vorgang/" + VorgangHeaderTestFactory.ID + "/attachments"; private final LinkRelation linkRel = VorgangWithEingangProcessor.REL_DOWNLOAD_ATTACHMENTS; @DisplayName("should be present if attachments exists") @@ -144,7 +144,7 @@ class VorgangWithEingangProcessorTest { initUserProfileUrlProvider(urlProvider); } - private static final String PATH = "/api/representations?eingangId=" + EingangTestFactory.ID; + private static final String PATH = "/api/vorgang/" + VorgangHeaderTestFactory.ID + "/representations"; private final LinkRelation linkRel = VorgangWithEingangProcessor.REL_REPRESENTATIONS; diff --git a/alfa-xdomea/pom.xml b/alfa-xdomea/pom.xml deleted file mode 100644 index ce932acc53706fb904954f17bc19ea7c52c29b22..0000000000000000000000000000000000000000 --- a/alfa-xdomea/pom.xml +++ /dev/null @@ -1,133 +0,0 @@ -<?xml version="1.0"?> -<!-- - - Copyright (C) 2023 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. - ---> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - - <modelVersion>4.0.0</modelVersion> - - <parent> - <groupId>de.ozgcloud.alfa</groupId> - <artifactId>alfa</artifactId> - <version>2.14.0-SNAPSHOT</version> - </parent> - - <artifactId>alfa-xdomea</artifactId> - <name>Alfa xdomea</name> - <description>Alfa xdomea implementation</description> - <packaging>jar</packaging> - - <properties> - <maven.compiler.source>${java.version}</maven.compiler.source> - <maven.compiler.target>${java.version}</maven.compiler.target> - <jaxb2-maven-plugin.version>3.1.0</jaxb2-maven-plugin.version> - </properties> - - <dependencies> - <dependency> - <groupId>de.ozgcloud.alfa</groupId> - <artifactId>alfa-service</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>jakarta.xml.bind</groupId> - <artifactId>jakarta.xml.bind-api</artifactId> - </dependency> - <dependency> - <groupId>org.glassfish.jaxb</groupId> - <artifactId>jaxb-runtime</artifactId> - </dependency> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct</artifactId> - </dependency> - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-oxm</artifactId> - </dependency> - <dependency> - <groupId>de.ozgcloud.alfa</groupId> - <artifactId>alfa-service</artifactId> - <version>${project.version}</version> - <type>test-jar</type> - <scope>test</scope> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>jaxb2-maven-plugin</artifactId> - <version>${jaxb2-maven-plugin.version}</version> - <executions> - <execution> - <id>xjc</id> - <goals> - <goal>xjc</goal> - </goals> - </execution> - </executions> - <configuration> - <sources> - <source>src/main/resources/ozgcloud_XML-Schemata</source> - </sources> - <packageName>de.xoev.xdomea</packageName> - </configuration> - </plugin> - <plugin> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-maven-plugin</artifactId> - <configuration> - <skip>true</skip> - </configuration> - </plugin> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - </plugin> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-surefire-plugin</artifactId> - </plugin> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-failsafe-plugin</artifactId> - </plugin> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - </plugin> - </plugins> - <resources> - <resource> - <directory>${project.build.directory}/generated-resources/jaxb</directory> - </resource> - </resources> - </build> -</project> diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/bescheid/BescheidExportData.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/bescheid/BescheidExportData.java deleted file mode 100644 index ece5ee2c105749cdd5dbf2059d6ae969e8abfb35..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/bescheid/BescheidExportData.java +++ /dev/null @@ -1,19 +0,0 @@ -package de.ozgcloud.alfa.bescheid; - -import java.util.List; - -import de.ozgcloud.alfa.common.file.OzgFile; -import de.xoev.xdomea.DokumentType; -import lombok.Builder; -import lombok.Getter; -import lombok.Singular; - -@Builder -@Getter -public class BescheidExportData { - - @Singular - private List<DokumentType> dokumentTypes; - @Singular - private List<OzgFile> files; -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/bescheid/BescheidExportInput.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/bescheid/BescheidExportInput.java deleted file mode 100644 index aa25d85adf81618ded8e2c62097275c011c90313..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/bescheid/BescheidExportInput.java +++ /dev/null @@ -1,10 +0,0 @@ -package de.ozgcloud.alfa.bescheid; - -import java.util.List; - -import de.ozgcloud.alfa.common.file.OzgFile; -import lombok.Builder; - -@Builder -record BescheidExportInput(Bescheid bescheid, String organisationseinheitenId, List<OzgFile> files) { -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/bescheid/DokumentTypeBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/bescheid/DokumentTypeBuilder.java deleted file mode 100644 index 4a049e49cd45a920d3f64a456ace9351348bc4a3..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/bescheid/DokumentTypeBuilder.java +++ /dev/null @@ -1,83 +0,0 @@ -package de.ozgcloud.alfa.bescheid; - -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import org.apache.commons.lang3.StringUtils; - -import de.ozgcloud.alfa.common.AnlageDokumentTypeBuilder; -import de.ozgcloud.alfa.common.DateConverter; -import de.ozgcloud.alfa.common.IdentifikationObjektTypeBuilder; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.xoev.xdomea.AllgemeineMetadatenType; -import de.xoev.xdomea.AnlageDokumentType; -import de.xoev.xdomea.DokumentType; -import de.xoev.xdomea.HistorienProtokollInformationType; - -class DokumentTypeBuilder { - private static final String TYP = "Bescheid"; - private static final Map<Boolean, String> BEMERKUNG = Map.of(true, "Bescheid wurde genehmigt.", false, "Bescheid wurde abgelehnt."); - private static final Map<SendBy, String> AKTION = Map.of(SendBy.MANUAL, "Bescheid gespeichert", SendBy.NACHRICHT, - "Bescheid an Antragsteller gesendet"); - - private Bescheid bescheid; - private String organisationsEinheitenId; - private String fullName; - private List<OzgFile> files; - - public static DokumentTypeBuilder builder() { - return new DokumentTypeBuilder(); - } - - public DokumentTypeBuilder withBescheid(Bescheid bescheid) { - this.bescheid = bescheid; - return this; - } - - public DokumentTypeBuilder withOrganisationseinheitenId(String organisationsEinheitenId) { - this.organisationsEinheitenId = organisationsEinheitenId; - return this; - } - - public DokumentTypeBuilder withFullName(String fullName) { - this.fullName = fullName; - return this; - } - - public DokumentTypeBuilder withFiles(List<OzgFile> files) { - this.files = files; - return this; - } - - public DokumentType build() { - var dokumentType = new DokumentType(); - dokumentType.setIdentifikation(IdentifikationObjektTypeBuilder.builder().withObjectID(bescheid.getId()).build()); - dokumentType.setTyp(TYP); - dokumentType.setBezug(StringUtils.defaultString(bescheid.getNachrichtSubject())); - dokumentType.setAllgemeineMetadaten(createAllgemeineMetadaten()); - dokumentType.getHistorienProtokollInformation().add(createHistorienProtokollInformation()); - Optional.ofNullable(files).orElseGet(Collections::emptyList).stream().map(this::createAnlage).forEach(dokumentType.getAnlage()::add); - return dokumentType; - } - - AllgemeineMetadatenType createAllgemeineMetadaten() { - var metadaten = new AllgemeineMetadatenType(); - metadaten.setBemerkung(BEMERKUNG.get(bescheid.getBewilligt())); - return metadaten; - } - - HistorienProtokollInformationType createHistorienProtokollInformation() { - var protokollInfo = new HistorienProtokollInformationType(); - protokollInfo.setMetadatumName(StringUtils.defaultString(bescheid.getNachrichtText())); - protokollInfo.setAkteur(fullName + "; " + organisationsEinheitenId); - protokollInfo.setDatumUhrzeit(DateConverter.toXmlGregorianCalendar(bescheid.getSentInfo().getSentAt())); - protokollInfo.setAktion(AKTION.get(bescheid.getSendBy())); - return protokollInfo; - } - - AnlageDokumentType createAnlage(OzgFile ozgFile) { - return AnlageDokumentTypeBuilder.builder().withOzgFile(ozgFile).build(); - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/bescheid/ExportBescheidService.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/bescheid/ExportBescheidService.java deleted file mode 100644 index 7c34e61f09d3074a2ff398de69ea7ee338c3b8cb..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/bescheid/ExportBescheidService.java +++ /dev/null @@ -1,67 +0,0 @@ -package de.ozgcloud.alfa.bescheid; - -import java.util.stream.Stream; - -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileService; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.user.UserService; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.xoev.xdomea.DokumentType; -import lombok.RequiredArgsConstructor; - -@Service -@RequiredArgsConstructor -public class ExportBescheidService { - private final BescheidService bescheidService; - private final BinaryFileService binaryFileService; - private final DocumentService documentService; - private final UserService userService; - - public BescheidExportData createExportData(VorgangWithEingang vorgang) { - var builder = BescheidExportData.builder(); - getBescheids(vorgang.getId()) - .forEach(bescheid -> addBescheidExportData(createBescheidExportInput(bescheid, vorgang), builder)); - return builder.build(); - } - - Stream<Bescheid> getBescheids(String vorgangId) { - return bescheidService.findByVorgangIdSorted(vorgangId).filter(bescheid -> BescheidStatus.SENT == bescheid.getStatus()); - } - - BescheidExportInput createBescheidExportInput(Bescheid bescheid, VorgangWithEingang vorgang) { - return BescheidExportInput.builder() - .bescheid(bescheid) - .organisationseinheitenId(vorgang.getOrganisationseinheitenID()) - .files(Stream.concat(Stream.of(getDocument(bescheid)), getAttachments(bescheid)).toList()).build(); - } - - Stream<OzgFile> getAttachments(Bescheid bescheid) { - return binaryFileService.getFiles(bescheid.getAttachments()); - } - - void addBescheidExportData(BescheidExportInput input, BescheidExportData.BescheidExportDataBuilder builder) { - builder.dokumentType(buildDokumentType(input)) - .files(input.files()); - } - - OzgFile getDocument(Bescheid bescheid) { - var document = documentService.getDocument(bescheid.getBescheidDocument()); - return binaryFileService.getFile(document.getFileId()); - } - - DokumentType buildDokumentType(BescheidExportInput input) { - var builder = DokumentTypeBuilder.builder(); - builder.withBescheid(input.bescheid()) - .withFiles(input.files()) - .withFullName(getFullName(input.bescheid())) - .withOrganisationseinheitenId(input.organisationseinheitenId()); - return builder.build(); - } - - String getFullName(Bescheid bescheid) { - return userService.getById(bescheid.getSentInfo().getSentBy()).getFullName(); - } - -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/AnlageDokumentTypeBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/AnlageDokumentTypeBuilder.java deleted file mode 100644 index 593a6057fb57b48524006a1929bbadfff7e10fd6..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/AnlageDokumentTypeBuilder.java +++ /dev/null @@ -1,37 +0,0 @@ -package de.ozgcloud.alfa.common; - -import java.time.ZonedDateTime; - -import de.ozgcloud.alfa.common.file.OzgFile; -import de.xoev.xdomea.AnlageDokumentType; - -public class AnlageDokumentTypeBuilder { - private OzgFile ozgFile; - private ZonedDateTime createdAt; - - public static AnlageDokumentTypeBuilder builder() { - return new AnlageDokumentTypeBuilder(); - } - - public AnlageDokumentTypeBuilder withOzgFile(OzgFile ozgFile) { - this.ozgFile = ozgFile; - return this; - } - - public AnlageDokumentTypeBuilder withCreatedAt(ZonedDateTime createdAt) { - this.createdAt = createdAt; - return this; - } - - public AnlageDokumentType build() { - var anlage = new AnlageDokumentType(); - anlage.setIdentifikation(IdentifikationObjektTypeBuilder.builder() - .withObjectID(ozgFile.getId().toString()) - .build()); - anlage.getVersion().add(VersionTypeBuilder.builder() - .withCreatedAt(createdAt) - .withOzgFile(ozgFile).build()); - return anlage; - } - -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DateConverter.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DateConverter.java deleted file mode 100644 index bce094fc04399c0c5202ada3250837afdaf7b38e..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DateConverter.java +++ /dev/null @@ -1,60 +0,0 @@ -package de.ozgcloud.alfa.common; - -import static java.util.Objects.*; - -import java.time.LocalDate; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; -import java.util.GregorianCalendar; -import java.util.Locale; -import java.util.Optional; - -import javax.xml.datatype.DatatypeConfigurationException; -import javax.xml.datatype.DatatypeFactory; -import javax.xml.datatype.XMLGregorianCalendar; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -import lombok.extern.log4j.Log4j2; - -@Log4j2 -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class DateConverter { - - private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy", Locale.GERMAN); - - public static Optional<XMLGregorianCalendar> convertGermanFormatToISO(String dateStr) { - try { - if (nonNull(dateStr)) { - return Optional.of(createDatatypeFactory().newXMLGregorianCalendar(LocalDate.parse(dateStr, DATE_TIME_FORMATTER).toString())); - } - } catch (Exception e) { - LOG.warn("Date '{}' cannot be converted to ISO format.", dateStr, e); - } - return Optional.empty(); - } - - public static XMLGregorianCalendar toXmlGregorianCalendar(ZonedDateTime date) { - try { - if (nonNull(date)) { - return createDatatypeFactory().newXMLGregorianCalendar(GregorianCalendar.from(date)); - } - } catch (Exception e) { - LOG.warn("Date '{}' cannot be converted to ISO format.", date, e); - } - return null; - } - - public static XMLGregorianCalendar createEmpty() { - return DateConverter.createDatatypeFactory().newXMLGregorianCalendar(); - } - - static DatatypeFactory createDatatypeFactory() { - try { - return DatatypeFactory.newInstance(); - } catch (DatatypeConfigurationException e) { - throw new TechnicalException("Error creating datatype factory.", e); - } - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DateiformatCode.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DateiformatCode.java deleted file mode 100644 index d91a9e7f9e406ce57e3c5c2b8e12e0307136603d..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DateiformatCode.java +++ /dev/null @@ -1,85 +0,0 @@ -package de.ozgcloud.alfa.common; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -import org.apache.commons.lang3.StringUtils; - -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public final class DateiformatCode { - - static final String SONSTIGES_CODE = "100"; - - // MIME type -> file extension -> xdomea code - private static final Map<String, Map<String, String>> mimeTypesMapping = new HashMap<>(); - - static { - mimeTypesMapping.put("image/bmp", Map.of("bmp", "001")); - mimeTypesMapping.put("text/csv", Map.of("csv", "002")); - mimeTypesMapping.put("application/msword", Map.of("doc", "003", "dot", "032")); - mimeTypesMapping.put("message/rfc822", Map.of("eml", "006")); - mimeTypesMapping.put("text/html", Map.of("htm", "007", "html", "008")); - mimeTypesMapping.put("image/jpeg", Map.of("jpe", "009", "jpeg", "010", "jpg", "011")); - mimeTypesMapping.put("application/vnd.ms-outlook", Map.of("msg", "012")); - mimeTypesMapping.put("application/vnd.oasis.opendocument.presentation", Map.of("odp", "013")); - mimeTypesMapping.put("application/vnd.oasis.opendocument.spreadsheet", Map.of("ods", "014")); - mimeTypesMapping.put("application/vnd.oasis.opendocument.text", Map.of("odt", "015")); - mimeTypesMapping.put("application/vnd.oasis.opendocument.presentation-template", Map.of("otp", "016")); - mimeTypesMapping.put("application/vnd.oasis.opendocument.spreadsheet-template", Map.of("ots", "017")); - mimeTypesMapping.put("application/pdf", Map.of("pdf", "018")); - mimeTypesMapping.put("image/png", Map.of("png", "019")); - mimeTypesMapping.put("application/vnd.ms-powerpoint", Map.of("ppt", "020", "pot", "033")); - mimeTypesMapping.put("application/postscript", Map.of("ps", "021")); - mimeTypesMapping.put("application/rtf", Map.of("rtf", "022")); - mimeTypesMapping.put("image/tiff", Map.of("tif", "023", "tiff", "024")); - mimeTypesMapping.put("application/vnd.ms-works", Map.of("wps", "025")); - mimeTypesMapping.put("application/vnd.ms-excel", Map.of("xlc", "026", "xlm", "027", "xls", "028", "xlw", "029", "xlt", "034")); - mimeTypesMapping.put("application/xml", Map.of("xml", "030", "xsd", "031")); - mimeTypesMapping.put("text/xml", Map.of("xml", "030", "xsd", "031")); - mimeTypesMapping.put("application/vnd.openxmlformats-officedocument.wordprocessingml.document", Map.of("docx", "035")); - mimeTypesMapping.put("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", Map.of("xlsx", "036")); - mimeTypesMapping.put("application/vnd.openxmlformats-officedocument.presentationml.presentation", Map.of("pptx", "037")); - mimeTypesMapping.put("application/vnd.openxmlformats-officedocument.wordprocessingml.template", Map.of("dotx", "038")); - mimeTypesMapping.put("application/vnd.openxmlformats-officedocument.spreadsheetml.template", Map.of("xltx", "039")); - mimeTypesMapping.put("application/vnd.openxmlformats-officedocument.presentationml.template", Map.of("potx", "040")); - mimeTypesMapping.put("application/xml-dtd", Map.of("dtd", "041")); - mimeTypesMapping.put("application/vnd.ms-project", Map.of("mpp", "042")); - mimeTypesMapping.put("application/vnd.oasis.opendocument.text-template", Map.of("ott", "043")); - mimeTypesMapping.put("text/plain", Map.of("txt", "045")); - mimeTypesMapping.put("application/x-pkcs7-certificates", Map.of("p7b", "046")); - mimeTypesMapping.put("application/pkcs7-mime", Map.of("p7c", "047", "p7m", "048")); - mimeTypesMapping.put("application/pkcs7-signature", Map.of("p7s", "049")); - mimeTypesMapping.put("application/vnd.etsi.asic-s+zip", Map.of("asics", "050")); - mimeTypesMapping.put("application/scvp-cv-response", Map.of("scs", "051")); - } - - public static String getXdomeaCode(String mimeType, String extension) { - var fileExtensionToCodeMapping = getFileExtensionToCodeMapping(mimeType); - if (hasSingleExtensionMapping(fileExtensionToCodeMapping)) { - return getCodeOrDefault(fileExtensionToCodeMapping); - } - return getCodeForExtensionOrDefault(extension, fileExtensionToCodeMapping); - } - - private static Map<String, String> getFileExtensionToCodeMapping(String mimeType) { - return mimeTypesMapping.getOrDefault(Objects.requireNonNullElse(mimeType, StringUtils.EMPTY), Collections.emptyMap()); - } - - private static boolean hasSingleExtensionMapping(Map<String, String> fileExtensionToCodeMapping) { - return fileExtensionToCodeMapping.entrySet().size() == 1; - } - - private static String getCodeOrDefault(Map<String, String> fileExtensionToCodeMapping) { - return fileExtensionToCodeMapping.values().stream().findFirst().orElse(SONSTIGES_CODE); - } - - private static String getCodeForExtensionOrDefault(String extension, Map<String, String> fileExtensionToCodeMapping) { - return fileExtensionToCodeMapping.getOrDefault(Objects.requireNonNullElse(extension, StringUtils.EMPTY), SONSTIGES_CODE); - } - -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DatentypCode.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DatentypCode.java deleted file mode 100644 index 3ba6ce26689cb4351cfadb74573181ff22d73846..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DatentypCode.java +++ /dev/null @@ -1,15 +0,0 @@ -package de.ozgcloud.alfa.common; - -public enum DatentypCode { - STRING("038"), DATE("005"); - - private String code; - - DatentypCode(String code) { - this.code = code; - } - - public String getCode() { - return code; - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/ExportFilenameGenerator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/ExportFilenameGenerator.java deleted file mode 100644 index 069f37f3027879d431531ef82ed09efec33a473d..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/ExportFilenameGenerator.java +++ /dev/null @@ -1,13 +0,0 @@ -package de.ozgcloud.alfa.common; - -import de.ozgcloud.alfa.common.file.OzgFile; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class ExportFilenameGenerator { - - public static String generateExportFilename(OzgFile ozgFile) { - return String.format("%s_%s", UUIDConverter.fromObjectId(ozgFile.getId().toString()), ozgFile.getName()); - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/IdentifikationObjektTypeBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/IdentifikationObjektTypeBuilder.java deleted file mode 100644 index 7eceb19c8d3d952a79d179f0ef6c9e1edb515860..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/IdentifikationObjektTypeBuilder.java +++ /dev/null @@ -1,29 +0,0 @@ -package de.ozgcloud.alfa.common; - -import de.xoev.xdomea.IdentifikationObjektType; - -public class IdentifikationObjektTypeBuilder { - private String objectID; - private Long ordinalNumber; - - public static IdentifikationObjektTypeBuilder builder() { - return new IdentifikationObjektTypeBuilder(); - } - - public IdentifikationObjektTypeBuilder withObjectID(String objectID) { - this.objectID = objectID; - return this; - } - - public IdentifikationObjektTypeBuilder withOrdinalNumber(Long ordinalNumber) { - this.ordinalNumber = ordinalNumber; - return this; - } - - public IdentifikationObjektType build() { - var identifikation = new IdentifikationObjektType(); - identifikation.setID(UUIDConverter.fromObjectId(objectID)); - identifikation.setNummerImUebergeordnetenContainer(ordinalNumber); - return identifikation; - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilder.java deleted file mode 100644 index 17fc5d419308757c806d8a615e9b8ab2479b8c74..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilder.java +++ /dev/null @@ -1,45 +0,0 @@ -package de.ozgcloud.alfa.common; - -import java.time.ZonedDateTime; - -import de.ozgcloud.alfa.common.file.OzgFile; -import de.xoev.xdomea.PrimaerdokumentType; - -public class PrimaerdokumentTypeBuilder { - - private OzgFile ozgFile; - private String ersteller; - private ZonedDateTime createdAt; - - public static PrimaerdokumentTypeBuilder builder() { - return new PrimaerdokumentTypeBuilder(); - } - - public PrimaerdokumentTypeBuilder withOzgFile(OzgFile ozgFile) { - this.ozgFile = ozgFile; - return this; - } - - public PrimaerdokumentTypeBuilder withErsteller(String ersteller) { - this.ersteller = ersteller; - return this; - } - - public PrimaerdokumentTypeBuilder withCreatedAt(ZonedDateTime createdAt) { - this.createdAt = createdAt; - return this; - } - - public PrimaerdokumentType build() { - if (ozgFile == null) { - throw new IllegalStateException("Can not build Primaerdokument when ozg file is null"); - } - - var primaerdokument = new PrimaerdokumentType(); - primaerdokument.setDateiname(ExportFilenameGenerator.generateExportFilename(ozgFile)); - primaerdokument.setDateinameOriginal(ozgFile.getName()); - primaerdokument.setErsteller(ersteller); - primaerdokument.setDatumUhrzeit(DateConverter.toXmlGregorianCalendar(createdAt)); - return primaerdokument; - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/UUIDConverter.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/UUIDConverter.java deleted file mode 100644 index 85c84b421c0cf3d916e3ba2c70a372abd268d5d5..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/UUIDConverter.java +++ /dev/null @@ -1,25 +0,0 @@ -package de.ozgcloud.alfa.common; - -import java.util.regex.Pattern; - -import org.apache.commons.lang3.StringUtils; - -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class UUIDConverter { - - private static final Pattern UUID_SPLIT_PATTERN = Pattern.compile( - "^([a-fA-F0-9]{8})([a-fA-F0-9]{4})([a-fA-F0-9]{4})([a-fA-F0-9]{4})([a-fA-F0-9]+)$"); - - public static String fromObjectId(String objectId) { - var matcher = UUID_SPLIT_PATTERN.matcher(objectId); - if (matcher.find()) { - var lastGroup = StringUtils.leftPad(matcher.group(5), 12, "0"); - return String.format("%s-%s-%s-%s-%s", matcher.group(1), matcher.group(2), matcher.group(3), matcher.group(4), lastGroup); - } - throw new IllegalArgumentException(String.format("Invalid object id %s", objectId)); - } - -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/VersionTypeBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/VersionTypeBuilder.java deleted file mode 100644 index 3937b36d4eb85deb773eac2dcd0d1cad63a098c7..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/VersionTypeBuilder.java +++ /dev/null @@ -1,73 +0,0 @@ -package de.ozgcloud.alfa.common; - -import java.time.ZonedDateTime; - -import org.apache.commons.io.FilenameUtils; -import org.apache.commons.lang3.StringUtils; - -import de.ozgcloud.alfa.common.file.OzgFile; -import de.xoev.xdomea.DateiformatCodeType; -import de.xoev.xdomea.FormatType; -import de.xoev.xdomea.VersionType; - -public class VersionTypeBuilder { - public static final String VERSION_NUMMER = "1"; - public static final String DATEI_FORMAT_LIST_URI = "urn:xoev-de:xdomea:codeliste:dateiformat"; - public static final String LIST_VERSION_ID = "2.0"; - private OzgFile ozgFile; - private ZonedDateTime createdAt; - private String ersteller; - private String sonstigerName; - - public static VersionTypeBuilder builder() { - return new VersionTypeBuilder(); - } - - public VersionTypeBuilder withOzgFile(OzgFile ozgFile) { - this.ozgFile = ozgFile; - return this; - } - - public VersionTypeBuilder withCreatedAt(ZonedDateTime createdAt) { - this.createdAt = createdAt; - return this; - } - - public VersionTypeBuilder withErsteller(String ersteller) { - this.ersteller = ersteller; - return this; - } - - public VersionTypeBuilder withSonstigerName(String sonstigerName) { - this.sonstigerName = sonstigerName; - return this; - } - - public VersionType build() { - var versionType = new VersionType(); - versionType.setNummer(VERSION_NUMMER); - versionType.getFormat().add(createFormatType()); - return versionType; - } - - FormatType createFormatType() { - var formatType = new FormatType(); - formatType.setName(createDateiformatCodeType()); - formatType.setVersion(StringUtils.EMPTY); - formatType.setSonstigerName(sonstigerName); - formatType.setPrimaerdokument(PrimaerdokumentTypeBuilder.builder() - .withCreatedAt(createdAt) - .withErsteller(ersteller) - .withOzgFile(ozgFile) - .build()); - return formatType; - } - - DateiformatCodeType createDateiformatCodeType() { - var dateiformatCode = new DateiformatCodeType(); - dateiformatCode.setCode(DateiformatCode.getXdomeaCode(ozgFile.getContentType(), FilenameUtils.getExtension(ozgFile.getName()).toLowerCase())); - dateiformatCode.setListURI(DATEI_FORMAT_LIST_URI); - dateiformatCode.setListVersionID(LIST_VERSION_ID); - return dateiformatCode; - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportConfiguration.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportConfiguration.java deleted file mode 100644 index 1ad1ea37461edf34756e2f478e3b56cc74e2bd88..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportConfiguration.java +++ /dev/null @@ -1,43 +0,0 @@ -package de.ozgcloud.alfa.export; - -import java.util.HashMap; -import java.util.Map; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.oxm.jaxb.Jaxb2Marshaller; -import org.springframework.validation.Validator; - -import jakarta.xml.bind.Marshaller; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Configuration -class ExportConfiguration { - - static final boolean JAXB_FORMATTED_OUTPUT = true; - static final String PROPERTY_NAMESPACE_PREFIX_MAPPER = "org.glassfish.jaxb.namespacePrefixMapper"; - static final String CONTEXT_PATH = "de.xoev.xdomea"; - - private final XdomeaNamespacePrefixMapper prefixMapper; - - @Bean - static Validator configurationPropertiesValidator() { - return new XdomeaPropertiesValidator(); - } - - @Bean - Jaxb2Marshaller marshaller() { - var marshaller = new Jaxb2Marshaller(); - marshaller.setContextPaths(CONTEXT_PATH); - marshaller.setMarshallerProperties(createMarshallerProperties()); - return marshaller; - } - - Map<String, Object> createMarshallerProperties() { - var props = new HashMap<String, Object>(); - props.put(Marshaller.JAXB_FORMATTED_OUTPUT, JAXB_FORMATTED_OUTPUT); - props.put(PROPERTY_NAMESPACE_PREFIX_MAPPER, prefixMapper); - return props; - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportData.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportData.java deleted file mode 100644 index bea5d003d18ce25769862c1f57f22e92584e469e..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportData.java +++ /dev/null @@ -1,21 +0,0 @@ -package de.ozgcloud.alfa.export; - -import java.util.Set; - -import de.ozgcloud.alfa.common.file.OzgFile; -import de.xoev.xdomea.AbgabeAbgabe0401; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; - -@Builder -@AllArgsConstructor(access = AccessLevel.PRIVATE) -@Getter -class ExportData { - - private String exportFilename; - private AbgabeAbgabe0401 abgabe; - private Set<OzgFile> exportFiles; - -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportService.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportService.java deleted file mode 100644 index 65de7b375a079150afa974bd1dfc23ea0607b598..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportService.java +++ /dev/null @@ -1,140 +0,0 @@ -package de.ozgcloud.alfa.export; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.nio.charset.StandardCharsets; -import java.util.Optional; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.bescheid.ExportBescheidService; -import de.ozgcloud.alfa.common.ExportFilenameGenerator; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.file.ExportFileService; -import de.ozgcloud.alfa.historie.ExportHistorieService; -import de.ozgcloud.alfa.kommentar.ExportKommentarService; -import de.ozgcloud.alfa.postfach.ExportNachrichtService; -import de.ozgcloud.alfa.vorgang.Eingang; -import de.ozgcloud.alfa.vorgang.EingangHeader; -import de.ozgcloud.alfa.vorgang.ExportVorgangService; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.common.binaryfile.TempFileUtils; -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.xoev.xdomea.AbgabeAbgabe0401; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Service -class ExportService { - - static final String EXPORT_FILENAME_SUFFIX = "_Abgabe.Abgabe.0401.xml"; - private static final String EXPORT_FILENAME_TEMPLATE = "%s" + EXPORT_FILENAME_SUFFIX; - - private final XdomeaXmlMarshaller xDomeaXmlMarshaller; - - private final ExportFileService exportFileService; - private final ExportVorgangService exportVorgangService; - private final ExportHistorieService exportHistorieService; - private final ExportKommentarService exportKommentarService; - private final ExportNachrichtService exportNachrichtService; - private final ExportBescheidService exportBescheidService; - - public void writeExport(String vorgangId, String filenameId, OutputStream out) { - var exportData = collectExportData(vorgangId, filenameId); - var zipFile = createZipFile(exportData); - writeZipFileContent(zipFile, out); - } - - ExportData collectExportData(String vorgangId, String filenameId) { - var vorgang = exportVorgangService.getVorgang(vorgangId); - var kommentarsData = exportKommentarService.createExportData(vorgang); - var postfachMailData = exportNachrichtService.createExportData(vorgang); - var bescheidData = exportBescheidService.createExportData(vorgang); - var representations = exportFileService.getRepresentations(vorgang).toList(); - var attachments = exportFileService.getAttachments(vorgang).toList(); - var formEngineName = getFormEngineName(vorgang); - var abgabe = XdomeaNachrichtBuilder.builder() - .withKopf(exportVorgangService.createKopf(vorgang)) - .withVorgang(exportVorgangService.createVorgangType(vorgang)) - .withAktenzeichen(exportVorgangService.createAkteType(vorgang)) - .withRepresentations(exportFileService.createDokumentTypes(representations, formEngineName).toList()) - .withAttachments(exportFileService.createDokumentTypes(attachments, formEngineName).toList()) - .withHistorie(exportHistorieService.createHistorienProtokollInformationTypes(vorgang).toList()) - .withKommentare(kommentarsData.getDokumentTypes()) - .withPostfachMails(postfachMailData.getDokumentTypes()) - .withBescheids(bescheidData.getDokumentTypes()) - .build(); - var exportFiles = Stream - .of(representations.stream(), attachments.stream(), - kommentarsData.getAttachments().stream(), - postfachMailData.getAttachments().stream(), - bescheidData.getFiles().stream()) - .flatMap(s -> s) - .collect(Collectors.toSet()); - return ExportData.builder().abgabe(abgabe).exportFilename(buildXmlFilename(filenameId)).exportFiles(exportFiles).build(); - } - - String getFormEngineName(VorgangWithEingang vorgang) { - return Optional.ofNullable(vorgang.getEingang()) - .map(Eingang::getHeader) - .map(EingangHeader::getFormEngineName).orElse(StringUtils.EMPTY); - } - - String buildXmlFilename(String filenameId) { - return String.format(EXPORT_FILENAME_TEMPLATE, filenameId); - } - - String createXmlContent(AbgabeAbgabe0401 abgabe) { - return xDomeaXmlMarshaller.marshal(abgabe); - } - - File createZipFile(ExportData exportData) { - var file = TempFileUtils.createTmpFile().toFile(); - try (var zipOutputStream = new ZipOutputStream(new FileOutputStream(file))) { - putZipEntry(exportData.getExportFilename(), createXmlContent(exportData.getAbgabe()), zipOutputStream); - putFilesIntoZip(exportData.getExportFiles(), zipOutputStream); - return file; - } catch (Exception e) { - throw new TechnicalException("Error creating xdomea zip file", e); - } - } - - void putZipEntry(String fileName, String fileData, ZipOutputStream zipOutputStream) throws IOException { - var entry = new ZipEntry(fileName); - zipOutputStream.putNextEntry(entry); - zipOutputStream.write(fileData.getBytes(StandardCharsets.UTF_8)); - zipOutputStream.closeEntry(); - } - - private void putFilesIntoZip(Set<OzgFile> ozgFiles, ZipOutputStream zipOutputStream) { - ozgFiles.forEach(ozgFile -> putOzgFileIntoZip(ozgFile, zipOutputStream)); - } - - void putOzgFileIntoZip(OzgFile ozgFile, ZipOutputStream zipOutputStream) { - try { - var entry = new ZipEntry(ExportFilenameGenerator.generateExportFilename(ozgFile)); - zipOutputStream.putNextEntry(entry); - exportFileService.writeOzgFile(ozgFile.getId(), zipOutputStream); - zipOutputStream.closeEntry(); - } catch (IOException e) { - throw new TechnicalException("Cannot add file to ZIP.", e); - } - } - - void writeZipFileContent(File file, OutputStream outputStream) { - try (var fileInputStream = new FileInputStream(file)) { - fileInputStream.transferTo(outputStream); - } catch (Exception e) { - throw new TechnicalException("Error writing xdomea zip file to output stream", e); - } - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaMedienart.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaMedienart.java deleted file mode 100644 index 42338a5e6befc601a62735b18d700dfee7fcc795..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaMedienart.java +++ /dev/null @@ -1,16 +0,0 @@ -package de.ozgcloud.alfa.export; - -enum XdomeaMedienart { - - ELEKTRONISCHES_DOKUMENT("001"); - - private String code; - - XdomeaMedienart(String code) { - this.code = code; - } - - public String getCode() { - return code; - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java deleted file mode 100644 index 644265c961a0a0d943d721d12d5f1c5c9d33d067..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java +++ /dev/null @@ -1,115 +0,0 @@ -package de.ozgcloud.alfa.export; - -import java.util.Collections; -import java.util.List; - -import de.xoev.xdomea.AbgabeAbgabe0401; -import de.xoev.xdomea.AbgabeAbgabe0401.Schriftgutobjekt; -import de.xoev.xdomea.AkteType; -import de.xoev.xdomea.DokumentType; -import de.xoev.xdomea.HistorienProtokollInformationType; -import de.xoev.xdomea.NkAbgabeType; -import de.xoev.xdomea.VorgangType; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -class XdomeaNachrichtBuilder { - - private VorgangType vorgang; - private NkAbgabeType kopf; - private AkteType aktenzeichen; - private List<DokumentType> representations = Collections.emptyList(); - private List<DokumentType> attachments = Collections.emptyList(); - private List<DokumentType> kommentare = Collections.emptyList(); - private List<DokumentType> postfachMails = Collections.emptyList(); - private List<DokumentType> bescheids = Collections.emptyList(); - private List<HistorienProtokollInformationType> historie = Collections.emptyList(); - - public static XdomeaNachrichtBuilder builder() { - return new XdomeaNachrichtBuilder(); - } - - public XdomeaNachrichtBuilder withKopf(NkAbgabeType kopf) { - this.kopf = kopf; - return this; - } - - public XdomeaNachrichtBuilder withVorgang(VorgangType vorgangType) { - this.vorgang = vorgangType; - return this; - } - - public XdomeaNachrichtBuilder withAktenzeichen(AkteType akteType) { - this.aktenzeichen = akteType; - return this; - } - - public XdomeaNachrichtBuilder withRepresentations(List<DokumentType> representations) { - this.representations = representations; - return this; - } - - public XdomeaNachrichtBuilder withAttachments(List<DokumentType> attachments) { - this.attachments = attachments; - return this; - } - - public XdomeaNachrichtBuilder withHistorie(List<HistorienProtokollInformationType> historie) { - this.historie = historie; - return this; - } - - public XdomeaNachrichtBuilder withKommentare(List<DokumentType> kommentare) { - this.kommentare = kommentare; - return this; - } - - public XdomeaNachrichtBuilder withPostfachMails(List<DokumentType> postfachMails) { - this.postfachMails = postfachMails; - return this; - } - - public XdomeaNachrichtBuilder withBescheids(List<DokumentType> bescheids) { - this.bescheids = bescheids; - return this; - } - - public AbgabeAbgabe0401 build() { - addVorgangDokumente(); - addVorgangChangeHistory(); - return createAbgabeType(); - } - - void addVorgangDokumente() { - representations.forEach(vorgang.getDokument()::add); - attachments.forEach(vorgang.getDokument()::add); - kommentare.forEach(vorgang.getDokument()::add); - postfachMails.forEach(vorgang.getDokument()::add); - bescheids.forEach(vorgang.getDokument()::add); - } - - void addVorgangChangeHistory() { - historie.forEach(vorgang.getHistorienProtokollInformation()::add); - } - - AbgabeAbgabe0401 createAbgabeType() { - var abgabeType = new AbgabeAbgabe0401(); - abgabeType.setKopf(kopf); - abgabeType.getSchriftgutobjekt().add(createSchriftgutobjektVorgang()); - abgabeType.getSchriftgutobjekt().add(createSchriftgutobjektAkte()); - return abgabeType; - } - - private Schriftgutobjekt createSchriftgutobjektVorgang() { - var schriftgutobjekt = new Schriftgutobjekt(); - schriftgutobjekt.setVorgang(vorgang); - return schriftgutobjekt; - } - - private Schriftgutobjekt createSchriftgutobjektAkte() { - var schriftgutobjekt = new Schriftgutobjekt(); - schriftgutobjekt.setAkte(aktenzeichen); - return schriftgutobjekt; - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNamespacePrefixMapper.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNamespacePrefixMapper.java deleted file mode 100644 index 08894a2387b574d9616faebb9eac3d15603f772c..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNamespacePrefixMapper.java +++ /dev/null @@ -1,47 +0,0 @@ -package de.ozgcloud.alfa.export; - -import java.util.Map; - -import org.glassfish.jaxb.runtime.marshaller.NamespacePrefixMapper; -import org.springframework.stereotype.Component; - -@Component -class XdomeaNamespacePrefixMapper extends NamespacePrefixMapper { - - static final String XDOMEA_NAMESPACE_URI = "urn:xoev-de:xdomea:schema:3.0.0"; - static final String XDOMEA_NAMESPACE_PREFIX = "xdomea"; - - static final String XDOMEA_NAMESPACE_DINSPEC = "dinspec91379"; - static final String XDOMEA_NAMESPACE_DINSPEC_URI = "urn:xoev-de:kosit:xoev:datentyp:din-spec-91379_2019-03"; - - static final String XDOMEA_NAMESPACE_GML = "gml"; - static final String XDOMEA_NAMESPACE_GML_URI = "http://www.opengis.net/gml/3.2"; - - static final String XDOMEA_NAMESPACE_XOEV_CODE = "xoev-code"; - static final String XDOMEA_NAMESPACE_XOEV_CODE_URI = "http://xoev.de/schemata/code/1_0"; - - static final String XDOMEA_NAMESPACE_XOEV_LC = "xoev-lc"; - static final String XDOMEA_NAMESPACE_XOEV_LC_URI = "http://xoev.de/latinchars/1_1/datatypes"; - - private static final Map<String, String> NAMESPACE_MAP = Map.of( - XDOMEA_NAMESPACE_URI, XDOMEA_NAMESPACE_PREFIX, - XDOMEA_NAMESPACE_DINSPEC_URI, XDOMEA_NAMESPACE_DINSPEC, - XDOMEA_NAMESPACE_GML_URI, XDOMEA_NAMESPACE_GML, - XDOMEA_NAMESPACE_XOEV_CODE_URI, XDOMEA_NAMESPACE_XOEV_CODE, - XDOMEA_NAMESPACE_XOEV_LC_URI, XDOMEA_NAMESPACE_XOEV_LC); - - @Override - public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) { - return NAMESPACE_MAP.getOrDefault(namespaceUri, suggestion); - } - - @Override - public String[] getPreDeclaredNamespaceUris() { - return new String[] { - XDOMEA_NAMESPACE_DINSPEC_URI, - XDOMEA_NAMESPACE_GML_URI, - XDOMEA_NAMESPACE_XOEV_CODE_URI, - XDOMEA_NAMESPACE_XOEV_LC_URI - }; - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaProperties.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaProperties.java deleted file mode 100644 index 2d2157c690d1b1c354875b477ec6163752cc1234..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaProperties.java +++ /dev/null @@ -1,26 +0,0 @@ -package de.ozgcloud.alfa.export; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; -import org.springframework.validation.annotation.Validated; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@Configuration -@ConfigurationProperties("ozgcloud.xdomea") -@Validated -@Builder -@Getter -@Setter -@NoArgsConstructor -@AllArgsConstructor -public class XdomeaProperties { - - private String behoerdenschluessel; - private String behoerdenschluesselUri; - private String behoerdenschluesselVersion; -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaPropertiesValidator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaPropertiesValidator.java deleted file mode 100644 index 8cc320ecb6346fbc79bd42a2826b08bec38aaff3..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaPropertiesValidator.java +++ /dev/null @@ -1,44 +0,0 @@ -package de.ozgcloud.alfa.export; - -import org.apache.commons.beanutils.BeanUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.validation.Errors; -import org.springframework.validation.Validator; - -import de.ozgcloud.common.errorhandling.TechnicalException; - -public class XdomeaPropertiesValidator implements Validator { - - @Override - public boolean supports(Class<?> clazz) { - return XdomeaProperties.class.isAssignableFrom(clazz); - } - - @Override - public void validate(Object target, Errors errors) { - var properties = (XdomeaProperties) target; - validateBehoerdenschluesselProperties(errors, properties); - } - - private void validateBehoerdenschluesselProperties(Errors errors, XdomeaProperties properties) { - if (StringUtils.isNotBlank(properties.getBehoerdenschluessel())) { - validateNotBlank("behoerdenschluesselUri", properties, errors); - validateNotBlank("behoerdenschluesselVersion", properties, errors); - } - } - - private void validateNotBlank(String propertyName, XdomeaProperties properties, Errors errors) { - getPropertyValue(propertyName, properties); - if (StringUtils.isBlank(getPropertyValue(propertyName, properties))) { - errors.rejectValue(propertyName, String.format("ozgcloud.xdomea.%s.empty", propertyName), String.format("%s must be set", propertyName)); - } - } - - private static String getPropertyValue(String fieldName, XdomeaProperties properties) { - try { - return BeanUtils.getSimpleProperty(properties, fieldName); - } catch (Exception e) { - throw new TechnicalException("Property does not exist", e); - } - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaXmlMarshaller.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaXmlMarshaller.java deleted file mode 100644 index 441bd579380934ebdfe3d26a587d92afe4f711b5..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaXmlMarshaller.java +++ /dev/null @@ -1,24 +0,0 @@ -package de.ozgcloud.alfa.export; - -import java.io.StringWriter; - -import javax.xml.transform.stream.StreamResult; - -import org.springframework.oxm.jaxb.Jaxb2Marshaller; -import org.springframework.stereotype.Component; - -import de.xoev.xdomea.AbgabeAbgabe0401; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Component -public class XdomeaXmlMarshaller { - - private final Jaxb2Marshaller marshaller; - - public String marshal(AbgabeAbgabe0401 abgabe) { - var stringWriter = new StringWriter(); - marshaller.marshal(abgabe, new StreamResult(stringWriter)); - return stringWriter.toString(); - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DokumentTypeBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DokumentTypeBuilder.java deleted file mode 100644 index f0a11becc28fcd9642d620b1298f5d59ead96e1a..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DokumentTypeBuilder.java +++ /dev/null @@ -1,82 +0,0 @@ -package de.ozgcloud.alfa.file; - -import org.apache.commons.lang3.StringUtils; - -import de.ozgcloud.alfa.common.IdentifikationObjektTypeBuilder; -import de.ozgcloud.alfa.common.VersionTypeBuilder; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.xoev.xdomea.AllgemeineMetadatenType; -import de.xoev.xdomea.DokumentType; -import de.xoev.xdomea.IdentifikationObjektType; -import de.xoev.xdomea.MediumCodeType; -import de.xoev.xdomea.VersionType; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class DokumentTypeBuilder { - - static final String VERSION_NUMMER = "1"; - static final String ALLGEMEINE_METADATEN_MEDIUM_CODE = "001"; - - private Long ordinalNumber; - private String formEngineName; - private OzgFile ozgFile; - - public static DokumentTypeBuilder builder() { - return new DokumentTypeBuilder(); - } - - public DokumentTypeBuilder withOrdinalNumber(Long ordinalNumber) { - this.ordinalNumber = ordinalNumber; - return this; - } - - public DokumentTypeBuilder withFormEngineName(String formEngineName) { - this.formEngineName = formEngineName; - return this; - } - - public DokumentTypeBuilder withOzgFile(OzgFile ozgFile) { - this.ozgFile = ozgFile; - return this; - } - - public DokumentType build() { - var dokumentType = new DokumentType(); - dokumentType.setIdentifikation(createIdentifikation()); - dokumentType.setAllgemeineMetadaten(createAllgemeineMetadaten()); - dokumentType.getVersion().add(createVersionType()); - return dokumentType; - } - - VersionType createVersionType() { - return VersionTypeBuilder.builder() - .withOzgFile(ozgFile) - .withErsteller(formEngineName) - .withSonstigerName(StringUtils.EMPTY) - .build(); - } - - IdentifikationObjektType createIdentifikation() { - return IdentifikationObjektTypeBuilder.builder() - .withObjectID(ozgFile.getId().toString()) - .withOrdinalNumber(ordinalNumber) - .build(); - } - - AllgemeineMetadatenType createAllgemeineMetadaten() { - var allgemeineMetadaten = new AllgemeineMetadatenType(); - allgemeineMetadaten.setBetreff(ozgFile.getName()); - allgemeineMetadaten.setKennzeichen(StringUtils.EMPTY); - allgemeineMetadaten.setBemerkung(StringUtils.EMPTY); - allgemeineMetadaten.setMedium(createMediumCode()); - return allgemeineMetadaten; - } - - private MediumCodeType createMediumCode() { - var mediumCode = new MediumCodeType(); - mediumCode.setCode(ALLGEMEINE_METADATEN_MEDIUM_CODE); - return mediumCode; - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/ExportFileService.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/ExportFileService.java deleted file mode 100644 index ab9ead3554f9ff95650c64d2e171882613b49e49..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/ExportFileService.java +++ /dev/null @@ -1,52 +0,0 @@ -package de.ozgcloud.alfa.file; - -import java.io.OutputStream; -import java.util.List; -import java.util.Optional; -import java.util.concurrent.atomic.AtomicLong; -import java.util.stream.Stream; - -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileService; -import de.ozgcloud.alfa.common.binaryfile.FileId; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileService; -import de.ozgcloud.alfa.vorgang.Eingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.xoev.xdomea.DokumentType; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Service -public class ExportFileService { - - private final OzgFileService ozgFileService; - private final BinaryFileService binaryFileService; - - public Stream<OzgFile> getRepresentations(VorgangWithEingang vorgang) { - return Optional.ofNullable(vorgang.getEingang()) - .map(Eingang::getId).stream() - .flatMap(ozgFileService::getRepresentationsByEingang); - } - - public Stream<OzgFile> getAttachments(VorgangWithEingang vorgang) { - return Optional.ofNullable(vorgang.getEingang()) - .map(Eingang::getId).stream() - .flatMap(ozgFileService::getAttachmentsByEingang); - } - - public Stream<DokumentType> createDokumentTypes(List<OzgFile> ozgFiles, String formEngineName) { - var ordinalNumberGenerator = new AtomicLong(1); - return ozgFiles.stream().map(ozgFile -> DokumentTypeBuilder.builder() - .withOrdinalNumber(ordinalNumberGenerator.getAndIncrement()) - .withFormEngineName(formEngineName) - .withOzgFile(ozgFile) - .build()); - } - - public void writeOzgFile(FileId fileId, OutputStream outputStream) { - binaryFileService.writeFileContent(fileId, outputStream); - } - -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/historie/ExportHistorieService.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/historie/ExportHistorieService.java deleted file mode 100644 index 4f3e62cffd7e5a5e07f7dccc55a2f8ca59e092f7..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/historie/ExportHistorieService.java +++ /dev/null @@ -1,66 +0,0 @@ -package de.ozgcloud.alfa.historie; - -import java.util.function.Function; -import java.util.stream.Stream; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.DateConverter; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.xoev.xdomea.HistorienProtokollInformationType; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Service -public class ExportHistorieService { - - private final VorgangChangeHistoryService vorgangChangeHistoryService; - - public Stream<HistorienProtokollInformationType> createHistorienProtokollInformationTypes(VorgangWithEingang vorgang) { - var history = vorgangChangeHistoryService.createVorgangChangeHistory(vorgang); - return Stream.of( - history.getStatusChangeHistory().stream().map(this::createHistorienProtokollInformationType), - history.getAktenzeichenChangeHistory().stream().map(this::createHistorienProtokollInformationType), - history.getAssignedUserChangeHistory().stream().map(this::createHistorienProtokollInformationType)) - .flatMap(Function.identity()); - } - - HistorienProtokollInformationType createHistorienProtokollInformationType(VorgangChange vorgangChange) { - var historienProtokollInformationType = new HistorienProtokollInformationType(); - historienProtokollInformationType.setMetadatumAlterWert(createValueBeforeChange(vorgangChange)); - historienProtokollInformationType.setMetadatumNeuerWert(createValueAfterChange(vorgangChange)); - historienProtokollInformationType.setAkteur(createAkteur(vorgangChange)); - historienProtokollInformationType.setDatumUhrzeit(DateConverter.toXmlGregorianCalendar(vorgangChange.getFinishedAt())); - historienProtokollInformationType.setAktion(vorgangChange.getOrder()); - return historienProtokollInformationType; - } - - String createAkteur(VorgangChange vorgangChange) { - return appendOrganisationseinheitenID(vorgangChange.getAuthorFullName(), vorgangChange.getOrganisationseinheitenID()); - } - - String createValueBeforeChange(VorgangChange vorgangChange) { - return createValueChange(vorgangChange, vorgangChange.getValueBeforeChange()); - } - - String createValueAfterChange(VorgangChange vorgangChange) { - return createValueChange(vorgangChange, vorgangChange.getValueAfterChange()); - } - - private String createValueChange(VorgangChange vorgangChange, String valueChange) { - if (isAssignUserOrder(vorgangChange)) { - return appendOrganisationseinheitenID(valueChange, vorgangChange.getOrganisationseinheitenID()); - } - return valueChange; - } - - private boolean isAssignUserOrder(VorgangChange vorgangChange) { - return vorgangChange.getOrder().equals(CommandOrder.ASSIGN_USER.name()); - } - - String appendOrganisationseinheitenID(String text, String organisationseinheitenID) { - return StringUtils.isNotBlank(text) ? text + "; " + organisationseinheitenID : StringUtils.EMPTY; - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/kommentar/DokumentTypeBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/kommentar/DokumentTypeBuilder.java deleted file mode 100644 index 26ca34e45be143fbd7aa2d46c5cd21f223416835..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/kommentar/DokumentTypeBuilder.java +++ /dev/null @@ -1,79 +0,0 @@ -package de.ozgcloud.alfa.kommentar; - -import java.util.Collections; -import java.util.List; - -import de.ozgcloud.alfa.common.AnlageDokumentTypeBuilder; -import de.ozgcloud.alfa.common.DateConverter; -import de.ozgcloud.alfa.common.IdentifikationObjektTypeBuilder; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.xoev.xdomea.AnlageDokumentType; -import de.xoev.xdomea.DokumentType; -import de.xoev.xdomea.HistorienProtokollInformationType; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -class DokumentTypeBuilder { - - static final String TYP = "Notiz"; - static final String AKTION = "CREATE_KOMMENTAR"; - - private Kommentar kommentar; - private List<OzgFile> kommentarAttachments = Collections.emptyList(); - private String authorFullName; - private String organisationseinheitenID; - - public static DokumentTypeBuilder builder() { - return new DokumentTypeBuilder(); - } - - public DokumentTypeBuilder withKommentar(Kommentar kommentar) { - this.kommentar = kommentar; - return this; - } - - public DokumentTypeBuilder withKommentarAttachments(List<OzgFile> kommentarAttachments) { - this.kommentarAttachments = kommentarAttachments; - return this; - } - - public DokumentTypeBuilder withAuthorFullName(String authorFullName) { - this.authorFullName = authorFullName; - return this; - } - - public DokumentTypeBuilder withOrganisationseinheitenID(String organisationseinheitenID) { - this.organisationseinheitenID = organisationseinheitenID; - return this; - } - - public DokumentType build() { - var dokumentType = new DokumentType(); - dokumentType.setIdentifikation(IdentifikationObjektTypeBuilder.builder() - .withObjectID(kommentar.getId()) - .build()); - dokumentType.setTyp(TYP); - dokumentType.getHistorienProtokollInformation().add(createHistorie()); - kommentarAttachments.stream().map(this::createAnlage).forEach(dokumentType.getAnlage()::add); - return dokumentType; - } - - AnlageDokumentType createAnlage(OzgFile ozgFile) { - return AnlageDokumentTypeBuilder.builder().withOzgFile(ozgFile).build(); - } - - HistorienProtokollInformationType createHistorie() { - var historienProtokollInformationType = new HistorienProtokollInformationType(); - historienProtokollInformationType.setMetadatumName(kommentar.getText()); - historienProtokollInformationType.setAkteur(createAkteur()); - historienProtokollInformationType.setDatumUhrzeit(DateConverter.toXmlGregorianCalendar(kommentar.getCreatedAt())); - historienProtokollInformationType.setAktion(AKTION); - return historienProtokollInformationType; - } - - String createAkteur() { - return this.authorFullName + "; " + this.organisationseinheitenID; - } - -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/kommentar/ExportKommentarService.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/kommentar/ExportKommentarService.java deleted file mode 100644 index 1d4d9e209314cb629342e45e5c0ca18ab9e57fb1..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/kommentar/ExportKommentarService.java +++ /dev/null @@ -1,67 +0,0 @@ -package de.ozgcloud.alfa.kommentar; - -import java.util.List; -import java.util.stream.Stream; - -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileService; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.common.user.UserService; -import de.ozgcloud.alfa.kommentar.KommentarsExportData.KommentarsExportDataBuilder; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Service -public class ExportKommentarService { - - private final KommentarService kommentarService; - private final BinaryFileService binaryFileService; - private final UserService userService; - - public KommentarsExportData createExportData(VorgangWithEingang vorgang) { - KommentarsExportDataBuilder builder = KommentarsExportData.builder(); - getKommentare(vorgang) - .map(kommentar -> createKommentarExportData(vorgang, kommentar)) - .forEach(kommentarExportData -> addKommentarExportData(kommentarExportData, builder)); - return builder.build(); - } - - KommentarExportData createKommentarExportData(VorgangWithEingang vorgang, Kommentar kommentar){ - return new KommentarExportData(vorgang.getOrganisationseinheitenID(), kommentar); - } - - void addKommentarExportData(KommentarExportData kommentarExportData, KommentarsExportDataBuilder builder) { - List<OzgFile> attachments = getAttachments(kommentarExportData.kommentar); - - var dokumentType = DokumentTypeBuilder.builder() - .withKommentarAttachments(attachments) - .withKommentar(kommentarExportData.kommentar) - .withOrganisationseinheitenID(kommentarExportData.organisationsEinheitenID) - .withAuthorFullName(getAuthorFullName(kommentarExportData.kommentar)) - .build(); - - builder.dokumentType(dokumentType); - builder.attachments(attachments); - } - - List<OzgFile> getAttachments(Kommentar kommentar) { - return binaryFileService.getFiles(kommentar.getAttachments()).toList(); - } - - String getAuthorFullName(Kommentar kommentar) { - return userService.getById(UserId.from(kommentar.getCreatedBy())).getFullName(); - } - - Stream<Kommentar> getKommentare(VorgangWithEingang vorgang) { - return kommentarService.findByVorgangId(vorgang.getId()); - } - - record KommentarExportData( - String organisationsEinheitenID, - Kommentar kommentar - ) { - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/kommentar/KommentarsExportData.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/kommentar/KommentarsExportData.java deleted file mode 100644 index a550d397e705d277af24be94fa742681a792997f..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/kommentar/KommentarsExportData.java +++ /dev/null @@ -1,22 +0,0 @@ -package de.ozgcloud.alfa.kommentar; - -import java.util.List; - -import de.ozgcloud.alfa.common.file.OzgFile; -import de.xoev.xdomea.DokumentType; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.Singular; - -@Builder -@AllArgsConstructor(access = AccessLevel.PRIVATE) -@Getter -public class KommentarsExportData { - - @Singular - private List<DokumentType> dokumentTypes; - @Singular - private List<OzgFile> attachments; -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/postfach/DokumentTypeBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/postfach/DokumentTypeBuilder.java deleted file mode 100644 index 1a82477373682b64b4581952fb28345ac655937c..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/postfach/DokumentTypeBuilder.java +++ /dev/null @@ -1,93 +0,0 @@ -package de.ozgcloud.alfa.postfach; - -import java.time.ZonedDateTime; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import de.ozgcloud.alfa.common.AnlageDokumentTypeBuilder; -import de.ozgcloud.alfa.common.DateConverter; -import de.ozgcloud.alfa.common.IdentifikationObjektTypeBuilder; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.user.UserProfile; -import de.ozgcloud.alfa.postfach.PostfachMail.Direction; -import de.xoev.xdomea.AnlageDokumentType; -import de.xoev.xdomea.DokumentType; -import de.xoev.xdomea.HistorienProtokollInformationType; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -class DokumentTypeBuilder { - private static final String TYP = "Nachricht"; - private static final String ANTRAGSTELLER = "Antragsteller"; - private final Map<Direction, String> mapDirectionToString = Map.of( - Direction.IN, "Nachricht empfangen", - Direction.OUT, "Nachricht gesendet"); - - private PostfachMail postfachMail; - private List<OzgFile> ozgFileAttachments; - private UserProfile userProfile; - private String organisationseinheitenId; - - public static DokumentTypeBuilder builder() { - return new DokumentTypeBuilder(); - } - - public DokumentTypeBuilder withPostfachMail(PostfachMail postfachMail) { - this.postfachMail = postfachMail; - return this; - } - - public DokumentTypeBuilder withOzgFiles(List<OzgFile> ozgFiles) { - this.ozgFileAttachments = ozgFiles; - return this; - } - - public DokumentTypeBuilder withUserProfile(UserProfile userProfile) { - this.userProfile = userProfile; - return this; - } - - public DokumentTypeBuilder withOrganisationseinheitenId(String organisationseinheitenId) { - this.organisationseinheitenId = organisationseinheitenId; - return this; - } - - public DokumentType build() { - var dokumentType = new DokumentType(); - dokumentType.setIdentifikation(IdentifikationObjektTypeBuilder.builder() - .withObjectID(postfachMail.getId()) - .build()); - dokumentType.setTyp(TYP); - dokumentType.getHistorienProtokollInformation().add(createHistorienProtokollInformation()); - Optional.ofNullable(ozgFileAttachments).orElseGet(Collections::emptyList).stream().map(this::createAnlage) - .forEach(dokumentType.getAnlage()::add); - return dokumentType; - } - - AnlageDokumentType createAnlage(OzgFile ozgFile) { - return AnlageDokumentTypeBuilder.builder().withOzgFile(ozgFile).build(); - } - - HistorienProtokollInformationType createHistorienProtokollInformation() { - var historienInformation = new HistorienProtokollInformationType(); - historienInformation.setMetadatumName(postfachMail.getMailBody()); - historienInformation.setAkteur(getAkteur()); - historienInformation.setDatumUhrzeit(DateConverter.toXmlGregorianCalendar(getSentTime())); - historienInformation.setAktion(mapDirectionToString.get(postfachMail.getDirection())); - return historienInformation; - } - - String getAkteur() { - return Optional.ofNullable(userProfile) - .map(user -> user.getFullName() + "; " + organisationseinheitenId) - .orElse(ANTRAGSTELLER); - } - - ZonedDateTime getSentTime() { - return postfachMail.getDirection() == Direction.IN ? postfachMail.getCreatedAt() : postfachMail.getSentAt(); - } - -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/postfach/ExportNachrichtService.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/postfach/ExportNachrichtService.java deleted file mode 100644 index 40dfc97e8ef03910763677008b0468fb2c5044fa..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/postfach/ExportNachrichtService.java +++ /dev/null @@ -1,62 +0,0 @@ -package de.ozgcloud.alfa.postfach; - -import java.util.List; -import java.util.Optional; -import java.util.stream.Stream; - -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileService; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.user.UserProfile; -import de.ozgcloud.alfa.common.user.UserService; -import de.ozgcloud.alfa.postfach.PostfachMailExportData.PostfachMailExportDataBuilder; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.xoev.xdomea.DokumentType; -import lombok.RequiredArgsConstructor; - -@Service -@RequiredArgsConstructor -public class ExportNachrichtService { - private final PostfachMailService postfachMailService; - private final BinaryFileService binaryFileService; - private final UserService userService; - - public PostfachMailExportData createExportData(VorgangWithEingang vorgang) { - var builder = PostfachMailExportData.builder(); - getPostfachMails(vorgang.getId()) - .forEach(mail -> addPostfachMailExportData( - new PostfachMailExportInput(mail, getOrganisationseinheitenId(vorgang), getAttachments(mail)), builder)); - return builder.build(); - } - - public Stream<PostfachMail> getPostfachMails(String vorgangId) { - return postfachMailService.getAll(vorgangId); - } - - private String getOrganisationseinheitenId(VorgangWithEingang vorgang) { - return vorgang.getEingang().getZustaendigeStelle().getOrganisationseinheitenId(); - } - - List<OzgFile> getAttachments(PostfachMail postfachMail) { - return binaryFileService.getFiles(postfachMail.getAttachments()).toList(); - } - - void addPostfachMailExportData(PostfachMailExportInput postfachMailExportInput, PostfachMailExportDataBuilder builder) { - builder.attachments(postfachMailExportInput.attachments()); - builder.dokumentType(buildDokumentType(postfachMailExportInput)); - } - - DokumentType buildDokumentType(PostfachMailExportInput postfachMailExportInput) { - return DokumentTypeBuilder.builder() - .withPostfachMail(postfachMailExportInput.postfachMail()) - .withOzgFiles(postfachMailExportInput.attachments()) - .withUserProfile(getUserProfile(postfachMailExportInput.postfachMail()).orElse(null)) - .withOrganisationseinheitenId(postfachMailExportInput.organisationseinheitenId()) - .build(); - } - - Optional<UserProfile> getUserProfile(PostfachMail postfachMail) { - return Optional.ofNullable(postfachMail.getCreatedBy()).map(userService::getById); - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailExportData.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailExportData.java deleted file mode 100644 index 7c359508b96cd8a6471be34307bd77b0044da3c7..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailExportData.java +++ /dev/null @@ -1,23 +0,0 @@ -package de.ozgcloud.alfa.postfach; - -import java.util.List; - -import de.ozgcloud.alfa.common.file.OzgFile; -import de.xoev.xdomea.DokumentType; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.Singular; - -@Builder -@Getter -@AllArgsConstructor(access = AccessLevel.PRIVATE) -public class PostfachMailExportData { - - @Singular - private List<DokumentType> dokumentTypes; - @Singular - private List<OzgFile> attachments; - -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailExportInput.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailExportInput.java deleted file mode 100644 index 07ce2b45857e032667efbbd9d0c75a1497c6f95e..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailExportInput.java +++ /dev/null @@ -1,8 +0,0 @@ -package de.ozgcloud.alfa.postfach; - -import java.util.List; - -import de.ozgcloud.alfa.common.file.OzgFile; - -record PostfachMailExportInput(PostfachMail postfachMail, String organisationseinheitenId, List<OzgFile> attachments) { -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungTypeCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungTypeCreator.java deleted file mode 100644 index 05b2f17709d3e4c2a8c26d1fbce3c7315a20b078..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungTypeCreator.java +++ /dev/null @@ -1,27 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import java.util.Collections; - -import org.springframework.stereotype.Component; - -import de.xoev.xdomea.AnwendungsspezifischeErweiterungType; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Component -class AnwendungsspezifischeErweiterungTypeCreator { - - static final String KENNUNG = "IDOZGCloud1234567"; - static final String NAME = "Anwendungsspezifische Erweiterung OZGCloud Basis"; - - private final FeldGruppeTypeCreator feldGruppeTypeCreator; - - public AnwendungsspezifischeErweiterungType create(VorgangWithEingang vorgang) { - var ozgcloudErweiterungType = new AnwendungsspezifischeErweiterungType(); - ozgcloudErweiterungType.setKennung(KENNUNG); - ozgcloudErweiterungType.setName(NAME); - ozgcloudErweiterungType.getFeldgruppe().addAll(Collections.singleton(feldGruppeTypeCreator.create(vorgang))); - return ozgcloudErweiterungType; - } - -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungXMLTypeCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungXMLTypeCreator.java deleted file mode 100644 index 2af8e7cd35c3b5eac78704fa035c3a9aece954e6..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungXMLTypeCreator.java +++ /dev/null @@ -1,19 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import org.springframework.stereotype.Component; - -import de.xoev.xdomea.AnwendungsspezifischeErweiterungXMLType; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Component -public class AnwendungsspezifischeErweiterungXMLTypeCreator { - - private final FormDataMapper formDataMapper; - - public AnwendungsspezifischeErweiterungXMLType create(VorgangWithEingang vorgang) { - var erweiterungXmlType = new AnwendungsspezifischeErweiterungXMLType(); - erweiterungXmlType.getAny().add(formDataMapper.toAntragsdaten(vorgang)); - return erweiterungXmlType; - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/DatatypeMapper.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/DatatypeMapper.java deleted file mode 100644 index 9a740682a45f0793f2926172b98212060617c603..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/DatatypeMapper.java +++ /dev/null @@ -1,44 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import static java.util.Objects.*; - -import java.time.LocalDate; -import java.time.ZonedDateTime; -import java.util.Collection; - -import org.springframework.stereotype.Component; - -import de.xoev.xdomea.DatatypeType; - -@Component -class DatatypeMapper { - - public DatatypeType from(Object object) { - if (isNull(object)) { - return DatatypeType.STRING; - } - var objectClass = object.getClass(); - if (String.class.equals(objectClass)) { - return DatatypeType.STRING; - } - if (Integer.class.equals(objectClass)) { - return DatatypeType.INTEGER; - } - if (Boolean.class.equals(objectClass)) { - return DatatypeType.BOOLEAN; - } - if (LocalDate.class.equals(objectClass)) { - return DatatypeType.DATE; - } - if (ZonedDateTime.class.equals(objectClass)) { - return DatatypeType.DATETIME; - } - if (Float.class.equals(objectClass)) { - return DatatypeType.FLOAT; - } - if (object instanceof Collection<?> collection && !collection.isEmpty()) { - return from(collection.iterator().next()); - } - return DatatypeType.STRING; - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/ExportFelder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/ExportFelder.java deleted file mode 100644 index 46db0e389e308eba98b8a9e9664306c1c972016b..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/ExportFelder.java +++ /dev/null @@ -1,61 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import de.ozgcloud.alfa.common.DatentypCode; -import de.xoev.xdomea.DatentypCodeType; -import de.xoev.xdomea.FeldType; - -enum ExportFelder { - LEIKA_ID("LeikaID", "ID einer Leistung aus dem OZG-Leistungskatalog", DatentypCode.STRING.getCode()), - DATUM_ANTRAGSEINGANG("DatumAntragseingang", "Das Datum des Antragseingangs", DatentypCode.DATE.getCode()), - NAME("Name", null, DatentypCode.STRING.getCode()), - VORNAME("Vorname", null, DatentypCode.STRING.getCode()), - GEBURTSDATUM("Geburtsdatum", null, DatentypCode.DATE.getCode()), - PLZ("PLZAntragsteller", null, DatentypCode.STRING.getCode()); - - private static final String LIST_URI = "urn:xoev-de:xdomea:codeliste:datentyp"; - private static final String LIST_VERSION_ID = "1.1"; - - private String name; - private String beschreibung; - private String datentypCode; - - ExportFelder(String name, String beschreibung, String datentypCode) { - this.name = name; - this.beschreibung = beschreibung; - this.datentypCode = datentypCode; - } - - public String getName() { - return name; - } - - public String getBeschreibung() { - return beschreibung; - } - - public String getDatentypCode() { - return datentypCode; - } - - public FeldType createFeld(String wert) { - var feld = createFeld(); - feld.setWert(wert); - return feld; - } - - public FeldType createFeld() { - var feld = new FeldType(); - feld.setName(name); - feld.setBeschreibung(beschreibung); - feld.setDatentyp(fromCode(datentypCode)); - return feld; - } - - private DatentypCodeType fromCode(String code) { - var type = new DatentypCodeType(); - type.setCode(code); - type.setListURI(LIST_URI); - type.setListVersionID(LIST_VERSION_ID); - return type; - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/ExportVorgangService.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/ExportVorgangService.java deleted file mode 100644 index 49ae46dc6950161c2121bb7fc395a07cf96317ae..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/ExportVorgangService.java +++ /dev/null @@ -1,55 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import java.util.Optional; -import java.util.UUID; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; - -import de.xoev.xdomea.AkteType; -import de.xoev.xdomea.AllgemeineMetadatenType; -import de.xoev.xdomea.IdentifikationObjektType; -import de.xoev.xdomea.NkAbgabeType; -import de.xoev.xdomea.VorgangType; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Service -public class ExportVorgangService { - - private final VorgangService vorgangService; - - private final VorgangTypeCreator vorgangTypeCreator; - private final KopfCreator kopfCreator; - - public VorgangWithEingang getVorgang(String vorgangId) { - return vorgangService.findVorgangWithEingang(vorgangId); - } - - public VorgangType createVorgangType(VorgangWithEingang vorgangWithEingang) { - return vorgangTypeCreator.create(vorgangWithEingang); - } - - public NkAbgabeType createKopf(VorgangWithEingang vorgangWithEingang) { - return kopfCreator.createKopf(vorgangWithEingang); - } - - public AkteType createAkteType(VorgangWithEingang vorgangWithEingang) { - var akteType = new AkteType(); - akteType.setIdentifikation(createIdentifikationObjektType()); - akteType.setAllgemeineMetadaten(createAllgemeineMetadatenType(vorgangWithEingang)); - return akteType; - } - - IdentifikationObjektType createIdentifikationObjektType() { - var identifikationObjektType = new IdentifikationObjektType(); - identifikationObjektType.setID(UUID.randomUUID().toString()); - return identifikationObjektType; - } - - AllgemeineMetadatenType createAllgemeineMetadatenType(VorgangWithEingang vorgangWithEingang) { - var allgemeineMetadatenType = new AllgemeineMetadatenType(); - allgemeineMetadatenType.setKennzeichen(Optional.ofNullable(vorgangWithEingang.getAktenzeichen()).orElse(StringUtils.EMPTY)); - return allgemeineMetadatenType; - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FeldGruppeTypeCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FeldGruppeTypeCreator.java deleted file mode 100644 index 6b22705890f313c97caae1fad6692ea7405dd208..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FeldGruppeTypeCreator.java +++ /dev/null @@ -1,39 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import static java.util.Optional.*; - -import java.time.format.DateTimeFormatter; -import java.util.List; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Component; - -import de.xoev.xdomea.FeldType; -import de.xoev.xdomea.FeldgruppeType; - -@Component -class FeldGruppeTypeCreator { - - static final String NAME = "FeldgruppeOZGCloudBasis"; - static final String BESCHREIBUNG = "Feldgruppe für OZGCloud Basis"; - - public FeldgruppeType create(VorgangWithEingang vorgang) { - var feldgruppe = new FeldgruppeType(); - feldgruppe.setName(NAME); - feldgruppe.setBeschreibung(BESCHREIBUNG); - feldgruppe.getFeld().addAll(createFeldType(vorgang)); - return feldgruppe; - } - - List<FeldType> createFeldType(VorgangWithEingang vorgang) { - var antragsteller = ofNullable(vorgang.getEingang()).flatMap(eingang -> ofNullable(eingang.getAntragsteller())); - return List.of( - ExportFelder.LEIKA_ID.createFeld(), - ExportFelder.DATUM_ANTRAGSEINGANG.createFeld(DateTimeFormatter.ISO_DATE_TIME.format(vorgang.getCreatedAt())), - ExportFelder.NAME.createFeld(antragsteller.flatMap(a -> ofNullable(a.getNachname())).orElse(StringUtils.EMPTY)), - ExportFelder.VORNAME.createFeld(antragsteller.flatMap(a -> ofNullable(a.getVorname())).orElse(StringUtils.EMPTY)), - ExportFelder.GEBURTSDATUM.createFeld(antragsteller.flatMap(a -> ofNullable(a.getGeburtsdatum())).orElse(StringUtils.EMPTY)), - ExportFelder.PLZ.createFeld(antragsteller.flatMap(a -> ofNullable(a.getPlz())).orElse(StringUtils.EMPTY))); - } - -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java deleted file mode 100644 index b5b8a45e9e650bc8e193de707b082ec057e8758f..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java +++ /dev/null @@ -1,101 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import static java.util.Objects.*; - -import java.time.ZonedDateTime; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.DateConverter; -import de.xoev.xdomea.Antragsdaten; -import de.xoev.xdomea.AntragsdatenGroupType; -import de.xoev.xdomea.AntragsdatenItemType; -import de.xoev.xdomea.AntragsdatenMultiValueFieldType; -import de.xoev.xdomea.AntragsdatenSingleValueFieldType; -import de.xoev.xdomea.DatatypeType; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Component -class FormDataMapper { - - private final DatatypeMapper datatypeMapper; - - public Antragsdaten toAntragsdaten(VorgangWithEingang vorgang) { - var antragsdaten = new Antragsdaten(); - antragsdaten.getItem().addAll(mapFormData(vorgang)); - antragsdaten.getItem().addAll(mapOtherData(vorgang)); - return antragsdaten; - } - - List<AntragsdatenItemType> mapFormData(VorgangWithEingang vorgang) { - return Optional.ofNullable(vorgang.getEingang()).map(Eingang::getFormData).map(this::mapData).orElse(List.of()); - } - - List<AntragsdatenItemType> mapOtherData(VorgangWithEingang vorgang) { - return Optional.ofNullable(vorgang.getEingang()).map(Eingang::getAntragsteller).map(Antragsteller::getOtherData).map(this::mapData) - .orElse(List.of()); - } - - List<AntragsdatenItemType> mapData(Map<String, Object> data) { - return buildItems(WrappedValueExtractor.extractWrappedValues(data)); - } - - List<AntragsdatenItemType> buildItems(Map<?, ?> formData) { - var items = new ArrayList<AntragsdatenItemType>(); - for (var formDataEntry : formData.entrySet()) { - var key = (String) formDataEntry.getKey(); - var value = formDataEntry.getValue(); - if (value instanceof Map<?, ?> map) { - items.add(buildAntragsdatenGroup(key, map)); - } else if (value instanceof Collection<?> collection) { - items.add(buildMultiValueField(key, collection)); - } else { - items.add(buildSingleValueField(key, value)); - - } - } - return items; - } - - AntragsdatenItemType buildAntragsdatenGroup(String name, Map<?, ?> values) { - var antragsGroup = new AntragsdatenGroupType(); - antragsGroup.setName(name); - antragsGroup.getItem().addAll(buildItems(values)); - return antragsGroup; - } - - AntragsdatenItemType buildMultiValueField(String name, Collection<?> values) { - var multiValue = new AntragsdatenMultiValueFieldType(); - multiValue.setName(name); - var datatype = datatypeMapper.from(values); - multiValue.setType(datatype); - var multiValueList = multiValue.getValue(); - values.stream().map(v -> formatValue(datatype, v)).forEach(multiValueList::add); - return multiValue; - } - - AntragsdatenItemType buildSingleValueField(String name, Object value) { - var singleValue = new AntragsdatenSingleValueFieldType(); - singleValue.setName(name); - if (nonNull(value)) { - var datatype = datatypeMapper.from(value); - singleValue.setType(datatype); - singleValue.setValue(formatValue(datatype, value)); - } - return singleValue; - } - - Object formatValue(DatatypeType datatype, Object value) { - return switch (datatype) { - case STRING -> String.valueOf(value); - case DATETIME -> DateConverter.toXmlGregorianCalendar((ZonedDateTime) value); - default -> value; - }; - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KontaktTypeCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KontaktTypeCreator.java deleted file mode 100644 index 8ca2aced5adb1a651b78c066c088395449b3fbd8..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KontaktTypeCreator.java +++ /dev/null @@ -1,58 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import java.util.Optional; -import java.util.function.Predicate; - -import javax.xml.datatype.XMLGregorianCalendar; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.DateConverter; -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.xoev.xdomea.GeburtType; -import de.xoev.xdomea.KontaktType; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Component -class KontaktTypeCreator { - - private static final Predicate<Antragsteller> HAS_VORNAME = antragsteller -> StringUtils.isNotBlank(antragsteller.getVorname()); - private static final Predicate<Antragsteller> HAS_NACHNAME = antragsteller -> StringUtils.isNotBlank(antragsteller.getNachname()); - private static final Predicate<Antragsteller> HAS_ANREDE = antragsteller -> StringUtils.isNotBlank(antragsteller.getAnrede()); - private static final Predicate<Antragsteller> HAS_GEBURTSDATUM = antragsteller -> geburtsdatumToISO(antragsteller).isPresent(); - - private final NameNatuerlichePersonTypeCreator nameNatuerlichePersonTypeCreator; - - public Optional<KontaktType> create(VorgangWithEingang vorgang) { - return getAntragstellerIfHasRequiredData(vorgang).map(this::toKontaktType); - } - - Optional<Antragsteller> getAntragstellerIfHasRequiredData(VorgangWithEingang vorgang) { - return Optional.ofNullable(vorgang.getEingang().getAntragsteller()) - .filter(HAS_VORNAME.or(HAS_NACHNAME).or(HAS_ANREDE).or(HAS_GEBURTSDATUM)); - } - - KontaktType toKontaktType(Antragsteller antragsteller) { - var kontakt = new KontaktType(); - kontakt.setName(nameNatuerlichePersonTypeCreator.create(antragsteller)); - - geburtsdatumToISO(antragsteller) - .map(this::createGeburtType) - .ifPresent(kontakt::setGeburt); - - return kontakt; - } - - static Optional<XMLGregorianCalendar> geburtsdatumToISO(Antragsteller antragsteller) { - return DateConverter.convertGermanFormatToISO(antragsteller.getGeburtsdatum()); - } - - GeburtType createGeburtType(XMLGregorianCalendar geburtsdatumIso) { - var geburtType = new GeburtType(); - geburtType.setDatum(geburtsdatumIso); - return geburtType; - } - -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KopfCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KopfCreator.java deleted file mode 100644 index 5305519177c60d83ac4de118977b4fbd4c549fa2..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KopfCreator.java +++ /dev/null @@ -1,93 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import java.time.ZoneOffset; -import java.time.ZonedDateTime; - -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.DateConverter; -import de.ozgcloud.alfa.common.UUIDConverter; -import de.ozgcloud.alfa.export.XdomeaProperties; -import de.xoev.xdomea.BehoerdenkennungType; -import de.xoev.xdomea.Code; -import de.xoev.xdomea.KontaktType; -import de.xoev.xdomea.NachrichtentypCodeType; -import de.xoev.xdomea.NkAbgabeType; -import de.xoev.xdomea.OrganisationseinheitType; -import de.xoev.xdomea.SystemType; -import io.micrometer.common.util.StringUtils; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Component -class KopfCreator { - - static final String NACHRICHTENTYP_CODE_TYPE_LIST_URI = "urn:xoev-de:xdomea:codeliste:nachrichtentyp"; - static final String NACHRICHTENTYP_CODE_TYPE_LIST_VERSION_ID = "2.0"; - static final String NACHRICHTENTYP_ABGABE_ABGABE_TYPE_CODE = "0401"; - static final String PRODUKT_NAME = "OZG-Cloud"; - - private final XdomeaProperties xdomeaProperties; - - public NkAbgabeType createKopf(VorgangWithEingang vorgang) { - var nkAbgabeType = new NkAbgabeType(); - nkAbgabeType.setProzessID(UUIDConverter.fromObjectId(vorgang.getId())); - nkAbgabeType.setNachrichtentyp(createNachrichtentyp()); - nkAbgabeType.setErstellungszeitpunkt(DateConverter.toXmlGregorianCalendar(ZonedDateTime.now(ZoneOffset.UTC))); - nkAbgabeType.setAbsender(createAbsender(vorgang.getEingang().getZustaendigeStelle().getOrganisationseinheitenId())); - nkAbgabeType.setEmpfaenger(createKontaktType()); - nkAbgabeType.setSendendesSystem(createSendendesSystem()); - nkAbgabeType.setImportbestaetigung(true); - nkAbgabeType.setEmpfangsbestaetigung(true); - return nkAbgabeType; - } - - NachrichtentypCodeType createNachrichtentyp() { - var nachrichtentypCode = new NachrichtentypCodeType(); - nachrichtentypCode.setCode(NACHRICHTENTYP_ABGABE_ABGABE_TYPE_CODE); - nachrichtentypCode.setListURI(NACHRICHTENTYP_CODE_TYPE_LIST_URI); - nachrichtentypCode.setListVersionID(NACHRICHTENTYP_CODE_TYPE_LIST_VERSION_ID); - return nachrichtentypCode; - } - - KontaktType createAbsender(String organisationseinheitId) { - var absender = createKontaktType(); - absender.setOrganisationseinheit(createOrganisationseinheitType(organisationseinheitId)); - return absender; - } - - KontaktType createKontaktType() { - var kontakt = new KontaktType(); - if (StringUtils.isNotBlank(xdomeaProperties.getBehoerdenschluessel())) { - kontakt.setBehoerdenkennung(createBehoerdenkennung()); - } - return kontakt; - } - - OrganisationseinheitType createOrganisationseinheitType(String organisationseinheitId) { - var organisationseinheit = new OrganisationseinheitType(); - organisationseinheit.setName(organisationseinheitId); - return organisationseinheit; - } - - BehoerdenkennungType createBehoerdenkennung() { - var behoerdenkennungType = new BehoerdenkennungType(); - behoerdenkennungType.setBehoerdenschluessel(createBehoerdenschluessel()); - return behoerdenkennungType; - } - - Code createBehoerdenschluessel() { - var behoerdenschluessel = new Code(); - behoerdenschluessel.setCode(xdomeaProperties.getBehoerdenschluessel()); - behoerdenschluessel.setListURI(xdomeaProperties.getBehoerdenschluesselUri()); - behoerdenschluessel.setListVersionID(xdomeaProperties.getBehoerdenschluesselVersion()); - return behoerdenschluessel; - } - - SystemType createSendendesSystem() { - var sendendesSystem = new SystemType(); - sendendesSystem.setProduktname(PRODUKT_NAME); - return sendendesSystem; - } - -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/NameNatuerlichePersonTypeCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/NameNatuerlichePersonTypeCreator.java deleted file mode 100644 index 3f4431f47450482dd6c2543460f19219f3d1d5c5..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/NameNatuerlichePersonTypeCreator.java +++ /dev/null @@ -1,29 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import static java.util.Optional.*; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Component; - -import de.xoev.xdomea.AllgemeinerNameType; -import de.xoev.xdomea.NameNatuerlichePersonType; - -@Component -class NameNatuerlichePersonTypeCreator { - - public NameNatuerlichePersonType create(Antragsteller antragsteller) { - var nameNatuerlichPerson = new NameNatuerlichePersonType(); - nameNatuerlichPerson.setAnrede(ofNullable(antragsteller).map(Antragsteller::getAnrede).orElse(StringUtils.EMPTY)); - nameNatuerlichPerson.setVorname( - createAllgemeinerNameType(ofNullable(antragsteller).map(Antragsteller::getVorname).orElse(StringUtils.EMPTY))); - nameNatuerlichPerson.setFamilienname( - createAllgemeinerNameType(ofNullable(antragsteller).map(Antragsteller::getNachname).orElse(StringUtils.EMPTY))); - return nameNatuerlichPerson; - } - - private AllgemeinerNameType createAllgemeinerNameType(String name) { - var allgemeinerName = new AllgemeinerNameType(); - allgemeinerName.setName(name); - return allgemeinerName; - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/VorgangTypeCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/VorgangTypeCreator.java deleted file mode 100644 index 11b5a0502926d5b23aa29665cd47b64cf93c5c37..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/VorgangTypeCreator.java +++ /dev/null @@ -1,57 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import java.util.UUID; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Component; - -import de.xoev.xdomea.AllgemeineMetadatenType; -import de.xoev.xdomea.IdentifikationObjektType; -import de.xoev.xdomea.MediumCodeType; -import de.xoev.xdomea.VorgangType; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Component -class VorgangTypeCreator { - - static final Long NUMMER_IM_UEBERGEORDNETEN_CONTAINER = 1L; - static final String ALLGEMEINE_METADATEN_MEDIUM_CODE = "001"; - - private final AnwendungsspezifischeErweiterungTypeCreator anwendungsspezifischeErweiterungTypeCreator; - private final AnwendungsspezifischeErweiterungXMLTypeCreator anwendungsspezifischeErweiterungXMLTypeCreator; - private final KontaktTypeCreator kontaktTypeCreator; - - public VorgangType create(VorgangWithEingang vorgangWithEingang) { - var vorgang = new VorgangType(); - vorgang.setAnwendungsspezifischeErweiterung(anwendungsspezifischeErweiterungTypeCreator.create(vorgangWithEingang)); - vorgang.setAnwendungsspezifischeErweiterungXML(anwendungsspezifischeErweiterungXMLTypeCreator.create(vorgangWithEingang)); - vorgang.setIdentifikation(createIdentifikation()); - vorgang.setAllgemeineMetadaten(createAllgemeineMetadaten(vorgangWithEingang)); - kontaktTypeCreator.create(vorgangWithEingang).ifPresent(vorgang.getKontakt()::add); - return vorgang; - } - - IdentifikationObjektType createIdentifikation() { - var identifikation = new IdentifikationObjektType(); - identifikation.setID(UUID.randomUUID().toString()); - identifikation.setNummerImUebergeordnetenContainer(NUMMER_IM_UEBERGEORDNETEN_CONTAINER); - return identifikation; - } - - AllgemeineMetadatenType createAllgemeineMetadaten(VorgangWithEingang vorgang) { - var allgemeineMetadaten = new AllgemeineMetadatenType(); - allgemeineMetadaten.setBetreff(vorgang.getName()); - allgemeineMetadaten.setKennzeichen(vorgang.getNummer()); - allgemeineMetadaten.setBemerkung(StringUtils.EMPTY); - allgemeineMetadaten.setMedium(createMediumCode()); - return allgemeineMetadaten; - } - - private MediumCodeType createMediumCode() { - var mediumCode = new MediumCodeType(); - mediumCode.setCode(ALLGEMEINE_METADATEN_MEDIUM_CODE); - return mediumCode; - } - -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/WrappedValueExtractor.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/WrappedValueExtractor.java deleted file mode 100644 index 12a2d36bc271932aa84defc5e7d43a0bfa2bafd9..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/WrappedValueExtractor.java +++ /dev/null @@ -1,36 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import java.util.HashMap; -import java.util.Map; - -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -class WrappedValueExtractor { - - static final String WRAPPER_KEY = "value"; - - public static Map<String, Object> extractWrappedValues(Map<String, Object> formData) { - Map<String, Object> result = new HashMap<>(); - for (var entry : formData.entrySet()) { - result.put(entry.getKey(), replaceWrappedValueWithDirectValue(entry.getValue())); - } - return result; - } - - @SuppressWarnings("unchecked") - static Object replaceWrappedValueWithDirectValue(Object value) { - if (!(value instanceof Map)) { - return value; - } - Map<String, Object> formData = (Map<String, Object>) value; - return isWrappedValue(formData) ? - replaceWrappedValueWithDirectValue(formData.get(WRAPPER_KEY)) : - extractWrappedValues(formData); - } - - static boolean isWrappedValue(Map<String, Object> formData) { - return formData.containsKey(WRAPPER_KEY) && formData.size() == 1; - } -} diff --git a/alfa-xdomea/src/main/resources/ozgcloud_XML-Schemata/ozgcloud.xsd b/alfa-xdomea/src/main/resources/ozgcloud_XML-Schemata/ozgcloud.xsd deleted file mode 100644 index 16daa7f5862da6b2b0e36a69b2f6d30969f555b9..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/resources/ozgcloud_XML-Schemata/ozgcloud.xsd +++ /dev/null @@ -1,70 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xs:schema targetNamespace="urn:ozgcloud-de:xdomea:schema:1.0.0" - xmlns:ozgcloud="urn:ozgcloud-de:xdomea:schema:1.0.0" - xmlns:xs="http://www.w3.org/2001/XMLSchema" - xmlns:xdomea="urn:xoev-de:xdomea:schema:3.0.0" - elementFormDefault="qualified"> - - <xs:import namespace="urn:xoev-de:xdomea:schema:3.0.0" schemaLocation="../xdomea_3-0-0_XML-Schemata/xdomea.xsd"/> - - <xs:element name="Antragsdaten"> - <xs:complexType> - <xs:sequence> - <xs:element name="Item" type="ozgcloud:AntragsdatenItemType" minOccurs="0" maxOccurs="unbounded"/> - </xs:sequence> - </xs:complexType> - </xs:element> - - <xs:complexType name="AntragsdatenItemType" abstract="true"> - <xs:attribute name="name" type="xs:string" use="required"/> - </xs:complexType> - - <xs:complexType name="AntragsdatenFieldType" abstract="true"> - <xs:complexContent> - <xs:extension base="ozgcloud:AntragsdatenItemType"> - <xs:attribute name="type" type="ozgcloud:DatatypeType" default="string"/> - </xs:extension> - </xs:complexContent> - </xs:complexType> - - <xs:complexType name="AntragsdatenSingleValueFieldType"> - <xs:complexContent> - <xs:extension base="ozgcloud:AntragsdatenFieldType"> - <xs:all> - <xs:element name="Value" type="xs:anyType"/> - </xs:all> - </xs:extension> - </xs:complexContent> - </xs:complexType> - - <xs:complexType name="AntragsdatenMultiValueFieldType"> - <xs:complexContent> - <xs:extension base="ozgcloud:AntragsdatenFieldType"> - <xs:sequence> - <xs:element name="Value" type="xs:anyType" maxOccurs="unbounded"/> - </xs:sequence> - </xs:extension> - </xs:complexContent> - </xs:complexType> - - <xs:complexType name="AntragsdatenGroupType"> - <xs:complexContent> - <xs:extension base="ozgcloud:AntragsdatenItemType"> - <xs:sequence> - <xs:element name="Item" type="ozgcloud:AntragsdatenItemType" minOccurs="0" maxOccurs="unbounded"/> - </xs:sequence> - </xs:extension> - </xs:complexContent> - </xs:complexType> - - <xs:simpleType name="DatatypeType"> - <xs:restriction base="xs:string"> - <xs:enumeration value="string"/> - <xs:enumeration value="date"/> - <xs:enumeration value="datetime"/> - <xs:enumeration value="integer"/> - <xs:enumeration value="float"/> - <xs:enumeration value="boolean"/> - </xs:restriction> - </xs:simpleType> -</xs:schema> \ No newline at end of file diff --git a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Baukasten.xsd b/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Baukasten.xsd deleted file mode 100644 index 97b358a114505f27f22593e524a5c21d5ba8136c..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Baukasten.xsd +++ /dev/null @@ -1,1818 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" - xmlns:xdomea="urn:xoev-de:xdomea:schema:3.0.0" - xmlns:xoev-code="http://xoev.de/schemata/code/1_0" - targetNamespace="urn:xoev-de:xdomea:schema:3.0.0" - version="3.0.0" - elementFormDefault="qualified" - attributeFormDefault="unqualified"> - <xs:annotation> - <xs:appinfo> - <standard> - <nameLang>xdomea - XÖV-Standard für den IT-gestützten Austausch und die IT-gestützte Aussonderung behördlichen Schriftgutes</nameLang> - <nameKurz>xdomea</nameKurz> - <nameTechnisch>xdomea</nameTechnisch> - <kennung>urn:xoev-de:xdomea:kosit:standard:xdomea</kennung> - <beschreibung>xdomea ist der vom IT-Planungsrat verabschiedete verbindliche Standard für den Austausch von Akten, Vorgängen und Dokumenten im Kontext der Übermittlung, der Abgabe sowie der Aussonderung von Schriftgutobjekten (www.it-planungsrat.de, Beschluss 2017/39). Weiterhin kann xdomea für den Austausch zwischen Fachverfahren und DMS/VBS sowie für die Zwischenarchivierung genutzt werden. - -Um diese Anwendungsszenarien bestmöglich zu unterstützen, ist xdomea gemäß des XÖV-Rahmenwerkes nach dem Baukastenprinzip aufgebaut und bietet einzelne Nachrichten(gruppen) für die jeweiligen Prozesse an. - -Der Standard xdomea wird von der gleichnamigen Arbeitsgruppe des IT-Planungsrates weiterentwickelt und gepflegt. Der Betrieb des Standards erfolgt durch die Koordinierungsstelle für IT-Standards (KoSIT). -</beschreibung> - </standard> - <versionStandard> - <version>3.0.0</version> - <beschreibung>Die Version 3.0.0 ist durch den IT-Planungsrat beschlossen. Details zum Beschluss sowie zu den Fristen der Umsetzung sind der Veröffentlichung im Bundesanzeiger unter www.bundesanzeiger.de zu entnehmen.</beschreibung> - <versionXOEVProfil>1.7.2</versionXOEVProfil> - <versionXOEVHandbuch>2.3.1</versionXOEVHandbuch> - <versionXGenerator>3.0.1</versionXGenerator> - <versionModellierungswerkzeug>19.0</versionModellierungswerkzeug> - <nameModellierungswerkzeug>MagicDraw</nameModellierungswerkzeug> - </versionStandard> - </xs:appinfo> - <xs:documentation>Der Baukasten beinhaltet alle spezifischen Komponenten, die entweder aus XÖV-Kernkomponenten abgeleitet sind oder für xdomea erstellt wurden.</xs:documentation> - </xs:annotation> - <xs:include schemaLocation="xdomea-Datentypen.xsd"/> - <xs:import schemaLocation="http://xoev.de/schemata/code/1_0/xoev-code.xsd" - namespace="http://xoev.de/schemata/code/1_0"/> - <xs:complexType name="AkteType"> - <xs:annotation> - <xs:appinfo> - <title>Akte</title> - </xs:appinfo> - <xs:documentation>Akte enthält die Metadatenfelder für den Austausch von Akten einschließlich der archivspezifischen Metadaten, anwendungsspezifischer Metadaten, Historien- und Protokollinformationen sowie Informationen zum internen Geschäftsgang. Die absendende Behörde kann festlegen, welche Informationen dem Empfänger mit der Übertragung zur Verfügung gestellt werden sollen. So kann auch der Anforderung nach einer ggf. erforderlichen Beschränkung der übertragenen Metadaten Rechnung getragen werden (z.B. auf Grund datenschutzrechtlicher oder sonstiger gesetzlicher Bestimmungen).</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Identifikation" type="xdomea:IdentifikationObjektType"> - <xs:annotation> - <xs:documentation>Über Identifikation werden zur systemübergreifend eindeutigen Identifizierung der Akte spezifische Merkmale übergeben.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="AllgemeineMetadaten" - minOccurs="0" - type="xdomea:AllgemeineMetadatenType"> - <xs:annotation> - <xs:documentation>Über AllgemeineMetadaten werden allgemeine Metadaten zu einer Akte angegeben.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="ArchivspezifischeMetadaten" - minOccurs="0" - type="xdomea:MetadatenAussonderungType"> - <xs:annotation> - <xs:documentation>Über ArchivspezifischeMetadaten werden die für die Archivierung und Aussonderung relevanten Metadaten zu einer Akte angegeben.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Standort" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Aufbewahrungsort der Akte.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Typ" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die weitere Spezifikation der Akte, um u. a. Recherche durchzuführen oder um zusätzliche Metadaten festzulegen. Beispiele sind Bauakte oder auch Personalakte.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Laufzeit" minOccurs="0" type="xdomea:ZeitraumType"> - <xs:annotation> - <xs:documentation>Die Laufzeit der Akte, d.h. Zeitpunkt des Beginns und des Endes.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="HistorienProtokollInformation" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:HistorienProtokollInformationType"> - <xs:annotation> - <xs:documentation>Über HistorienProtokollInformation werden die zur Historisierung und Protokollierung relevanten Metadaten zu einer Akte angegeben, in der die Veränderungen an den beschreibenden Attributen und dem Zustand der Akte erfasst werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="InternerGeschaeftsgang" - minOccurs="0" - type="xdomea:GeschaeftsgangType"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Der interne Geschäftsgang kann nach organisatorischer Absprache zwischen den austauschenden Systemen genutzt werden, ist aber nicht verpflichtender Bestandteil von xdomea.</implementationHint> - </xs:appinfo> - <xs:documentation>Über InternerGeschaeftsgang wird der Akte zum Nachweis des internen Geschäftsgangs eine spezifische Ausprägung eines Geschäftsgangs zugeordnet.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Akteninhalt" minOccurs="0"> - <xs:annotation> - <xs:documentation>Die Sachverhalte in der Akte sind inhaltlich mittels üblicher Akteninhalte wie z.B. Vorgänge abgegrenzt.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Dokument" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:DokumentType"> - <xs:annotation> - <xs:documentation>Ein Dokument, das hierarchisch in die Akte eingebunden bzw. der Akte untergeordnet ist.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Vorgang" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:VorgangType"> - <xs:annotation> - <xs:documentation>Ein Vorgang, der hierarchisch in die Akte eingebunden bzw. der Akte untergeordnet ist.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Teilakte" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:AkteType"> - <xs:annotation> - <xs:documentation>Über diese Eigenschaft wird eine Teilakte hierarchisch in eine Akte eingebunden bzw. einer Akte untergeordnet.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Verweis" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:VerweisType"> - <xs:annotation> - <xs:documentation>Über einen Verweis wird eine inhaltliche Querbeziehung der Akte zu einem anderen Schriftgutobjekt dargestellt.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Kontakt" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:KontaktType"> - <xs:annotation> - <xs:documentation>Eine Kontaktinformation zu einem Geschäftsprozessbeteiligten.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="ZdA" minOccurs="0" type="xs:boolean"> - <xs:annotation> - <xs:appinfo> - <implementationHint>ZdA (zu den Akten) steht für das Schließen eines Schriftgutobjekts (Teilvorgang, Vorgang, Teilakte oder Akte). Die hierfür in den Verwaltungen genutzten Bezeichnungen können anders lauten (z.B. „Schließen der Akte oder des Vorgangs“).</implementationHint> - </xs:appinfo> - <xs:documentation>ZdA kennzeichnet, ob die Akte zu den Akten verfügt wurde (Wert 1) oder nicht (Wert 0).</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="ZdADatum" minOccurs="0" type="xs:date"> - <xs:annotation> - <xs:appinfo> - <implementationHint>ZdA (zu den Akten) steht für das Schließen eines Schriftgutobjekts (Teilvorgang, Vorgang, Teilakte oder Akte). Die hierfür in den Verwaltungen genutzten Bezeichnungen können anders lauten (z.B. „Schließen der Akte oder des Vorgangs“).</implementationHint> - </xs:appinfo> - <xs:documentation>ZdADatum kennzeichnet, wann der Vorgang zu den Akten verfügt wurde.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="AnwendungsspezifischeErweiterung" - minOccurs="0" - type="xdomea:AnwendungsspezifischeErweiterungType"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Die Speicherung der nicht-auflösbaren Daten beim Empfang erfolgt in einer XML-Datei zum Schriftgutobjekt im empfangenden System. Die Umsetzung muss systemspezifisch gelöst werden - hierbei muss durch das System sichergestellt sein, dass die empfangenen Informationen nicht verloren gehen.</implementationHint> - </xs:appinfo> - <xs:documentation>AnwendungsspezifischeErweiterung darf nur dazu genutzt werden, weitere (z.B. fachspezifische) Metadaten zu spezifizieren, deren Übermittlung mit den bereits in xdomea spezifizierten Metadaten nicht möglich ist.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="AnwendungsspezifischeErweiterungXML" - minOccurs="0" - type="xdomea:AnwendungsspezifischeErweiterungXMLType"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Die Speicherung der nicht-auflösbaren Daten beim Empfang erfolgt in einer XML-Datei zum Schriftgutobjekt im empfangenden System. Die Umsetzung muss systemspezifisch gelöst werden - hierbei muss durch das System sichergestellt sein, dass die empfangenen Informationen nicht verloren gehen.</implementationHint> - </xs:appinfo> - <xs:documentation>AnwendungsspezifischeErweiterungXML darf nur dazu genutzt werden, weitere (z.B. fachspezifische) Metadaten zu spezifizieren, deren Übermittlung mit den bereits in xdomea spezifizierten Metadaten nicht möglich ist. Die AnwendungsspezifischeErweiterungXML bietet die Möglichkeit, mittels Einbindung externer XML-Schemata diese Metadaten zu spezifizieren. Es können beliebige XML-Schemata mit unterschiedlichen Namensräumen angegeben werden. Die XML-Schema-Validierung der weiterführenden Metadaten erfolgt innerhalb der xdomea-Nachricht selbst "lax".</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="AktenplanType"> - <xs:annotation> - <xs:appinfo> - <title>Aktenplan</title> - </xs:appinfo> - <xs:documentation>Der Aktenplan enthält ein aufgabenbezogenes mehrstufiges Ordnungssystem mit einer hierarchischen Gliederung für das Bilden und Kennzeichnen von Akten und Vorgängen sowie das Zuordnen von Dokumenten.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Bezeichnung" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Name des Aktenplans.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Typ" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Typ des Aktenplans, z.B. Teilaktenplan.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Version" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Version des Aktenplans.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Einheit" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:AktenplaneinheitAktenplanType"> - <xs:annotation> - <xs:documentation>Die Einheit eines Aktenplans, die Auskunft über die hierarchische Strukturierung eines Aktenplans gibt. Eine Aktenplanheit entspricht z.B. einer Hauptgruppe, Obergruppe, Gruppe, Untergruppe oder Betreffseinheit.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Gueltigkeit" minOccurs="0" type="xdomea:ZeitraumType"> - <xs:annotation> - <xs:documentation>Die Gültigkeit des Aktenplans mit Beginn und Ende.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Aktenplandatei" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:FormatType"> - <xs:annotation> - <xs:documentation>Die Datei zum Aktenplan als Primärdokument.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="AktenplaneinheitAktenplanType"> - <xs:annotation> - <xs:appinfo> - <title>AktenplaneinheitAktenplan</title> - </xs:appinfo> - <xs:documentation>Eine Aktenplaneinheit gibt Auskunft über die hierarchische Strukturierung eines Aktenplans. Eine Aktenplanheit entspricht z.B. einer Hauptgruppe, Obergruppe, Gruppe, Untergruppe oder Betreffseinheit.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:extension base="xdomea:AktenplaneinheitType"> - <xs:sequence> - <xs:element name="Aussonderungsart" type="xdomea:AussonderungsartType"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Die Aussonderungsart vererbt sich auf alle unter einer Hierarchiestufe angelegten Schriftgutobjekte.</implementationHint> - </xs:appinfo> - <xs:documentation>Die Aussonderungsart gibt für eine Akte oder einen Vorgang das Ergebnis der archivischen Bewertung an. Die Aussonderungsart wird vom Aktenplan (zweistufiges Aussonderungsverfahren) auf zugehörige Vorgänge und Dokumente vererbt.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Gueltigkeit" minOccurs="0" type="xdomea:ZeitraumType"> - <xs:annotation> - <xs:documentation>Die Gültigkeit einer Aktenplaneinheit in einem Aktenplan.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Stillgelegt" type="xs:boolean"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Für die Umsetzung in den Systemen wird empfohlen, sofern kein anderer Wert hinterlegt wurde, als Standardwert den Wert 0 für "nicht stillgelegt" anzugeben.</implementationHint> - </xs:appinfo> - <xs:documentation>Stillgelegt gibt an, ob eine Aktenplaneinheit inaktiv ist (Wert 1) oder nicht (Wert 0). Der Grund für eine Stilllegung kann eintreten, wenn z.B. auf einen bestimmten Zeitpunkt hin der alte Aktenplan "stillgelegt" und der neue Aktenplan in Kraft tritt - aktive Einheiten werden dann in den neuen Aktenplan übernommen, stillgelegte werden abgeschlossen und nicht übernommen.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Aufbewahrungsdauer" type="xdomea:AufbewahrungsdauerType"> - <xs:annotation> - <xs:documentation>Die Aufbewahrungsdauer legt fest, wie viele Jahre eine Akte oder ein Vorgang nach der Verfügung zur Akte (zdA-Verfügung) innerhalb der aktenführenden Stelle aufzubewahren ist oder ob die Aufbewahrung unbefristet erfolgen soll. Nach Ablauf der Aufbewahrungsfrist erfolgt die Aussonderung in Abhängigkeit von der Aussonderungsart.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Einheit" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:AktenplaneinheitAktenplanType"> - <xs:annotation> - <xs:documentation>Eine Aktenplaneinheit, die hierarchisch einer anderen Aktenplaneinheit untergeordnet ist.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="VerweisAktenplaneinheit" - minOccurs="0" - maxOccurs="unbounded" - type="xs:string"> - <xs:annotation> - <xs:documentation>Ein Verweis auf eine andere Aktenplaneinheit in einem aktuellen oder früheren Aktenplan.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="AnwendungsspezifischeErweiterung" - minOccurs="0" - type="xdomea:AnwendungsspezifischeErweiterungType"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Die Speicherung der nicht-auflösbaren Daten beim Empfang erfolgt in einer XML-Datei zum Schriftgutobjekt im empfangenden System. Die Umsetzung muss systemspezifisch gelöst werden - hierbei muss durch das System sichergestellt sein, dass die empfangenen Informationen nicht verloren gehen.</implementationHint> - </xs:appinfo> - <xs:documentation>AnwendungsspezifischeErweiterung darf nur dazu genutzt werden, weitere (z.B. fachspezifische) Metadaten zu spezifizieren, deren Übermittlung mit den bereits in xdomea spezifizierten Metadaten nicht möglich ist.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="AnwendungsspezifischeErweiterungXML" - minOccurs="0" - type="xdomea:AnwendungsspezifischeErweiterungXMLType"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Die Speicherung der nicht-auflösbaren Daten beim Empfang erfolgt in einer XML-Datei zum Schriftgutobjekt im empfangenden System. Die Umsetzung muss systemspezifisch gelöst werden - hierbei muss durch das System sichergestellt sein, dass die empfangenen Informationen nicht verloren gehen.</implementationHint> - </xs:appinfo> - <xs:documentation>AnwendungsspezifischeErweiterungXML darf nur dazu genutzt werden, weitere (z.B. fachspezifische) Metadaten zu spezifizieren, deren Übermittlung mit den bereits in xdomea spezifizierten Metadaten nicht möglich ist. Die AnwendungsspezifischeErweiterungXML bietet die Möglichkeit, mittels Einbindung externer XML-Schemata diese Metadaten zu spezifizieren. Es können beliebige XML-Schemata mit unterschiedlichen Namensräumen angegeben werden. Die XML-Schema-Validierung der weiterführenden Metadaten erfolgt innerhalb der xdomea-Nachricht selbst "lax".</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:extension> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="AktenplaneinheitType"> - <xs:annotation> - <xs:appinfo> - <title>Aktenplaneinheit</title> - </xs:appinfo> - <xs:documentation>Die Aktenplaneinheit repräsentiert in dem aufgabenbezogenem Ordnungssystem Aktenplan eine Aufgabe.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Kennzeichen" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Das Kennzeichen einer Aktenplaneinheit.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Inhaltsangabe" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die ausführliche Beschreibung der Aufgabe, die durch die Aktenplaneinheit repräsentiert wird.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="BetreffKurz" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die kurze Beschreibung der Aufgabe, die durch die Aktenplaneinheit repräsentiert wird.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="AllgemeineMetadatenType"> - <xs:annotation> - <xs:appinfo> - <title>AllgemeineMetadaten</title> - </xs:appinfo> - <xs:documentation>AllgemeineMetadaten enthält die Metadaten, die der allgemeinen Charakterisierung eines Schriftgutobjektes dienen.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Betreff" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Betreff des Schriftgutobjektes, z.B. für eine Akte der Aktentitel.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Kennzeichen" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Aus dem Aktenplan abgeleitete Kennung des Schriftgutobjektes zur Identifikation und Zuordnung zum Schriftgut in einer Behörde. Bei Akten ist das Kennzeichen das Aktenzeichen, es setzt sich zusammen aus dem zugehörigen Aktenplankennzeichen und einer eindeutigen Ordnungsnummer. Auf Vorgangsebene ist das Kennzeichen das Vorgangszeichen, das sich aus dem Aktenzeichen sowie einer zusätzlichen Nummer für den Vorgang zusammensetzt. Auf Dokumentebene wird als Kennzeichen das Geschäftszeichen verwendet. Dies besteht in der Regel aus dem Aktenzeichen resp. Vorgangszeichen, einer laufenden Nummer sowie der Organisationskurzbezeichnung der zuständigen Organisationseinheit.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Federfuehrung" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Organisationseinheit mit der Hauptverantwortung bzw. der Zuständigkeit für einen Geschäftsprozess.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Aktenfuehrung" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Organisationseinheit mit der Hauptverantwortung bzw. der Zuständigkeit für die Aktenführung.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Vertraulichkeitsstufe" - minOccurs="0" - type="xdomea:VertraulichkeitsstufeCodeType"> - <xs:annotation> - <xs:documentation>Die Vertraulichkeitsstufe beschreibt, welche Kriterien z.B. für die Weitergabe und Veröffentlichung eines Schriftgutobjekts beachtet werden müssen. Mögliche Werte sind "Geheim", "NfD", "Offen", "Streng geheim" oder "Vertraulich".</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Bemerkung" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Zusätzliches Feld zur Übermittlung weiterer Informationen in einem konkreten Geschäftsprozess.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Medium" minOccurs="0" type="xdomea:MediumCodeType"> - <xs:annotation> - <xs:documentation>Das Medium beschreibt, ob es sich um ein Papier- und/oder elektronisches Dokument handelt. Mögliche Werte sind "Papier", "Elektronisch" oder "Hybrid".</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Aktenplaneinheit" - minOccurs="0" - type="xdomea:AktenplaneinheitType"> - <xs:annotation> - <xs:documentation>Die Aktenplaneinheit, dem das Schriftgutobjekt zugeordnet ist.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="AllgemeinerNameType"> - <xs:annotation> - <xs:appinfo> - <title>AllgemeinerName</title> - </xs:appinfo> - <xs:documentation>AllgemeinerName leitet sich von der entsprechenden XÖV-Kernkomponente ab. Er dient der Darstellung von Vor- und Nachnamen und fasst deren gemeinsame Eigenschaften zusammen.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Name" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Name ist der eigentliche Familien- oder Vorname als Zeichenkette. Nachnamen, z.B. mit Adelstiteln bzw. ausländische Nachnamen werden als ein Name übermittelt und nicht in verschiedene Bestandteile aufgeteilt.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="AnlageDokumentType"> - <xs:annotation> - <xs:appinfo> - <title>AnlageDokument</title> - </xs:appinfo> - <xs:documentation>AnlageDokument ist eine Erweiterung eines Dokuments zu einer Anlage mit einer entsprechenden Anlagennummer. Über sie werden andere Dokumente, die einem Dokument als Anlage zugeordnet werden, als solche gekennzeichnet.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:extension base="xdomea:DokumentType"> - <xs:sequence> - <xs:element name="Nummer" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die fortlaufende Nummer eines Anlagendokuments zu einem Dokument.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:extension> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="AnschriftType"> - <xs:annotation> - <xs:appinfo> - <title>Anschrift</title> - </xs:appinfo> - <xs:documentation>Die Anschrift leitet sich von der entsprechenden XÖV-Kernkomponente ab. Sie beschreibt einen Ort mit den klassischen Ordnungsbegriffen wie Orts- und Straßennamen sowie ergänzenden Informationen wie z.B. Postfach. Eine Anschrift kann genutzt werden, um Orte zu benennen, an denen sich Personen aufhalten, an denen Objekte zu finden sind, oder an denen Ereignisse stattfinden. Darüber hinaus kann sie genutzt werden, um Post oder Waren zuzustellen. Daher enthält sie auch die notwendigen Attribute, um Postfächer zu adressieren.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Staat" minOccurs="0" type="xdomea:StaatType"> - <xs:annotation> - <xs:documentation>Der Staat, dem die Anschrift postalisch zugeordnet wird.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Strasse" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Straße enthält den Namen bzw. die Bezeichnung einer Straße. Eine Straße ist ein planmäßig angelegter, i. allg. befestigter Verkehrsweg innerhalb eines Ortes. Es soll möglichst der amtliche Straßenname aus einem offiziellen Straßenverzeichnis genutzt werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Hausnummer" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Eine Hausnummer dient der genauen Lokalisierung eines Grundstücks, Gebäudes oder Gebäudeteils (Eingang) in einer Straße. Hausnummern können entsprechend der üblichen Praxis in vielen Gemeinden mit ergänzenden Angaben zur weiteren Unterteilung versehen werden, etwa "12a" oder "17 1/3". Da manche Gebäude oder Organisationen sich als Einheit über mehrere Hausnummern erstrecken, können auch Hausnummernbereiche angegeben werden, etwa "12a - 12e" oder "1 - 3".</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Postfach" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Ein Postfach (oft Postfachnummer) ist ein Schlüssel zur Identifikation eines Postfaches in einer Postfiliale. Eine Beschränkung auf numerische Postfachbezeichnungen wurde bewusst nicht vorgenommen.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Postleitzahl" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Eine Postleitzahl ist eine Angabe, um postalische Zustellgebiete unabhängig von Gebietskörperschaften (Gemeinde, Kreis, ...) zu bezeichnen. In Deutschland sind durch Postleitzahlen bezeichnete Bereiche und verwaltungspolitische Grenzen in der Regel aufeinander abgestimmt. Größere Gemeinden und Städte sind häufig in mehrere Postleitzahlengebiete aufgeteilt. Postleitzahlen werden durch die Deutsche Post AG verwaltet. Eine Beschränkung auf deutsche Postleitzahlen (5-stellig) wurde bewusst nicht vorgenommen.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Ort" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Ort enthält den Namen eines Ortes (Gemeinde, Ortschaft oder Stadt). Als Ortsname sollte der amtliche Gemeindename genutzt werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Zusatz" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Ein Anschriftenzusatz beinhaltet ggf. erforderliche weitere Präzisierungen zu einer Anschrift.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Typ" minOccurs="0" type="xdomea:AnschriftstypCodeType"> - <xs:annotation> - <xs:documentation>Im Typ wird beschrieben, um welche Art der Anschrift es sich handelt. Mögliche Werte sind "Aktuelle Anschrift", "Hauptsitz" oder "Zweitsitz".</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="AnwendungsspezifischeErweiterungType"> - <xs:annotation> - <xs:appinfo> - <title>AnwendungsspezifischeErweiterung</title> - </xs:appinfo> - <xs:documentation>AnwendungsspezifischeErweiterung darf nur dazu genutzt werden, weitere (z.B. fachspezifische) Metadaten zu spezifizieren, deren Übermittlung mit den bereits in xdomea spezifizierten Metadaten nicht möglich ist.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Kennung" type="xs:string"> - <xs:annotation> - <xs:documentation>Das Identifikationskennzeichen der anwendungsspezifischen Erweiterung.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Name" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Name der anwendungsspezifischen Erweiterung.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Beschreibung" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die textuelle Erläuterung zu einer anwendungsspezifischen Erweiterung.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Versionsnummer" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Versionsnummer der anwendungsspezifischen Erweiterung.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Versionsdatum" minOccurs="0" type="xs:date"> - <xs:annotation> - <xs:documentation>Das Datum, an dem die Version der anwendungsspezifischen Erweiterung erstellt wurde.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Feldgruppe" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:FeldgruppeType"> - <xs:annotation> - <xs:documentation>Eine Feldgruppe, die der anwendungsspezifischen Erweiterung zugeordnet ist.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Feld" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:FeldType"> - <xs:annotation> - <xs:documentation>Ein Feld, das der anwendungsspezifischen Erweiterung zugeordnet ist.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="AnwendungsspezifischeErweiterungXMLType"> - <xs:annotation> - <xs:appinfo> - <title>AnwendungsspezifischeErweiterungXML</title> - </xs:appinfo> - <xs:documentation>AnwendungsspezifischeErweiterungXML darf nur dazu genutzt werden, weitere (z.B. fachspezifische) Metadaten zu spezifizieren, deren Übermittlung mit den bereits in xdomea spezifizierten Metadaten nicht möglich ist. Die AnwendungsspezifischeErweiterungXML bietet über ein xs:any-Element die Möglichkeit, mittels Einbindung externer XML-Schemata diese Metadaten zu spezifizieren. Es können beliebige XML-Schemata mit unterschiedlichen Namensräumen angegeben werden. Die XML-Schema-Validierung der weiterführenden Metadaten erfolgt innerhalb der xdomea-Nachricht selbst "lax".</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:any minOccurs="0" - maxOccurs="unbounded" - namespace="##any" - processContents="lax"/> - </xs:sequence> - </xs:complexType> - <xs:complexType name="AufbewahrungsdauerType"> - <xs:annotation> - <xs:appinfo> - <title>Aufbewahrungsdauer</title> - </xs:appinfo> - <xs:documentation>Die Aufbewahrungsdauer legt fest, wie viele Jahre eine Akte oder ein Vorgang nach der Verfügung zur Akte (zdA-Verfügung) innerhalb der aktenführenden Stelle aufzubewahren ist oder ob die Aufbewahrung unbefristet erfolgen soll.</xs:documentation> - </xs:annotation> - <xs:choice> - <xs:element name="AnzahlJahre" type="xs:unsignedShort"> - <xs:annotation> - <xs:documentation>Anzahl der Jahre, die eine Akte oder ein Vorgang nach der Verfügung zur Akte (zdA-Verfügung) innerhalb der aktenführenden Stelle aufzubewahren ist.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Unbefristet" fixed="1" type="xs:boolean"> - <xs:annotation> - <xs:documentation>Eine Akte oder ein Vorgang ist nach der Verfügung zur Akte (zdA-Verfügung) innerhalb der aktenführenden Stelle unbefristet aufzubewahren.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:choice> - </xs:complexType> - <xs:complexType name="AussonderungsartType"> - <xs:annotation> - <xs:appinfo> - <title>Aussonderungsart</title> - </xs:appinfo> - <xs:documentation>Die Aussonderungsart gibt das Ergebnis der archivischen Bewertung an. Damit eine automatische Selektion der auszusondernden Vorgänge erfolgen kann, muss in Vorgangsbearbeitungssystemen für Akten und Vorgänge ein Metadatum "Aussonderungsart" oder "AussonderungsartKonfigurierbar" vorgegeben werden. Die Aussonderungsart liegt beim zweistufigen Aussonderungsverfahren bereits im DMS/VBS vor (durch Bewertung von Akten und Vorgängen im DMS oder durch Hinterlegung eines Bewertungskatalogs am Aktenplan) oder sie wird im vierstufigen Aussonderungsverfahren durch die Übernahme des Bewertungsverzeichnisses ins DMS/VBS übernommen.</xs:documentation> - </xs:annotation> - <xs:choice> - <xs:element name="Aussonderungsart" type="xdomea:AussonderungsartCodeType"> - <xs:annotation> - <xs:documentation>Die Aussonderungsart als Wert aus einer vorgegebenen Codeliste.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="AussonderungsartKonfigurierbar" type="xs:string"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Die möglichen Werte für AussonderungsartKonfigurierbar müssen zwischen den beteiligten Kommunikationspartnern (abgebende Stelle und Archiv) vereinbart werden.</implementationHint> - </xs:appinfo> - <xs:documentation>Die Aussonderungsart als frei konfigurierbarer Wert.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:choice> - </xs:complexType> - <xs:complexType name="BearbeitungType"> - <xs:annotation> - <xs:appinfo> - <title>Bearbeitung</title> - </xs:appinfo> - <xs:documentation>Die Erledigung eines Beteiligungsschrittes in einem Geschäftsgang.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Bearbeiter" type="xdomea:KontaktType"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Wird ein Schritt durch den Bearbeiter eines vorhergehenden Schrittes als "übersprungen" markiert, so wird derjenige in dem übersprungenen Schritt auch als Bearbeiter geführt. An dieser Stelle wird für den Bearbeiter der Datentyp "KontaktType" verwendet, da damit der Geschäftsgang (auch organisationsübergreifend) gesteuert werden kann.</implementationHint> - </xs:appinfo> - <xs:documentation>Die spezifische Ausprägung eines Kontaktes, der die Informationen zum Bearbeiter des Beteiligungsschrittes enthält.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Datum" type="xs:date"> - <xs:annotation> - <xs:documentation>Das Datum des Bearbeitungsabschlusses.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Uhrzeit" minOccurs="0" type="xs:time"> - <xs:annotation> - <xs:documentation>Der Zeitpunkt des Bearbeitungsabschlusses.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Vermerk" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Eine Bemerkung auf einem Schriftgutobjekt, die den Geschäftsgang und die Bearbeitung steuert. Sie dient dem Nachvollziehen der Erledigung eines Geschäftsvorfalls. Im konkreten Fall von xdomea ist hiermit die Bestätigung der Erledigung eines Beteiligungsschrittes im externen und internen Geschäftsgang gemeint.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Notiz" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die ergänzende Anmerkung, die der Bearbeiter zum Beteiligungsschritt erfasst.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Anlage" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:DokumentType"> - <xs:annotation> - <xs:documentation>Ein Dokument, das der Bearbeiter des Beteiligungsschrittes dem Beteiligungsschritt z.B. als Stellungnahme beifügt.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="BehoerdenkennungType"> - <xs:annotation> - <xs:appinfo> - <title>Behoerdenkennung</title> - </xs:appinfo> - <xs:documentation>Die Behördenkennung leitet sich von der entsprechenden XÖV-Kernkomponente ab. Sie fasst die Eigenschaften zusammen, über die eine Behörde identifiziert werden kann. Die Behördenkennung ist prioritär zur Übermittlung der im DVDV verzeichneten Behördenschlüssel vorgesehen, kann aber auch für andere Behördenkennungen, bspw. die BKZ der Justizverwaltung eingesetzt werden. Eine Behördenkennung im DVDV besteht aus einem Präfix und der eigentlichen Kennung. Die Codelisten für die Präfixe sowie die Kennungen pro Präfix werden durch die koordinierende Stelle für das DVDV verwaltet. Ein Beispiel für die weitere Nutzung: Bei einer Identifikation von Behörden auf kommunaler Ebene anhand des amtlichen Gemeindeschlüssels (AGS) der Gemeinde, für die die Behörde zuständig ist, lautet der Präfix ags:, die Kennung ist dann der AGS der jeweiligen Gemeinde.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Behoerdenschluessel" minOccurs="0" type="xoev-code:Code"> - <xs:annotation> - <xs:documentation>Schlüssel zur eindeutigen Identifikation einer Behörde. Die Kennung kennzeichnet eine Behörde ggf. innerhalb der durch den Präfix bezeichneten Klasse (z.B. DVDV) eindeutig. Im Zusammenhang mit dem DVDV wird die Kennung durch die koordinierende Stelle für das DVDV verwaltet. Die tatsächlich zu nutzende Codeliste kann an dieser Stelle nicht angegeben werden, da es voraussichtlich pro Präfix jeweils eine Codeliste der Kennungen der Behörden mit diesem Präfix geben wird. (Zum Beispiel die Codeliste der Amtlichen Gemeindeschlüssel für die Behörden auf kommunaler Ebene, die anhand dieses Ordnungsmerkmals im DVDV verzeichnet sind und mit dem Präfix ags: adressiert werden. Eine andere zulässige Liste wäre die Codeliste der Kennungen aller Bundesbehörden, die jeweils mit dem Präfix dbs: zu versehen sind. Nach jetzigem Kenntnisstand kann nicht ausgeschlossen werden, dass Inhalte der Codelisten mit Kennungen für Behörden unterschiedlichen Typs immer disjunkt sind.)</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Praefix" minOccurs="0" type="xoev-code:Code"> - <xs:annotation> - <xs:documentation>Der Präfix bezeichnet eine Klasse von Behördenkennungen. Beispiel: So werden u.a. alle Behördenkennungen der Behörden, die anhand des amtlichen Gemeindeschlüssels (AGS) identifiziert werden können, den Präfix ags: erhalten. Die Liste der Präfixe für Behördenkennungen werden im Zusammenhang mit dem DVDV durch das Bundesverwaltungsamt als koordinierende Stelle für das DVDV verwaltet.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="BeteiligungsschrittType"> - <xs:annotation> - <xs:appinfo> - <title>Beteiligungsschritt</title> - </xs:appinfo> - <xs:documentation>Das Verwaltungshandeln an einem Schriftgutobjekt wird in dem zugehörigen Geschäftsgang protokolliert, der sich aus einzelnen Beteiligungsschritten zusammensetzt. Jeder Beteiligungsschritt hat einen Verfügungsteil, in dem der Bearbeitungsschritt festgelegt, und einen Bearbeitungsteil, in dem der Beteiligungsschritt bearbeitet wird. Die Beteiligungsschritte im Geschäftsgang werden fortlaufend nummeriert.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Nummer" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Nummer des Beteiligungsschrittes innerhalb der fortlaufenden Nummerierung im Geschäftsgang. Die Nummerierung ist innerhalb eines xdomea-Geschäftsgangsobjekts eindeutig. Werden in den xdomea-Geschäftsgang neue Bearbeitungsschritte eingefügt, werden dementsprechend die Nummern der nachfolgenden Beteiligungsschritte verändert. Beteiligungsschritte, die abgeschlossen sind, sind unveränderlich.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Status" type="xdomea:BeteiligungsstatusCodeType"> - <xs:annotation> - <xs:documentation>Der Status beschreibt den Fortschritt eines Beteiligungsschrittes.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Verfuegung" type="xdomea:VerfuegungType"> - <xs:annotation> - <xs:documentation>Steuerungsinformation und Arbeitsanweisung bei der Bearbeitung eines Geschäftsvorfalls. Im konkreten Fall von xdomea ist hier die Arbeitsanweisung für den Bearbeiter eines Beteiligungsschrittes im externen und internen Geschäftsgang gemeint.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Bearbeitung" minOccurs="0" type="xdomea:BearbeitungType"> - <xs:annotation> - <xs:documentation>In der Bearbeitung sind die Informationen zum Bearbeitungsteil des Beteiligungsschrittes zusammengefasst.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="DokumentType"> - <xs:annotation> - <xs:appinfo> - <title>Dokument</title> - </xs:appinfo> - <xs:documentation>Dokument enthält die Metadatenfelder für den Austausch von Dokumenten einschließlich der archivspezifischen Metadaten, anwendungsspezifischer Metadaten, Historien- und Protokollinformationen sowie Informationen zum internen Geschäftsgang. In der Objekthierarchie des Organisationskonzepts elektronische Verwaltungsarbeit ist das Dokument die kleinste logische Einheit des Schriftguts. Es handelt sich um ein einzelnes Schriftstück, papiergebunden oder elektronisch erstellt und verwaltet. Zum Dokument gehören zudem alle ergänzenden Angaben (z.B. Metadaten), die zum Verständnis der Primärdokumente notwendig sind. Der Begriff Dokument entspricht nicht nur den ehemaligen Papierdokumenten, sondern kann daneben jede andere digitale Form von Informationen beinhalten. Es kann aus einem (zum Beispiel ein Bild oder ein Datensatz) oder mehreren Einzelobjekten (zum Beispiel mehrere Bilder, einer Datei mit integrierten Bildern, Text und Tabellen, gemischte Inhalte aus mehreren Quellen) bestehen.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Identifikation" type="xdomea:IdentifikationObjektType"> - <xs:annotation> - <xs:documentation>Über Identifikation werden zur systemübergreifend eindeutigen Identifizierung des Dokuments spezifische Merkmale übergeben.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="AllgemeineMetadaten" - minOccurs="0" - type="xdomea:AllgemeineMetadatenType"> - <xs:annotation> - <xs:documentation>Über AllgemeineMetadaten werden allgemeine Metadaten zu einem Dokument angegeben.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="FremdesGeschaeftszeichen" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Das Geschäftszeichen des Dokuments im absendenden System, das im Zuge eines Nachrichtentransfers übermittelt wird.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Posteingangsdatum" minOccurs="0" type="xs:date"> - <xs:annotation> - <xs:documentation>Das Posteingangsdatum eines Eingangsdokumentes. Es ist relevant beim Austausch von Dokumenten im Vorgangs- oder Aktenzusammenhang.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Postausgangsdatum" minOccurs="0" type="xs:date"> - <xs:annotation> - <xs:documentation>Das Postausgangsdatum eines Ausgangsdokumentes. Es ist relevant beim Austausch von Dokumenten im Vorgangs- oder Aktenzusammenhang.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="DatumDesSchreibens" minOccurs="0" type="xs:date"> - <xs:annotation> - <xs:documentation>Das Datum des Schreibens, z.B. das Datum eines Briefes. Es handelt sich nicht um das Erstellungs- oder Veränderungsdatum des Primärdokuments.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Bezug" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Der konkrete Bezug eines Dokuments, z.B. "Ihr Schreiben vom ..."</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Hier" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>"Hier" wird zur Konkretisierung des Betreffs verwendet. Auch als Unterbetreff bekannt.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Bearbeiter" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:appinfo> - <implementationHint>An dieser Stelle wird für den Bearbeiter der Datentyp "String" verwendet, da es sich hierbei lediglich um den Namen des Bearbeiters handelt und keine weiteren Steuerungsinformationen damit verbunden sind.</implementationHint> - </xs:appinfo> - <xs:documentation>Die für die Bearbeitung zuständige Person.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Typ" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Dokumenttyp dient der weiteren Spezifikation des Dokumentes. Der Typ ist relevant beim Austausch von Dokumenten im Vorgangs- oder Aktenzusammenhang. Zulässige Werte sind z.B. Erlass, Vermerk, Bericht, Bescheid.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="HistorienProtokollInformation" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:HistorienProtokollInformationType"> - <xs:annotation> - <xs:documentation>Über HistorienProtokollInformation werden die zur Historisierung und Protokollierung relevanten Metadaten zu einem Dokument angegeben, in der die Veränderungen an den beschreibenden Attributen und dem Zustand des Dokumentes erfasst werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="InternerGeschaeftsgang" - minOccurs="0" - type="xdomea:GeschaeftsgangType"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Der interne Geschäftsgang kann nach organisatorischer Absprache zwischen den austauschenden Systemen genutzt werden, ist aber nicht verpflichtender Bestandteil von xdomea.</implementationHint> - </xs:appinfo> - <xs:documentation>Die spezifische Ausprägung eines Geschäftsgangs, über die der interne Geschäftsgang am Dokument nachgewiesen wird.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Version" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:VersionType"> - <xs:annotation> - <xs:documentation>Über eine Version wird ein bestimmter Bearbeitungszustand zu einem Dokument im Rahmen der Versionierung des Dokumentes abgebildet.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Verweis" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:VerweisType"> - <xs:annotation> - <xs:documentation>Über einen Verweis wird eine inhaltliche Querbeziehung des Dokuments zu einem anderen Schriftgutobjekt dargestellt.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Anlage" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:AnlageDokumentType"> - <xs:annotation> - <xs:documentation>Ein dem Dokument zugeordnetes Anlagendokument.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Absender" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:KontaktType"> - <xs:annotation> - <xs:documentation>Die spezifische Ausprägung eines Kontakts, der die Informationen zum Absender des Dokumentes enthält.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Empfaenger" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:KontaktType"> - <xs:annotation> - <xs:documentation>Die spezifische Ausprägung eines Kontakts, der die Informationen zum Empfänger des Dokumentes enthält.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="WeitererKontakt" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:KontaktType"> - <xs:annotation> - <xs:documentation>Die spezifische Ausprägung eines Kontakts, der die Informationen zu einem weiteren Beteiligten enthält, der nicht Empfänger oder Absender des Dokuments ist.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="AnwendungsspezifischeErweiterung" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:AnwendungsspezifischeErweiterungType"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Die Speicherung der nicht-auflösbaren Daten beim Empfang erfolgt in einer XML-Datei zum Schriftgutobjekt im empfangenden System. Die Umsetzung muss systemspezifisch gelöst werden - hierbei muss durch das System sichergestellt sein, dass die empfangenen Informationen nicht verloren gehen.</implementationHint> - </xs:appinfo> - <xs:documentation>AnwendungsspezifischeErweiterung darf nur dazu genutzt werden, weitere (z.B. fachspezifische) Metadaten zu spezifizieren, deren Übermittlung mit den bereits in xdomea spezifizierten Metadaten nicht möglich ist.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="AnwendungsspezifischeErweiterungXML" - minOccurs="0" - type="xdomea:AnwendungsspezifischeErweiterungXMLType"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Die Speicherung der nicht-auflösbaren Daten beim Empfang erfolgt in einer XML-Datei zum Schriftgutobjekt im empfangenden System. Die Umsetzung muss systemspezifisch gelöst werden - hierbei muss durch das System sichergestellt sein, dass die empfangenen Informationen nicht verloren gehen.</implementationHint> - </xs:appinfo> - <xs:documentation>AnwendungsspezifischeErweiterungXML darf nur dazu genutzt werden, weitere (z.B. fachspezifische) Metadaten zu spezifizieren, deren Übermittlung mit den bereits in xdomea spezifizierten Metadaten nicht möglich ist. Die AnwendungsspezifischeErweiterungXML bietet die Möglichkeit, mittels Einbindung externer XML-Schemata diese Metadaten zu spezifizieren. Es können beliebige XML-Schemata mit unterschiedlichen Namensräumen angegeben werden. Die XML-Schema-Validierung der weiterführenden Metadaten erfolgt innerhalb der xdomea-Nachricht selbst "lax".</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="FeldType"> - <xs:annotation> - <xs:appinfo> - <title>Feld</title> - </xs:appinfo> - <xs:documentation>Ein Feld ist ein anwendungsspezifisches Metadatum, das bei dem Austausch eines Schriftgutobjektes übergeben wird. Die Konfiguration eines Feldes in den austauschenden Systemen muss zwischen den Kommunikationspartnern abgesprochen und in den Systemen umgesetzt sein.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Name" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Name des Feldes.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Beschreibung" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Hinweise und Erläuterungen zu einem Feld.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Datentyp" minOccurs="0" type="xdomea:DatentypCodeType"> - <xs:annotation> - <xs:documentation>Der Datentyp des Feldwertes. Gültige Angaben sind die W3C-Datentypen.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Wert" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Wert des Feldes.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="FeldgruppeType"> - <xs:annotation> - <xs:appinfo> - <title>Feldgruppe</title> - </xs:appinfo> - <xs:documentation>Eine Feldgruppe gruppiert mehrere Felder als anwendungsspezifische Metadaten beim Austausch eines Schriftgutobjektes.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Name" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Name der Feldgruppe.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Beschreibung" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Hinweise und Erläuterungen zu einer Feldgruppe.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Unterfeldgruppe" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:FeldgruppeType"> - <xs:annotation> - <xs:documentation>Über Unterfeldgruppe erfolgt die hierarchische Unterteilung einer Feldgruppe in weitere Feldgruppen.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Feld" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:FeldType"> - <xs:annotation> - <xs:documentation>Über Feld erfolgt die Unterteilung einer Feldgruppe in konkrete Felder.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="FormatType"> - <xs:annotation> - <xs:appinfo> - <title>Format</title> - </xs:appinfo> - <xs:documentation>Ein Format gibt die Syntax und Semantik einer Datei (z.B. Primärdokument, Aktenplandatei) an.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Name" type="xdomea:DateiformatCodeType"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Für zusätzliche Formatnamen enthält die Codeliste den Wert "Sonstiges" - ist dieser Wert benannt, so muss unter SonstigerName der Name des Formats angegeben werden.</implementationHint> - </xs:appinfo> - <xs:documentation>Der Name des Formats. Gültige Werte sind z.B. doc, pdf, jpg.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SonstigerName" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Die Voraussetzung für die Nutzung von SonstigerName ist die Angabe von "Sonstiges" als Namenswert.</implementationHint> - </xs:appinfo> - <xs:documentation>Der sonstige Name des Formats.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Version" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Version des Formats, z.B. für pdf 1.4 wäre hier "1.4" anzugeben.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Primaerdokument" type="xdomea:PrimaerdokumentType"> - <xs:annotation> - <xs:documentation>Über Primaerdokument werden Dateiangaben zum tatsächlich beschriebenen Primärdokument eines Formats angegeben.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="GeburtType"> - <xs:annotation> - <xs:appinfo> - <title>Geburt</title> - </xs:appinfo> - <xs:documentation>Geburt fasst geburtsbezogene Informationen einer natürlichen Person zusammen.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Datum" type="xs:date"> - <xs:annotation> - <xs:documentation>Das Datum der Geburt.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="GeschaeftsgangType"> - <xs:annotation> - <xs:appinfo> - <title>Geschaeftsgang</title> - </xs:appinfo> - <xs:documentation>In einem Geschäftsgang wird das vorgenommene Verwaltungshandeln an Schriftgutobjekten festgehalten.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Identifikation" type="xdomea:IdentifikationObjektType"> - <xs:annotation> - <xs:documentation>Die Identifikation zur systemübergreifend eindeutigen Identifizierung des Geschäftsgangs.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Beteiligungsschritt" - maxOccurs="unbounded" - type="xdomea:BeteiligungsschrittType"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Es müssen immer alle Beteiligungsschritte eines Geschäftsgangs geliefert werden - unabhängig davon, welchen Status sie besitzen.</implementationHint> - </xs:appinfo> - <xs:documentation>Ein dem Geschäftsgang zugeordneter Beteiligungsschritt, der im Zuge des Geschäftsgangs durchgeführt wird. Die Beteiligungsschritte sind fortlaufend nummeriert.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="HistorienProtokollInformationType"> - <xs:annotation> - <xs:appinfo> - <title>HistorienProtokollInformation</title> - </xs:appinfo> - <xs:documentation>Die Historien- und Protokollinformationen entstehen durch die Bearbeitung von Schriftgutobjekten. Sie protokollieren die Veränderungen an den Metadaten und dem Zustand eines Schriftgutobjektes, die für den Nachweis des Verwaltungshandelns relevant sind - dazu gehören zum Beispiel die Anlage von Vorgängen und Akten, deren Umprotokollierung oder die zdA-Verfügung. Bei der Historisierung werden der alte und der neue Zustand nach der Änderung mit der Angabe des Zeitpunktes und der Uhrzeit der Änderung und der Person, die die Änderung vorgenommen hat, gespeichert.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="MetadatumName" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Das Metadatum, das sich geändert hat.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="MetadatumAlterWert" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Wert des Metadatums vor der Änderung.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="MetadatumNeuerWert" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Wert des Metadatums als Ergebnis der Änderung.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Akteur" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Person, die die Änderung vorgenommen hat. Wird die Änderung automatisch durch das System und nicht manuell durch eine Person vorgenommen, so ist das entsprechende System anzugeben.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="DatumUhrzeit" type="xs:dateTime"> - <xs:annotation> - <xs:documentation>Das Datum und die Uhrzeit der erfassten Änderung.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Bemerkung" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Hinweise und Erläuterungen zu der Änderung eines Metadatums.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Aktion" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Aktion, die die konkrete Änderung des Metadatums näher beschreibt, z.B. gelöscht, neu.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="IdentifikationObjektType"> - <xs:annotation> - <xs:appinfo> - <title>IdentifikationObjekt</title> - </xs:appinfo> - <xs:documentation>Die Zusammenfassung von Merkmalen zur eindeutigen Identifizierung eines Schriftgutobjektes (Dokument, Vorgang, Akte) bzw. von Geschäftsgängen und zur Nummerierung im übergeordneten Schriftgutobjekt.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="ID" type="xdomea:stringUUIDType"> - <xs:annotation> - <xs:documentation>Jedes Schriftgutobjekt (Dokument, Vorgang, Akte) und jeder Geschäftsgang erhält beim Nachrichtenaustausch eine UUID, die sowohl im sendenden als auch empfangenden System als externe ID gespeichert wird.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="NummerImUebergeordnetenContainer" - minOccurs="0" - type="xs:unsignedInt"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Die Nummer dient nicht zur Identifizierung von Schriftgutobjekten - hierzu sollte die ID verwendet werden. Es darf keine doppelte Nummernvergabe erfolgen, aber Lücken z.B. durch gelöschte oder verschobene Schriftgutobjekte sind möglich. Innerhalb eines Schriftgutobjekts ist keine Mischform zulässig (d.h. einige Schriftgutobjekte mit Nummer und andere ohne).</implementationHint> - </xs:appinfo> - <xs:documentation>Die laufende Nummer des Schriftgutobjekts im übergeordneten Objekt (z.B. die Heftungsnummer eines Dokuments in einem Vorgang, die Nummer eines Bandes in einer Akte).</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="KommunikationType"> - <xs:annotation> - <xs:appinfo> - <title>Kommunikation</title> - </xs:appinfo> - <xs:documentation>Die Kommunikation leitet sich von der entsprechenden XÖV-Kernkomponente ab. Sie fasst Angaben zur Erreichbarkeit über elektronische Kommunikationskanäle (z.B. Telefon, Fax, E-Mail) zusammen.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="IstDienstlich" minOccurs="0" type="xs:boolean"> - <xs:annotation> - <xs:documentation>Mit IstDienstlich kann angegeben werden, ob es sich um dienstliche oder private Kommunikationsdaten handelt. Handelt es sich um dienstliche Kommunikationsdaten, so ist der Wert 1 anzugeben. Handelt es sich um private Kommunikationsdaten, so ist der Wert 0 anzugeben.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Kanal" minOccurs="0" type="xdomea:KommunikationsartCodeType"> - <xs:annotation> - <xs:documentation>Der Kanal gibt an, über welchen Kommunikationskanal eine Erreichbarkeit besteht (z.B. Telefon, Fax, E-Mail).</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Kennung" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Kennung beinhaltet die konkrete Angabe zur Erreichbarkeit über einen Kommunikationskanal, d.h. die Telefonnummer, Faxnummer, E-Mail-Adresse oder dergleichen. Die Kennung soll strukturiert erfasst werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Zusatz" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Im Zusatz können zusätzliche freie Angaben zur Erreichbarkeit über einen Kommunikationskanal erfasst werden, z.B. "erreichbar tagsüber zwischen 9 und 16 Uhr".</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="IstInstitution" minOccurs="0" type="xs:boolean"> - <xs:annotation> - <xs:documentation>Mit IstInstitution kann angegeben werden, ob es sich um Kommunikationsdaten einer Institution handelt oder nicht. Handelt es sich um eine Institution, so ist der Wert 1 anzugeben. Handelt es sich um keine Institution, so ist der Wert 0 anzugeben.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="KontaktType"> - <xs:annotation> - <xs:appinfo> - <title>Kontakt</title> - <implementationHint>Je nach Anwendungsfall ist mindestens eines der enthaltenen Elemente mit Daten zu befüllen.</implementationHint> - </xs:appinfo> - <xs:documentation>Ein Kontakt fasst wesentliche Merkmale zu einem Kommunikationspartner zusammen, z.B. Anschriften, Kommunikationsmöglichkeiten.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Behoerdenkennung" - minOccurs="0" - type="xdomea:BehoerdenkennungType"> - <xs:annotation> - <xs:documentation>Die Kennung der Behörde zur Adressierung, z.B. im DVDV.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Institution" minOccurs="0" type="xdomea:NameOrganisationType"> - <xs:annotation> - <xs:documentation>Die Institution des Kontakts. Eine Institution ist z.B. ein Unternehmen oder eine Behörde.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Organisationseinheit" - minOccurs="0" - type="xdomea:OrganisationseinheitType"> - <xs:annotation> - <xs:documentation>Die Organisationseinheit des Kontakts.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Name" minOccurs="0" type="xdomea:NameNatuerlichePersonType"> - <xs:annotation> - <xs:documentation>Der Name des Ansprechpartners zum Kontakt.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Taetigkeit" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Tätigkeit gibt an, welche Position der im Kontakt angegebene Ansprechpartner in der jeweiligen Institution einnimmt. Es können hier die Amtsbezeichnung (z.B. Regierungsrat), Dienstbezeichnung (z.B. Referendar), der Dienstgrad (z.B. General) oder die Berufsbezeichnung (z.B. IT-Berater) angegeben werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Zustaendigkeit" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Zuständigkeit gibt die Bereiche an, für die der im Kontakt angegebene Ansprechpartner oder die Institution verantwortlich ist, z.B. "Leiter der Abteilung O", "Projektleiter des XYZ-Projekts".</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Anschrift" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:AnschriftType"> - <xs:annotation> - <xs:documentation>Eine strukturierte Anschrift des Kontakts.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Kommunikation" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:KommunikationType"> - <xs:annotation> - <xs:documentation>Eine Kommunikationsmöglichkeit des Kontakts, die die Angaben zur Erreichbarkeit über elektronische Kommunikationskanäle enthält.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Rolle" minOccurs="0" type="xoev-code:Code"> - <xs:annotation> - <xs:documentation>Die Rolle des Kontakts im konkreten Geschäftsprozess, z.B Antragsteller, Zustellungsbevollmächtigter, Gutachter.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="UnstrukturierteAnschrift" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:UnstrukturierteAnschriftType"> - <xs:annotation> - <xs:documentation>Eine unstrukturierte Anschrift des Kontakts.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Geburt" minOccurs="0" type="xdomea:GeburtType"> - <xs:annotation> - <xs:documentation>Die Geburtsangaben des Ansprechpartners zum Kontakt.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="MetadatenAussonderungType"> - <xs:annotation> - <xs:appinfo> - <title>MetadatenAussonderung</title> - </xs:appinfo> - <xs:documentation>MetadatenAussonderung fasst die Informationen zu einem abschließend bearbeiteten Schriftgutobjekt (Vorgang oder Akte) zusammen, die für seine Aufbewahrung und Aussonderung relevant sind.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Aufbewahrungsdauer" - minOccurs="0" - type="xdomea:AufbewahrungsdauerType"> - <xs:annotation> - <xs:documentation>Die Aufbewahrungsdauer legt fest, wie viele Jahre eine Akte oder ein Vorgang nach der Verfügung zur Akte (zdA-Verfügung) innerhalb der aktenführenden Stelle aufzubewahren ist oder ob die Aufbewahrung unbefristet erfolgen soll. Nach Ablauf der Aufbewahrungsfrist erfolgt die Aussonderung in Abhängigkeit von der Aussonderungsart.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Aussonderungsart" - minOccurs="0" - type="xdomea:AussonderungsartType"> - <xs:annotation> - <xs:documentation>Die Aussonderungsart gibt das Ergebnis der archivischen Bewertung an. Damit eine automatische Selektion der auszusondernden Vorgänge erfolgen kann, muss in Vorgangsbearbeitungssystemen für Akten und Vorgänge ein Metadatum "Aussonderungsart" vorgegeben werden. Die Aussonderungsart wird vom Aktenplan (zweistufiges Aussonderungsverfahren) oder von der Akte (vierstufiges Aussonderungsverfahren) auf zugehörige Vorgänge und Dokumente vererbt.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Kennung" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Kennung enthält bei der Durchführung einer Aussonderung die Archivkennung, bei einer Abgabe die Kennung des Schriftgutobjekts aus dem System der übernehmenden Behörde.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Bewertungsvorschlag" - minOccurs="0" - type="xdomea:BewertungsvorschlagCodeType"> - <xs:annotation> - <xs:documentation>Der Bewertungsvorschlag ist ein Hinweis des Bearbeiters eines Schriftgutobjekts an das zuständige Archiv. Er kann die Werte archivwürdig oder vernichten annehmen.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Aufbewahrungsende" minOccurs="0" type="xs:date"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Über die Belegung dieses Feldes mit 31.12.JJJJ kann auch nur ein Endjahr angegeben werden. Die Art der Aussonderung (taggenau oder jährlich) ist mit dem zuständigen Archiv abzustimmen.</implementationHint> - </xs:appinfo> - <xs:documentation>Das Aufbewahrungsende gibt taggenau das Ende der Aufbewahrungsfrist an.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="NameNatuerlichePersonType"> - <xs:annotation> - <xs:appinfo> - <title>NameNatuerlichePerson</title> - </xs:appinfo> - <xs:documentation>NameNatuerlichePerson leitet sich von der entsprechenden XÖV-Kernkomponente ab. Der Name der Person ist eine Benennung dieser Person, die dazu dient, diese Person von anderen Personen zu unterscheiden.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Anrede" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Anrede ist der Namenszusatz (auch eine Anrede ohne Namen nur mit Titel ist eine Anrede!) bei der Anrede (mündlich oder schriftlich) oder bei einem Anruf (fernmündlich) an eine Person oder Personengruppe, z.B. Herr, Frau.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Titel" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Ein Titel wird häufig im Zusammenhang mit Namen verwendet, ist aber kein originärer Bestandteil des Namens. Im Unterschied dazu gehören Adelstitel zum Familiennamen und sind daher in diesem Verständnis kein Titel. Zu den Titeln zählen beispielsweise akademische Grade, Dienst- und Amtsbezeichnungen oder militärische Ränge. Es können auch Titel übermittelt werden, die keine Titel im Sinne des Meldewesens sind.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Familienname" minOccurs="0" type="xdomea:AllgemeinerNameType"> - <xs:annotation> - <xs:documentation>Der Familienname ist der aktuelle Nachname einer Person und Ausdruck einer bestimmten Familienzugehörigkeit dieser Person.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Vorname" minOccurs="0" type="xdomea:AllgemeinerNameType"> - <xs:annotation> - <xs:documentation>Der Vorname ist der Name bzw. der Teil des Namens, der nicht die Zugehörigkeit zu einer Familie ausdrückt, sondern das Individuum innerhalb der Familie bezeichnet und dazu dient, es von anderen Familienmitgliedern zu unterscheiden.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="NameOrganisationType"> - <xs:annotation> - <xs:appinfo> - <title>NameOrganisation</title> - </xs:appinfo> - <xs:documentation>NameOrganisation leitet sich von der entsprechenden XÖV-Kernkomponente ab und fasst Angaben zum Namen einer Organisation zusammen.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Name" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Der offizielle Name einer Organisation. Entspricht bei registrierten Organisationen dem im Register eingetragenen Namen.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Kurzbezeichnung" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Kurzbezeichnung des Namens einer Organisation.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="NkBasisType"> - <xs:annotation> - <xs:appinfo> - <title>NkBasis</title> - </xs:appinfo> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="ProzessID" type="xdomea:stringUUIDType"> - <xs:annotation> - <xs:documentation>Die UUID des Prozesses, zu dem die Nachricht gehört. Sie dient zur Identifikation bei Rückmeldungen.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Nachrichtentyp" type="xdomea:NachrichtentypCodeType"> - <xs:annotation> - <xs:documentation>Der Nachrichtentyp gibt die Bezeichnung der Nachricht an.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Erstellungszeitpunkt" type="xs:dateTime"> - <xs:annotation> - <xs:documentation>Der Zeitpunkt der Nachrichtenerzeugung.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Absender" type="xdomea:KontaktType"> - <xs:annotation> - <xs:documentation>Der Absender der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Empfaenger" type="xdomea:KontaktType"> - <xs:annotation> - <xs:documentation>Der Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SendendesSystem" minOccurs="0" type="xdomea:SystemType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem System, aus dem die Daten gesendet werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Hinweis" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Hinweis umfasst Erläuterungen zu der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="AnwendungsspezifischeErweiterung" - minOccurs="0" - type="xdomea:AnwendungsspezifischeErweiterungType"> - <xs:annotation> - <xs:documentation>AnwendungsspezifischeErweiterung darf nur dazu genutzt werden, weitere (z.B. fachspezifische) Metadaten zu spezifizieren, deren Übermittlung mit den bereits in xdomea spezifizierten Metadaten nicht möglich ist.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="AnwendungsspezifischeErweiterungXML" - minOccurs="0" - type="xdomea:AnwendungsspezifischeErweiterungXMLType"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Die Speicherung der nicht-auflösbaren Daten beim Empfang erfolgt in einer XML-Datei zum Schriftgutobjekt im empfangenden System. Die Umsetzung muss systemspezifisch gelöst werden - hierbei muss durch das System sichergestellt sein, dass die empfangenen Informationen nicht verloren gehen.</implementationHint> - </xs:appinfo> - <xs:documentation>AnwendungsspezifischeErweiterungXML darf nur dazu genutzt werden, weitere (z.B. fachspezifische) Metadaten zu spezifizieren, deren Übermittlung mit den bereits in xdomea spezifizierten Metadaten nicht möglich ist. Die AnwendungsspezifischeErweiterungXML bietet die Möglichkeit, mittels Einbindung externer XML-Schemata diese Metadaten zu spezifizieren. Es können beliebige XML-Schemata mit unterschiedlichen Namensräumen angegeben werden. Die XML-Schema-Validierung der weiterführenden Metadaten erfolgt innerhalb der xdomea-Nachricht selbst "lax".</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="NkFVDatenType"> - <xs:annotation> - <xs:appinfo> - <title>NkFVDaten</title> - </xs:appinfo> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen zu Nachrichten im Rahmen eines Austauschs von Fachverfahrensdaten.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:extension base="xdomea:NkBasisType"> - <xs:sequence> - <xs:element name="EmpfangendesSystem" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:SystemType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem System, das die Daten erhalten soll.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:extension> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="NkNichtFVDatenEinEmpfaengerMitEmpfangsbestaetigungType"> - <xs:annotation> - <xs:appinfo> - <title>NkNichtFVDatenEinEmpfaengerMitEmpfangsbestaetigung</title> - </xs:appinfo> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger einer Nachricht, bei der es sich nicht um eine Empfangs-/Importnachricht auf eine andere Nachricht handelt, die einen Empfänger besitzt und mit der eine Empfangsbestätigung angefordert werden kann.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:extension base="xdomea:NkBasisType"> - <xs:sequence> - <xs:element name="Empfangsbestaetigung" type="xs:boolean"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Für die Umsetzung in den Systemen wird empfohlen, sofern kein anderer Wert hinterlegt wurde, als Standardwert den Wert 0 für "keine Empfangsbestätigung senden" anzugeben.</implementationHint> - </xs:appinfo> - <xs:documentation>Die Angabe, ob vom Empfänger der Nachricht eine Empfangsbestätigung erwünscht wird. Eine erwünschte Empfangsbestätigung wird mit 1 gekennzeichnet. Wird keine Empfangsbestätigung gewünscht, so wird dies mit 0 gekennzeichnet.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:extension> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="NkNichtFVDatenWeitereEmpfaengerMitEmpfangsbestaetigungType"> - <xs:annotation> - <xs:appinfo> - <title>NkNichtFVDatenWeitereEmpfaengerMitEmpfangsbestaetigung</title> - </xs:appinfo> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger einer Nachricht, bei der es sich nicht um eine Empfangs-/Importnachricht auf eine andere Nachricht handelt, die mehrere Empfänger besitzen kann und mit der eine Empfangsbestätigung angefordert werden kann.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:extension base="xdomea:NkNichtFVDatenWeitereEmpfaengerType"> - <xs:sequence> - <xs:element name="Empfangsbestaetigung" type="xs:boolean"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Für die Umsetzung in den Systemen wird empfohlen, sofern kein anderer Wert hinterlegt wurde, als Standardwert den Wert 0 für "keine Empfangsbestätigung senden" anzugeben.</implementationHint> - </xs:appinfo> - <xs:documentation>Die Angabe, ob vom Empfänger der Nachricht eine Empfangsbestätigung erwünscht wird. Eine erwünschte Empfangsbestätigung wird mit 1 gekennzeichnet. Wird keine Empfangsbestätigung gewünscht, so wird dies mit 0 gekennzeichnet.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:extension> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="NkNichtFVDatenWeitereEmpfaengerType"> - <xs:annotation> - <xs:appinfo> - <title>NkNichtFVDatenWeitereEmpfaenger</title> - </xs:appinfo> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger einer Nachricht, bei der es sich nicht um eine Empfangs-/Importnachricht auf eine andere Nachricht handelt und die beliebige Empfänger besitzen kann.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:extension base="xdomea:NkBasisType"> - <xs:sequence> - <xs:element name="WeitererEmpfaenger" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:KontaktType"> - <xs:annotation> - <xs:documentation>Ein weiterer Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:extension> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="OrganisationseinheitType"> - <xs:annotation> - <xs:appinfo> - <title>Organisationseinheit</title> - </xs:appinfo> - <xs:documentation>Die Organisationseinheit leitet sich von der entsprechenden XÖV-Kernkomponente ab. Sie fasst Angaben zur Darstellung der internen hierarchischen Organisationsstruktur einer Institution zusammen, z.B. zur Darstellung von Abteilungen, Referaten.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Name" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Bezeichnung der Organisationseinheit.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="PrimaerdokumentType"> - <xs:annotation> - <xs:appinfo> - <title>Primaerdokument</title> - </xs:appinfo> - <xs:documentation>Ein Primärdokument gehört zum eigentlichen Inhalt eines Dokuments. Es kann sowohl in analoger Form als Inhalt eines Papierdokuments oder in digitaler Form als Inhalt eines elektronischen Dokuments (Datei) vorliegen.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Dateiname" type="xdomea:stringDateinameType"> - <xs:annotation> - <xs:documentation>Der Dateiname des Primärdokumentes, der z.B. nach dem Muster "UUID", "UUID.Dateiformat" oder "UUID_Dokumentname.Dateiformat" gebildet werden kann.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="DateinameOriginal" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Name der Datei zum Zeitpunkt des Imports in ein DMS / VBS.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Ersteller" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:appinfo> - <implementationHint>An dieser Stelle wird für den Ersteller der Datentyp "String" verwendet, da es sich hierbei lediglich um den Namen des Erstellers handelt und keine weiteren Steuerungsinformationen damit verbunden sind.</implementationHint> - </xs:appinfo> - <xs:documentation>Der Ersteller des Primärdokuments.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="DatumUhrzeit" minOccurs="0" type="xs:dateTime"> - <xs:annotation> - <xs:documentation>Der Erstellungszeitpunkt des Primärdokuments.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SignaturSiegel" - minOccurs="0" - type="xdomea:SignaturSiegelType"> - <xs:annotation> - <xs:documentation>Angaben zur elektronischen Signatur oder zum elektronischen Siegel, die zum Dokument gehören.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="SignaturSiegelType"> - <xs:annotation> - <xs:appinfo> - <title>Signatur und Siegel</title> - </xs:appinfo> - <xs:documentation>Angaben zur elektronischen Signatur oder zum elektronischen Siegel.</xs:documentation> - </xs:annotation> - <xs:choice> - <xs:element name="SignaturSiegelEingebettet" fixed="1" type="xs:boolean"> - <xs:annotation> - <xs:documentation>Die elektronische Signatur oder das elektronische Siegel zum Dokument liegt eingebettet vor.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SignaturSiegelDatei" - maxOccurs="unbounded" - type="xdomea:stringDateinameType"> - <xs:annotation> - <xs:documentation>Die elektronische Signatur oder das elektronische Siegel zum Dokument liegt in einer separaten Datei vor.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:choice> - </xs:complexType> - <xs:complexType name="StaatType"> - <xs:annotation> - <xs:appinfo> - <title>Staat</title> - </xs:appinfo> - <xs:documentation>Staat leitet sich von der entsprechenden XÖV-Kernkomponente ab. Als Staat bezeichnet man eine politische Ordnung, die ein gemeinsames als Staatsgebiet abgegrenztes Territorium, ein dazugehöriges Staatsvolk und eine Machtausübung über dieses umfasst.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Staat" type="xdomea:StaatCodeType"> - <xs:annotation> - <xs:documentation>Staat enthält einen Schlüssel zur Identifikation eines Staates.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="SystemType"> - <xs:annotation> - <xs:appinfo> - <title>System</title> - <implementationHint>Je nach Anwendungsfall ist mindestens eines der enthaltenen Elemente mit Daten zu befüllen.</implementationHint> - </xs:appinfo> - <xs:documentation>Ein System ist ein die xdomea-Nachrichten erzeugendes Produkt (z.B. DMS oder VBS).</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="InstanzID" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Instanz-ID dient der eindeutigen Identifikation des Systems, in dem die xdomea-Nachricht erzeugt wird. Die Identifizierung des Mandantens ist darin enthalten.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Produktname" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Name des Produktes.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Version" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Version des Produktes.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="UnstrukturierteAnschriftType"> - <xs:annotation> - <xs:appinfo> - <title>UnstrukturierteAnschrift</title> - </xs:appinfo> - <xs:documentation>Die unstrukturierte Anschrift dient der Übermittlung von Anschriften, die nicht der regulären Anschrift entsprechen.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Typ" minOccurs="0" type="xdomea:AnschriftstypCodeType"> - <xs:annotation> - <xs:documentation>Im Typ wird beschrieben, um welche Art der Anschrift es sich handelt. Mögliche Werte sind "Aktuelle Anschrift", "Hauptsitz" oder "Zweitsitz".</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Zeile1" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Erste Zeile der unstrukturierten Anschrift.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Zeile2" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Zweite Zeile der unstrukturierten Anschrift.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Zeile3" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Dritte Zeile der unstrukturierten Anschrift.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Zeile4" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Vierte Zeile der unstrukturierten Anschrift.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Zeile5" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Fünfte Zeile der unstrukturierten Anschrift.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Zeile6" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Sechste Zeile der unstrukturierten Anschrift.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Zusatz" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Ein Anschriftenzusatz beinhaltet ggf. erforderliche weitere Präzisierungen zu einer Anschrift.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="VerfuegungType"> - <xs:annotation> - <xs:appinfo> - <title>Verfuegung</title> - </xs:appinfo> - <xs:documentation>Eine Verfügung ist ein Mittel zur Steuerung der Bearbeitung eines Schriftgutobjektes in einem Beteiligungsschritt. Die Bearbeitung eines Geschäftsvorfalls wird durch förmliche und abschließend gezeichnete Verfügungen eingeleitet, fortgeführt und abgeschlossen. Gegenstand von Verfügungen können insbesondere sein: Entwürfe von Schreiben Beteiligung anderer Organisationseinheiten Hinweise zur Sicherung eines ausreichenden schriftlichen Nachweises der Bearbeitung Abschließende Verfügung zur weiteren Bearbeitung oder zu deren Abschluss (Schlussverfügung)</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Ersteller" type="xdomea:KontaktType"> - <xs:annotation> - <xs:appinfo> - <implementationHint>An dieser Stelle wird für den Ersteller der Datentyp "KontaktType" verwendet, da damit der Geschäftsgang (auch organisationsübergreifend) gesteuert werden kann.</implementationHint> - </xs:appinfo> - <xs:documentation>Die spezifische Ausprägung eines Kontaktes, durch die der Erlasser der Verfügung bestimmt wird.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Adressat" type="xdomea:KontaktType"> - <xs:annotation> - <xs:documentation>Die spezifische Ausprägung eines Kontaktes, durch die der Empfänger der Verfügung bestimmt wird.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Erstellungsdatum" type="xs:date"> - <xs:annotation> - <xs:documentation>Das Erstellungsdatum der Verfügung.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Erstellungsuhrzeit" minOccurs="0" type="xs:time"> - <xs:annotation> - <xs:documentation>Die Erstellungsuhrzeit der Verfügung.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Verfuegung" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die textuelle Beschreibung der Verfügung, z.B. zur Kenntnis, zur Mitzeichnung, zur Bearbeitung.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="TerminDatum" minOccurs="0" type="xs:date"> - <xs:annotation> - <xs:documentation>Das vom Ersteller für die Erledigung der Verfügung festgelegte Datum.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="TerminUhrzeit" minOccurs="0" type="xs:time"> - <xs:annotation> - <xs:documentation>Die vom Ersteller für die Erledigung der Verfügung festgelegte Uhrzeit.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Notiz" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Hinweise oder Erläuterungen zu einer Verfügung.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="VersionType"> - <xs:annotation> - <xs:appinfo> - <title>Version</title> - </xs:appinfo> - <xs:documentation>Eine Version ist ein definierter Stand eines Dokuments zu einem bestimmten Zeitpunkt. Verschiedene Versionen stellen die Veränderung und Weiterentwicklung eines Dokumentes dar. Welche Veränderungen zu einer neuen Version führen, ist eine organisatorische Festlegung. Um die Chronologie abzubilden, erhält auch das Originaldokument eine Versionsnummer.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Nummer" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Nummer der Version.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Format" maxOccurs="unbounded" type="xdomea:FormatType"> - <xs:annotation> - <xs:documentation>Ein Format, das der Dokumentversion zugeordnet ist.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="VerweisType"> - <xs:annotation> - <xs:appinfo> - <title>Verweis</title> - <implementationHint>Mindestens eines der Elemente ID bzw. SGOKennzeichen muss gefüllt sein.</implementationHint> - </xs:appinfo> - <xs:documentation>Ein Verweis stellt eine inhaltliche Querbeziehung eines Schriftgutobjekts zu einem anderen Schriftgutobjekt dar.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="ID" minOccurs="0" type="xdomea:stringUUIDType"> - <xs:annotation> - <xs:documentation>Die UUID des Schriftgutobjektes, zu dem der inhaltliche Querverweis dargestellt wird.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SGOTyp" type="xdomea:SchriftgutobjekttypCodeType"> - <xs:annotation> - <xs:documentation>Der Typ des Schriftgutobjektes, auf das verwiesen wird. Mögliche Werte sind "Akte", "Dokument" und "Vorgang".</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SGOKennzeichen" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Das Kennzeichen des Schriftgutobjektes, auf das verwiesen wird.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Bemerkung" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Hinweise und Bemerkungen zu diesem Verweis.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="VorgangType"> - <xs:annotation> - <xs:appinfo> - <title>Vorgang</title> - </xs:appinfo> - <xs:documentation>Vorgang enthält die Metadatenfelder für den Austausch von Vorgängen einschließlich der archivspezifischen Metadaten, anwendungsspezifischer Metadaten, Historien- und Protokollinformationen sowie Informationen zum internen Geschäftsgang. Die absendende Behörde kann jeweils festlegen, welche Informationen dem Empfänger mit der Übertragung zur Verfügung gestellt werden sollen. So kann auch der Anforderung nach einer ggf. erforderlichen Beschränkung der übertragenen Metadaten Rechnung getragen werden (z.B. auf Grund datenschutzrechtlicher oder sonstiger gesetzlicher Bestimmungen).</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Identifikation" type="xdomea:IdentifikationObjektType"> - <xs:annotation> - <xs:documentation>Über Identifikation werden zur systemübergreifend eindeutigen Identifizierung des Vorgangs spezifische Merkmale übergeben.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="AllgemeineMetadaten" - minOccurs="0" - type="xdomea:AllgemeineMetadatenType"> - <xs:annotation> - <xs:documentation>Über AllgemeineMetadaten werden allgemeine Metadaten zu einem Vorgang angegeben.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="ArchivspezifischeMetadaten" - minOccurs="0" - type="xdomea:MetadatenAussonderungType"> - <xs:annotation> - <xs:documentation>Über ArchivspezifischeMetadaten werden die für die Archivierung und Aussonderung relevanten Metadaten zu einem Vorgang angegeben.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Aktenbetreff" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Inhaltsangabe der Akte, der der Vorgang untergeordnet ist. Dies ist relevant als Kontextinformation bei der Versendung von Vorgängen ohne die Akte.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Typ" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die weitere Spezifikation des Vorgangs über einen Typ, u.a zur Recherche oder zur Festlegung zusätzlicher Metadaten. Mögliche Werte sind z.B. Genehmigungsverfahren, Widerspruchsverfahren, Kabinettsvorlage etc.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="ZdA" minOccurs="0" type="xs:boolean"> - <xs:annotation> - <xs:appinfo> - <implementationHint>ZdA (zu den Akten) steht für das Schließen eines Schriftgutobjekts (Teilvorgang, Vorgang, Teilakte oder Akte). Die hierfür in den Verwaltungen genutzten Bezeichnungen können anders lauten (z.B. „Schließen der Akte oder des Vorgangs“).</implementationHint> - </xs:appinfo> - <xs:documentation>ZdA kennzeichnet, ob der Vorgang zu den Akten verfügt wurde (Wert 1) oder nicht (Wert 0).</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="ZdADatum" minOccurs="0" type="xs:date"> - <xs:annotation> - <xs:appinfo> - <implementationHint>ZdA (zu den Akten) steht für das Schließen eines Schriftgutobjekts (Teilvorgang, Vorgang, Teilakte oder Akte). Die hierfür in den Verwaltungen genutzten Bezeichnungen können anders lauten (z.B. „Schließen der Akte oder des Vorgangs“).</implementationHint> - </xs:appinfo> - <xs:documentation>ZdADatum kennzeichnet, wann der Vorgang zu den Akten verfügt wurde.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Laufzeit" minOccurs="0" type="xdomea:ZeitraumType"> - <xs:annotation> - <xs:documentation>Die Laufzeit des Vorgangs, d.h. Zeitpunkt des Beginns und des Endes.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="HistorienProtokollInformation" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:HistorienProtokollInformationType"> - <xs:annotation> - <xs:documentation>Über HistorienProtokollInformation werden die zur Historisierung und Protokollierung relevanten Metadaten zu einem Vorgang angegeben, in der die Veränderungen an den beschreibenden Attributen und dem Zustand des Vorgangs erfasst werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="InternerGeschaeftsgang" - minOccurs="0" - type="xdomea:GeschaeftsgangType"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Der interne Geschäftsgang kann nach organisatorischer Absprache zwischen den austauschenden Systemen genutzt werden, ist aber nicht verpflichtender Bestandteil von xdomea.</implementationHint> - </xs:appinfo> - <xs:documentation>Die spezifische Ausprägung eines Geschäftsgangs, über die der interne Geschäftsgang am Vorgang nachgewiesen wird.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Dokument" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:DokumentType"> - <xs:annotation> - <xs:documentation>Ein Dokument, das hierarchisch in den Vorgang eingebunden bzw. dem Vorgang untergeordnet ist.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Verweis" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:VerweisType"> - <xs:annotation> - <xs:documentation>Über einen Verweis wird eine inhaltliche Querbeziehung des Vorgangs zu einem anderen Schriftgutobjekt dargestellt.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Kontakt" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:KontaktType"> - <xs:annotation> - <xs:documentation>Eine Kontaktinformation zu einem Geschäftsprozessbeteiligten.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Teilvorgang" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:VorgangType"> - <xs:annotation> - <xs:documentation>Über einen Teilvorgang kann ein Vorgang hierarchisch in einen anderen Vorgang eingebunden bzw. einem anderen Vorgang untergeordnet werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="AnwendungsspezifischeErweiterung" - minOccurs="0" - type="xdomea:AnwendungsspezifischeErweiterungType"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Die Speicherung der nicht-auflösbaren Daten beim Empfang erfolgt in einer XML-Datei zum Schriftgutobjekt im empfangenden System. Die Umsetzung muss systemspezifisch gelöst werden - hierbei muss durch das System sichergestellt sein, dass die empfangenen Informationen nicht verloren gehen.</implementationHint> - </xs:appinfo> - <xs:documentation>AnwendungsspezifischeErweiterung darf nur dazu genutzt werden, weitere (z.B. fachspezifische) Metadaten zu spezifizieren, deren Übermittlung mit den bereits in xdomea spezifizierten Metadaten nicht möglich ist.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="AnwendungsspezifischeErweiterungXML" - minOccurs="0" - type="xdomea:AnwendungsspezifischeErweiterungXMLType"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Die Speicherung der nicht-auflösbaren Daten beim Empfang erfolgt in einer XML-Datei zum Schriftgutobjekt im empfangenden System. Die Umsetzung muss systemspezifisch gelöst werden - hierbei muss durch das System sichergestellt sein, dass die empfangenen Informationen nicht verloren gehen.</implementationHint> - </xs:appinfo> - <xs:documentation>AnwendungsspezifischeErweiterungXML darf nur dazu genutzt werden, weitere (z.B. fachspezifische) Metadaten zu spezifizieren, deren Übermittlung mit den bereits in xdomea spezifizierten Metadaten nicht möglich ist. Die AnwendungsspezifischeErweiterungXML bietet die Möglichkeit, mittels Einbindung externer XML-Schemata diese Metadaten zu spezifizieren. Es können beliebige XML-Schemata mit unterschiedlichen Namensräumen angegeben werden. Die XML-Schema-Validierung der weiterführenden Metadaten erfolgt innerhalb der xdomea-Nachricht selbst "lax".</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="ZeitraumType"> - <xs:annotation> - <xs:appinfo> - <title>Zeitraum</title> - </xs:appinfo> - <xs:documentation>Der Zeitraum kennzeichnet einen Abschnitt auf dem Zeitstrahl durch Angabe von Beginn und/oder Ende.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Beginn" minOccurs="0" type="xs:date"> - <xs:annotation> - <xs:documentation>Der Beginn eines Zeitraums beschreibt den Zeitpunkt, ab dem ein Sachverhalt eintritt bzw. rechtskräftig wirksam ist. Der Beginn ist immer Teil der Dauer des Zeitraumes. Beispiele sind: Fristbeginn (BKA) Wirksamkeitsdatum der Änderung des Familiennamens (Personenstand) Eheschließungsdatum (Personenstand)</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Ende" minOccurs="0" type="xs:date"> - <xs:annotation> - <xs:documentation>Das Ende eines Zeitraumes beschreibt den Zeitpunkt, ab dem ein Sachverhalt endet bzw. nicht mehr rechtskräftig ist. Das Ende ist selbst Teil der Dauer des Zeitraumes. Beispiele sind: Fristdatum (Bau) Ablaufdatum (Finanz) Faelligkeitsdatum (Finanz) Wirksamkeitsdatum der Aufhebung/Scheidung der Ehe (Personenstand)</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> -</xs:schema> diff --git a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Datentypen.xsd b/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Datentypen.xsd deleted file mode 100644 index 060a9d2ea4dbde2c8d6df4f3a500417aab09f16f..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Datentypen.xsd +++ /dev/null @@ -1,5329 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" - xmlns:xdomea="urn:xoev-de:xdomea:schema:3.0.0" - xmlns:xoev-code="http://xoev.de/schemata/code/1_0" - targetNamespace="urn:xoev-de:xdomea:schema:3.0.0" - version="3.0.0" - elementFormDefault="qualified" - attributeFormDefault="unqualified"> - <xs:annotation> - <xs:appinfo> - <standard> - <nameLang>xdomea - XÖV-Standard für den IT-gestützten Austausch und die IT-gestützte Aussonderung behördlichen Schriftgutes</nameLang> - <nameKurz>xdomea</nameKurz> - <nameTechnisch>xdomea</nameTechnisch> - <kennung>urn:xoev-de:xdomea:kosit:standard:xdomea</kennung> - <beschreibung>xdomea ist der vom IT-Planungsrat verabschiedete verbindliche Standard für den Austausch von Akten, Vorgängen und Dokumenten im Kontext der Übermittlung, der Abgabe sowie der Aussonderung von Schriftgutobjekten (www.it-planungsrat.de, Beschluss 2017/39). Weiterhin kann xdomea für den Austausch zwischen Fachverfahren und DMS/VBS sowie für die Zwischenarchivierung genutzt werden. - -Um diese Anwendungsszenarien bestmöglich zu unterstützen, ist xdomea gemäß des XÖV-Rahmenwerkes nach dem Baukastenprinzip aufgebaut und bietet einzelne Nachrichten(gruppen) für die jeweiligen Prozesse an. - -Der Standard xdomea wird von der gleichnamigen Arbeitsgruppe des IT-Planungsrates weiterentwickelt und gepflegt. Der Betrieb des Standards erfolgt durch die Koordinierungsstelle für IT-Standards (KoSIT). -</beschreibung> - </standard> - <versionStandard> - <version>3.0.0</version> - <beschreibung>Die Version 3.0.0 ist durch den IT-Planungsrat beschlossen. Details zum Beschluss sowie zu den Fristen der Umsetzung sind der Veröffentlichung im Bundesanzeiger unter www.bundesanzeiger.de zu entnehmen.</beschreibung> - <versionXOEVProfil>1.7.2</versionXOEVProfil> - <versionXOEVHandbuch>2.3.1</versionXOEVHandbuch> - <versionXGenerator>3.0.1</versionXGenerator> - <versionModellierungswerkzeug>19.0</versionModellierungswerkzeug> - <nameModellierungswerkzeug>MagicDraw</nameModellierungswerkzeug> - </versionStandard> - </xs:appinfo> - <xs:documentation>Datentypen enthält spezifische Datentypen, welche von Datentypen aus anderen Namensräumen (z.B. UN/CEFACT, W3C) abgeleitet wurden.</xs:documentation> - </xs:annotation> - <xs:import schemaLocation="http://xoev.de/schemata/code/1_0/xoev-code.xsd" - namespace="http://xoev.de/schemata/code/1_0"/> - <xs:complexType name="AllgemeineRueckmeldungCodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>AllgemeineRueckmeldung</nameLang> - <nameKurz>AllgemeineRueckmeldung</nameKurz> - <nameTechnisch>allgemeinerueckmeldung</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:allgemeinerueckmeldung</kennung> - <beschreibung>Die Werteliste der allgemeinen Rückmeldungen.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.1</version> - <datumGueltigkeitAb>2021-10-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von Rückmeldungen für Fachverfahrensnachrichten unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0000000"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Ausführung wurde erfolgreich beendet.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Das DMS ist im Rahmen der Kommunikation vom Fachverfahren in Richtung DMS nicht verfügbar oder antwortet nicht in angemessener Zeit (Time-out).</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Verbindungsabbruch im Rahmen der Kommunikation vom Fachverfahren in Richtung DMS.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Kennung ist dem DMS nicht bekannt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000004"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Dem Benutzer bzw. der Rolle fehlen die erforderlichen Rechte zum Aufruf der Nachricht im Rahmen der Kommunikation vom Fachverfahren in Richtung DMS.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000005"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die ID des Fachverfahrens ist im Rahmen der Kommunikation vom Fachverfahren in Richtung DMS unbekannt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000006"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die ID der Verwaltung ist im Rahmen der Kommunikation vom Fachverfahren in Richtung DMS unbekannt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000007"> - <xs:annotation> - <xs:appinfo> - <beschreibung>DMS-Session-ID ist im Rahmen der Kommunikation vom Fachverfahren in Richtung DMS ungültig bzw. nicht bekannt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000008"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die übergebene XML-Struktur entspricht im Rahmen der Kommunikation vom Fachverfahren in Richtung DMS nicht dem angegebenen Schema und ist nicht valide.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000009"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Nachricht ist im Rahmen der Kommunikation vom Fachverfahren in Richtung DMS bereits verarbeitet.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000010"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Stapellänge ist im Rahmen der Kommunikation vom Fachverfahren in Richtung DMS kleiner oder gleich 0.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000011"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Stapellänge ist im Rahmen der Kommunikation vom Fachverfahren in Richtung DMS größer als 1 und somit in der Dialogverarbeitung unzulässig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000012"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Stapellänge ist im Rahmen der Kommunikation vom Fachverfahren in Richtung DMS kleiner als 1 und somit in der Stapelverarbeitung unzulässig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000013"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Länge des Stapels stimmt im Rahmen der Kommunikation vom Fachverfahren in Richtung DMS nicht mit der Anzahl der Objekte im Stapel überein.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000014"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Stapel ist im Rahmen der Kommunikation vom Fachverfahren in Richtung DMS syntaktisch nicht korrekt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000015"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Übertragungsfehler im Rahmen der Kommunikation vom Fachverfahren in Richtung DMS.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000016"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Das Verzeichnis ist im Rahmen der Kommunikation vom Fachverfahren in Richtung DMS ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000017"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die URL ist im Rahmen der Kommunikation vom Fachverfahren in Richtung DMS ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000018"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Datei kann im Rahmen der Kommunikation vom Fachverfahren in Richtung DMS nicht gefunden werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000019"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Datenbanktabelle ist im Rahmen der Kommunikation vom Fachverfahren in Richtung DMS nicht zugreifbar.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000499"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Unbekannter Fehler im Rahmen der Kommunikation vom Fachverfahren in Richtung DMS.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000501"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Das Fachverfahren ist im Rahmen der Kommunikation vom DMS in Richtung Fachverfahren nicht verfügbar oder antwortet nicht in angemessener Zeit (Time-out).</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000502"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Verbindungsabbruch im Rahmen der Kommunikation vom DMS in Richtung Fachverfahren.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000503"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Kennung ist im Rahmen der Kommunikation vom DMS in Richtung Fachverfahren dem System nicht bekannt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000504"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Dem Benutzer fehlen im Rahmen der Kommunikation vom DMS in Richtung Fachverfahren die erforderlichen Rechte zum Aufruf der Nachricht.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000505"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die ID des Fachverfahrens ist im Rahmen der Kommunikation vom DMS in Richtung Fachverfahren nicht bekannt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000506"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die ID der Verwaltung ist im Rahmen der Kommunikation vom DMS in Richtung Fachverfahren nicht bekannt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000507"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die FV-Session-ID ist im Rahmen der Kommunikation vom DMS in Richtung Fachverfahren ungültig bzw. nicht bekannt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000508"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die übergebene XML-Struktur entspricht im Rahmen der Kommunikation vom DMS in Richtung Fachverfahren nicht dem angegebenen Schema und ist nicht valide.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000509"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Nachricht wurde im Rahmen der Kommunikation vom DMS in Richtung Fachverfahren bereits verarbeitet.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000510"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Stapellänge ist im Rahmen der Kommunikation vom DMS in Richtung Fachverfahren kleiner oder gleich 0.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000511"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Länge des Stapels stimmt im Rahmen der Kommunikation vom DMS in Richtung Fachverfahren nicht mit der Anzahl der Objekte im Stapel überein.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000512"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Stapel ist im Rahmen der Kommunikation vom DMS in Richtung Fachverfahren syntaktisch nicht korrekt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000513"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Übertragungsfehler im Rahmen der Kommunikation vom DMS in Richtung Fachverfahren.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000514"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Das Verzeichnis ist im Rahmen der Kommunikation vom DMS in Richtung Fachverfahren ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000515"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die URL ist im Rahmen der Kommunikation vom DMS in Richtung Fachverfahren ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000516"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Datei kann im Rahmen der Kommunikation vom DMS in Richtung Fachverfahren nicht gefunden werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0000999"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Unbekannter Fehler im Rahmen der Kommunikation vom DMS in Richtung Fachverfahren.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:allgemeinerueckmeldung"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.1"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="AnschriftstypCodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>Anschriftstyp</nameLang> - <nameKurz>Anschriftstyp</nameKurz> - <nameTechnisch>anschriftstyp</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:anschriftstyp</kennung> - <beschreibung>Die Werteliste der Anschriftentypen.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von Anschriftentypen unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Aktuelle Anschrift: Die aktuelle Anschrift, z.B. einer Organisation, einer Person.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Hauptsitz: Die Anschrift ist der Hauptsitz, z.B. einer Organisation, oder der Hauptwohnsitz einer Person.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Zweitsitz: Die Anschrift ist der Zweitsitz, z.B. einer Organisation, oder der Nebenwohnsitz einer Person.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:anschriftstyp"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="AussonderungsartCodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>Aussonderungsart</nameLang> - <nameKurz>Aussonderungsart</nameKurz> - <nameTechnisch>aussonderungsart</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:aussonderungsart</kennung> - <beschreibung>Die Werteliste der Aussonderungsarten.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von Aussonderungsarten unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="A"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Das Schriftgutobjekt ist archivwürdig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="B"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Das Schriftgutobjekt ist zum Bewerten markiert.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="V"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Das Schriftgutobjekt ist zum Vernichten markiert.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:aussonderungsart"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="BeteiligungsstatusCodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>Beteiligungsstatus</nameLang> - <nameKurz>Beteiligungsstatus</nameKurz> - <nameTechnisch>beteiligungsstatus</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:beteiligungsstatus</kennung> - <beschreibung>Die Liste der Statuswerte eines Beteiligungsschrittes im Geschäftsgang.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.1</version> - <datumGueltigkeitAb>2021-10-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von Beteiligungsstatus unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes. Für die Umsetzung in den Systemen wird empfohlen, sofern kein anderer Wert hinterlegt wurde, als Standardwert den Wert 001 für "Der Schritt liegt in der Zukunft." anzugeben.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Schritt liegt in der Zukunft.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Schritt ist aktuell.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Schritt ist abgeschlossen.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="004"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Schritt wurde übersprungen, jedoch nicht aus dem Geschäftsgang gelöscht. Der Schritt wird im Verlauf des Geschäftsgangs nicht mehr angesprochen.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:beteiligungsstatus"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.1"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="BewertungsvorschlagCodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>Bewertungsvorschlag</nameLang> - <nameKurz>Bewertungsvorschlag</nameKurz> - <nameTechnisch>bewertungsvorschlag</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:bewertungsvorschlag</kennung> - <beschreibung>Die Werteliste der Bewertungsvorschläge.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von Bewertungsvorschlägen unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="A"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Das Schriftgutobjekt ist archivwürdig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="V"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Das Schriftgutobjekt ist zum Vernichten markiert.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:bewertungsvorschlag"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="DateiformatCodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>Dateiformat</nameLang> - <nameKurz>Dateiformat</nameKurz> - <nameTechnisch>dateiformat</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:dateiformat</kennung> - <beschreibung>Die Werteliste der gängigen Dateiformate. Für sonstige Formate existiert der Wert "Sonstiges". Die Angaben stammen größtenteils aus der internationalen Formatdatenbank PRONOM (http://www.nationalarchives.gov.uk/pronom/).</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von Dateiformaten unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" type="xs:token" form="unqualified"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:dateiformat"/> - <xs:attribute name="listVersionID" type="xs:normalizedString" use="required"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="DatenaustauschartCodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>Datenaustauschart</nameLang> - <nameKurz>Datenaustauschart</nameKurz> - <nameTechnisch>datenaustauschart</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:datenaustauschart</kennung> - <beschreibung>Die Werteliste der Datenaustauscharten.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.1</version> - <datumGueltigkeitAb>2021-10-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von Datenaustauscharten unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Freigegebenes Verzeichnis</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Datenbanktabelle</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>WebDAV und http(s)</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:datenaustauschart"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.1"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="DatentypCodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>Datentyp</nameLang> - <nameKurz>Datentyp</nameKurz> - <nameTechnisch>datentyp</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:datentyp</kennung> - <beschreibung>Die Werteliste der W3C-Datentypen (http://www.w3.org/TR/xmlschema-2, W3C Recommendation 28 October 2004) ergänzt um anySimpleType als Metadatentyp.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.1</version> - <datumGueltigkeitAb>2021-10-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von Datentypen unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>anyURI</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>base64Binary</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>boolean</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="004"> - <xs:annotation> - <xs:appinfo> - <beschreibung>byte</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="005"> - <xs:annotation> - <xs:appinfo> - <beschreibung>date</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="006"> - <xs:annotation> - <xs:appinfo> - <beschreibung>dateTime</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="007"> - <xs:annotation> - <xs:appinfo> - <beschreibung>decimal</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="008"> - <xs:annotation> - <xs:appinfo> - <beschreibung>double</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="009"> - <xs:annotation> - <xs:appinfo> - <beschreibung>duration</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="010"> - <xs:annotation> - <xs:appinfo> - <beschreibung>ENTITIES</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="011"> - <xs:annotation> - <xs:appinfo> - <beschreibung>ENTITY</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="012"> - <xs:annotation> - <xs:appinfo> - <beschreibung>float</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="013"> - <xs:annotation> - <xs:appinfo> - <beschreibung>gDay</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="014"> - <xs:annotation> - <xs:appinfo> - <beschreibung>gMonth</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="015"> - <xs:annotation> - <xs:appinfo> - <beschreibung>gMonthDay</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="016"> - <xs:annotation> - <xs:appinfo> - <beschreibung>gYear</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="017"> - <xs:annotation> - <xs:appinfo> - <beschreibung>gYearMonth</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="018"> - <xs:annotation> - <xs:appinfo> - <beschreibung>hexBinary</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="019"> - <xs:annotation> - <xs:appinfo> - <beschreibung>ID</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="020"> - <xs:annotation> - <xs:appinfo> - <beschreibung>IDREF</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="021"> - <xs:annotation> - <xs:appinfo> - <beschreibung>IDREFS</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="022"> - <xs:annotation> - <xs:appinfo> - <beschreibung>int</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="023"> - <xs:annotation> - <xs:appinfo> - <beschreibung>integer</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="024"> - <xs:annotation> - <xs:appinfo> - <beschreibung>language</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="025"> - <xs:annotation> - <xs:appinfo> - <beschreibung>long</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="026"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Name</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="027"> - <xs:annotation> - <xs:appinfo> - <beschreibung>NCNAME</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="028"> - <xs:annotation> - <xs:appinfo> - <beschreibung>negativeInteger</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="029"> - <xs:annotation> - <xs:appinfo> - <beschreibung>NMTOKEN</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="030"> - <xs:annotation> - <xs:appinfo> - <beschreibung>NMTOKENS</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="031"> - <xs:annotation> - <xs:appinfo> - <beschreibung>nonNegativeInteger</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="032"> - <xs:annotation> - <xs:appinfo> - <beschreibung>nonPositiveInteger</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="033"> - <xs:annotation> - <xs:appinfo> - <beschreibung>normalizedString</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="034"> - <xs:annotation> - <xs:appinfo> - <beschreibung>NOTATION</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="035"> - <xs:annotation> - <xs:appinfo> - <beschreibung>positiveInteger</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="036"> - <xs:annotation> - <xs:appinfo> - <beschreibung>QName</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="037"> - <xs:annotation> - <xs:appinfo> - <beschreibung>short</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="038"> - <xs:annotation> - <xs:appinfo> - <beschreibung>string</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="039"> - <xs:annotation> - <xs:appinfo> - <beschreibung>time</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="040"> - <xs:annotation> - <xs:appinfo> - <beschreibung>token</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="041"> - <xs:annotation> - <xs:appinfo> - <beschreibung>unsignedByte</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="042"> - <xs:annotation> - <xs:appinfo> - <beschreibung>unsignedInt</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="043"> - <xs:annotation> - <xs:appinfo> - <beschreibung>unsignedLong</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="044"> - <xs:annotation> - <xs:appinfo> - <beschreibung>unsignedShort</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="045"> - <xs:annotation> - <xs:appinfo> - <beschreibung>anySimpleType</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:datentyp"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.1"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="KommunikationsartCodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>Kommunikationskanal / Erreichbarkeit</nameLang> - <nameKurz>Erreichbarkeit</nameKurz> - <nameTechnisch>erreichbarkeit</nameTechnisch> - <kennung>urn:de:xoev:codeliste:erreichbarkeit</kennung> - <beschreibung>Eine Liste der Kommunikationsmedien und -kanäle, über die man eine Person oder Institution erreichen kann.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>KoSIT</herausgebernameKurz> - </codeliste> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von Kommunikationsarten unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" type="xs:token" form="unqualified"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:de:xoev:codeliste:erreichbarkeit"/> - <xs:attribute name="listVersionID" type="xs:normalizedString" use="required"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="KompressionsverfahrenCodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>Kompressionsverfahren</nameLang> - <nameKurz>Kompressionsverfahren</nameKurz> - <nameTechnisch>kompressionsverfahren</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:kompressionsverfahren</kennung> - <beschreibung>Die Werteliste der Kompressionsverfahren.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von Kompressionsverfahren unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>ZIP v2.0</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Gnu ZIP (GZIP) v4.3 / Tape ARchive (TAR)</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:kompressionsverfahren"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="KonfigurationsparameterCodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>Konfigurationsparameter</nameLang> - <nameKurz>Konfigurationsparameter</nameKurz> - <nameTechnisch>konfigurationsparameter</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:konfigurationsparameter</kennung> - <beschreibung>Die Werteliste der Konfigurationsparameter.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.1</version> - <datumGueltigkeitAb>2021-10-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von Konfigurationsparametern unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="001001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Transportweg</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="002001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Datenaustauschart</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="003001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Ablageort</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="004001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>LDAP_Name</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="004002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>LDAP_Hostname</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="004003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>LDAP_Port</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="004004"> - <xs:annotation> - <xs:appinfo> - <beschreibung>LDAP_Bind_DN</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="004005"> - <xs:annotation> - <xs:appinfo> - <beschreibung>LDAP_Password</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="004006"> - <xs:annotation> - <xs:appinfo> - <beschreibung>LDAP_Base_DN</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="004007"> - <xs:annotation> - <xs:appinfo> - <beschreibung>LDAP_Searchfilter</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="004008"> - <xs:annotation> - <xs:appinfo> - <beschreibung>LDAP_MaxResult</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="005001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>SQL_Name</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="005002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>SQL_Hostname</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="005003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>SQL_Datenbank</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="005004"> - <xs:annotation> - <xs:appinfo> - <beschreibung>SQL_Tabelle</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="005005"> - <xs:annotation> - <xs:appinfo> - <beschreibung>SQL_Benutzername</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="005006"> - <xs:annotation> - <xs:appinfo> - <beschreibung>SQL_Passwort</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="005007"> - <xs:annotation> - <xs:appinfo> - <beschreibung>SQL_Query</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="006001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>ADDR_Name</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="006002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>ADDR_ATTR1</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="006003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>ADDR_ATTR2</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="006004"> - <xs:annotation> - <xs:appinfo> - <beschreibung>ADDR_ATTR3</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="006005"> - <xs:annotation> - <xs:appinfo> - <beschreibung>ADDR_ATTR4</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="006006"> - <xs:annotation> - <xs:appinfo> - <beschreibung>ADDR_ATTR5</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="006007"> - <xs:annotation> - <xs:appinfo> - <beschreibung>ADDR_ATTR6</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="006008"> - <xs:annotation> - <xs:appinfo> - <beschreibung>ADDR_ATTR7</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="006009"> - <xs:annotation> - <xs:appinfo> - <beschreibung>ADDR_ATTR8</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="006010"> - <xs:annotation> - <xs:appinfo> - <beschreibung>ADDR_ATTR9</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="006011"> - <xs:annotation> - <xs:appinfo> - <beschreibung>ADDR_ATTR10</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="007001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Standardablage</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="008001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Komprimierter Datenaustausch</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="008002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Kompressionsverfahren</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:konfigurationsparameter"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.1"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="KonfigurationsparameterGruppeCodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>KonfigurationsparameterGruppe</nameLang> - <nameKurz>KonfigurationsparameterGruppe</nameKurz> - <nameTechnisch>konfigurationsparametergruppe</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:konfigurationsparametergruppe</kennung> - <beschreibung>Die Werteliste der Konfigurationsparametergruppen.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.1</version> - <datumGueltigkeitAb>2021-10-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von Konfigurationsparametergruppen unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Transportweg</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Datenaustauschart</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Ablageort</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="004"> - <xs:annotation> - <xs:appinfo> - <beschreibung>LDAP-Adressverzeichnis</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="005"> - <xs:annotation> - <xs:appinfo> - <beschreibung>SQL-Server-Adressverzeichnis</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="006"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Unbekanntes Adressverzeichnis</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="007"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Standardablage</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="008"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Komprimierter Datenaustausch</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:konfigurationsparametergruppe"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.1"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="MediumCodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>Medium</nameLang> - <nameKurz>Medium</nameKurz> - <nameTechnisch>medium</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:medium</kennung> - <beschreibung>Die Werteliste der Medienarten.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von Medientypen unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Elektronisch: Das Schriftgutobjekt liegt ausschließlich in elektronischer Form vor.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Hybrid: Das Schriftgutobjekt liegt teilweise in elektronischer Form und teilweise als Papier vor.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Papier: Das Schriftgutobjekt liegt ausschließlich als Papier vor.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:medium"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="NachrichtentypCodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>Nachrichtentyp</nameLang> - <nameKurz>Nachrichtentyp</nameKurz> - <nameTechnisch>nachrichtentyp</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:nachrichtentyp</kennung> - <beschreibung>Die Werteliste der Nachrichtentypen, die den Namen der jeweiligen Nachricht angeben. Der Schlüssel wird entsprechend folgender Regel gebildet: Die ersten zwei Zeichen geben die Nachrichtengruppe an, zu der der Nachrichtentyp gehört, z.B. 01 für "Information". Die letzten zwei Zeichen ergeben die fortlaufende Nummerierung der Nachrichtentypen in einer Nachrichtengruppe.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>2.0</version> - <datumGueltigkeitAb>2021-10-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von Nachrichtentypen unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0101"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Information.Information</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0102"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Information.EmpfangBestaetigen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0201"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Geschaeftsgang.Geschaeftsgang</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0202"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Geschaeftsgang.EmpfangBestaetigen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0301"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Aktenplan.Aktenplan</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0302"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Aktenplan.EmpfangBestaetigen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0401"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Abgabe.Abgabe</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0402"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Abgabe.ImportBestaetigen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0403"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Abgabe.EmpfangBestaetigen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0501"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Aussonderung.Anbieteverzeichnis</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0502"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Aussonderung.Bewertungsverzeichnis</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0503"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Aussonderung.Aussonderung</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0504"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Aussonderung.AnbietungEmpfangBestaetigen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0505"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Aussonderung.BewertungEmpfangBestaetigen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0506"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Aussonderung.AussonderungImportBestaetigen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0507"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Aussonderung.AussonderungEmpfangBestaetigen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0511"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Aussonderung.AktenplanZurBewertung</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0512"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Aussonderung.AktenplanZurBewertungEmpfangBestaetigen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0513"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Aussonderung.Bewertungskatalog</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0514"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Aussonderung.BewertungskatalogImportBestaetigen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0515"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Aussonderung.BewerteterAktenplanEmpfangBestaetigen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0601"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.DokumentAktualisieren</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0602"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.SGOAnsehen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0603"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.SGOBearbeiten</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0604"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.SGOErstellen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0605"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.SGOAblegen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0606"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.SGODrucken</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0607"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.ProtokolleintragErstellen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0608"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.SGOSuchen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0609"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.MetadatenAnlegen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0610"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.MetadatenAktualisieren</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0611"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.MetadatenAnsehen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0612"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.MetadatenLoeschen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0613"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.SGOLoeschenMarkieren</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0614"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.SGOLoeschmarkierungAufheben</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0615"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.SGOEndgueltigLoeschen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0616"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.SGOLoeschstatusAbfragen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0617"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.SGOUngueltigKennzeichnen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0618"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.DatensatzLoeschen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0619"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.BenachrichtigungAbrufen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0620"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.VertretungAktivierenOderDeaktivieren</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0621"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.VertretungsstatusAbfragen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0622"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.ZustaendigkeitAendern</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0623"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.GesamtprotokollAblegen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0624"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.SGOZDAVerfuegen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0625"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.SystemstatusAbfragen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0626"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.KonfigurationsparameterErstellen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0627"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.KonfigurationsparameterAktualisieren</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0628"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.KonfigurationsparameterAbrufen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0629"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.EmpfangBestaetigen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0630"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.ImportBestaetigen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0631"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.PrimaerdokumentExportieren</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0632"> - <xs:annotation> - <xs:appinfo> - <beschreibung>FVDaten.SGOZDAAufheben</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0701"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Zwischenarchivierung.Auslagerung</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0702"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Zwischenarchivierung.AuslagerungEmpfangBestaetigen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0703"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Zwischenarchivierung.AuslagerungImportBestaetigen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0711"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Zwischenarchivierung. RueckleiheAnforderung</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0712"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Zwischenarchivierung. RueckleiheUebergabe</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0713"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Zwischenarchivierung.RueckleiheEmpfangBestaetigen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0721"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Zwischenarchivierung.RueckuebertragungAnforderung</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0722"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Zwischenarchivierung.RueckuebertragungUebergabe</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0723"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Zwischenarchivierung.RueckuebertragungImportBestaetigen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0724"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Zwischenarchivierung.RueckuebertragungEmpfangBestaetigen</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:nachrichtentyp"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="2.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SchriftgutobjekttypCodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>Schriftgutobjekttyp</nameLang> - <nameKurz>Schriftgutobjekttyp</nameKurz> - <nameTechnisch>schriftgutobjekttyp</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:schriftgutobjekttyp</kennung> - <beschreibung>Die Werteliste der Typen von Schriftgutobjekten.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von Schriftgutobjekttypen unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Akte</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Dokument</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Vorgang</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:schriftgutobjekttyp"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SonstigeFehlermeldungCodeType"> - <xs:annotation> - <xs:documentation>Der Datentyp zu sonstigen Fehlermeldungen aus einer Codeliste für die Importbestätigungen unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" type="xs:token" form="unqualified"/> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" type="xs:anyURI" use="required"/> - <xs:attribute name="listVersionID" type="xs:normalizedString" use="required"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0601CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0601.SpezifischeFehlermeldung</nameLang> - <nameKurz>0601.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0601</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0601</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0601.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0601 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0601001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die ID des Dokuments im DMS ist unbekannt/ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0601002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Das Verzeichnis ist ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0601003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die URL ist ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0601004"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Datei kann nicht gefunden werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0601005"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Es kann keine neue Version erstellt werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0601006"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Name eines Metadatums enthält ungültige Zeichen.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0601007"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Wert eines Metadatums enthält ungültige Zeichen.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0601"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0602CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0602.SpezifischeFehlermeldung</nameLang> - <nameKurz>0602.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0602</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0602</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0602.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0602 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0602001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die ID des Dokuments ist unbekannt/ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0602002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Das Dokument kann nicht geöffnet werden (bspw. ist zum Dokumenttyp keine Applikation registriert oder der Server hat keinen Zugriff auf den Client).</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0602003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Versionsnummer ist ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0602"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0603CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0603.SpezifischeFehlermeldung</nameLang> - <nameKurz>0603.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0603</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0603</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0603.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0603 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0603001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die ID des Dokuments ist unbekannt/ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0603002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Das Dokument kann nicht geöffnet werden (bspw. ist zum Dokumenttyp keine Applikation registriert).</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0603003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Versionsnummer ist ungültig</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0603"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0604CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0604.SpezifischeFehlermeldung</nameLang> - <nameKurz>0604.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0604</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0604</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0604.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0604 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0604001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die ID des Containerobjekts ist unbekannt/ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0604002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Schriftgutobjekttyp ist nicht definiert.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0604003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Das Schriftgutobjekt kann nicht angelegt werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0604004"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Das Objekt kann nicht geöffnet werden (bspw. ist zum Dokumenttyp keine Applikation registriert).</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0604005"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Name eines Metadatums enthält ungültige Zeichen.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0604006"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Wert eines Metadatums enthält ungültige Zeichen.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0604007"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Beschreibung eines Metadatums enthält ungültige Zeichen.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0604"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0605CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0605.SpezifischeFehlermeldung</nameLang> - <nameKurz>0605.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0605</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0605</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0605.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0605 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0605001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die ID des Containers ist im DMS unbekannt/ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0605002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Das Verzeichnis ist ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0605003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die URL ist ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0605004"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Datei kann nicht gefunden werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0605005"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Datei kann im DMS nicht abgelegt werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0605006"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Name eines Metadatums enthält ungültige Zeichen.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0605007"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Wert eines Metadatums enthält ungültige Zeichen.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0605008"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Beschreibung eines Metadatums enthält ungültige Zeichen.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0605"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0606CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0606.SpezifischeFehlermeldung</nameLang> - <nameKurz>0606.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0606</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0606</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0606.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0606 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0606001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die ID des Objektes ist unbekannt/ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0606002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der angegebene Drucker existiert nicht.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0606003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der angegebene Drucker ist nicht bereit.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0606004"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Unterschriftgutobjekttyp existiert nicht.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0606005"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Druck ist fehlgeschlagen.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0606006"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Version des Dokuments existiert nicht.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0606"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0607CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0607.SpezifischeFehlermeldung</nameLang> - <nameKurz>0607.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0607</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0607</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0607.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0607 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0607001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die ID ist unbekannt/ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0607002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Protokolleintragsinformationen beinhalten ungültige Zeichen.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0607003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Protokolleintrag kann nicht angelegt werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0607"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0608CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0608.SpezifischeFehlermeldung</nameLang> - <nameKurz>0608.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0608</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0608</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0608.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0608 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0608001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Suchtyp ist unbekannt/ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0608"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0609CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0609.SpezifischeFehlermeldung</nameLang> - <nameKurz>0609.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0609</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0609</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0609.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0609 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0609001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die ID des Objektes ist unbekannt/ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0609002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Name des Metadatums ist ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0609003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Beschreibung des Metadatums ist ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0609004"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Datentyp des Metadatums existiert nicht.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0609005"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Wert des Metadatums ist ungültig/befindet sich außerhalb des Wertebereichs.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0609006"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Das Metadatum kann nicht angelegt werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0609007"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Datentyp für das Metadatum wurde nicht angegeben.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0609008"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Wert für das Metadatum wurde nicht angegeben.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0609"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0610CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0610.SpezifischeFehlermeldung</nameLang> - <nameKurz>0610.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0610</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0610</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0610.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0610 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0610001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die ID des Objektes ist unbekannt/ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0610002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Name des Metadatums ist ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0610003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Beschreibung des Metadatums ist ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0610004"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Wert des Metadatums ist ungültig/befindet sich außerhalb des Wertebereichs.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0610005"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Das Metadatum kann nicht aktualisiert werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0610006"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Datentyp des Metadatums weicht vom vorhandenen Datentyp ab.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0610007"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Wert des Metadatums wurde nicht gesetzt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0610"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0611CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0611.SpezifischeFehlermeldung</nameLang> - <nameKurz>0611.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0611</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0611</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0611.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.1</version> - <datumGueltigkeitAb>2021-10-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0611 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0611001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die UUID des Objektes ist ungültig/unbekannt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0611002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Name des Metadatums ist ungültig/unbekannt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0611003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Das Metadatum kann nicht ausgelesen werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0611004"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Beschreibung des Metadatums weicht von der vorhandenen Beschreibung ab.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0611005"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Datentyp des Metadatums weicht von dem vorhandenen Datentyp ab.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0611006"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Wert des Metadatums weicht von dem vorhandenen Wert ab.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0611"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.1"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0612CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0612.SpezifischeFehlermeldung</nameLang> - <nameKurz>0612.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0612</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0612</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0612.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0612 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0612001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die ID des Objektes ist ungültig/unbekannt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0612002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Name des Metadatums ist ungültig/unbekannt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0612003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Das Metadatum kann nicht gelöscht werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0612004"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Beschreibung des Metadatums unterscheidet sich von der vorhandenen: Metadatum nicht gelöscht.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0612005"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Datentyp des Metadatums unterscheidet sich von dem vorhandenen: Metadatum nicht gelöscht.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0612006"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Wert des Metadatums unterscheidet sich von dem vorhandenen: Metadatum nicht gelöscht.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0612"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0613CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0613.SpezifischeFehlermeldung</nameLang> - <nameKurz>0613.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0613</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0613</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0613.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0613 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0613001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die ID des Schriftgutobjektes ist unbekannt/ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0613002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Das Schriftgutobjekt kann nicht zum Löschen markiert werden (z. B. weil es zur Bearbeitung gesperrt ist).</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0613"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0614CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0614.SpezifischeFehlermeldung</nameLang> - <nameKurz>0614.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0614</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0614</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0614.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0614 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0614001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die ID des Schriftgutobjektes ist unbekannt/ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0614002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Das Schriftgutobjekt ist nicht zum Löschen markiert.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0614003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Löschmarkierung kann nicht aufgehoben werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0614"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0615CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0615.SpezifischeFehlermeldung</nameLang> - <nameKurz>0615.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0615</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0615</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0615.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0615 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0615001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die ID des Schriftgutobjektes ist unbekannt/ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0615002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Das Schriftgutobjekt kann nicht gelöscht werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0615"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0616CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0616.SpezifischeFehlermeldung</nameLang> - <nameKurz>0616.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0616</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0616</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0616.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0616 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0616001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die ID des Schriftgutobjektes ist unbekannt/ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0616002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Status kann nicht abgefragt werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0616"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0617CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0617.SpezifischeFehlermeldung</nameLang> - <nameKurz>0617.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0617</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0617</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0617.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0617 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0617001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die ID des Objektes ist unbekannt/ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0617002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Das Schriftgutobjekt kann nicht als ungültig gekennzeichnet werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0617"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0618CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0618.SpezifischeFehlermeldung</nameLang> - <nameKurz>0618.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0618</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0618</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0618.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0618 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0618001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die ID des Datensatzes ist im DMS unbekannt/ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0618002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Mindestens ein Schriftgutobjekt kann nicht gelöscht werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0618"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0619CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0619.SpezifischeFehlermeldung</nameLang> - <nameKurz>0619.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0619</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0619</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0619.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0619 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0619001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Nachrichten können nicht abgefragt werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0619002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Keine Nachricht vorhanden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0619"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0620CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0620.SpezifischeFehlermeldung</nameLang> - <nameKurz>0620.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0620</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0620</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0620.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0620 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0620001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Benutzer/Rolle des zu Vertretenden ist unbekannt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0620002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Benutzer/Rolle des Vertreters ist unbekannt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0620003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Vertretung ist bereits aktiviert.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0620004"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Vertretung ist bereits deaktiviert.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0620005"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Vertretung kann nicht aktiviert werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0620006"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Vertretung kann nicht deaktiviert werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0620"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0621CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0621.SpezifischeFehlermeldung</nameLang> - <nameKurz>0621.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0621</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0621</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0621.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.1</version> - <datumGueltigkeitAb>2021-10-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0621 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0621001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Benutzer/Rolle, für den/die der Status abgefragt werden soll, ist unbekannt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0621002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Status kann nicht abgefragt werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0621"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.1"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0622CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0622.SpezifischeFehlermeldung</nameLang> - <nameKurz>0622.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0622</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0622</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0622.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0622 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0622001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>ID des Schriftgutobjektes nicht bekannt/ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0622002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Neu zuständiger/zuständige Benutzer/Rolle ist unbekannt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0622003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Bisher zuständiger/zuständige Benutzer/Rolle ist unbekannt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0622004"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Kennzeichen der aufnehmenden Aktenplaneinheit ist unbekannt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0622005"> - <xs:annotation> - <xs:appinfo> - <beschreibung>ID der aufnehmenden Akte ist unbekannt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0622006"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Kennzeichen der abgebenden Aktenplaneinheit ist unbekannt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0622007"> - <xs:annotation> - <xs:appinfo> - <beschreibung>ID der abgebenden Akte ist unbekannt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0622008"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Name eines Metadatums enthält ungültige Zeichen.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0622009"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Beschreibung des Metadatums enthält ungültige Zeichen.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0622010"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Wert eines Metadatums enthält ungültige Zeichen.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0622011"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Zuständigkeitswechsel kann nicht durchgeführt werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0622"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0623CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0623.SpezifischeFehlermeldung</nameLang> - <nameKurz>0623.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0623</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0623</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0623.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.1</version> - <datumGueltigkeitAb>2021-10-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0623 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0623001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die ID des Schriftgutobjektes ist unbekannt/ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0623002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Das Verzeichnis ist ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0623003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die URL ist ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0623004"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Protokoll als Datei kann nicht abgelegt werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0623005"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Protokoll als xdomea-Geschäftsgang kann nicht abgelegt werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0623006"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Syntaxfehler in xdomea-Geschäftsgang-Daten.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0623007"> - <xs:annotation> - <xs:appinfo> - <beschreibung>HistorienProtokollinformationen konnten nicht angelegt werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0623"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.1"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0624CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0624.SpezifischeFehlermeldung</nameLang> - <nameKurz>0624.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0624</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0624</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0624.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0624 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0624001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>ID des Schriftgutobjektes nicht bekannt/ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0624002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die zdA-Verfügung kann nicht durchgeführt werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0624"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0625CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0625.SpezifischeFehlermeldung</nameLang> - <nameKurz>0625.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0625</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0625</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0625.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0625 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0625001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Systemstatus-ID ist unbekannt/ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0625002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Status kann nicht abgefragt werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0625"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0626CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0626.SpezifischeFehlermeldung</nameLang> - <nameKurz>0626.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0626</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0626</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0626.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0626 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0626001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Name des Konfigurationsparameters ist ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0626002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Wert des Konfigurationsparameters ist ungültig/liegt außerhalb des definierten Wertebereichs.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0626003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Datentyp ist unbekannt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0626"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0627CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0627.SpezifischeFehlermeldung</nameLang> - <nameKurz>0627.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0627</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0627</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0627.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0627 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0627001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Name des Konfigurationsparameters ist ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0627002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Wert des Konfigurationsparameters ist ungültig/liegt außerhalb des definierten Wertebereichs.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0627003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Konfigurationsparameter kann nicht aktualisiert werden (bspw. wegen fehlender Rechte).</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0627004"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Typ des Konfigurationsparameters entspricht nicht dem aktuellen Typ des Konfigurationsparameters.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0627"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0628CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0628.SpezifischeFehlermeldung</nameLang> - <nameKurz>0628.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0628</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0628</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0628.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0628 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0628001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Name des Konfigurationsparameters ist ungültig/unbekannt.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0628002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Der Konfigurationsparameter kann nicht ausgelesen werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0628"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0631CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0631.SpezifischeFehlermeldung</nameLang> - <nameKurz>0631.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0631</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0631</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0631.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0631 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0631001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die ID des Dokuments ist unbekannt/ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0631002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die Versionsnummer ist ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0631"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SpezifischeFehlermeldung0632CodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>0632.SpezifischeFehlermeldung</nameLang> - <nameKurz>0632.SpezifischeFehlermeldung</nameKurz> - <nameTechnisch>spezifischefehlermeldung0632</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0632</kennung> - <beschreibung>Die Werteliste der spezifischen Rückmeldungen zur Nachricht 0632.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.1</version> - <datumGueltigkeitAb>2021-10-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von spezifischen Fehlermeldungen für die Nachricht 0632 unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="0632001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die ID des Schriftgutobjektes ist nicht bekannt/ungültig.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="0632002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Die zdA-Verfügung kann nicht aufgehoben werden.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:spezifischefehlermeldung0632"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.1"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="StaatCodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>Country Codes</nameLang> - <nameKurz>Country Codes</nameKurz> - <nameTechnisch>Country-Codes</nameTechnisch> - <kennung>urn:xoev-de:kosit:codeliste:country-codes</kennung> - <beschreibung>Die Codeliste basiert auf der Staats- und Gebietssystematik des Statistischen Bundesamtes (DESTATIS) und dem Standard "Country codes" der International Organization for Standardization (ISO). Die vorliegende Liste enthält alle "officially assigned codes" (Alpha-2 und Numerisch) der ISO-Liste. Kurz- und Langnamen der aufgeführten Einträge wurden, sofern vorhanden, der DESTATIS-Liste entnommen. Zu den nicht in der DESTATIS-Liste geführten Codeeinträgen wurden die zugehörigen Namen der Deutschen Fassung der Norm entnommen.</beschreibung> - <herausgebernameLang>Koordinierungsstelle für IT-Standards</herausgebernameLang> - <herausgebernameKurz>KoSIT</herausgebernameKurz> - </codeliste> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von Staaten unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes. Genutzt wird hier die ISO-3166-1-Liste. Für den Schlüssel (code) wird die Spalte "ALPHA2" und für den beschreibenden Namen (name) die Spalte "Name des Landes" verwendet.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" type="xs:token" form="unqualified"/> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:kosit:codeliste:country-codes"/> - <xs:attribute name="listVersionID" type="xs:normalizedString" use="required"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="TransportwegCodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>Transportweg</nameLang> - <nameKurz>Transportweg</nameKurz> - <nameTechnisch>transportweg</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:transportweg</kennung> - <beschreibung>Die Werteliste der Transportwege.</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von Transportwegen unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Web Service</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Austauschverzeichnis</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Austauschdatenbank</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:transportweg"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="VertraulichkeitsstufeCodeType"> - <xs:annotation> - <xs:appinfo> - <codeliste> - <nameLang>Vertraulichkeitsstufe</nameLang> - <nameKurz>Vertraulichkeitsstufe</nameKurz> - <nameTechnisch>vertraulichkeitsstufe</nameTechnisch> - <kennung>urn:xoev-de:xdomea:codeliste:vertraulichkeitsstufe</kennung> - <beschreibung>Die Werteliste der Vertraulichkeitsstufen von Schriftgutobjekten nach Verschlusssachenanweisungen des Bundes und der Länder (VSA).</beschreibung> - <herausgebernameLang>AG xdomea des IT-Planungsrates</herausgebernameLang> - <herausgebernameKurz>ag-xdomea</herausgebernameKurz> - </codeliste> - <versionCodeliste> - <version>1.0</version> - <datumGueltigkeitAb>2016-01-01</datumGueltigkeitAb> - <versionCodelistenHandbuch>1.1</versionCodelistenHandbuch> - </versionCodeliste> - <codelistenspalten> - <code> - <spaltennameLang>Code</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>true</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>true</empfohleneCodeSpalte> - </code> - <beschreibung> - <spaltennameLang>Beschreibung</spaltennameLang> - <datentyp>string</datentyp> - <codeSpalte>false</codeSpalte> - <verwendung>required</verwendung> - <empfohleneCodeSpalte>false</empfohleneCodeSpalte> - </beschreibung> - </codelistenspalten> - <genutzteCodeSpalte>code</genutzteCodeSpalte> - </xs:appinfo> - <xs:documentation>Der Datentyp zur Werteliste von Vertraulichkeitsstufen unter Angabe weiterer Informationen zur konkreten Angabe eines Wertes.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xoev-code:Code"> - <xs:sequence> - <xs:element name="code" form="unqualified"> - <xs:simpleType> - <xs:restriction base="xs:token"> - <xs:enumeration value="001"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Geheim: Das Schriftgutobjekt ist als geheim eingestuft.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="002"> - <xs:annotation> - <xs:appinfo> - <beschreibung>NfD: Das Schriftgutobjekt ist als "nur für den Dienstgebrauch (nfD)" eingestuft.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="003"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Offen: Das Schriftgutobjekt ist nicht eingestuft.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="004"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Streng geheim: Das Schriftgutobjekt ist als streng geheim eingestuft.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - <xs:enumeration value="005"> - <xs:annotation> - <xs:appinfo> - <beschreibung>Vertraulich: Das Schriftgutobjekt ist als vertraulich eingestuft.</beschreibung> - </xs:appinfo> - </xs:annotation> - </xs:enumeration> - </xs:restriction> - </xs:simpleType> - </xs:element> - <xs:element name="name" - type="xs:normalizedString" - form="unqualified" - minOccurs="0"/> - </xs:sequence> - <xs:attribute name="listURI" - type="xs:anyURI" - use="optional" - fixed="urn:xoev-de:xdomea:codeliste:vertraulichkeitsstufe"/> - <xs:attribute name="listVersionID" - type="xs:normalizedString" - use="optional" - fixed="1.0"/> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:simpleType name="stringDateinameType"> - <xs:annotation> - <xs:documentation>Der Datentyp zur Angabe eines Dateinamens.</xs:documentation> - </xs:annotation> - <xs:restriction base="xs:string"> - <xs:pattern value="[0-9|A-F|a-f]{8}-[0-9|A-F|a-f]{4}-[0-9|A-F|a-f]{4}-[0-9|A-F|a-f]{4}-[0-9|A-F|a-f]{12}[_]?.*[\.]?.*"/> - </xs:restriction> - </xs:simpleType> - <xs:simpleType name="stringUUIDType"> - <xs:annotation> - <xs:documentation>Der Datentyp zur Angabe einer UUID.</xs:documentation> - </xs:annotation> - <xs:restriction base="xs:string"> - <xs:pattern value="[0-9|A-F|a-f]{8}-[0-9|A-F|a-f]{4}-[0-9|A-F|a-f]{4}-[0-9|A-F|a-f]{4}-[0-9|A-F|a-f]{12}"/> - </xs:restriction> - </xs:simpleType> -</xs:schema> diff --git a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-AbgabeDurchfuehren.xsd b/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-AbgabeDurchfuehren.xsd deleted file mode 100644 index 51499776bfdabc173a9e6dfea2096b3d267b25dc..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-AbgabeDurchfuehren.xsd +++ /dev/null @@ -1,122 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" - xmlns:xdomea="urn:xoev-de:xdomea:schema:3.0.0" - targetNamespace="urn:xoev-de:xdomea:schema:3.0.0" - version="3.0.0" - elementFormDefault="qualified" - attributeFormDefault="unqualified"> - <xs:annotation> - <xs:appinfo> - <standard> - <nameLang>xdomea - XÖV-Standard für den IT-gestützten Austausch und die IT-gestützte Aussonderung behördlichen Schriftgutes</nameLang> - <nameKurz>xdomea</nameKurz> - <nameTechnisch>xdomea</nameTechnisch> - <kennung>urn:xoev-de:xdomea:kosit:standard:xdomea</kennung> - <beschreibung>xdomea ist der vom IT-Planungsrat verabschiedete verbindliche Standard für den Austausch von Akten, Vorgängen und Dokumenten im Kontext der Übermittlung, der Abgabe sowie der Aussonderung von Schriftgutobjekten (www.it-planungsrat.de, Beschluss 2017/39). Weiterhin kann xdomea für den Austausch zwischen Fachverfahren und DMS/VBS sowie für die Zwischenarchivierung genutzt werden. - -Um diese Anwendungsszenarien bestmöglich zu unterstützen, ist xdomea gemäß des XÖV-Rahmenwerkes nach dem Baukastenprinzip aufgebaut und bietet einzelne Nachrichten(gruppen) für die jeweiligen Prozesse an. - -Der Standard xdomea wird von der gleichnamigen Arbeitsgruppe des IT-Planungsrates weiterentwickelt und gepflegt. Der Betrieb des Standards erfolgt durch die Koordinierungsstelle für IT-Standards (KoSIT). -</beschreibung> - </standard> - <versionStandard> - <version>3.0.0</version> - <beschreibung>Die Version 3.0.0 ist durch den IT-Planungsrat beschlossen. Details zum Beschluss sowie zu den Fristen der Umsetzung sind der Veröffentlichung im Bundesanzeiger unter www.bundesanzeiger.de zu entnehmen.</beschreibung> - <versionXOEVProfil>1.7.2</versionXOEVProfil> - <versionXOEVHandbuch>2.3.1</versionXOEVHandbuch> - <versionXGenerator>3.0.1</versionXGenerator> - <versionModellierungswerkzeug>19.0</versionModellierungswerkzeug> - <nameModellierungswerkzeug>MagicDraw</nameModellierungswerkzeug> - </versionStandard> - <title>Abgabe durchführen</title> - </xs:appinfo> - </xs:annotation> - <xs:include schemaLocation="xdomea-Baukasten.xsd"/> - <xs:include schemaLocation="xdomea-Typen-AbgabeDurchfuehren.xsd"/> - <xs:element name="Abgabe.Abgabe.0401"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt den vollständigen Export von Schriftgutobjekten bei Zuständigkeitswechseln zwischen Behörden oder bei Systemwechseln.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkAbgabeType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Abgabe-Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Anschreiben" minOccurs="0" type="xdomea:DokumentType"> - <xs:annotation> - <xs:documentation>Ein Dokument, das dem Empfänger zur Erläuterung der Abgabe mitgegeben wird.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Schriftgutobjekt" maxOccurs="unbounded"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Bei der Abgabe müssen zu einem Schriftgutobjekt alle prozess- und aktenrelevanten Metadaten übergeben werden. Die Fristen und die Aussonderungsart werden bei der Abgabe zu einem Schriftgutobjekt mit übergeben. Die aufnehmende Behörde kann entscheiden, ob diese Informationen dann in das eigene System übernommen werden oder nicht.</implementationHint> - </xs:appinfo> - <xs:documentation>Ein Schriftgutobjekt (Akte, Vorgang oder Dokument) zu einer Abgabe.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:choice> - <xs:element name="Akte" type="xdomea:AkteType"> - <xs:annotation> - <xs:documentation>Eine Akte.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Vorgang" type="xdomea:VorgangType"> - <xs:annotation> - <xs:documentation>Ein Vorgang.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Dokument" type="xdomea:DokumentType"> - <xs:annotation> - <xs:documentation>Ein Dokument.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:choice> - </xs:complexType> - </xs:element> - <xs:element name="Aktenplan" minOccurs="0" type="xdomea:AktenplanType"> - <xs:annotation> - <xs:documentation>Der Aktenplan zu einer Abgabe enthält ein aufgabenbezogenes mehrstufiges Ordnungssystem mit einer hierarchischer Gliederung für das Bilden und Kennzeichnen von Akten und Vorgängen sowie das Zuordnen von Dokumenten.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Abgabe.ImportBestaetigen.0402"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die erfolgreiche oder nicht erfolgreiche Übernahme der Abgabe.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkBasisType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Importnachricht zu einer Abgabe.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="AbgegebenesObjekt" - maxOccurs="unbounded" - type="xdomea:ErfolgOderMisserfolgAbgabeType"> - <xs:annotation> - <xs:documentation>Die Information zum erfolgreichen oder nicht erfolgreichen Import eines Schriftgutobjekts zur Abgabe.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Abgabe.EmpfangBestaetigen.0403"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt den erfolgreichen Empfang der Abgabe.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkBasisType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Empfangsbestätigung.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> -</xs:schema> diff --git a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-AktenplanAustauschen.xsd b/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-AktenplanAustauschen.xsd deleted file mode 100644 index 2b96a4c682119014aed547820d17e2c842d5ce76..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-AktenplanAustauschen.xsd +++ /dev/null @@ -1,72 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" - xmlns:xdomea="urn:xoev-de:xdomea:schema:3.0.0" - targetNamespace="urn:xoev-de:xdomea:schema:3.0.0" - version="3.0.0" - elementFormDefault="qualified" - attributeFormDefault="unqualified"> - <xs:annotation> - <xs:appinfo> - <standard> - <nameLang>xdomea - XÖV-Standard für den IT-gestützten Austausch und die IT-gestützte Aussonderung behördlichen Schriftgutes</nameLang> - <nameKurz>xdomea</nameKurz> - <nameTechnisch>xdomea</nameTechnisch> - <kennung>urn:xoev-de:xdomea:kosit:standard:xdomea</kennung> - <beschreibung>xdomea ist der vom IT-Planungsrat verabschiedete verbindliche Standard für den Austausch von Akten, Vorgängen und Dokumenten im Kontext der Übermittlung, der Abgabe sowie der Aussonderung von Schriftgutobjekten (www.it-planungsrat.de, Beschluss 2017/39). Weiterhin kann xdomea für den Austausch zwischen Fachverfahren und DMS/VBS sowie für die Zwischenarchivierung genutzt werden. - -Um diese Anwendungsszenarien bestmöglich zu unterstützen, ist xdomea gemäß des XÖV-Rahmenwerkes nach dem Baukastenprinzip aufgebaut und bietet einzelne Nachrichten(gruppen) für die jeweiligen Prozesse an. - -Der Standard xdomea wird von der gleichnamigen Arbeitsgruppe des IT-Planungsrates weiterentwickelt und gepflegt. Der Betrieb des Standards erfolgt durch die Koordinierungsstelle für IT-Standards (KoSIT). -</beschreibung> - </standard> - <versionStandard> - <version>3.0.0</version> - <beschreibung>Die Version 3.0.0 ist durch den IT-Planungsrat beschlossen. Details zum Beschluss sowie zu den Fristen der Umsetzung sind der Veröffentlichung im Bundesanzeiger unter www.bundesanzeiger.de zu entnehmen.</beschreibung> - <versionXOEVProfil>1.7.2</versionXOEVProfil> - <versionXOEVHandbuch>2.3.1</versionXOEVHandbuch> - <versionXGenerator>3.0.1</versionXGenerator> - <versionModellierungswerkzeug>19.0</versionModellierungswerkzeug> - <nameModellierungswerkzeug>MagicDraw</nameModellierungswerkzeug> - </versionStandard> - <title>Aktenplan austauschen</title> - </xs:appinfo> - </xs:annotation> - <xs:include schemaLocation="xdomea-Baukasten.xsd"/> - <xs:element name="Aktenplan.Aktenplan.0301"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Die austauschenden Behörden müssen die für den Aktenplan erforderliche Konfiguration abstimmen, wenn dieser übernommen werden soll.</implementationHint> - </xs:appinfo> - <xs:documentation>Die Nachricht beschreibt den Export eines Aktenplans zur Information oder Übernahme in ein anderes System.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" - type="xdomea:NkNichtFVDatenWeitereEmpfaengerMitEmpfangsbestaetigungType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Aktenplan-Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Aktenplan" type="xdomea:AktenplanType"> - <xs:annotation> - <xs:documentation>Der zu übergebende Aktenplan enthält ein aufgabenbezogenes mehrstufiges Ordnungssystem mit hierarchischer Gliederung für das Bilden und Kennzeichnen von Akten und Vorgängen sowie das Zuordnen von Dokumenten.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Aktenplan.EmpfangBestaetigen.0302"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt den erfolgreichen Empfang des Aktenplans.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkBasisType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Empfangsbestätigung.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> -</xs:schema> diff --git a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-Archivsystem.xsd b/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-Archivsystem.xsd deleted file mode 100644 index 08946f4b970c317144764fd67fda24ae4f2ed87b..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-Archivsystem.xsd +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" - xmlns:xdomea="urn:xoev-de:xdomea:schema:3.0.0" - targetNamespace="urn:xoev-de:xdomea:schema:3.0.0" - version="3.0.0" - elementFormDefault="qualified" - attributeFormDefault="unqualified"> - <xs:annotation> - <xs:appinfo> - <standard> - <nameLang>xdomea - XÖV-Standard für den IT-gestützten Austausch und die IT-gestützte Aussonderung behördlichen Schriftgutes</nameLang> - <nameKurz>xdomea</nameKurz> - <nameTechnisch>xdomea</nameTechnisch> - <kennung>urn:xoev-de:xdomea:kosit:standard:xdomea</kennung> - <beschreibung>xdomea ist der vom IT-Planungsrat verabschiedete verbindliche Standard für den Austausch von Akten, Vorgängen und Dokumenten im Kontext der Übermittlung, der Abgabe sowie der Aussonderung von Schriftgutobjekten (www.it-planungsrat.de, Beschluss 2017/39). Weiterhin kann xdomea für den Austausch zwischen Fachverfahren und DMS/VBS sowie für die Zwischenarchivierung genutzt werden. - -Um diese Anwendungsszenarien bestmöglich zu unterstützen, ist xdomea gemäß des XÖV-Rahmenwerkes nach dem Baukastenprinzip aufgebaut und bietet einzelne Nachrichten(gruppen) für die jeweiligen Prozesse an. - -Der Standard xdomea wird von der gleichnamigen Arbeitsgruppe des IT-Planungsrates weiterentwickelt und gepflegt. Der Betrieb des Standards erfolgt durch die Koordinierungsstelle für IT-Standards (KoSIT). -</beschreibung> - </standard> - <versionStandard> - <version>3.0.0</version> - <beschreibung>Die Version 3.0.0 ist durch den IT-Planungsrat beschlossen. Details zum Beschluss sowie zu den Fristen der Umsetzung sind der Veröffentlichung im Bundesanzeiger unter www.bundesanzeiger.de zu entnehmen.</beschreibung> - <versionXOEVProfil>1.7.2</versionXOEVProfil> - <versionXOEVHandbuch>2.3.1</versionXOEVHandbuch> - <versionXGenerator>3.0.1</versionXGenerator> - <versionModellierungswerkzeug>19.0</versionModellierungswerkzeug> - <nameModellierungswerkzeug>MagicDraw</nameModellierungswerkzeug> - </versionStandard> - </xs:appinfo> - </xs:annotation> - <xs:include schemaLocation="xdomea-Nachrichten-AktenplanAustauschen.xsd"/> - <xs:include schemaLocation="xdomea-Nachrichten-AussonderungDurchfuehren.xsd"/> -</xs:schema> diff --git a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-AussonderungDurchfuehren.xsd b/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-AussonderungDurchfuehren.xsd deleted file mode 100644 index 1ed82d2216a97067129fd87ad4400b097bb95737..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-AussonderungDurchfuehren.xsd +++ /dev/null @@ -1,324 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" - xmlns:xdomea="urn:xoev-de:xdomea:schema:3.0.0" - targetNamespace="urn:xoev-de:xdomea:schema:3.0.0" - version="3.0.0" - elementFormDefault="qualified" - attributeFormDefault="unqualified"> - <xs:annotation> - <xs:appinfo> - <standard> - <nameLang>xdomea - XÖV-Standard für den IT-gestützten Austausch und die IT-gestützte Aussonderung behördlichen Schriftgutes</nameLang> - <nameKurz>xdomea</nameKurz> - <nameTechnisch>xdomea</nameTechnisch> - <kennung>urn:xoev-de:xdomea:kosit:standard:xdomea</kennung> - <beschreibung>xdomea ist der vom IT-Planungsrat verabschiedete verbindliche Standard für den Austausch von Akten, Vorgängen und Dokumenten im Kontext der Übermittlung, der Abgabe sowie der Aussonderung von Schriftgutobjekten (www.it-planungsrat.de, Beschluss 2017/39). Weiterhin kann xdomea für den Austausch zwischen Fachverfahren und DMS/VBS sowie für die Zwischenarchivierung genutzt werden. - -Um diese Anwendungsszenarien bestmöglich zu unterstützen, ist xdomea gemäß des XÖV-Rahmenwerkes nach dem Baukastenprinzip aufgebaut und bietet einzelne Nachrichten(gruppen) für die jeweiligen Prozesse an. - -Der Standard xdomea wird von der gleichnamigen Arbeitsgruppe des IT-Planungsrates weiterentwickelt und gepflegt. Der Betrieb des Standards erfolgt durch die Koordinierungsstelle für IT-Standards (KoSIT). -</beschreibung> - </standard> - <versionStandard> - <version>3.0.0</version> - <beschreibung>Die Version 3.0.0 ist durch den IT-Planungsrat beschlossen. Details zum Beschluss sowie zu den Fristen der Umsetzung sind der Veröffentlichung im Bundesanzeiger unter www.bundesanzeiger.de zu entnehmen.</beschreibung> - <versionXOEVProfil>1.7.2</versionXOEVProfil> - <versionXOEVHandbuch>2.3.1</versionXOEVHandbuch> - <versionXGenerator>3.0.1</versionXGenerator> - <versionModellierungswerkzeug>19.0</versionModellierungswerkzeug> - <nameModellierungswerkzeug>MagicDraw</nameModellierungswerkzeug> - </versionStandard> - <title>Aussonderung durchführen</title> - </xs:appinfo> - </xs:annotation> - <xs:include schemaLocation="xdomea-Baukasten.xsd"/> - <xs:include schemaLocation="xdomea-Typen-AussonderungDurchfuehren.xsd"/> - <xs:element name="Aussonderung.Anbieteverzeichnis.0501"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt den Export von Metadaten zu Schriftgutobjekten, die dem zuständigen Archiv angeboten werden sollen.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" - type="xdomea:NkNichtFVDatenEinEmpfaengerMitEmpfangsbestaetigungType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Anbieteverzeichnis-Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Anschreiben" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:DokumentType"> - <xs:annotation> - <xs:documentation>Ein Dokument, in dem allgemeine Informationen zu den anzubietenden Schriftgutobjekten an das Archiv mitgegeben werden. Hier können auch Formblätter (z.B. Vorblatt zur Abgabe) mitgegeben werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Schriftgutobjekt" maxOccurs="unbounded"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Es werden im Rahmen des Versendens eines Anbieteverzeichnisses keine Primärdokumente übergeben. Die MetadatenAussonderung müssen zwingend übergeben werden.</implementationHint> - </xs:appinfo> - <xs:documentation>Ein Schriftgutobjekt (Akte, Vorgang oder Dokument) zu einem Anbieteverzeichnis.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:choice> - <xs:element name="Akte" type="xdomea:AkteType"> - <xs:annotation> - <xs:documentation>Eine Akte.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Vorgang" type="xdomea:VorgangType"> - <xs:annotation> - <xs:documentation>Ein Vorgang.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Dokument" type="xdomea:DokumentType"> - <xs:annotation> - <xs:documentation>Ein Dokument.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:choice> - </xs:complexType> - </xs:element> - <xs:element name="Aktenplan" minOccurs="0" type="xdomea:AktenplanType"> - <xs:annotation> - <xs:documentation>Der Aktenplan bildet ein aufgabenbezogenes mehrstufiges Ordnungssystem mit hierarchischer Gliederung für das Bilden und Kennzeichnen von Akten und Vorgängen sowie das Zuordnen von Dokumenten. Zur näheren Einordnung des Anbieteverzeichnisses kann der Aktenplan als Anlage mitgeliefert werden.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Aussonderung.Bewertungsverzeichnis.0502"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt den Export von Metadaten zu Schriftgutobjekten, die vom zuständigen Archiv zu einer Bewertung ausgewählt wurden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" - type="xdomea:NkNichtFVDatenEinEmpfaengerMitEmpfangsbestaetigungType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Bewertungsverzeichnis-Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="BewertetesObjekt" - maxOccurs="unbounded" - type="xdomea:RueckgabeparameterAnbietungType"> - <xs:annotation> - <xs:documentation>Die Information zu einem Schriftgutobjekt über die durch das Archiv erfolgte Bewertung im Anbieteverzeichnis.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Aussonderung.Aussonderung.0503"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt den Export von Schriftgutobjekten mit dem Ziel der Übergabe an das zuständige Archiv.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkAussonderungType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Aussonderungs-Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Anschreiben" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:DokumentType"> - <xs:annotation> - <xs:documentation>Ein Dokument, in dem allgemeine Informationen zu den auszusondernden Schriftgutobjekten an das Archiv mitgegeben werden können. Hier können auch Formblätter (z.B. "Vorblatt zur Abgabe" gemäß Registraturrichtlinie) mitgegeben werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Schriftgutobjekt" maxOccurs="unbounded"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Die Primärdokumente und MetadatenAussonderung müssen zwingend im Zuge einer Aussonderung übergeben werden.</implementationHint> - </xs:appinfo> - <xs:documentation>Ein Schriftgutobjekt (Akte, Vorgang oder Dokument) zu einer Aussonderung.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:choice> - <xs:element name="Akte" type="xdomea:AkteType"> - <xs:annotation> - <xs:documentation>Eine Akte.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Vorgang" type="xdomea:VorgangType"> - <xs:annotation> - <xs:documentation>Ein Vorgang.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Dokument" type="xdomea:DokumentType"> - <xs:annotation> - <xs:documentation>Ein Dokument.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:choice> - </xs:complexType> - </xs:element> - <xs:element name="Aktenplan" minOccurs="0" type="xdomea:AktenplanType"> - <xs:annotation> - <xs:documentation>Der Aktenplan zu einer Aussonderung enthält ein aufgabenbezogenes mehrstufiges Ordnungssystem mit hierarchischer Gliederung für das Bilden und Kennzeichnen von Akten und Vorgängen sowie das Zuordnen von Dokumenten.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Aussonderung.AnbietungEmpfangBestaetigen.0504"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt den erfolgreichen Empfang des Anbietverzeichnisses.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkBasisType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Empfangsbestätigung.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Aussonderung.BewertungEmpfangBestaetigen.0505"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt den erfolgreichen Empfang des Bewertungsverzeichnisses.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkBasisType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Empfangsbestätigung.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Aussonderung.AussonderungImportBestaetigen.0506"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die erfolgreiche oder nicht erfolgreiche Übernahme der Aussonderung.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkBasisType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Importnachricht zu einer Aussonderung.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="AusgesondertesSGO" - maxOccurs="unbounded" - type="xdomea:ErfolgOderMisserfolgAussonderungType"> - <xs:annotation> - <xs:documentation>Die Information zum erfolgreichen oder nicht erfolgreichen Import eines Schriftgutobjekts zur Aussonderung.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Aussonderung.AussonderungEmpfangBestaetigen.0507"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt den erfolgreichen Empfang der Aussonderung.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkBasisType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Empfangsbestätigung.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Aussonderung.AktenplanZurBewertung.0511"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt den Export eines Aktenplans zur Bewertung an ein Archiv nach Anfrage durch das Archiv.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" - type="xdomea:NkNichtFVDatenWeitereEmpfaengerMitEmpfangsbestaetigungType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Aktenplan-Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Aktenplan" type="xdomea:AktenplanBewertungskatalogType"> - <xs:annotation> - <xs:documentation>Der für die Bewertung zu übergebende Aktenplan enthält ein aufgabenbezogenes mehrstufiges Ordnungssystem mit hierarchischer Gliederung für das Bilden und Kennzeichnen von Akten und Vorgängen sowie das Zuordnen von Dokumenten.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Aussonderung.AktenplanZurBewertungEmpfangBestaetigen.0512"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt den erfolgreichen Empfang des Aktenplans zur Bewertung.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkBasisType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Empfangsbestätigung.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Aussonderung.Bewertungskatalog.0513"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt den Export eines archivisch bewerteten Aktenplans.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" - type="xdomea:NkNichtFVDatenWeitereEmpfaengerMitEmpfangsbestaetigungType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Bewertungskatalog-Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="BewerteteAktenplaneinheit" - maxOccurs="unbounded" - type="xdomea:AktenplaneinheitAktenplanBewertungskatalogType"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Voraussetzung für die Implementierung ist, dass das DMS / VBS die UUID, die es jeder Aktenplaneinheit in den Nachrichten zugeordnet hat, auch im System hinterlegt hat.</implementationHint> - </xs:appinfo> - <xs:documentation>Die bewertete Einheit eines Aktenplans. Eine Aktenplanheit entspricht z.B. einer Hauptgruppe, Obergruppe, Gruppe, Untergruppe oder Betreffseinheit.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Aussonderung.BewertungskatalogImportBestaetigen.0514"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die erfolgreiche oder nicht erfolgreiche Übernahme des Bewertungskataloges.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkBasisType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Importnachricht zu einem Bewertungskatalog.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="BewerteteAktenplaneinheit" - maxOccurs="unbounded" - type="xdomea:ErfolgOderMisserfolgBewertungskatalogType"> - <xs:annotation> - <xs:documentation>Die Information über den erfolgreichen oder nicht erfolgreichen Import des Wertes in "Aussonderungsart" oder "AussonderungsartKonfigurierbar" zu der jeweiligen Aktenplaneinheit.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Aussonderung.BewerteterAktenplanEmpfangBestaetigen.0515"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt den erfolgreichen Empfang des bewerteten Aktenplans.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkBasisType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Empfangsbestätigung.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> -</xs:schema> diff --git a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-DMS.xsd b/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-DMS.xsd deleted file mode 100644 index 26526bcce64eb9f0cc087cb8f50ac048bc0b11d0..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-DMS.xsd +++ /dev/null @@ -1,37 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" - xmlns:xdomea="urn:xoev-de:xdomea:schema:3.0.0" - targetNamespace="urn:xoev-de:xdomea:schema:3.0.0" - version="3.0.0" - elementFormDefault="qualified" - attributeFormDefault="unqualified"> - <xs:annotation> - <xs:appinfo> - <standard> - <nameLang>xdomea - XÖV-Standard für den IT-gestützten Austausch und die IT-gestützte Aussonderung behördlichen Schriftgutes</nameLang> - <nameKurz>xdomea</nameKurz> - <nameTechnisch>xdomea</nameTechnisch> - <kennung>urn:xoev-de:xdomea:kosit:standard:xdomea</kennung> - <beschreibung>xdomea ist der vom IT-Planungsrat verabschiedete verbindliche Standard für den Austausch von Akten, Vorgängen und Dokumenten im Kontext der Übermittlung, der Abgabe sowie der Aussonderung von Schriftgutobjekten (www.it-planungsrat.de, Beschluss 2017/39). Weiterhin kann xdomea für den Austausch zwischen Fachverfahren und DMS/VBS sowie für die Zwischenarchivierung genutzt werden. - -Um diese Anwendungsszenarien bestmöglich zu unterstützen, ist xdomea gemäß des XÖV-Rahmenwerkes nach dem Baukastenprinzip aufgebaut und bietet einzelne Nachrichten(gruppen) für die jeweiligen Prozesse an. - -Der Standard xdomea wird von der gleichnamigen Arbeitsgruppe des IT-Planungsrates weiterentwickelt und gepflegt. Der Betrieb des Standards erfolgt durch die Koordinierungsstelle für IT-Standards (KoSIT). -</beschreibung> - </standard> - <versionStandard> - <version>3.0.0</version> - <beschreibung>Die Version 3.0.0 ist durch den IT-Planungsrat beschlossen. Details zum Beschluss sowie zu den Fristen der Umsetzung sind der Veröffentlichung im Bundesanzeiger unter www.bundesanzeiger.de zu entnehmen.</beschreibung> - <versionXOEVProfil>1.7.2</versionXOEVProfil> - <versionXOEVHandbuch>2.3.1</versionXOEVHandbuch> - <versionXGenerator>3.0.1</versionXGenerator> - <versionModellierungswerkzeug>19.0</versionModellierungswerkzeug> - <nameModellierungswerkzeug>MagicDraw</nameModellierungswerkzeug> - </versionStandard> - </xs:appinfo> - </xs:annotation> - <xs:include schemaLocation="xdomea-Nachrichten-AbgabeDurchfuehren.xsd"/> - <xs:include schemaLocation="xdomea-Nachrichten-AktenplanAustauschen.xsd"/> - <xs:include schemaLocation="xdomea-Nachrichten-AussonderungDurchfuehren.xsd"/> - <xs:include schemaLocation="xdomea-Nachrichten-InformationAustauschen.xsd"/> -</xs:schema> diff --git a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-Fachverfahren.xsd b/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-Fachverfahren.xsd deleted file mode 100644 index 0f79de371787645c740f1f1ebb6e776fff4eb057..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-Fachverfahren.xsd +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" - xmlns:xdomea="urn:xoev-de:xdomea:schema:3.0.0" - targetNamespace="urn:xoev-de:xdomea:schema:3.0.0" - version="3.0.0" - elementFormDefault="qualified" - attributeFormDefault="unqualified"> - <xs:annotation> - <xs:appinfo> - <standard> - <nameLang>xdomea - XÖV-Standard für den IT-gestützten Austausch und die IT-gestützte Aussonderung behördlichen Schriftgutes</nameLang> - <nameKurz>xdomea</nameKurz> - <nameTechnisch>xdomea</nameTechnisch> - <kennung>urn:xoev-de:xdomea:kosit:standard:xdomea</kennung> - <beschreibung>xdomea ist der vom IT-Planungsrat verabschiedete verbindliche Standard für den Austausch von Akten, Vorgängen und Dokumenten im Kontext der Übermittlung, der Abgabe sowie der Aussonderung von Schriftgutobjekten (www.it-planungsrat.de, Beschluss 2017/39). Weiterhin kann xdomea für den Austausch zwischen Fachverfahren und DMS/VBS sowie für die Zwischenarchivierung genutzt werden. - -Um diese Anwendungsszenarien bestmöglich zu unterstützen, ist xdomea gemäß des XÖV-Rahmenwerkes nach dem Baukastenprinzip aufgebaut und bietet einzelne Nachrichten(gruppen) für die jeweiligen Prozesse an. - -Der Standard xdomea wird von der gleichnamigen Arbeitsgruppe des IT-Planungsrates weiterentwickelt und gepflegt. Der Betrieb des Standards erfolgt durch die Koordinierungsstelle für IT-Standards (KoSIT). -</beschreibung> - </standard> - <versionStandard> - <version>3.0.0</version> - <beschreibung>Die Version 3.0.0 ist durch den IT-Planungsrat beschlossen. Details zum Beschluss sowie zu den Fristen der Umsetzung sind der Veröffentlichung im Bundesanzeiger unter www.bundesanzeiger.de zu entnehmen.</beschreibung> - <versionXOEVProfil>1.7.2</versionXOEVProfil> - <versionXOEVHandbuch>2.3.1</versionXOEVHandbuch> - <versionXGenerator>3.0.1</versionXGenerator> - <versionModellierungswerkzeug>19.0</versionModellierungswerkzeug> - <nameModellierungswerkzeug>MagicDraw</nameModellierungswerkzeug> - </versionStandard> - </xs:appinfo> - </xs:annotation> - <xs:include schemaLocation="xdomea-Nachrichten-FachverfahrensdatenAustauschen.xsd"/> -</xs:schema> diff --git a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-FachverfahrensdatenAustauschen.xsd b/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-FachverfahrensdatenAustauschen.xsd deleted file mode 100644 index b10277c5a5d5154b82aec91e604e15b8cfd18aff..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-FachverfahrensdatenAustauschen.xsd +++ /dev/null @@ -1,692 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" - xmlns:xdomea="urn:xoev-de:xdomea:schema:3.0.0" - targetNamespace="urn:xoev-de:xdomea:schema:3.0.0" - version="3.0.0" - elementFormDefault="qualified" - attributeFormDefault="unqualified"> - <xs:annotation> - <xs:appinfo> - <standard> - <nameLang>xdomea - XÖV-Standard für den IT-gestützten Austausch und die IT-gestützte Aussonderung behördlichen Schriftgutes</nameLang> - <nameKurz>xdomea</nameKurz> - <nameTechnisch>xdomea</nameTechnisch> - <kennung>urn:xoev-de:xdomea:kosit:standard:xdomea</kennung> - <beschreibung>xdomea ist der vom IT-Planungsrat verabschiedete verbindliche Standard für den Austausch von Akten, Vorgängen und Dokumenten im Kontext der Übermittlung, der Abgabe sowie der Aussonderung von Schriftgutobjekten (www.it-planungsrat.de, Beschluss 2017/39). Weiterhin kann xdomea für den Austausch zwischen Fachverfahren und DMS/VBS sowie für die Zwischenarchivierung genutzt werden. - -Um diese Anwendungsszenarien bestmöglich zu unterstützen, ist xdomea gemäß des XÖV-Rahmenwerkes nach dem Baukastenprinzip aufgebaut und bietet einzelne Nachrichten(gruppen) für die jeweiligen Prozesse an. - -Der Standard xdomea wird von der gleichnamigen Arbeitsgruppe des IT-Planungsrates weiterentwickelt und gepflegt. Der Betrieb des Standards erfolgt durch die Koordinierungsstelle für IT-Standards (KoSIT). -</beschreibung> - </standard> - <versionStandard> - <version>3.0.0</version> - <beschreibung>Die Version 3.0.0 ist durch den IT-Planungsrat beschlossen. Details zum Beschluss sowie zu den Fristen der Umsetzung sind der Veröffentlichung im Bundesanzeiger unter www.bundesanzeiger.de zu entnehmen.</beschreibung> - <versionXOEVProfil>1.7.2</versionXOEVProfil> - <versionXOEVHandbuch>2.3.1</versionXOEVHandbuch> - <versionXGenerator>3.0.1</versionXGenerator> - <versionModellierungswerkzeug>19.0</versionModellierungswerkzeug> - <nameModellierungswerkzeug>MagicDraw</nameModellierungswerkzeug> - </versionStandard> - <title>Fachverfahrensdaten austauschen</title> - </xs:appinfo> - </xs:annotation> - <xs:include schemaLocation="xdomea-Baukasten.xsd"/> - <xs:include schemaLocation="xdomea-Typen-FachverfahrensdatenAustauschen.xsd"/> - <xs:element name="FVDaten.DokumentAktualisieren.0601"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Für die Aktualisierung eines Dokuments ist die in den Eingabeparametern übergebene UUID relevant. Die UUID im Element Identifikation des Typs DokumentType ist hierfür irrelevant.</implementationHint> - </xs:appinfo> - <xs:documentation>Die Nachricht beschreibt die Aktualisierung eines bereits im DMS vorhandenen Dokuments. Als Rückgabeparameter sollte die Bestätigung des erfolgreichen Aktualisierens mit der ID des Dokuments gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="DokumentZumAktualisieren" - maxOccurs="unbounded" - type="xdomea:DokumentZumAktualisierenType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem Dokument, das im DMS aktualisiert werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.SGOAnsehen.0602"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die Übergabe eines Schriftgutobjekts, das im DMS angezeigt werden soll. Als Rückgabeparameter sollte die Bestätigung des erfolgreichen Öffnens des Schriftgutobjekts zur Ansicht mit seiner ID gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SchriftgutobjektZumAnsehen" - type="xdomea:SchriftgutobjektZumAnsehenOderBearbeitenType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem Schriftgutobjekt, das angesehen werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.SGOBearbeiten.0603"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die Übergabe eines Schriftgutobjekts, das zur Bearbeitung geöffnet werden soll. Als Rückgabeparameter sollte die Bestätigung des erfolgreichen Öffnens des Schriftgutobjekts zur Bearbeitung mit seiner ID gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SchriftgutobjektZumBearbeiten" - type="xdomea:SchriftgutobjektZumAnsehenOderBearbeitenType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem Schriftgutobjekt, das bearbeitet werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.SGOErstellen.0604"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die Übergabe von neuen Schriftgutobjekten zur Erstellung im DMS. Als Rückgabeparameter sollte jeweils die Bestätigung des erfolgreichen Erstellens des Schriftgutobjekts mit seiner ID im DMS gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SchriftgutobjektZumErstellen" - maxOccurs="unbounded" - type="xdomea:SchriftgutobjektZumErstellenType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem neuen Schriftgutobjekt, das erstellt werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.SGOAblegen.0605"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Als Ergebnis wird immer ein neues Dokument mit einer neuen UUID im DMS angelegt. Daher ist die UUID im Element Identifikation im Typ DokumentType hier zu ignorieren.</implementationHint> - </xs:appinfo> - <xs:documentation>Die Nachricht beschreibt die Übergabe von neuen Schriftgutobjekten an das DMS zur Ablage. Als Rückgabeparameter sollte jeweils die Bestätigung des erfolgreichen Ablegens des Schriftgutobjekts mit seiner ID gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SchriftgutobjektZumAblegen" - maxOccurs="unbounded" - type="xdomea:SchriftgutobjektZumAblegenType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem Schriftgutobjekt, das abgelegt werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.SGODrucken.0606"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die Übergabe von zu druckenden Schriftgutobjekten. Als Rückgabeparameter sollte jeweils die Bestätigung des erfolgreichen Druckens des Schriftgutobjekts mit seiner ID gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SchriftgutobjektZumDrucken" - maxOccurs="unbounded" - type="xdomea:SchriftgutobjektZumDruckenType"> - <xs:annotation> - <xs:documentation>Die Informationen zum zu druckenden Schriftgutobjekt.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.ProtokolleintragErstellen.0607"> - <xs:annotation> - <xs:documentation>Die Nachricht ermöglicht die Erstellung eines Protokolleintrags zu einem Objekt im DMS. Als Rückgabeparameter sollte jeweils die Bestätigung des erfolgreichen Erstellens des Protokolleintrags mit der dazugehörigen Schriftgutobjekt-ID gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="ProtokolleintragZumErstellen" - maxOccurs="unbounded" - type="xdomea:ProtokolleintragZumErstellenType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem zu erstellenden Protokolleintrag.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.SGOSuchen.0608"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die Übergabe von Parametern zur Suche nach Schriftgutobjekten im DMS. Als Rückgabeparameter soll die Liste der Schriftgutobjekte mit ihren IDs gesendet werden, auf die die Suchparameter zutreffen.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SchriftgutobjektZumSuchen" - type="xdomea:SchriftgutobjektZumSuchenType"> - <xs:annotation> - <xs:documentation>Die Parameter zu einer Suche nach Schriftgutobjekten.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.MetadatenAnlegen.0609"> - <xs:annotation> - <xs:documentation>Die Nachricht ermöglicht das Anlegen eines Metadatums zu einem Objekt im DMS. Als Rückgabeparameter sollte die Bestätigung des erfolgreichen Anlegens der Metadaten mit den entsprechenden Namen und Werten sowie der ID und evtl. der Versionsnummer (nur für Dokumente) des Schriftgutobjekts gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="MetadatenZumAnlegen" - maxOccurs="unbounded" - type="xdomea:MetadatenZumBearbeitenType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem neuen Metadatum.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.MetadatenAktualisieren.0610"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die Aktualisierung eines bereits existierenden Metadatums. Als Rückgabeparameter sollte die Bestätigung des erfolgreichen Aktualisierens von Metadaten mit entsprechendem Namen und Wert sowie der ID und evtl. der Versionsnummer (nur für Dokumente) des Schriftgutobjekts gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="MetadatenZumAktualisieren" - maxOccurs="unbounded" - type="xdomea:MetadatenZumBearbeitenType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem zu aktualisierenden Metadatum.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.MetadatenAnsehen.0611"> - <xs:annotation> - <xs:documentation>Die Nachricht ermöglicht das Auslesen des Wertes zu einem Metadatum. Als Rückgabeparameter sollten die Namen und Werte der angeforderten Metadaten gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="MetadatenZumAnsehen" - maxOccurs="unbounded" - type="xdomea:MetadatenZumBearbeitenType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem Metadatum, das angesehen werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.MetadatenLoeschen.0612"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die Übergabe eines zu löschenden Metadatums. Als Rückgabeparameter sollte die Bestätigung des erfolgreichen Löschens der Metadaten mit den entsprechenden Namen und Werten sowie der ID und evtl. der Versionsnummer (nur für Dokumente) des Schriftgutobjekts gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="MetadatenZumLoeschen" - maxOccurs="unbounded" - type="xdomea:MetadatenZumBearbeitenType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem zu löschenden Metadatum.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.SGOLoeschenMarkieren.0613"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die Übergabe von Schriftgutobjekten, die im DMS zum Löschen markiert werden sollen (4-Augen-Löschen). Als Rückgabeparameter sollte jeweils die Bestätigung des erfolgreichen Markierens des Schriftgutobjekts zur Löschung mit seiner ID gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SchriftgutobjektZumLoeschenMarkieren" - maxOccurs="unbounded" - type="xdomea:SchriftgutobjektZumLoeschenType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem Schriftgutobjekt, das zum Löschen markiert werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.SGOLoeschmarkierungAufheben.0614"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die Übergabe von Schriftgutobjekten, für die die Löschmarkierung im DMS aufgehoben werden soll (4-Augen-Löschen). Als Rückgabeparameter sollte jeweils die Bestätigung des erfolgreichen Aufhebens der Löschmarkierung des Schriftgutobjekts mit seiner ID gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SchriftgutobjektZumLoeschmarkierungAufheben" - maxOccurs="unbounded" - type="xdomea:SchriftgutobjektZumLoeschenType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem Schriftgutobjekt, dessen Löschmarkierung aufgehoben werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.SGOEndgueltigLoeschen.0615"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die Übergabe von Schriftgutobjekten zur endgültigen Löschung im DMS. Als Rückgabeparameter sollte jeweils die Bestätigung des erfolgreichen endgültigen Löschens des Schriftgutobjekts mit seiner ID gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SchriftgutobjektZumEndgueltigLoeschen" - maxOccurs="unbounded" - type="xdomea:SchriftgutobjektZumLoeschenType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem Schriftgutobjekt, das endgültig gelöscht werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.SGOLoeschstatusAbfragen.0616"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die Übergabe von Schriftgutobjekten, zu denen der Löschstatus im DMS abgefragt werden soll. Als Rückgabeparameter sollte jeweils der Löschstatus des Schriftgutobjekts mit seiner ID gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SchriftgutobjektZumLoeschstatusAbfragen" - maxOccurs="unbounded" - type="xdomea:SchriftgutobjektZumLoeschstatusAbfragenType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem Schriftgutobjekt, dessen Löschstatus abgefragt werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.SGOUngueltigKennzeichnen.0617"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die Übergabe von Schriftgutobjekten, die im DMS als ungültig markiert werden sollen. Als Rückgabeparameter sollte jeweils die Bestätigung des erfolgreichen Ungültig-Markierens des Schriftgutobjekts mit seiner ID gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SchriftgutobjektZumUngueltigKennzeichnen" - maxOccurs="unbounded" - type="xdomea:SchriftgutobjektZumLoeschenType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem Schriftgutobjekt, das als ungültig gekennzeichnet werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.DatensatzLoeschen.0618"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die Übergabe eines im Fachverfahren vollständig gelöschten Datensatzes, um alle zugehörigen Objekte im DMS ebenfalls zu löschen. Als Rückgabeparameter sollte die Löschbestätigung zum Datensatz im DMS mit der Datensatz-ID im Fachverfahren gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="DatensatzZumLoeschen" - maxOccurs="unbounded" - type="xdomea:DatensatzZumLoeschenType"> - <xs:annotation> - <xs:documentation>Die Information zu dem im Fachverfahren gelöschten Datensatz, zu dem auch alle vorhandenen Objekte im DMS gelöscht werden sollen.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.BenachrichtigungAbrufen.0619"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die Abfrage eventuell bereitgestellter Daten (Benachrichtigungen) durch ein Fachverfahren. Die Bereitstellung von Daten (bspw. neuer Dokumente) erfolgt durch ein DMS, das die Daten zum Abruf für ein Fachverfahren zur Verfügung stellt. Als Rückgabeparameter sollten die im System vorliegenden Benachrichtigungen gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.VertretungAktivierenOderDeaktivieren.0620"> - <xs:annotation> - <xs:documentation>Diese Nachricht beschreibt die Übergabe von Informationen zum Aktivieren oder zum Deaktivieren einer Vertretung im DMS. Als Rückgabeparameter sollte die Liste von Vertretern (Benutzer/Rolle) mit ihrem Namen und ihrem Aktivierungsstatus gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="VertretungZumAktivierenOderDeaktivieren" - maxOccurs="unbounded" - type="xdomea:VertretungZumAktivierenOderDeaktivierenType"> - <xs:annotation> - <xs:documentation>Die Informationen zur Aktivierung oder zur Deaktivierung einer Vertretung.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.VertretungsstatusAbfragen.0621"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die Abfrage zu den verfügbaren bzw. aktiven Vertretungen eines Benutzers oder einer Rolle im DMS. Als Rückgabeparameter sollte die Liste von Vertretern (Benutzer/Rolle) mit ihrem Namen und ihrem Aktivierungsstatus gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="VertretungsstatusZumAbfragen" - maxOccurs="unbounded" - type="xdomea:VertretungsstatusZumAbfragenType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem Benutzer oder der Rolle, für den/die die Statusabfrage durchgeführt werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.ZustaendigkeitAendern.0622"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die Übergabe von Informationen bei dem Zuständigkeitswechsel eines Schriftgutobjekts im Fachverfahren, z.B. bei Widerspruchsverfahren, mit dem Ziel, die Zuständigkeit im DMS anzupassen. Als Rückgabeparameter sollte die Bestätigung des erfolgreichen Aktualisierens der Metadaten des Schriftgutobjekts mit ID des Schriftgutobjekts, alte und neue zuständige Stelle, alte und neue Aktenplaneinheit, alte und neue Akte sowie weitere geänderte Metadaten gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="ZustaendigkeitZumAendern" - maxOccurs="unbounded" - type="xdomea:ZustaendigkeitZumAendernType"> - <xs:annotation> - <xs:documentation>Die Informationen zu der bisherigen und neuen Zuständigkeit des Schriftgutobjekts.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.GesamtprotokollAblegen.0623"> - <xs:annotation> - <xs:documentation>Diese Nachricht ermöglicht es, alle aktenrelevanten Bearbeitungs- und Protokollinformationen aus einem Fachverfahren in einem DMS abzulegen. Die Nachricht ist immer mit der zdA-Verfügung zu übermitteln. Sie kann zudem manuell aus dem Fachverfahren angestoßen werden. Damit wird sichergestellt, dass im DMS die für die Nachvollziehbarkeit erforderliche vollständige elektronische Akte geführt wird. Als Rückgabeparameter sollte die Bestätigung des erfolgreichen Ablegens mit der dazugehörigen Schriftgutobjekt-ID gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="GesamtprotokollZumAblegen" - maxOccurs="unbounded" - type="xdomea:GesamtprotokollZumAblegenType"> - <xs:annotation> - <xs:documentation>Die Informationen zum Gesamtprotokoll, das an das DMS übermittelt werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.SGOZDAVerfuegen.0624"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die Übergabe von Schriftgutobjekten, die zu den Akten verfügt werden sollen. Als Rückgabeparameter sollten jeweils die Bestätigung des erfolgreichen zdA-Verfügens des Schriftgutobjekts mit seiner ID gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SchriftgutobjektZumZDAVerfuegen" - maxOccurs="unbounded" - type="xdomea:SchriftgutobjektZumZDAVerfuegenType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem Schriftgutobjekt, das zdA-verfügt werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.SystemstatusAbfragen.0625"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die Abfrage zum Systemstatus. Als Rückgabeparameter sollte die Liste von Systemstatus mit der SystemstatusID und dem dazugehörigen aktuellen Status gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SystemstatusZumAbfragen" - maxOccurs="unbounded" - type="xdomea:SystemstatusZumAbfragenType"> - <xs:annotation> - <xs:documentation>Die angeforderte Information zum Systemstatus.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.KonfigurationsparameterErstellen.0626"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt das Anlegen eines neuen Konfigurationsparameters. Als Rückgabeparameter sollte die Bestätigung des erfolgreichen Anlegens eines neuen Konfigurationsparameters mit entsprechendem Namen und Wert gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="KonfigurationsparameterZumErstellen" - type="xdomea:KonfigurationsparameterZumErstellenType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem neuen Konfigurationsparameter sowie zu dessen Ersteller.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.KonfigurationsparameterAktualisieren.0627"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die Übergabe eines bereits existierenden Konfigurationsparameters zur Aktualisierung. Als Rückgabeparameter sollte die Bestätigung des erfolgreichen Aktualisierens der Konfigurationsparameter mit entsprechendem Namen und Wert gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="KonfigurationsparameterZumAktualisieren" - maxOccurs="unbounded" - type="xdomea:FeldType"> - <xs:annotation> - <xs:documentation>Die Information zum zu aktualisierenden Konfigurationsparameter.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.KonfigurationsparameterAbrufen.0628"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt den Abruf eines Konfigurationsparameters. Als Rückgabeparameter sollten der Name (immer) sowie soweit vorhanden der Datentyp, die Beschreibung und der Wert des Konfigurationsparameters gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="KonfigurationsparameterZumAbrufen" - maxOccurs="unbounded" - type="xdomea:KonfigurationsparameterZumAbrufenType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem abzurufenden Konfigurationsparameter.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.EmpfangBestaetigen.0629"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt den erfolgreichen Empfang einer Fachverfahrensdaten-Nachricht.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Empfangsbestätigung.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.ImportBestaetigen.0630"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die erfolgreiche oder nicht erfolgreiche Übernahme von Daten.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkRueckmeldungFVDatenImportType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="ErfolgOderMisserfolg" type="xdomea:ErfolgOderMisserfolgDMSType"> - <xs:annotation> - <xs:documentation>Die Information über den erfolgreichen oder nicht erfolgreichen Import von Daten.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.PrimaerdokumentExportieren.0631"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt den Export von Primärdokumenten zu einem Schriftgutobjekt (Dokument) aus einem DMS in ein Fachverfahren. Als Rückgabeparameter sollte der Ablageort der Primärdokumente gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="DokumentZumExportieren" type="xdomea:DokumentZumExportierenType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem Dokument, dessen Primärdokumente exportiert werden sollen.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="FVDaten.SGOZDAAufheben.0632"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt das Aufheben der zdA-Verfügung eines Schriftgutobjekts. Als Rückgabeparameter sollte die Bestätigung des erfolgreichen Wiederauflebens mit der ID des Schriftgutobjekts gesendet werden.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SGOZumZDAAufheben" - maxOccurs="unbounded" - type="xdomea:SchriftgutobjektZumZDAAufhebenType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem Schriftgutobjekt, dessen zdA-Verfügung im DMS aufgehoben werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> -</xs:schema> diff --git a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-GeschaeftsgangDurchfuehren.xsd b/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-GeschaeftsgangDurchfuehren.xsd deleted file mode 100644 index fcdace56d29aab05ee84d2c87f37bd63aac43b5f..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-GeschaeftsgangDurchfuehren.xsd +++ /dev/null @@ -1,138 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" - xmlns:xdomea="urn:xoev-de:xdomea:schema:3.0.0" - targetNamespace="urn:xoev-de:xdomea:schema:3.0.0" - version="3.0.0" - elementFormDefault="qualified" - attributeFormDefault="unqualified"> - <xs:annotation> - <xs:appinfo> - <standard> - <nameLang>xdomea - XÖV-Standard für den IT-gestützten Austausch und die IT-gestützte Aussonderung behördlichen Schriftgutes</nameLang> - <nameKurz>xdomea</nameKurz> - <nameTechnisch>xdomea</nameTechnisch> - <kennung>urn:xoev-de:xdomea:kosit:standard:xdomea</kennung> - <beschreibung>xdomea ist der vom IT-Planungsrat verabschiedete verbindliche Standard für den Austausch von Akten, Vorgängen und Dokumenten im Kontext der Übermittlung, der Abgabe sowie der Aussonderung von Schriftgutobjekten (www.it-planungsrat.de, Beschluss 2017/39). Weiterhin kann xdomea für den Austausch zwischen Fachverfahren und DMS/VBS sowie für die Zwischenarchivierung genutzt werden. - -Um diese Anwendungsszenarien bestmöglich zu unterstützen, ist xdomea gemäß des XÖV-Rahmenwerkes nach dem Baukastenprinzip aufgebaut und bietet einzelne Nachrichten(gruppen) für die jeweiligen Prozesse an. - -Der Standard xdomea wird von der gleichnamigen Arbeitsgruppe des IT-Planungsrates weiterentwickelt und gepflegt. Der Betrieb des Standards erfolgt durch die Koordinierungsstelle für IT-Standards (KoSIT). -</beschreibung> - </standard> - <versionStandard> - <version>3.0.0</version> - <beschreibung>Die Version 3.0.0 ist durch den IT-Planungsrat beschlossen. Details zum Beschluss sowie zu den Fristen der Umsetzung sind der Veröffentlichung im Bundesanzeiger unter www.bundesanzeiger.de zu entnehmen.</beschreibung> - <versionXOEVProfil>1.7.2</versionXOEVProfil> - <versionXOEVHandbuch>2.3.1</versionXOEVHandbuch> - <versionXGenerator>3.0.1</versionXGenerator> - <versionModellierungswerkzeug>19.0</versionModellierungswerkzeug> - <nameModellierungswerkzeug>MagicDraw</nameModellierungswerkzeug> - </versionStandard> - <title>Geschäftsgang durchführen</title> - </xs:appinfo> - </xs:annotation> - <xs:include schemaLocation="xdomea-Baukasten.xsd"/> - <xs:include schemaLocation="xdomea-Typen-GeschaeftsgangDurchfuehren.xsd"/> - <xs:element name="Geschaeftsgang.Geschaeftsgang.0201"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Nach Versand der Nachricht werden die im Hauptobjekt enthaltenen Dokumente gesperrt. Ausnahme bildet hier der Fall, dass die letzte Bearbeitung nicht durch den Initiator erfolgt: in diesem Fall werden die Dokumente im Hauptobjekt nicht gesperrt.</implementationHint> - </xs:appinfo> - <xs:documentation>Die Nachricht beschreibt den Export von Schriftgutobjekten - Hauptobjekt (Dokumente) und Anlagen (Akte, Vorgang, Dokument) - zur Bearbeitung durch externe Bearbeitungsstationen in einem anderen System.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkGeschaeftsgangType"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Der Empfänger ist eine Bearbeitungsstation im externen Geschäftsgang.</implementationHint> - </xs:appinfo> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Geschäftsgangs-Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Anschreiben" minOccurs="0" type="xdomea:DokumentType"> - <xs:annotation> - <xs:documentation>Ein Dokument, das dem Empfänger zur Erläuterung des externen Geschäftsgangs mitgegeben wird.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Hauptobjekt" type="xdomea:HauptobjektType"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Akten oder Vorgänge sind als Element im Hauptobjekt nicht erlaubt.</implementationHint> - </xs:appinfo> - <xs:documentation>Ein Container für die Dokumente, auf die sich die Beteiligungsschritte im externen Geschäftsgang beziehen.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="ExternerGeschaeftsgang" type="xdomea:GeschaeftsgangType"> - <xs:annotation> - <xs:documentation>Im externen Geschäftsgang werden die Verfügungen an externe Bearbeitungsstationen festgelegt.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Anlage" minOccurs="0" maxOccurs="unbounded"> - <xs:annotation> - <xs:documentation>Ein Schriftgutobjekt (Akte, Vorgang oder Dokument), das dem Hauptobjekt als Anlage beigefügt wird.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:choice> - <xs:element name="Akte" type="xdomea:AkteType"> - <xs:annotation> - <xs:documentation>Eine Akte.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Vorgang" type="xdomea:VorgangType"> - <xs:annotation> - <xs:documentation>Ein Vorgang.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Dokument" type="xdomea:DokumentType"> - <xs:annotation> - <xs:documentation>Ein Dokument.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:choice> - </xs:complexType> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Geschaeftsgang.EmpfangBestaetigen.0202"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt den erfolgreichen Empfang des externen Geschäftsgangs.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkRueckmeldungGeschaeftsgangType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Empfangsbestätigung.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Geschaeftsgang.GeaendertenLaufwegMitteilen.0203"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die Information eines Geschäftsgang-Initiators über die Änderung des ursprünglichen Laufwegs, z.B. durch Hinzufügen oder Überspringen von Beteiligungsschritten.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkBasisType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Geschäftsgangs-Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="GeaenderterGeschaeftsgang" type="xdomea:GeschaeftsgangType"> - <xs:annotation> - <xs:documentation>Der komplette geänderte Geschäftsgang.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="GeaenderterBeteiligungsschritt" - maxOccurs="unbounded" - type="xdomea:GeaenderterBeteiligungsschrittType"> - <xs:annotation> - <xs:documentation>Informationen zu geänderten Beteiligungsschritten eines Geschäftsgangs.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> -</xs:schema> diff --git a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-InformationAustauschen.xsd b/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-InformationAustauschen.xsd deleted file mode 100644 index cc0a4bc5164054c367c0ebfb5870b7e8754ea493..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-InformationAustauschen.xsd +++ /dev/null @@ -1,96 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" - xmlns:xdomea="urn:xoev-de:xdomea:schema:3.0.0" - targetNamespace="urn:xoev-de:xdomea:schema:3.0.0" - version="3.0.0" - elementFormDefault="qualified" - attributeFormDefault="unqualified"> - <xs:annotation> - <xs:appinfo> - <standard> - <nameLang>xdomea - XÖV-Standard für den IT-gestützten Austausch und die IT-gestützte Aussonderung behördlichen Schriftgutes</nameLang> - <nameKurz>xdomea</nameKurz> - <nameTechnisch>xdomea</nameTechnisch> - <kennung>urn:xoev-de:xdomea:kosit:standard:xdomea</kennung> - <beschreibung>xdomea ist der vom IT-Planungsrat verabschiedete verbindliche Standard für den Austausch von Akten, Vorgängen und Dokumenten im Kontext der Übermittlung, der Abgabe sowie der Aussonderung von Schriftgutobjekten (www.it-planungsrat.de, Beschluss 2017/39). Weiterhin kann xdomea für den Austausch zwischen Fachverfahren und DMS/VBS sowie für die Zwischenarchivierung genutzt werden. - -Um diese Anwendungsszenarien bestmöglich zu unterstützen, ist xdomea gemäß des XÖV-Rahmenwerkes nach dem Baukastenprinzip aufgebaut und bietet einzelne Nachrichten(gruppen) für die jeweiligen Prozesse an. - -Der Standard xdomea wird von der gleichnamigen Arbeitsgruppe des IT-Planungsrates weiterentwickelt und gepflegt. Der Betrieb des Standards erfolgt durch die Koordinierungsstelle für IT-Standards (KoSIT). -</beschreibung> - </standard> - <versionStandard> - <version>3.0.0</version> - <beschreibung>Die Version 3.0.0 ist durch den IT-Planungsrat beschlossen. Details zum Beschluss sowie zu den Fristen der Umsetzung sind der Veröffentlichung im Bundesanzeiger unter www.bundesanzeiger.de zu entnehmen.</beschreibung> - <versionXOEVProfil>1.7.2</versionXOEVProfil> - <versionXOEVHandbuch>2.3.1</versionXOEVHandbuch> - <versionXGenerator>3.0.1</versionXGenerator> - <versionModellierungswerkzeug>19.0</versionModellierungswerkzeug> - <nameModellierungswerkzeug>MagicDraw</nameModellierungswerkzeug> - </versionStandard> - <title>Information austauschen</title> - </xs:appinfo> - </xs:annotation> - <xs:include schemaLocation="xdomea-Baukasten.xsd"/> - <xs:element name="Information.Information.0101"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt den Export von Schriftgutobjekten (Akte, Vorgang, Dokument) zur Information oder Übernahme in ein anderes System.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" - type="xdomea:NkNichtFVDatenWeitereEmpfaengerMitEmpfangsbestaetigungType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Informations-Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Anschreiben" minOccurs="0" type="xdomea:DokumentType"> - <xs:annotation> - <xs:documentation>Ein Dokument, das dem Empfänger zur Erläuterung der Information mitgegeben wird.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Schriftgutobjekt" maxOccurs="unbounded"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Beim Zusammenstellen der Nachricht wird entschieden, welche prozess- und aktenrelevanten Metadaten zu dem Schriftgutobjekt übergeben werden.</implementationHint> - </xs:appinfo> - <xs:documentation>Ein Schriftgutobjekt (Akte, Vorgang oder Dokument), das mit der Informations-Nachricht an ein anderes System gesandt wird.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:choice> - <xs:element name="Akte" type="xdomea:AkteType"> - <xs:annotation> - <xs:documentation>Eine Akte.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Vorgang" type="xdomea:VorgangType"> - <xs:annotation> - <xs:documentation>Ein Vorgang.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Dokument" type="xdomea:DokumentType"> - <xs:annotation> - <xs:documentation>Ein Dokument.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:choice> - </xs:complexType> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Information.EmpfangBestaetigen.0102"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt den erfolgreichen Empfang der Information.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkBasisType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Empfangsbestätigung.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> -</xs:schema> diff --git a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-VBS.xsd b/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-VBS.xsd deleted file mode 100644 index 913db2eed8c8da05b8a4e13f2054a8e658ccde20..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-VBS.xsd +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" - xmlns:xdomea="urn:xoev-de:xdomea:schema:3.0.0" - targetNamespace="urn:xoev-de:xdomea:schema:3.0.0" - version="3.0.0" - elementFormDefault="qualified" - attributeFormDefault="unqualified"> - <xs:annotation> - <xs:appinfo> - <standard> - <nameLang>xdomea - XÖV-Standard für den IT-gestützten Austausch und die IT-gestützte Aussonderung behördlichen Schriftgutes</nameLang> - <nameKurz>xdomea</nameKurz> - <nameTechnisch>xdomea</nameTechnisch> - <kennung>urn:xoev-de:xdomea:kosit:standard:xdomea</kennung> - <beschreibung>xdomea ist der vom IT-Planungsrat verabschiedete verbindliche Standard für den Austausch von Akten, Vorgängen und Dokumenten im Kontext der Übermittlung, der Abgabe sowie der Aussonderung von Schriftgutobjekten (www.it-planungsrat.de, Beschluss 2017/39). Weiterhin kann xdomea für den Austausch zwischen Fachverfahren und DMS/VBS sowie für die Zwischenarchivierung genutzt werden. - -Um diese Anwendungsszenarien bestmöglich zu unterstützen, ist xdomea gemäß des XÖV-Rahmenwerkes nach dem Baukastenprinzip aufgebaut und bietet einzelne Nachrichten(gruppen) für die jeweiligen Prozesse an. - -Der Standard xdomea wird von der gleichnamigen Arbeitsgruppe des IT-Planungsrates weiterentwickelt und gepflegt. Der Betrieb des Standards erfolgt durch die Koordinierungsstelle für IT-Standards (KoSIT). -</beschreibung> - </standard> - <versionStandard> - <version>3.0.0</version> - <beschreibung>Die Version 3.0.0 ist durch den IT-Planungsrat beschlossen. Details zum Beschluss sowie zu den Fristen der Umsetzung sind der Veröffentlichung im Bundesanzeiger unter www.bundesanzeiger.de zu entnehmen.</beschreibung> - <versionXOEVProfil>1.7.2</versionXOEVProfil> - <versionXOEVHandbuch>2.3.1</versionXOEVHandbuch> - <versionXGenerator>3.0.1</versionXGenerator> - <versionModellierungswerkzeug>19.0</versionModellierungswerkzeug> - <nameModellierungswerkzeug>MagicDraw</nameModellierungswerkzeug> - </versionStandard> - </xs:appinfo> - </xs:annotation> - <xs:include schemaLocation="xdomea-Nachrichten-AbgabeDurchfuehren.xsd"/> - <xs:include schemaLocation="xdomea-Nachrichten-AktenplanAustauschen.xsd"/> - <xs:include schemaLocation="xdomea-Nachrichten-AussonderungDurchfuehren.xsd"/> - <xs:include schemaLocation="xdomea-Nachrichten-GeschaeftsgangDurchfuehren.xsd"/> - <xs:include schemaLocation="xdomea-Nachrichten-InformationAustauschen.xsd"/> -</xs:schema> diff --git a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-ZwischenarchivierungDurchfuehren.xsd b/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-ZwischenarchivierungDurchfuehren.xsd deleted file mode 100644 index 37dca150e412c956ce035310d285f9ecf0aec94b..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-ZwischenarchivierungDurchfuehren.xsd +++ /dev/null @@ -1,315 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" - xmlns:xdomea="urn:xoev-de:xdomea:schema:3.0.0" - targetNamespace="urn:xoev-de:xdomea:schema:3.0.0" - version="3.0.0" - elementFormDefault="qualified" - attributeFormDefault="unqualified"> - <xs:annotation> - <xs:appinfo> - <standard> - <nameLang>xdomea - XÖV-Standard für den IT-gestützten Austausch und die IT-gestützte Aussonderung behördlichen Schriftgutes</nameLang> - <nameKurz>xdomea</nameKurz> - <nameTechnisch>xdomea</nameTechnisch> - <kennung>urn:xoev-de:xdomea:kosit:standard:xdomea</kennung> - <beschreibung>xdomea ist der vom IT-Planungsrat verabschiedete verbindliche Standard für den Austausch von Akten, Vorgängen und Dokumenten im Kontext der Übermittlung, der Abgabe sowie der Aussonderung von Schriftgutobjekten (www.it-planungsrat.de, Beschluss 2017/39). Weiterhin kann xdomea für den Austausch zwischen Fachverfahren und DMS/VBS sowie für die Zwischenarchivierung genutzt werden. - -Um diese Anwendungsszenarien bestmöglich zu unterstützen, ist xdomea gemäß des XÖV-Rahmenwerkes nach dem Baukastenprinzip aufgebaut und bietet einzelne Nachrichten(gruppen) für die jeweiligen Prozesse an. - -Der Standard xdomea wird von der gleichnamigen Arbeitsgruppe des IT-Planungsrates weiterentwickelt und gepflegt. Der Betrieb des Standards erfolgt durch die Koordinierungsstelle für IT-Standards (KoSIT). -</beschreibung> - </standard> - <versionStandard> - <version>3.0.0</version> - <beschreibung>Die Version 3.0.0 ist durch den IT-Planungsrat beschlossen. Details zum Beschluss sowie zu den Fristen der Umsetzung sind der Veröffentlichung im Bundesanzeiger unter www.bundesanzeiger.de zu entnehmen.</beschreibung> - <versionXOEVProfil>1.7.2</versionXOEVProfil> - <versionXOEVHandbuch>2.3.1</versionXOEVHandbuch> - <versionXGenerator>3.0.1</versionXGenerator> - <versionModellierungswerkzeug>19.0</versionModellierungswerkzeug> - <nameModellierungswerkzeug>MagicDraw</nameModellierungswerkzeug> - </versionStandard> - <title>Zwischenarchivierung durchführen</title> - </xs:appinfo> - </xs:annotation> - <xs:include schemaLocation="xdomea-Baukasten.xsd"/> - <xs:include schemaLocation="xdomea-Typen-ZwischenarchivierungDurchfuehren.xsd"/> - <xs:element name="Zwischenarchivierung.Auslagerung.0701"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt den vollständigen Export von Schriftgutobjekten zur Auslagerung an ein Zwischenarchiv.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkZwischenarchivierungType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Auslagerungs-Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Anschreiben" minOccurs="0" type="xdomea:DokumentType"> - <xs:annotation> - <xs:documentation>Ein Dokument, das dem Empfänger zur Erläuterung der Auslagerung mitgegeben wird.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Schriftgutobjekt" maxOccurs="unbounded"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Bei der Auslagerung müssen zu einem Schriftgutobjekt alle prozess- und aktenrelevanten Metadaten übergeben werden. Die Fristen und die Aussonderungsart werden bei der Auslagerung zu einem Schriftgutobjekt mit übergeben.</implementationHint> - </xs:appinfo> - <xs:documentation>Ein Schriftgutobjekt (Akte, Vorgang oder Dokument) zu einer Auslagerung.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:choice> - <xs:element name="Akte" type="xdomea:AkteType"> - <xs:annotation> - <xs:documentation>Eine Akte.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Vorgang" type="xdomea:VorgangType"> - <xs:annotation> - <xs:documentation>Ein Vorgang.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Dokument" type="xdomea:DokumentType"> - <xs:annotation> - <xs:documentation>Ein Dokument.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:choice> - </xs:complexType> - </xs:element> - <xs:element name="Aktenplan" minOccurs="0" type="xdomea:AktenplanType"> - <xs:annotation> - <xs:documentation>Der Aktenplan zu einer Auslagerung enthält ein aufgabenbezogenes mehrstufiges Ordnungssystem mit einer hierarchischer Gliederung für das Bilden und Kennzeichnen von Akten und Vorgängen sowie das Zuordnen von Dokumenten.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Zwischenarchivierung.AuslagerungEmpfangBestaetigen.0702"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt den erfolgreichen Empfang der Auslagerung.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkBasisType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Empfangsbestätigung.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Zwischenarchivierung.AuslagerungImportBestaetigen.0703"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die erfolgreiche oder nicht erfolgreiche Übernahme der Auslagerung.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkBasisType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Importnachricht zu einer Auslagerung.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="AusgelagertesObjekt" - maxOccurs="unbounded" - type="xdomea:ErfolgOderMisserfolgZwischenarchivierungType"> - <xs:annotation> - <xs:documentation>Die Information zum erfolgreichen oder nicht erfolgreichen Import eines Schriftgutobjekts zur Auslagerung.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Zwischenarchivierung.RueckleiheAnforderung.0711"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die Anforderung zur Rückleihe (nur lesender Zugriff) von ausgelagerten Schriftgutobjekten durch die zuständige Verwaltung.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkBasisType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Rückleihe-Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="RueckzuleihendesObjekt" - maxOccurs="unbounded" - type="xdomea:stringUUIDType"> - <xs:annotation> - <xs:documentation>Das Identifikationsmerkmal zu einem Schriftgutobjekt, das zurückgeliehen werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Zwischenarchivierung.RueckleiheUebergabe.0712"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die durchgeführte Rückleihe (nur lesender Zugriff) von Schriftgutobjekten als Übergabe von einem Zwischenarchiv an ein DMS/VBS.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkZwischenarchivierungType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Rückleihe-Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Anschreiben" minOccurs="0" type="xdomea:DokumentType"> - <xs:annotation> - <xs:documentation>Ein Dokument, das dem Empfänger zur Erläuterung der Rückleihe mitgegeben wird.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Schriftgutobjekt" maxOccurs="unbounded"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Bei der Rückleihe müssen zu einem Schriftgutobjekt alle prozess- und aktenrelevanten Metadaten übergeben werden. Die aufnehmende Behörde übernimmt das Schriftgutobjekt als Kopie in das eigene System. Das Original verbleibt im Zwischenarchiv.</implementationHint> - </xs:appinfo> - <xs:documentation>Ein Schriftgutobjekt (Akte, Vorgang oder Dokument) zu einer durchgeführten Rückleihe.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:choice> - <xs:element name="Akte" type="xdomea:AkteType"> - <xs:annotation> - <xs:documentation>Eine Akte.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Vorgang" type="xdomea:VorgangType"> - <xs:annotation> - <xs:documentation>Ein Vorgang.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Dokument" type="xdomea:DokumentType"> - <xs:annotation> - <xs:documentation>Ein Dokument.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:choice> - </xs:complexType> - </xs:element> - <xs:element name="Aktenplan" minOccurs="0" type="xdomea:AktenplanType"> - <xs:annotation> - <xs:documentation>Der Aktenplan zu einer Rückleihe enthält ein aufgabenbezogenes mehrstufiges Ordnungssystem mit einer hierarchischer Gliederung für das Bilden und Kennzeichnen von Akten und Vorgängen sowie das Zuordnen von Dokumenten.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Zwischenarchivierung.RueckleiheEmpfangBestaetigen.0713"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt den erfolgreichen Empfang der Rückleihe.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkBasisType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Empfangsbestätigung.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Zwischenarchivierung.RueckuebertragungAnforderung.0721"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die Anforderung zur Rückübertragung (lesender und schreibender Zugriff) von ausgelagerten Schriftgutobjekten durch die zuständige Verwaltung.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkBasisType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Rückübertragungs-Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="RueckzuuebertragendesObjekt" - maxOccurs="unbounded" - type="xdomea:stringUUIDType"> - <xs:annotation> - <xs:documentation>Das Identifikationsmerkmal zu einem Schriftgutobjekt, das zurückübertragen werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Zwischenarchivierung.RueckuebertragungUebergabe.0722"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die vollständige Rückübertragung (lesender und schreibender Zugriff) von Schriftgutobjekten als Übergabe von einem Zwischenarchiv an ein DMS/VBS.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkZwischenarchivierungType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Rückübertragungs-Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Anschreiben" minOccurs="0" type="xdomea:DokumentType"> - <xs:annotation> - <xs:documentation>Ein Dokument, das dem Empfänger zur Erläuterung der Rückübertragung mitgegeben wird.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Schriftgutobjekt" maxOccurs="unbounded"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Bei der Rückübertragung müssen zu einem Schriftgutobjekt alle prozess- und aktenrelevanten Metadaten übergeben werden. Die Fristen und die Aussonderungsart werden bei der Rückübertragung zu einem Schriftgutobjekt mit übergeben. Die aufnehmende Behörde übernimmt das rückübertragene Schriftgutobjekt in ihr System. Das Schriftgutobjekt wird anschließend im Zwischenarchiv gelöscht.</implementationHint> - </xs:appinfo> - <xs:documentation>Ein Schriftgutobjekt (Akte, Vorgang oder Dokument) zu einer durchgeführten Rückübertragung.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:choice> - <xs:element name="Akte" type="xdomea:AkteType"> - <xs:annotation> - <xs:documentation>Eine Akte.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Vorgang" type="xdomea:VorgangType"> - <xs:annotation> - <xs:documentation>Ein Vorgang.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Dokument" type="xdomea:DokumentType"> - <xs:annotation> - <xs:documentation>Ein Dokument.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:choice> - </xs:complexType> - </xs:element> - <xs:element name="Aktenplan" minOccurs="0" type="xdomea:AktenplanType"> - <xs:annotation> - <xs:documentation>Der Aktenplan zu einer Rückübertragung enthält ein aufgabenbezogenes mehrstufiges Ordnungssystem mit einer hierarchischer Gliederung für das Bilden und Kennzeichnen von Akten und Vorgängen sowie das Zuordnen von Dokumenten.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Zwischenarchivierung.RueckuebertragungImportBestaetigen.0723"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt die erfolgreiche oder nicht erfolgreiche Übernahme der Rückübertragung.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkBasisType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Importnachricht zu einer Rückübertragung.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="RueckuebertragenesObjekt" - maxOccurs="unbounded" - type="xdomea:ErfolgOderMisserfolgZwischenarchivierungType"> - <xs:annotation> - <xs:documentation>Die Information zum erfolgreichen oder nicht erfolgreichen Import eines Schriftgutobjekts zur Rueckuebertragung.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="Zwischenarchivierung.RueckuebertragungEmpfangBestaetigen.0724"> - <xs:annotation> - <xs:documentation>Die Nachricht beschreibt den erfolgreichen Empfang der Rückübertragung.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:sequence> - <xs:element name="Kopf" type="xdomea:NkBasisType"> - <xs:annotation> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Empfangsbestätigung.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - </xs:element> -</xs:schema> diff --git a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-Zwischenarchivsystem.xsd b/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-Zwischenarchivsystem.xsd deleted file mode 100644 index eebc19d5b789cfb58b7b2aa122b5144de23fad93..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Nachrichten-Zwischenarchivsystem.xsd +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" - xmlns:xdomea="urn:xoev-de:xdomea:schema:3.0.0" - targetNamespace="urn:xoev-de:xdomea:schema:3.0.0" - version="3.0.0" - elementFormDefault="qualified" - attributeFormDefault="unqualified"> - <xs:annotation> - <xs:appinfo> - <standard> - <nameLang>xdomea - XÖV-Standard für den IT-gestützten Austausch und die IT-gestützte Aussonderung behördlichen Schriftgutes</nameLang> - <nameKurz>xdomea</nameKurz> - <nameTechnisch>xdomea</nameTechnisch> - <kennung>urn:xoev-de:xdomea:kosit:standard:xdomea</kennung> - <beschreibung>xdomea ist der vom IT-Planungsrat verabschiedete verbindliche Standard für den Austausch von Akten, Vorgängen und Dokumenten im Kontext der Übermittlung, der Abgabe sowie der Aussonderung von Schriftgutobjekten (www.it-planungsrat.de, Beschluss 2017/39). Weiterhin kann xdomea für den Austausch zwischen Fachverfahren und DMS/VBS sowie für die Zwischenarchivierung genutzt werden. - -Um diese Anwendungsszenarien bestmöglich zu unterstützen, ist xdomea gemäß des XÖV-Rahmenwerkes nach dem Baukastenprinzip aufgebaut und bietet einzelne Nachrichten(gruppen) für die jeweiligen Prozesse an. - -Der Standard xdomea wird von der gleichnamigen Arbeitsgruppe des IT-Planungsrates weiterentwickelt und gepflegt. Der Betrieb des Standards erfolgt durch die Koordinierungsstelle für IT-Standards (KoSIT). -</beschreibung> - </standard> - <versionStandard> - <version>3.0.0</version> - <beschreibung>Die Version 3.0.0 ist durch den IT-Planungsrat beschlossen. Details zum Beschluss sowie zu den Fristen der Umsetzung sind der Veröffentlichung im Bundesanzeiger unter www.bundesanzeiger.de zu entnehmen.</beschreibung> - <versionXOEVProfil>1.7.2</versionXOEVProfil> - <versionXOEVHandbuch>2.3.1</versionXOEVHandbuch> - <versionXGenerator>3.0.1</versionXGenerator> - <versionModellierungswerkzeug>19.0</versionModellierungswerkzeug> - <nameModellierungswerkzeug>MagicDraw</nameModellierungswerkzeug> - </versionStandard> - </xs:appinfo> - </xs:annotation> - <xs:include schemaLocation="xdomea-Nachrichten-ZwischenarchivierungDurchfuehren.xsd"/> -</xs:schema> diff --git a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Typen-AbgabeDurchfuehren.xsd b/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Typen-AbgabeDurchfuehren.xsd deleted file mode 100644 index 0b9e7a335c364ff7ac019f5a98991a9588d0f491..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Typen-AbgabeDurchfuehren.xsd +++ /dev/null @@ -1,97 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" - xmlns:xdomea="urn:xoev-de:xdomea:schema:3.0.0" - targetNamespace="urn:xoev-de:xdomea:schema:3.0.0" - version="3.0.0" - elementFormDefault="qualified" - attributeFormDefault="unqualified"> - <xs:annotation> - <xs:appinfo> - <standard> - <nameLang>xdomea - XÖV-Standard für den IT-gestützten Austausch und die IT-gestützte Aussonderung behördlichen Schriftgutes</nameLang> - <nameKurz>xdomea</nameKurz> - <nameTechnisch>xdomea</nameTechnisch> - <kennung>urn:xoev-de:xdomea:kosit:standard:xdomea</kennung> - <beschreibung>xdomea ist der vom IT-Planungsrat verabschiedete verbindliche Standard für den Austausch von Akten, Vorgängen und Dokumenten im Kontext der Übermittlung, der Abgabe sowie der Aussonderung von Schriftgutobjekten (www.it-planungsrat.de, Beschluss 2017/39). Weiterhin kann xdomea für den Austausch zwischen Fachverfahren und DMS/VBS sowie für die Zwischenarchivierung genutzt werden. - -Um diese Anwendungsszenarien bestmöglich zu unterstützen, ist xdomea gemäß des XÖV-Rahmenwerkes nach dem Baukastenprinzip aufgebaut und bietet einzelne Nachrichten(gruppen) für die jeweiligen Prozesse an. - -Der Standard xdomea wird von der gleichnamigen Arbeitsgruppe des IT-Planungsrates weiterentwickelt und gepflegt. Der Betrieb des Standards erfolgt durch die Koordinierungsstelle für IT-Standards (KoSIT). -</beschreibung> - </standard> - <versionStandard> - <version>3.0.0</version> - <beschreibung>Die Version 3.0.0 ist durch den IT-Planungsrat beschlossen. Details zum Beschluss sowie zu den Fristen der Umsetzung sind der Veröffentlichung im Bundesanzeiger unter www.bundesanzeiger.de zu entnehmen.</beschreibung> - <versionXOEVProfil>1.7.2</versionXOEVProfil> - <versionXOEVHandbuch>2.3.1</versionXOEVHandbuch> - <versionXGenerator>3.0.1</versionXGenerator> - <versionModellierungswerkzeug>19.0</versionModellierungswerkzeug> - <nameModellierungswerkzeug>MagicDraw</nameModellierungswerkzeug> - </versionStandard> - </xs:appinfo> - </xs:annotation> - <xs:include schemaLocation="xdomea-Baukasten.xsd"/> - <xs:complexType name="ErfolgOderMisserfolgAbgabeType"> - <xs:annotation> - <xs:appinfo> - <title>ErfolgOderMisserfolgAbgabe</title> - </xs:appinfo> - <xs:documentation>Die Information zum erfolgreichen oder nicht erfolgreichen Import eines abzugebenden Schriftgutobjektes.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="IDSGO" type="xdomea:stringUUIDType"> - <xs:annotation> - <xs:documentation>Die ID des Schriftgutobjekts, das abgegeben werden sollte.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Erfolgreich" type="xs:boolean"> - <xs:annotation> - <xs:documentation>Die Kennzeichnung des erfolgreichen oder nicht erfolgreichen Imports zu einem abzugebenden Schriftgutobjekt. Der erfolgreiche Import wird mit 1 und der nicht erfolgreiche Import mit 0 gekennzeichnet.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Fehlermeldung" - minOccurs="0" - maxOccurs="unbounded" - type="xs:string"> - <xs:annotation> - <xs:documentation>Die Information in Form eines Freitextes, aus welchem Grund der Import zum abzugebenden Schriftgutobjekt nicht erfolgreich war.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="FehlermeldungCode" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:SonstigeFehlermeldungCodeType"> - <xs:annotation> - <xs:documentation>Die Information in Form eines Codes, aus welchem Grund der Import zum abzugebenden Schriftgutobjekt nicht erfolgreich war.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="NkAbgabeType"> - <xs:annotation> - <xs:appinfo> - <title>NkAbgabe</title> - </xs:appinfo> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger einer Nachricht, bei der es sich um eine Abgabe handelt.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:extension base="xdomea:NkNichtFVDatenWeitereEmpfaengerType"> - <xs:sequence> - <xs:element name="Importbestaetigung" fixed="1" type="xs:boolean"> - <xs:annotation> - <xs:documentation>Die Angabe, dass eine Importbestätigung vom Empfänger der Nachricht erwünscht wird.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Empfangsbestaetigung" type="xs:boolean"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Für die Umsetzung in den Systemen wird empfohlen, sofern kein anderer Wert hinterlegt wurde, als Standardwert den Wert 0 für "keine Empfangsbestätigung senden" anzugeben.</implementationHint> - </xs:appinfo> - <xs:documentation>Die Angabe, ob vom Empfänger der Nachricht eine Empfangsbestätigung erwünscht wird. Eine erwünschte Empfangsbestätigung wird mit 1 gekennzeichnet. Wird keine Empfangsbestätigung gewünscht, so wird dies mit 0 gekennzeichnet.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:extension> - </xs:complexContent> - </xs:complexType> -</xs:schema> diff --git a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Typen-AussonderungDurchfuehren.xsd b/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Typen-AussonderungDurchfuehren.xsd deleted file mode 100644 index 434d076a81bdb44f0dd9f85672767c26d0d06d05..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Typen-AussonderungDurchfuehren.xsd +++ /dev/null @@ -1,237 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" - xmlns:xdomea="urn:xoev-de:xdomea:schema:3.0.0" - targetNamespace="urn:xoev-de:xdomea:schema:3.0.0" - version="3.0.0" - elementFormDefault="qualified" - attributeFormDefault="unqualified"> - <xs:annotation> - <xs:appinfo> - <standard> - <nameLang>xdomea - XÖV-Standard für den IT-gestützten Austausch und die IT-gestützte Aussonderung behördlichen Schriftgutes</nameLang> - <nameKurz>xdomea</nameKurz> - <nameTechnisch>xdomea</nameTechnisch> - <kennung>urn:xoev-de:xdomea:kosit:standard:xdomea</kennung> - <beschreibung>xdomea ist der vom IT-Planungsrat verabschiedete verbindliche Standard für den Austausch von Akten, Vorgängen und Dokumenten im Kontext der Übermittlung, der Abgabe sowie der Aussonderung von Schriftgutobjekten (www.it-planungsrat.de, Beschluss 2017/39). Weiterhin kann xdomea für den Austausch zwischen Fachverfahren und DMS/VBS sowie für die Zwischenarchivierung genutzt werden. - -Um diese Anwendungsszenarien bestmöglich zu unterstützen, ist xdomea gemäß des XÖV-Rahmenwerkes nach dem Baukastenprinzip aufgebaut und bietet einzelne Nachrichten(gruppen) für die jeweiligen Prozesse an. - -Der Standard xdomea wird von der gleichnamigen Arbeitsgruppe des IT-Planungsrates weiterentwickelt und gepflegt. Der Betrieb des Standards erfolgt durch die Koordinierungsstelle für IT-Standards (KoSIT). -</beschreibung> - </standard> - <versionStandard> - <version>3.0.0</version> - <beschreibung>Die Version 3.0.0 ist durch den IT-Planungsrat beschlossen. Details zum Beschluss sowie zu den Fristen der Umsetzung sind der Veröffentlichung im Bundesanzeiger unter www.bundesanzeiger.de zu entnehmen.</beschreibung> - <versionXOEVProfil>1.7.2</versionXOEVProfil> - <versionXOEVHandbuch>2.3.1</versionXOEVHandbuch> - <versionXGenerator>3.0.1</versionXGenerator> - <versionModellierungswerkzeug>19.0</versionModellierungswerkzeug> - <nameModellierungswerkzeug>MagicDraw</nameModellierungswerkzeug> - </versionStandard> - </xs:appinfo> - </xs:annotation> - <xs:include schemaLocation="xdomea-Baukasten.xsd"/> - <xs:complexType name="AktenplanBewertungskatalogType"> - <xs:annotation> - <xs:appinfo> - <title>AktenplanBewertungskatalog</title> - </xs:appinfo> - <xs:documentation>Der Aktenplan enthält ein aufgabenbezogenes mehrstufiges Ordnungssystem mit einer hierarchischen Gliederung für das Bilden und Kennzeichnen von Akten und Vorgängen sowie das Zuordnen von Dokumenten.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="ID" type="xdomea:stringUUIDType"> - <xs:annotation> - <xs:documentation>Die UUID des Aktenplans.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Bezeichnung" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Name des Aktenplans.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Typ" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Typ des Aktenplans, z.B. Teilaktenplan.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Version" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Version des Aktenplans.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Einheit" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:AktenplaneinheitAktenplanBewertungskatalogType"> - <xs:annotation> - <xs:documentation>Die Einheit eines Aktenplans, die Auskunft über die hierarchische Strukturierung eines Aktenplans gibt. Eine Aktenplanheit entspricht z.B. einer Hauptgruppe, Obergruppe, Gruppe, Untergruppe oder Betreffseinheit.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Gueltigkeit" minOccurs="0" type="xdomea:ZeitraumType"> - <xs:annotation> - <xs:documentation>Die Gültigkeit des Aktenplans mit Beginn und Ende.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Aktenplandatei" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:FormatType"> - <xs:annotation> - <xs:documentation>Die Datei zum Aktenplan als Primärdokument.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="AktenplaneinheitAktenplanBewertungskatalogType"> - <xs:annotation> - <xs:appinfo> - <title>AktenplaneinheitAktenplanBewertungskatalog</title> - </xs:appinfo> - <xs:documentation>Eine Aktenplaneinheit gibt Auskunft über die hierarchische Strukturierung eines Aktenplans. Eine Aktenplanheit entspricht z.B. einer Hauptgruppe, Obergruppe, Gruppe, Untergruppe oder Betreffseinheit.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="ID" type="xdomea:stringUUIDType"> - <xs:annotation> - <xs:documentation>Die UUID der Aktenplaneinheit.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Aussonderungsart" type="xdomea:AussonderungsartType"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Die Aussonderungsart vererbt sich auf alle unter einer Hierarchiestufe angelegten Schriftgutobjekte.</implementationHint> - </xs:appinfo> - <xs:documentation>Die Aussonderungsart gibt das Ergebnis der archivischen Bewertung an. Die Aussonderungsart wird vom Aktenplan (zweistufiges Aussonderungsverfahren) auf zugehörige Akten und Vorgänge vererbt.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="ErfolgOderMisserfolgAussonderungType"> - <xs:annotation> - <xs:appinfo> - <title>ErfolgOderMisserfolgAussonderung</title> - </xs:appinfo> - <xs:documentation>Die Information zum erfolgreichen oder nicht erfolgreichen Import eines auszusondernden Schriftgutobjekts.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="IDSGO" type="xdomea:stringUUIDType"> - <xs:annotation> - <xs:documentation>Die ID des Schriftgutobjekts, das ausgesondert werden sollte.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Erfolgreich" type="xs:boolean"> - <xs:annotation> - <xs:documentation>Die Kennzeichnung des erfolgreichen oder nicht erfolgreichen Imports der Aussonderung zu einem Schriftgutobjekt. Der erfolgreiche Import wird mit 1 und der nicht erfolgreiche Import mit 0 gekennzeichnet.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Fehlermeldung" - minOccurs="0" - maxOccurs="unbounded" - type="xs:string"> - <xs:annotation> - <xs:documentation>Erläuterung des Grundes als Freitext für den nicht erfolgreichen Import einer Aussonderung zu einem Schriftgutobjekt.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="FehlermeldungCode" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:SonstigeFehlermeldungCodeType"> - <xs:annotation> - <xs:documentation>Erläuterung des Grundes als Code für den nicht erfolgreichen Import einer Aussonderung zu einem Schriftgutobjekt.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Archivkennung" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die ID, unter der das ausgesonderte Schriftgutobjekt im Archiv verwahrt wird. Für den Fall, dass "Erfolgreich" positiv belegt ist und von der aussondernden Behörde die Rückgabe der Archivkennungen gewünscht ist ("RueckmeldungArchivkennung" ist positiv belegt), können durch das archivierende System die Archivkennungen zu den einzelnen Schriftgutobjekt übergeben werden.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="ErfolgOderMisserfolgBewertungskatalogType"> - <xs:annotation> - <xs:appinfo> - <title>ErfolgOderMisserfolgBewertungskatalog</title> - </xs:appinfo> - <xs:documentation>Die Information zum erfolgreichen oder nicht erfolgreichen Import einer zu bewertenden Aktenplaneinheit.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="ID" type="xdomea:stringUUIDType"> - <xs:annotation> - <xs:documentation>Die ID der Aktenplaneinheit, die bewertet werden sollte.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Erfolgreich" type="xs:boolean"> - <xs:annotation> - <xs:documentation>Die Kennzeichnung des erfolgreichen oder nicht erfolgreichen Imports der Bewertung zu einer Aktenplaneinheit. Der erfolgreiche Import wird mit 1 und der nicht erfolgreiche Import mit 0 gekennzeichnet.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Fehlermeldung" - minOccurs="0" - maxOccurs="unbounded" - type="xs:string"> - <xs:annotation> - <xs:documentation>Erläuterung des Grundes als Freitext für den nicht erfolgreichen Import einer Bewertung zu einer Aktenplaneinheit.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="FehlermeldungCode" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:SonstigeFehlermeldungCodeType"> - <xs:annotation> - <xs:documentation>Erläuterung des Grundes als Code für den nicht erfolgreichen Import einer Bewertung zu einer Aktenplaneinheit.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="NkAussonderungType"> - <xs:annotation> - <xs:appinfo> - <title>NkAussonderung</title> - </xs:appinfo> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger einer Nachricht, bei der es sich um die konkrete Aussonderung handelt.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:extension base="xdomea:NkBasisType"> - <xs:sequence> - <xs:element name="Importbestaetigung" fixed="1" type="xs:boolean"> - <xs:annotation> - <xs:documentation>Die Angabe, dass eine Importbestätigung vom Empfänger der Nachricht erwünscht wird.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="RueckmeldungArchivkennung" type="xs:boolean"> - <xs:annotation> - <xs:documentation>Die Angabe, ob die Rückübermittlung der Archivsignaturen vom Empfänger erwünscht wird. Sollen die Archivsignaturen übermittelt werden, so ist der Wert 1 anzugeben. Sollen keine Archivsignaturen übermittelt werden, so ist der Wert 0 anzugeben.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Empfangsbestaetigung" type="xs:boolean"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Für die Umsetzung in den Systemen wird empfohlen, sofern kein anderer Wert hinterlegt wurde, als Standardwert den Wert 0 für "keine Empfangsbestätigung senden" anzugeben.</implementationHint> - </xs:appinfo> - <xs:documentation>Die Angabe, ob vom Empfänger der Nachricht eine Empfangsbestätigung erwünscht wird. Eine erwünschte Empfangsbestätigung wird mit 1 gekennzeichnet. Wird keine Empfangsbestätigung gewünscht, so wird dies mit 0 gekennzeichnet.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:extension> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="RueckgabeparameterAnbietungType"> - <xs:annotation> - <xs:appinfo> - <title>RueckgabeparameterAnbietung</title> - </xs:appinfo> - <xs:documentation>Die Rückmeldung des Archivs zu einem zur Bewertung übergegebenen Schriftgutobjekt zur Steuerung des weiteren Aussonderungsprozesses.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="ID" type="xdomea:stringUUIDType"> - <xs:annotation> - <xs:documentation>Die UUID des angebotenen Schriftgutobjektes, in der Regel die eines Vorgangs.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Aussonderungsart" type="xdomea:AussonderungsartType"> - <xs:annotation> - <xs:documentation>Die Beschreibung des Bewertungsergebnisses für ein angebotenes Schriftgutobjekt.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> -</xs:schema> diff --git a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Typen-FachverfahrensdatenAustauschen.xsd b/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Typen-FachverfahrensdatenAustauschen.xsd deleted file mode 100644 index 118adb112c056b51430e34c9f4d08916fff1e8f4..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Typen-FachverfahrensdatenAustauschen.xsd +++ /dev/null @@ -1,1392 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" - xmlns:xdomea="urn:xoev-de:xdomea:schema:3.0.0" - targetNamespace="urn:xoev-de:xdomea:schema:3.0.0" - version="3.0.0" - elementFormDefault="qualified" - attributeFormDefault="unqualified"> - <xs:annotation> - <xs:appinfo> - <standard> - <nameLang>xdomea - XÖV-Standard für den IT-gestützten Austausch und die IT-gestützte Aussonderung behördlichen Schriftgutes</nameLang> - <nameKurz>xdomea</nameKurz> - <nameTechnisch>xdomea</nameTechnisch> - <kennung>urn:xoev-de:xdomea:kosit:standard:xdomea</kennung> - <beschreibung>xdomea ist der vom IT-Planungsrat verabschiedete verbindliche Standard für den Austausch von Akten, Vorgängen und Dokumenten im Kontext der Übermittlung, der Abgabe sowie der Aussonderung von Schriftgutobjekten (www.it-planungsrat.de, Beschluss 2017/39). Weiterhin kann xdomea für den Austausch zwischen Fachverfahren und DMS/VBS sowie für die Zwischenarchivierung genutzt werden. - -Um diese Anwendungsszenarien bestmöglich zu unterstützen, ist xdomea gemäß des XÖV-Rahmenwerkes nach dem Baukastenprinzip aufgebaut und bietet einzelne Nachrichten(gruppen) für die jeweiligen Prozesse an. - -Der Standard xdomea wird von der gleichnamigen Arbeitsgruppe des IT-Planungsrates weiterentwickelt und gepflegt. Der Betrieb des Standards erfolgt durch die Koordinierungsstelle für IT-Standards (KoSIT). -</beschreibung> - </standard> - <versionStandard> - <version>3.0.0</version> - <beschreibung>Die Version 3.0.0 ist durch den IT-Planungsrat beschlossen. Details zum Beschluss sowie zu den Fristen der Umsetzung sind der Veröffentlichung im Bundesanzeiger unter www.bundesanzeiger.de zu entnehmen.</beschreibung> - <versionXOEVProfil>1.7.2</versionXOEVProfil> - <versionXOEVHandbuch>2.3.1</versionXOEVHandbuch> - <versionXGenerator>3.0.1</versionXGenerator> - <versionModellierungswerkzeug>19.0</versionModellierungswerkzeug> - <nameModellierungswerkzeug>MagicDraw</nameModellierungswerkzeug> - </versionStandard> - </xs:appinfo> - </xs:annotation> - <xs:include schemaLocation="xdomea-Baukasten.xsd"/> - <xs:complexType name="BearbeitungFVType"> - <xs:annotation> - <xs:appinfo> - <title>BearbeitungFV</title> - </xs:appinfo> - <xs:documentation>BearbeitungFV enthält Angaben zur Bearbeitung eines Schriftgutobjekts mit der Möglichkeit, den Bearbeiter, den Bearbeitungszeitpunkt und eine Notiz mitzugeben.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Bearbeiter" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Person, die die Bearbeitung vorgenommen hat. Wird die Bearbeitung automatisch durch das System und nicht manuell durch eine Person vorgenommen, so ist das entsprechende System anzugeben.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Datum" type="xs:date"> - <xs:annotation> - <xs:documentation>Das Datum der zu protokollierenden Bearbeitung.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Uhrzeit" minOccurs="0" type="xs:time"> - <xs:annotation> - <xs:documentation>Der Zeitpunkt der zu protokollierenden Bearbeitung.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Notiz" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Anmerkung, die Aufschluss über die durchgeführte(n) Aktion(en) während einer Bearbeitung gibt.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="DatensatzZumLoeschenType"> - <xs:annotation> - <xs:appinfo> - <title>DatensatzZumLoeschen</title> - </xs:appinfo> - <xs:documentation>DatensatzZumLoeschen enthält Informationen zu einem FV-Datensatz, zu dem die entsprechenden Objekte im DMS gelöscht werden sollen. Wird die Nachricht im Stapelbetrieb übergeben, so erfolgt hier zusätzlich die Übergabe der Nummer im Stapel zu jedem angegebenen FV-Datensatz.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="NummerImStapel" minOccurs="0" type="xs:unsignedInt"> - <xs:annotation> - <xs:documentation>Die Nummer des übergebenen Elements im Stapel. Anhand dieser Nummer können im Rückmeldestapel die Rückmeldungen den einzelnen Elementen im Stapel zugeordnet werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="FachverfahrenDatensatzID" type="xs:string"> - <xs:annotation> - <xs:documentation>Die ID des Datensatzes im Fachverfahren.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="DokumentZumAktualisierenType"> - <xs:annotation> - <xs:appinfo> - <title>DokumentZumAktualisieren</title> - </xs:appinfo> - <xs:documentation>DokumentZumAktualisieren enthält Informationen zu einem Dokument (z.B. Ablageort), dessen Daten im empfangenden System aktualisiert werden sollen. Wird die Nachricht im Stapelbetrieb übergeben, so erfolgt hier zusätzlich die Übergabe der Nummer im Stapel zu jedem angegebenen Dokument.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="NummerImStapel" minOccurs="0" type="xs:unsignedInt"> - <xs:annotation> - <xs:documentation>Die Nummer des übergebenen Elements im Stapel. Anhand dieser Nummer können im Rückmeldestapel die Rückmeldungen den einzelnen Elementen im Stapel zugeordnet werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="IDDokument" type="xs:string"> - <xs:annotation> - <xs:documentation>ID des zu aktualisierenden Dokumentes im DMS, die dem Fachverfahren beim Anlegen des Dokuments vom DMS mitgeteilt wurde.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Ablageort" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Ablageort des Schriftgutobjekts, das im DMS abgelegt werden soll. Die Primärdokumente zu Dokumenten finden sich in Dateien, die durch Primaerdokument.Dateiname spezifiziert werden. In Abhängigkeit des Konfigurationsparameters Datenaustauschart kann dieser Parameter unterschiedliche Werte annehmen: Übergabe über ein freigegebenes Verzeichnis: Name des Verzeichnisses. Übergabe per WebDAV und http(s): URL. Übergabe über eine Datenbank: der Parameter bleibt leer (bzw. wird ignoriert).</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="NeueVersionErstellen" minOccurs="0" type="xs:boolean"> - <xs:annotation> - <xs:documentation>Über NeueVersionErstellen kann die Erzeugung einer neuen Version erzwungen werden. Wird kein Wert für diesen Parameter oder der Wert 0 angegeben, so wird keine neue Version erzeugt. Soll die Erzeugung einer neuen Version über diesen Parameter erzwungen werden, so ist der Wert 1 anzugeben.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Dokument" type="xdomea:DokumentType"> - <xs:annotation> - <xs:documentation>Das Dokument, das aktualisiert werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="DokumentZumExportierenType"> - <xs:annotation> - <xs:appinfo> - <title>DokumentZumExportieren</title> - </xs:appinfo> - <xs:documentation>DokumentZumExportieren enthält Informationen zu den Primärdokumenten eines Schriftgutobjekts (Dokument), die in einem DMS abgelegt wurden und in das empfangende Fachverfahren exportiert werden sollen.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="IDSGO" type="xdomea:stringUUIDType"> - <xs:annotation> - <xs:documentation>Die ID des Schriftgutobjekts im DMS, zu dem Primärdokumente exportiert werden sollen.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Versionsnummer" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Wird keine Versionsnummer übergeben, so wird der aktuelle Stand des Dokuments exportiert.</implementationHint> - </xs:appinfo> - <xs:documentation>Die Versionsnummer des Dokuments.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="ErfolgOderMisserfolgDMSType"> - <xs:annotation> - <xs:appinfo> - <title>ErfolgOderMisserfolgDMS</title> - <implementationHint>Es ist durch die Implementierer darauf zu achten, dass Rückmeldungen auf der Nachrichtenebene mit denen auf der Parameterebene in Einklang stehen und ihnen nicht widersprechen.</implementationHint> - </xs:appinfo> - <xs:documentation>Die Information zum erfolgreichen oder nicht erfolgreichen Import von Daten.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Rueckmeldung" maxOccurs="unbounded"> - <xs:annotation> - <xs:documentation>Die Beschreibung der Rückmeldungsart, die zu dem Import der empfangenen Daten an das sendende System zurückübermittelt wird.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:choice> - <xs:element name="AllgemeineRueckmeldung" - type="xdomea:AllgemeineRueckmeldungCodeType"> - <xs:annotation> - <xs:documentation>Eine allgemeine Rückmeldung, z.B. Verbindungsabbruch, Übertragungsfehler.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0601" - type="xdomea:SpezifischeFehlermeldung0601CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0601.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0602" - type="xdomea:SpezifischeFehlermeldung0602CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0602.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0603" - type="xdomea:SpezifischeFehlermeldung0603CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0603.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0604" - type="xdomea:SpezifischeFehlermeldung0604CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0604.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0605" - type="xdomea:SpezifischeFehlermeldung0605CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0605.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0606" - type="xdomea:SpezifischeFehlermeldung0606CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0606.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0607" - type="xdomea:SpezifischeFehlermeldung0607CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0607.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0608" - type="xdomea:SpezifischeFehlermeldung0608CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0608.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0609" - type="xdomea:SpezifischeFehlermeldung0609CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0609.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0610" - type="xdomea:SpezifischeFehlermeldung0610CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0610.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0611" - type="xdomea:SpezifischeFehlermeldung0611CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0611.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0612" - type="xdomea:SpezifischeFehlermeldung0612CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0612.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0613" - type="xdomea:SpezifischeFehlermeldung0613CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0613.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0614" - type="xdomea:SpezifischeFehlermeldung0614CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0614.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0615" - type="xdomea:SpezifischeFehlermeldung0615CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0615.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0616" - type="xdomea:SpezifischeFehlermeldung0616CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0616.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0617" - type="xdomea:SpezifischeFehlermeldung0617CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0617.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0618" - type="xdomea:SpezifischeFehlermeldung0618CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0618.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0619" - type="xdomea:SpezifischeFehlermeldung0619CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0619.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0620" - type="xdomea:SpezifischeFehlermeldung0620CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0620.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0621" - type="xdomea:SpezifischeFehlermeldung0621CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0621.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0622" - type="xdomea:SpezifischeFehlermeldung0622CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0622.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0623" - type="xdomea:SpezifischeFehlermeldung0623CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0623.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0624" - type="xdomea:SpezifischeFehlermeldung0624CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0624.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0625" - type="xdomea:SpezifischeFehlermeldung0625CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0625.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0626" - type="xdomea:SpezifischeFehlermeldung0626CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0626.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0627" - type="xdomea:SpezifischeFehlermeldung0627CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0627.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0628" - type="xdomea:SpezifischeFehlermeldung0628CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0628.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0631" - type="xdomea:SpezifischeFehlermeldung0631CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0631.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0632" - type="xdomea:SpezifischeFehlermeldung0632CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0632.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SonstigeFehlermeldung" type="xs:string"> - <xs:annotation> - <xs:documentation>Eine sonstige, nicht näher definierte Fehlermeldung, die als Freitext formuliert werden kann.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SonstigeFehlermeldungCode" - type="xdomea:SonstigeFehlermeldungCodeType"> - <xs:annotation> - <xs:documentation>Eine sonstige, nicht näher in xdomea definierte Fehlermeldung, die als Code angegeben werden kann.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:choice> - </xs:complexType> - </xs:element> - <xs:element name="Rueckgabeparameter" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:RueckgabeparameterFVDatenType"> - <xs:annotation> - <xs:documentation>Die Beschreibung der Daten, die bei einem erfolgreichen oder nicht erfolgreichen Import der empfangenen Daten an das sendende System zurückübermittelt werden.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="GesamtprotokollZumAblegenType"> - <xs:annotation> - <xs:appinfo> - <title>GesamtprotokollZumAblegen</title> - </xs:appinfo> - <xs:documentation>GesamtprotokollZumAblegen beschreibt alle aktenrelevanten Bearbeitungs- und Protokollinformationen zu einem Schriftgutobjekt, die aus einem Fachverfahren in einem DMS abzulegen sind. Wird die Nachricht im Stapelbetrieb übergeben, so erfolgt hier zusätzlich die Übergabe der Nummer im Stapel zu jedem angegebenen Gesamtprotokoll.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="NummerImStapel" minOccurs="0" type="xs:unsignedInt"> - <xs:annotation> - <xs:documentation>Die Nummer des übergebenen Elements im Stapel. Anhand dieser Nummer können im Rückmeldestapel die Rückmeldungen den einzelnen Elementen im Stapel zugeordnet werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="IDSGO" type="xdomea:stringUUIDType"> - <xs:annotation> - <xs:documentation>Die ID des Schriftgutobjektes im DMS.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Ablageort" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Ablageort des Schriftgutobjekts, das im DMS abgelegt werden soll. Die Primärdokumente zu Dokumenten finden sich in Dateien, die durch Primaerdokument.Dateiname spezifiziert werden. In Abhängigkeit des Konfigurationsparameters Datenaustauschart kann dieser Parameter unterschiedliche Werte annehmen: Übergabe über ein freigegebenes Verzeichnis: Name des Verzeichnisses. Übergabe per WebDAV und http(s): URL. Übergabe über eine Datenbank: der Parameter bleibt leer (bzw. wird ignoriert).</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Dokument" minOccurs="0" type="xdomea:DokumentType"> - <xs:annotation> - <xs:documentation>Das Gesamtprotokoll als Dokument.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Geschaeftsgang" - minOccurs="0" - type="xdomea:GeschaeftsgangType"> - <xs:annotation> - <xs:documentation>Die Bearbeitungsinformationen im Rahmen eines Geschäftsgangs zu dem Schriftgutobjekt.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="HistorienProtokollInformation" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:HistorienProtokollInformationType"> - <xs:annotation> - <xs:documentation>Die Bearbeitungs- und Protokollinformationen eines Schriftgutobjekts.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="KonfigurationsparameterType"> - <xs:annotation> - <xs:appinfo> - <title>Konfigurationsparameter</title> - </xs:appinfo> - <xs:documentation>Ein Parameter zur Konfiguration eines anderen Systems.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Parameter" type="xdomea:KonfigurationsparameterCodeType"> - <xs:annotation> - <xs:documentation>Der Name des Konfigurationsparameters.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Datentyp" minOccurs="0" type="xdomea:DatentypCodeType"> - <xs:annotation> - <xs:documentation>Der Datentyp des Konfigurationsparameters.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Wert" minOccurs="0"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Für einen zu erstellenden Konfigurationsparameter muss der Wert zwingend übergeben werden.</implementationHint> - </xs:appinfo> - <xs:documentation>Der Wert des Konfigurationsparameters.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:choice> - <xs:element name="WertOffen" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Wert ist nicht näher definiert und kann als Freitext übermittelt werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Transportweg" type="xdomea:TransportwegCodeType"> - <xs:annotation> - <xs:documentation>Es handelt sich bei dem Wert des Konfigurationsparameters um einen Transportweg.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Datenaustauschart" type="xdomea:DatenaustauschartCodeType"> - <xs:annotation> - <xs:documentation>Es handelt sich bei dem Wert des Konfigurationsparameters um eine Datenaustauschart.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="KomprimierterDatenaustausch" type="xs:boolean"> - <xs:annotation> - <xs:documentation>Es handelt sich bei dem Wert des Konfigurationsparameters um die Aussage zum komprimierten Datenaustausch. Findet eine Komprimierung der Daten statt, so ist der Wert 1 anzugeben. Findet keine Datenkomprimierung statt, so ist der Wert 0 anzugeben.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Kompressionsverfahren" - type="xdomea:KompressionsverfahrenCodeType"> - <xs:annotation> - <xs:documentation>Es handelt sich bei dem Wert des Konfigurationsparameters um ein Kompressionsverfahren.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Standardablage" type="xdomea:StandardablageType"> - <xs:annotation> - <xs:documentation>Es handelt sich bei dem Wert des Konfigurationsparameters um Angaben zur Standardablage.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:choice> - </xs:complexType> - </xs:element> - <xs:element name="Gruppe" type="xdomea:KonfigurationsparameterGruppeCodeType"> - <xs:annotation> - <xs:documentation>Die Gruppe von Parametern, zu der der Konfigurationsparameter gehört.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="KonfigurationsparameterZumAbrufenType"> - <xs:annotation> - <xs:appinfo> - <title>KonfigurationsparameterZumAbrufen</title> - </xs:appinfo> - <xs:documentation>Der Name eines Konfigurationsparameters, der abgerufen werden soll.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:restriction base="xdomea:FeldType"> - <xs:sequence> - <xs:element name="Name" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Name des Feldes.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:restriction> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="KonfigurationsparameterZumErstellenType"> - <xs:annotation> - <xs:appinfo> - <title>KonfigurationsparameterZumErstellen</title> - <implementationHint>Je nach Anwendungsfall ist mindestens eines der Elemente Konfigurationsparameter bzw. DefinierterKonfigurationsparameter mit Daten zu befüllen.</implementationHint> - </xs:appinfo> - <xs:documentation>Die Zusammenfassung von Konfigurationsparametern, die durch einen Benutzer oder eine Rolle erstellt werden sollen.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="BenutzerOderRolle" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Benutzer oder die Rolle, der/die den/die Konfigurationsparameter erstellt hat.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="DefinierterKonfigurationsparameter" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:KonfigurationsparameterType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem (den) zu erstellenden Konfigurationsparameter(n), die bereits näher klassifiziert sind.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Konfigurationsparameter" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:FeldType"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Für einen zu erstellenden Konfigurationsparameter muss der Wert zwingend übergeben werden.</implementationHint> - </xs:appinfo> - <xs:documentation>Die Informationen zu dem (den) zu erstellenden Konfigurationsparameter(n).</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="MetadatenZumBearbeitenType"> - <xs:annotation> - <xs:appinfo> - <title>MetadatenZumBearbeiten</title> - </xs:appinfo> - <xs:documentation>Die Zusammenfassung von Metadaten, die zu einem Schriftgutobjekt bearbeitet werden sollen. Wird die Nachricht im Stapelbetrieb übergeben, so erfolgt hier zusätzlich die Übergabe der Nummer im Stapel zu jedem angegebenen Metadatum.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="NummerImStapel" minOccurs="0" type="xs:unsignedInt"> - <xs:annotation> - <xs:documentation>Die Nummer des übergebenen Elements im Stapel. Anhand dieser Nummer können im Rückmeldestapel die Rückmeldungen den einzelnen Elementen im Stapel zugeordnet werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="IDSGO" type="xdomea:stringUUIDType"> - <xs:annotation> - <xs:documentation>Die ID des Schriftgutobjekts im DMS, zu dem die übergegebenen Metadaten bearbeitet werden sollen.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Metadatum" maxOccurs="unbounded" type="xdomea:FeldType"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Für ein anzulegendes Metadatum müssen der Datentyp und der Wert zwingend übergeben werden. Für ein zu aktualisierendes Metadatum muss der Wert zwingend übergeben werden. Die Beschreibung und der Datentyp sollten nicht übergeben werden, da sie meist nicht geändert werden.</implementationHint> - </xs:appinfo> - <xs:documentation>Die Informationen zu einem zu bearbeitenden Metadatum, das nicht in xdomea vordefiniert ist.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="NkKeineRueckmeldungFVDatenType"> - <xs:annotation> - <xs:appinfo> - <title>NkKeineRueckmeldungFVDaten</title> - </xs:appinfo> - <xs:documentation>Der Kopf für Nachrichten von einem Fachverfahren zu einem DMS bzw. zu einem Fachverfahren enthält allgemeine Informationen für die Bereitstellung der Nachricht sowie für den Empfänger der Nachricht selbst.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:extension base="xdomea:NkFVDatenType"> - <xs:sequence> - <xs:element name="WeiteresEmpfangendesSystem" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:SystemType"> - <xs:annotation> - <xs:documentation>Die Informationen zu dem System, das ebenfalls die Daten erhalten soll.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Empfangsbestaetigung" type="xs:boolean"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Für die Umsetzung in den Systemen wird empfohlen, sofern kein anderer Wert hinterlegt wurde, als Standardwert den Wert 0 für "keine Empfangsbestätigung senden" anzugeben.</implementationHint> - </xs:appinfo> - <xs:documentation>Die Angabe, ob vom Empfänger der Nachricht eine Empfangsbestätigung erwünscht wird. Eine erwünschte Empfangsbestätigung wird mit 1 gekennzeichnet. Wird keine Empfangsbestätigung gewünscht, so wird dies mit 0 gekennzeichnet.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Importbestaetigung" fixed="1" type="xs:boolean"> - <xs:annotation> - <xs:documentation>Die Angabe, dass eine Importbestätigung vom Empfänger der Nachricht erwünscht wird.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Erstellerkennung" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Benutzerkennung des Nachrichtenerstellers.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="ErstellerRolle" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Rolle des Nachrichtenerstellers.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Stapel" type="xs:boolean"> - <xs:annotation> - <xs:documentation>Stapel gibt an, ob die Nachricht mehrere Objekte in der Stapelverarbeitung oder ein Objekt in der Einzelverarbeitung übergibt. Soll eine Stapelverarbeitung erfolgen, so ist der Wert 1 anzugeben. Soll eine Einzelverarbeitung erfolgen, so ist der Wert 0 anzugeben.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Stapellaenge" minOccurs="0" type="xs:unsignedInt"> - <xs:annotation> - <xs:documentation>Die Länge des Stapels.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="DMSSessionID" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die DMS-Session-ID wird verwendet, um den Benutzer bzw. die Rolle gegenüber dem DMS zu authentifizieren. Sie wird bei der Anmeldung im DMS erzeugt und wird nach einer konfigurierbaren Zeit der Inaktivität ungültig.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:extension> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="NkRueckmeldungFVDatenImportType"> - <xs:annotation> - <xs:appinfo> - <title>NkRueckmeldungFVDatenImport</title> - </xs:appinfo> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen zu einer Rückmeldung eines Datenimports.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:extension base="xdomea:NkFVDatenType"> - <xs:sequence> - <xs:element name="FVSessionID" type="xs:string"> - <xs:annotation> - <xs:documentation>Die FV-Session-ID wird verwendet, um den Benutzer bzw. die Rolle aus dem DMS gegenüber dem Fachverfahren zu authentifizieren. Sie wird bei der Anmeldung im Fachverfahren erzeugt und wird nach einer konfigurierbaren Zeit der Inaktivität ungültig.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:extension> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="ProtokolleintragZumErstellenType"> - <xs:annotation> - <xs:appinfo> - <title>ProtokolleintragZumErstellen</title> - </xs:appinfo> - <xs:documentation>ProtokolleintragZumErstellen enthält Informationen zu einem Protokolleintrag i. S. eines Funktionsprotokolls, der zu einem Schriftgutobjekt erstellt wird. Wird die Nachricht im Stapelbetrieb übergeben, so erfolgt hier zusätzlich die Übergabe der Nummer im Stapel zu jedem angegebenen Protokolleintrag.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="NummerImStapel" minOccurs="0" type="xs:unsignedInt"> - <xs:annotation> - <xs:documentation>Die Nummer des übergebenen Elements im Stapel. Anhand dieser Nummer können im Rückmeldestapel die Rückmeldungen den einzelnen Elementen im Stapel zugeordnet werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="IDSGO" type="xdomea:stringUUIDType"> - <xs:annotation> - <xs:documentation>Die ID des Schriftgutobjekts im DMS, zu dem ein Protokolleintrag erstellt werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Protokolleintrag" type="xdomea:BearbeitungFVType"> - <xs:annotation> - <xs:documentation>Der Protokolleintrag zu dem Schriftgutobjekt.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="RueckgabeparameterFVDatenType"> - <xs:annotation> - <xs:appinfo> - <title>RueckgabeparameterFVDaten</title> - </xs:appinfo> - <xs:documentation>Die Rückmeldung des DMS zu den gelieferten Daten des Fachverfahrens.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="NummerImStapel" minOccurs="0" type="xs:unsignedInt"> - <xs:annotation> - <xs:documentation>Die Nummer des übergebenen Elements im Stapel. Anhand dieser Nummer können im Rückmeldestapel die Rückmeldungen den einzelnen Elementen im Stapel zugeordnet werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="IDSGO" minOccurs="0" type="xdomea:stringUUIDType"> - <xs:annotation> - <xs:documentation>Die ID des Schriftgutobjekts im DMS, zu dem die Rückmeldung erfolgt.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Parameter"> - <xs:annotation> - <xs:documentation>Die Informationen zum Parameterwert.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:choice> - <xs:element name="AllgemeinerRueckgabeparameter" type="xdomea:FeldType"> - <xs:annotation> - <xs:documentation>Es handelt sich bei dem Wert um einen allgemeinen, nicht näher im Standard definierten Rückgabeparameterwert.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="ZumLoeschenMarkiert" type="xs:boolean"> - <xs:annotation> - <xs:documentation>Es handelt sich bei dem Wert um eine Löschmarkierung. Wurde ein Objekt zum Löschen markiert, so wird der Wert 1 angegeben. Wurde kein Objekt zum Löschen markiert, so wird der Wert 0 angegeben.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Vertretungsstatus" - maxOccurs="unbounded" - type="xdomea:RueckgabeparameterVertretungsstatusType"> - <xs:annotation> - <xs:documentation>Es handelt sich bei dem Wert um Angaben zu einem Vertretungsstatus.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Ablageort" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Ablageort des Schriftgutobjekts</xs:documentation> - </xs:annotation> - </xs:element> - </xs:choice> - </xs:complexType> - </xs:element> - <xs:element name="Erfolgreich" type="xs:boolean"> - <xs:annotation> - <xs:documentation>Die Kennzeichnung des erfolgreichen oder nicht erfolgreichen Imports eines Datenelements. Der erfolgreiche Import wird mit 1 und der nicht erfolgreiche Import mit 0 gekennzeichnet.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Rueckmeldung" minOccurs="0" maxOccurs="unbounded"> - <xs:annotation> - <xs:documentation>Die Rückmeldung enthält weiterführende Informationen zu dem Import eines Datenelements, z.B. eine spezifische Fehlermeldung.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:choice> - <xs:element name="SpezifischeFehlermeldung0601" - type="xdomea:SpezifischeFehlermeldung0601CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0601.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0602" - type="xdomea:SpezifischeFehlermeldung0602CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0602.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0603" - type="xdomea:SpezifischeFehlermeldung0603CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0603.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0604" - type="xdomea:SpezifischeFehlermeldung0604CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0604.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0605" - type="xdomea:SpezifischeFehlermeldung0605CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0605.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0606" - type="xdomea:SpezifischeFehlermeldung0606CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0606.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0607" - type="xdomea:SpezifischeFehlermeldung0607CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0607.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0608" - type="xdomea:SpezifischeFehlermeldung0608CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0608.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0609" - type="xdomea:SpezifischeFehlermeldung0609CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0609.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0610" - type="xdomea:SpezifischeFehlermeldung0610CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0610.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0611" - type="xdomea:SpezifischeFehlermeldung0611CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0611.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0612" - type="xdomea:SpezifischeFehlermeldung0612CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0612.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0613" - type="xdomea:SpezifischeFehlermeldung0613CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0613.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0614" - type="xdomea:SpezifischeFehlermeldung0614CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0614.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0615" - type="xdomea:SpezifischeFehlermeldung0615CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0615.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0616" - type="xdomea:SpezifischeFehlermeldung0616CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0616.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0617" - type="xdomea:SpezifischeFehlermeldung0617CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0617.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0618" - type="xdomea:SpezifischeFehlermeldung0618CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0618.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0619" - type="xdomea:SpezifischeFehlermeldung0619CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0619.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0620" - type="xdomea:SpezifischeFehlermeldung0620CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0620.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0621" - type="xdomea:SpezifischeFehlermeldung0621CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0621.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0622" - type="xdomea:SpezifischeFehlermeldung0622CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0622.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0623" - type="xdomea:SpezifischeFehlermeldung0623CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0623.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0624" - type="xdomea:SpezifischeFehlermeldung0624CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0624.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0625" - type="xdomea:SpezifischeFehlermeldung0625CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0625.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0626" - type="xdomea:SpezifischeFehlermeldung0626CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0626.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0627" - type="xdomea:SpezifischeFehlermeldung0627CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0627.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0628" - type="xdomea:SpezifischeFehlermeldung0628CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0628.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0631" - type="xdomea:SpezifischeFehlermeldung0631CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0631.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SpezifischeFehlermeldung0632" - type="xdomea:SpezifischeFehlermeldung0632CodeType"> - <xs:annotation> - <xs:documentation>Eine spezifische Fehlermeldung für die Nachricht 0632.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SonstigeFehlermeldung" type="xs:string"> - <xs:annotation> - <xs:documentation>Eine sonstige, nicht näher definierte Fehlermeldung, die als Freitext formuliert werden kann.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="SonstigeFehlermeldungCode" - type="xdomea:SonstigeFehlermeldungCodeType"> - <xs:annotation> - <xs:documentation>Eine sonstige, nicht näher in xdomea definierte Fehlermeldung, die als Code angegeben werden kann.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:choice> - </xs:complexType> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="RueckgabeparameterVertretungsstatusType"> - <xs:annotation> - <xs:appinfo> - <title>RueckgabeparameterVertretungsstatus</title> - </xs:appinfo> - <xs:documentation>Informationen, die Angaben eines Rückgabeparameters zu einem Vertretungsstatus näher beschreiben.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="BenutzerOderRolle" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Benutzer oder die Rolle, für den/die der Vertretungsstatus abgefragt wird.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="VertretungAktiv" type="xs:boolean"> - <xs:annotation> - <xs:documentation>Der Status zur Vertretung, der abgefragt wird. Für aktive Vertretungen ist der Wert 1 anzugeben, für inaktive der Wert 0.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="SchriftgutobjektZumAblegenOderErstellenType"> - <xs:annotation> - <xs:appinfo> - <title>SchriftgutobjektZumAblegenOderErstellen</title> - </xs:appinfo> - <xs:documentation>SchriftgutobjektZumAblegenOderErstellen enthält Informationen zu einem Schriftgutobjekt, das in einem Fachverfahren erstellt wurde und im empfangenden DMS abgelegt oder erstellt werden soll. Wird die Nachricht im Stapelbetrieb übergeben, so erfolgt hier zusätzlich die Übergabe der Nummer im Stapel zu jedem angegebenen Schriftgutobjekt.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="NummerImStapel" minOccurs="0" type="xs:unsignedInt"> - <xs:annotation> - <xs:documentation>Die Nummer des übergebenen Elements im Stapel. Anhand dieser Nummer können im Rückmeldestapel die Rückmeldungen den einzelnen Elementen im Stapel zugeordnet werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="FachverfahrenObjektID" type="xs:string"> - <xs:annotation> - <xs:documentation>Die ID des Schriftgutobjektes im Fachverfahren.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="IDContainer" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die ID des übergeordneten Schriftgutobjekts, in dem das Schriftgutobjekt erstellt werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Schriftgutobjekt"> - <xs:annotation> - <xs:documentation>Das Schriftgutobjekt, das abgelegt oder erstellt werden soll.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:choice> - <xs:element name="Akte" type="xdomea:AkteType"> - <xs:annotation> - <xs:documentation>Eine Akte.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Vorgang" type="xdomea:VorgangType"> - <xs:annotation> - <xs:documentation>Ein Vorgang.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Dokument" type="xdomea:DokumentType"> - <xs:annotation> - <xs:documentation>Ein Dokument.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:choice> - </xs:complexType> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="SchriftgutobjektZumAblegenType"> - <xs:annotation> - <xs:appinfo> - <title>SchriftgutobjektZumAblegen</title> - </xs:appinfo> - <xs:documentation>SchriftgutobjektZumAblegen enthält Informationen zu einem Schriftgutobjekt, das in einem Fachverfahren erstellt wurde und im empfangenden DMS abgelegt werden soll.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:extension base="xdomea:SchriftgutobjektZumAblegenOderErstellenType"> - <xs:sequence> - <xs:element name="Ablageort" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Sollte als Austauschart nicht Datenbank oder XML-Datenstrom angegeben sein, so muss für den Ablageort zwingend ein Wert angegeben werden.</implementationHint> - </xs:appinfo> - <xs:documentation>Der Ablageort des Schriftgutobjekts, das im DMS abgelegt werden soll. Die Primärdokumente zu Dokumenten finden sich in Dateien, die durch Primaerdokument.Dateiname spezifiziert werden. In Abhängigkeit des Konfigurationsparameters Datenaustauschart kann dieser Parameter unterschiedliche Werte annehmen: Übergabe über ein freigegebenes Verzeichnis: Name des Verzeichnisses. Übergabe per WebDAV und http(s): URL. Übergabe über eine Datenbank: der Parameter bleibt leer (bzw. wird ignoriert).</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:extension> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SchriftgutobjektZumAnsehenOderBearbeitenType"> - <xs:annotation> - <xs:appinfo> - <title>SchriftgutobjektZumAnsehenOderBearbeiten</title> - </xs:appinfo> - <xs:documentation>SchriftgutobjektZumAnsehenOderBearbeiten enthält Informationen zu einem Schriftgutobjekt, das in einem Fachverfahren erstellt wurde und im empfangenden DMS angesehen oder bearbeitet werden soll.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="IDSGO" type="xdomea:stringUUIDType"> - <xs:annotation> - <xs:documentation>Die ID des Schriftgutobjekts im DMS, das angesehen oder bearbeitet werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Versionsnummer" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Die Versionsnummer kann nur für Dokumente angegeben werden - für Akte und Vorgang ist dies nicht möglich.</implementationHint> - </xs:appinfo> - <xs:documentation>Die Versionsnummer des Dokuments.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Client" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Neben der Benennung des Clients z.B. über eine IP-Adresse können auch Daten zur Identifizierung von Terminalserversitzungen angegeben werden.</implementationHint> - </xs:appinfo> - <xs:documentation>Der Client, auf dem das Schriftgutobjekt zu öffnen ist.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="SchriftgutobjektZumDruckenType"> - <xs:annotation> - <xs:appinfo> - <title>SchriftgutobjektZumDrucken</title> - </xs:appinfo> - <xs:documentation>SchriftgutobjektZumDrucken enthält Informationen zu einem Schriftgutobjekt, das in einem Fachverfahren erstellt wurde und gedruckt werden soll. Wird die Nachricht im Stapelbetrieb übergeben, so erfolgt hier zusätzlich die Übergabe der Nummer im Stapel zu jedem angegebenen Schriftgutobjekt.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="NummerImStapel" minOccurs="0" type="xs:unsignedInt"> - <xs:annotation> - <xs:documentation>Die Nummer des übergebenen Elements im Stapel. Anhand dieser Nummer können im Rückmeldestapel die Rückmeldungen den einzelnen Elementen im Stapel zugeordnet werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="IDSGO" type="xdomea:stringUUIDType"> - <xs:annotation> - <xs:documentation>Die ID des Schriftgutobjekts im DMS, das gedruckt werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Drucker" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Name des Druckers. Wird kein Druckername angegeben, so wird der Druck auf dem Standarddrucker des Clients ausgegeben.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="MetadatenDrucken" type="xs:boolean"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Für die Umsetzung in den Systemen wird empfohlen, sofern kein anderer Wert hinterlegt wurde, als Standardwert den Wert 0 für "keine Metadaten drucken" anzugeben.</implementationHint> - </xs:appinfo> - <xs:documentation>MetadatenDrucken legt fest, ob zu einem Schriftgutobjekt auch die Metadaten ausgedruckt werden sollen. Soll auch ein Druck der Metadaten zu Schriftgutobjekten stattfinden, so ist der Wert 1 anzugeben. Soll kein Druck der Metadaten zu Schriftgutobjekten stattfinden, so ist der Wert 0 anzugeben.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="PrimaerdokumentDrucken" type="xs:boolean"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Für die Umsetzung in den Systemen wird empfohlen, sofern kein anderer Wert hinterlegt wurde, als Standardwert den Wert 0 für "kein Primärdokument drucken" anzugeben.</implementationHint> - </xs:appinfo> - <xs:documentation>PrimaerdokumentDrucken legt fest, ob die Primärdokumente zu dem Schriftgutobjekt gedruckt werden. Sollen die Primärdokumente zu dem Schriftgutobjekt gedruckt werden, so ist der Wert 1 anzugeben. Soll kein Druck der Primärdokumente zum Schriftgutobjekt stattfinden, so ist der Wert 0 anzugeben.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="UnterSGODrucken" type="xs:boolean"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Für die Umsetzung in den Systemen wird empfohlen, sofern kein anderer Wert hinterlegt wurde, als Standardwert den Wert 0 für "kein untergeordnetes Schriftgutobjekt drucken" anzugeben.</implementationHint> - </xs:appinfo> - <xs:documentation>UnterSGODrucken legt fest, ob sich innerhalb des übergegebenen Schriftgutobjekts befindliche Schriftgutobjekte gedruckt werden sollen, z.B. eine Akte mit ihren Vorgängen und Dokumenten. Sollen die untergeordneten Schriftgutobjekte gedruckt werden, so ist der Wert 1 anzugeben. Soll kein Druck der untergeordneten Schriftgutobjekte erfolgen, so ist der Wert 0 anzugeben.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="UnterSGOTyp" - minOccurs="0" - maxOccurs="unbounded" - type="xs:string"> - <xs:annotation> - <xs:documentation>UnterSGOTyp legt fest, dass nur die Schriftgutobjekte eines angegebenen Typs gedruckt werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Versionsnummer" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Die Versionsnummer kann nur für Dokumente angegeben werden - für Akte und Vorgang ist dies nicht möglich.</implementationHint> - </xs:appinfo> - <xs:documentation>Die Versionsnummer des Dokuments.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Client" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Neben der Benennung des Clients z.B. über eine IP-Adresse können auch Daten zur Identifizierung von Terminalserversitzungen angegeben werden.</implementationHint> - </xs:appinfo> - <xs:documentation>Der Client, von dem aus das Schriftgutobjekt gedruckt wird.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="SchriftgutobjektZumErstellenType"> - <xs:annotation> - <xs:appinfo> - <title>SchriftgutobjektZumErstellen</title> - </xs:appinfo> - <xs:documentation>SchriftgutobjektZumErstellen enthält Informationen zu einem Schriftgutobjekt, das in einem Fachverfahren erzeugt wurde und im empfangenden DMS erstellt werden soll.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:extension base="xdomea:SchriftgutobjektZumAblegenOderErstellenType"> - <xs:sequence> - <xs:element name="SGOOeffnen" minOccurs="0" type="xs:boolean"> - <xs:annotation> - <xs:documentation>SGOOeffnen legt fest, ob das Schriftgutobjekt nach der Erstellung in dem DMS mit einer externen Applikation oder mit dem DMS z.B. zur weiteren Bearbeitung geöffnet werden soll. Soll das Schriftgutobjekt geöffnet werden, so ist der Wert 1 anzugeben. Soll das Schriftgutobjekt nicht geöffnet werden, so ist der Wert 0 anzugeben.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Client" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Das Schriftgutobjekt wird auf dem spezifizierten Client geöffnet, wenn der Client angegeben ist und der Parameter "SGOOeffnen" positiv belegt ist. Neben der Benennung des Clients z.B. über eine IP-Adresse können auch Daten zur Identifizierung von Terminalserversitzungen angegeben werden.</implementationHint> - </xs:appinfo> - <xs:documentation>Der Client, auf dem das Schriftgutobjekt zu öffnen ist.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:extension> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="SchriftgutobjektZumLoeschenType"> - <xs:annotation> - <xs:appinfo> - <title>SchriftgutobjektZumLoeschen</title> - </xs:appinfo> - <xs:documentation>SchriftgutobjektZumLoeschen enthält Informationen zu einem Schriftgutobjekt, das im DMS gelöscht bzw. dessen Löschmarkierung aufgehoben werden soll. Wird die Nachricht im Stapelbetrieb übergeben, so erfolgt hier zusätzlich die Übergabe der Nummer im Stapel zu jedem angegebenen Schriftgutobjekt.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="NummerImStapel" minOccurs="0" type="xs:unsignedInt"> - <xs:annotation> - <xs:documentation>Die Nummer des übergebenen Elements im Stapel. Anhand dieser Nummer können im Rückmeldestapel die Rückmeldungen den einzelnen Elementen im Stapel zugeordnet werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="IDSGO" type="xdomea:stringUUIDType"> - <xs:annotation> - <xs:documentation>Die ID des Schriftgutobjekts im DMS.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="SchriftgutobjektZumLoeschstatusAbfragenType"> - <xs:annotation> - <xs:appinfo> - <title>SchriftgutobjektZumLoeschstatusAbfragen</title> - </xs:appinfo> - <xs:documentation>SchriftgutobjektZumLoeschStatusAbfragen enthält Informationen zu einem Schriftgutobjekt, dessen Löschstatus im DMS abgefragt werden soll.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="NummerImStapel" minOccurs="0" type="xs:unsignedInt"> - <xs:annotation> - <xs:documentation>Die Nummer des übergebenen Elements im Stapel. Anhand dieser Nummer können im Rückmeldestapel die Rückmeldungen den einzelnen Elementen im Stapel zugeordnet werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="IDSGO" type="xdomea:stringUUIDType"> - <xs:annotation> - <xs:documentation>Die ID des Schriftgutobjekts im DMS, dessen Löschtstatus abgefragt werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="SchriftgutobjektZumSuchenType"> - <xs:annotation> - <xs:appinfo> - <title>SchriftgutobjektZumSuchen</title> - </xs:appinfo> - <xs:documentation>SchriftgutobjektZumSuchen enthält Informationen zur Suche nach Schriftgutobjekten im DMS.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Suchbegriffe" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Suchbegriffe sind Kriterien, mit deren Hilfe im DMS nach Schriftgutobjekten gesucht wird. Sie werden über eine UND-Verknüpfung ausgewertet.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Volltext" type="xs:boolean"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Für die Umsetzung in den Systemen wird empfohlen, sofern kein anderer Wert hinterlegt wurde, als Standardwert den Wert 1 für "Volltextsuche durchführen" anzugeben.</implementationHint> - </xs:appinfo> - <xs:documentation>Volltext legt fest, ob die Suche auch in den Primärdokumenten der Schriftgutobjekte durchgeführt werden soll. Soll die Suche auch in den Primärdokumenten durchgeführt werden, so ist der Wert 1 anzugeben. Soll eine solche Suche in den Primärdokumenten nicht erfolgen, so ist der Wert 0 anzugeben.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Metadaten" type="xs:boolean"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Für die Umsetzung in den Systemen wird empfohlen, sofern kein anderer Wert hinterlegt wurde, als Standardwert den Wert 1 für "Metadaten durchsuchen" anzugeben.</implementationHint> - </xs:appinfo> - <xs:documentation>Metadaten legt fest, ob die Suche auch in den Metadaten der Schriftgutobjekte durchgeführt werden soll. Soll eine Suche auch in den Metadaten der Schriftgutobjekte stattfinden, so ist der Wert 1 anzugeben. Soll keine Suche in den Metadaten der Schriftgutobjekte stattfinden, so ist der Wert 0 anzugeben.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="SchriftgutobjektZumZDAAufhebenType"> - <xs:annotation> - <xs:appinfo> - <title>SchriftgutobjektZumZDAAufheben</title> - </xs:appinfo> - <xs:documentation>SGOZumZDAAufheben enthält Informationen zu einem Schriftgutobjekt, dessen Daten im empfangenden System wiederaufleben sollen. Wird die Nachricht im Stapelbetrieb übergeben, so erfolgt hier zusätzlich die Übergabe der Nummer im Stapel zu jedem angegebenen Schriftgutobjekt.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="NummerImStapel" minOccurs="0" type="xs:unsignedInt"> - <xs:annotation> - <xs:documentation>Die Nummer des übergebenen Elements im Stapel. Anhand dieser Nummer können im Rückmeldestapel die Rückmeldungen den einzelnen Elementen im Stapel zugeordnet werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="IDSGO" type="xdomea:stringUUIDType"> - <xs:annotation> - <xs:documentation>Die ID des Schriftgutobjektes, dessen zdA-Verfügung aufgehoben werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="SchriftgutobjektZumZDAVerfuegenType"> - <xs:annotation> - <xs:appinfo> - <title>SchriftgutobjektZumZDAVerfuegen</title> - </xs:appinfo> - <xs:documentation>SchriftgutobjektZumZDAVerfuegen enthält Informationen zu einem Schriftgutobjekt, das im DMS zdA-verfügt werden soll. Wird die Nachricht im Stapelbetrieb übergeben, so erfolgt hier zusätzlich die Übergabe der Nummer im Stapel zu jedem angegebenen Schriftgutobjekt.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="NummerImStapel" minOccurs="0" type="xs:unsignedInt"> - <xs:annotation> - <xs:documentation>Die Nummer des übergebenen Elements im Stapel. Anhand dieser Nummer können im Rückmeldestapel die Rückmeldungen den einzelnen Elementen im Stapel zugeordnet werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="IDSGO" type="xdomea:stringUUIDType"> - <xs:annotation> - <xs:documentation>Die ID des Schriftgutobjekts im DMS, das zdA-verfügt werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="StandardablageType"> - <xs:annotation> - <xs:appinfo> - <title>Standardablage</title> - </xs:appinfo> - <xs:documentation>Standardablage beschreibt Informationen, an denen routinemäßig für einen bestimmten Benutzer oder eine bestimmte Rolle Daten abgelegt werden.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Ablageort" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Standard-Ablageort. In Abhängigkeit des Konfigurationsparameters Datenaustauschart kann dieser Parameter unterschiedliche Werte annehmen: Übergabe über ein freigegebenes Verzeichnis: Name des Verzeichnisses. Übergabe per WebDAV und http(s): URL. Übergabe über eine Datenbank: der Parameter bleibt leer (bzw. wird ignoriert).</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="BenutzerOderRolle" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Benutzer oder die Rolle, dem/der der Ablageort zugewiesen wird.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="SystemstatusZumAbfragenType"> - <xs:annotation> - <xs:appinfo> - <title>SystemstatusZumAbfragen</title> - </xs:appinfo> - <xs:documentation>SystemstatusZumAbfragen enthält Informationen zu einer Statusabfrage des empfangenden Systems.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="SystemstatusID" type="xs:integer"> - <xs:annotation> - <xs:documentation>Die ID der Systemstatus-Information, die abgefragt werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="VertretungZumAktivierenOderDeaktivierenType"> - <xs:annotation> - <xs:appinfo> - <title>VertretungZumAktivierenOderDeaktivieren</title> - </xs:appinfo> - <xs:documentation>VertretungZumAktivierenOderDeaktivieren enthält Informationen zu einer Vertretung, die aktiviert oder deaktiviert werden soll.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="ZuVertretender" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Benutzer oder die Rolle, für den/die die Vertretung aktiviert bzw. deaktiviert werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Vertreter" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Benutzer oder die Rolle, der/die die Vertretung übernehmen bzw. wieder abgeben soll.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Aktivieren" type="xs:boolean"> - <xs:annotation> - <xs:documentation>Aktivieren bestimmt, ob eine Vertretung aktiviert oder deaktiviert werden soll. Hat Aktivieren den Wert 1, so wird die Vertretung aktiviert. Hat Aktivieren den Wert 0, so wird die Vertretung deaktiviert.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="VertretungsstatusZumAbfragenType"> - <xs:annotation> - <xs:appinfo> - <title>VertretungsstatusZumAbfragen</title> - </xs:appinfo> - <xs:documentation>VertretungsstatusZumAbfragen enthält Informationen zur Abfrage des Vertretungsstatus eines Benutzers oder einer Rolle.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="BenutzerOderRolle" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Benutzer oder die Rolle, für den/die der Vertretungsstatus abgefragt wird.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="ZustaendigkeitZumAendernType"> - <xs:annotation> - <xs:appinfo> - <title>ZustaendigkeitZumAendern</title> - </xs:appinfo> - <xs:documentation>ZustaendigkeitZumAendern enthält Informationen zur Zuständigkeitsänderung eines Schriftgutobjekts. Wird die Nachricht im Stapelbetrieb übergeben, so erfolgt hier zusätzlich die Übergabe der Nummer im Stapel zu jedem angegebenen Schriftgutobjekt.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="NummerImStapel" minOccurs="0" type="xs:unsignedInt"> - <xs:annotation> - <xs:documentation>Die Nummer des übergebenen Elements im Stapel. Anhand dieser Nummer können im Rückmeldestapel die Rückmeldungen den einzelnen Elementen im Stapel zugeordnet werden.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="IDSGO" type="xdomea:stringUUIDType"> - <xs:annotation> - <xs:documentation>Die ID des Schriftgutobjekts im DMS, für das die Zuständigkeit angepasst werden soll.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="JetztZustaendig" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Benutzer oder die Rolle, welcher/welche nach der Zuständigkeitsänderung für das Schriftgutobjekt zuständig ist.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="BisherZustaendig" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Der Benutzer oder die Rolle, welcher/welche bisher für das Schriftgutobjekt zuständig war.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="AufnehmendAktenplaneinheitKennzeichen" - minOccurs="0" - type="xs:string"> - <xs:annotation> - <xs:documentation>Das Kennzeichen des übergeordneten Schriftgutobjekts, zu dem das von der Zuständigkeitsänderung betroffene Schriftgutobjekt nach der Änderung gehört.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="AufnehmendID" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die ID des übergeordneten Schriftgutobjekts, zu dem das Schriftgutobjekt nach der Zuständigkeitsänderung gehört.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="AbgebendAktenplaneinheitKennzeichen" - minOccurs="0" - type="xs:string"> - <xs:annotation> - <xs:documentation>Das Kennzeichen des übergeordneten Schriftgutobjekts, zu dem das von der Zuständigkeitsänderung betroffene Schriftgutobjekt vor der Änderung gehörte.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="AbgebendID" minOccurs="0" type="xs:string"> - <xs:annotation> - <xs:documentation>Die ID des übergeordneten Schriftgutobjekts, zu dem das Schriftgutobjekt vor der Zuständigkeitsänderung gehörte.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Metadatum" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:FeldType"> - <xs:annotation> - <xs:documentation>Ein im Rahmen der Zuständigkeitsänderung angepasstes Metadatum zu dem Schriftgutobjekt.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> -</xs:schema> diff --git a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Typen-GeschaeftsgangDurchfuehren.xsd b/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Typen-GeschaeftsgangDurchfuehren.xsd deleted file mode 100644 index fd1061cd1022fdfd11e1006b365c6f9ce0b90657..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Typen-GeschaeftsgangDurchfuehren.xsd +++ /dev/null @@ -1,133 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" - xmlns:xdomea="urn:xoev-de:xdomea:schema:3.0.0" - targetNamespace="urn:xoev-de:xdomea:schema:3.0.0" - version="3.0.0" - elementFormDefault="qualified" - attributeFormDefault="unqualified"> - <xs:annotation> - <xs:appinfo> - <standard> - <nameLang>xdomea - XÖV-Standard für den IT-gestützten Austausch und die IT-gestützte Aussonderung behördlichen Schriftgutes</nameLang> - <nameKurz>xdomea</nameKurz> - <nameTechnisch>xdomea</nameTechnisch> - <kennung>urn:xoev-de:xdomea:kosit:standard:xdomea</kennung> - <beschreibung>xdomea ist der vom IT-Planungsrat verabschiedete verbindliche Standard für den Austausch von Akten, Vorgängen und Dokumenten im Kontext der Übermittlung, der Abgabe sowie der Aussonderung von Schriftgutobjekten (www.it-planungsrat.de, Beschluss 2017/39). Weiterhin kann xdomea für den Austausch zwischen Fachverfahren und DMS/VBS sowie für die Zwischenarchivierung genutzt werden. - -Um diese Anwendungsszenarien bestmöglich zu unterstützen, ist xdomea gemäß des XÖV-Rahmenwerkes nach dem Baukastenprinzip aufgebaut und bietet einzelne Nachrichten(gruppen) für die jeweiligen Prozesse an. - -Der Standard xdomea wird von der gleichnamigen Arbeitsgruppe des IT-Planungsrates weiterentwickelt und gepflegt. Der Betrieb des Standards erfolgt durch die Koordinierungsstelle für IT-Standards (KoSIT). -</beschreibung> - </standard> - <versionStandard> - <version>3.0.0</version> - <beschreibung>Die Version 3.0.0 ist durch den IT-Planungsrat beschlossen. Details zum Beschluss sowie zu den Fristen der Umsetzung sind der Veröffentlichung im Bundesanzeiger unter www.bundesanzeiger.de zu entnehmen.</beschreibung> - <versionXOEVProfil>1.7.2</versionXOEVProfil> - <versionXOEVHandbuch>2.3.1</versionXOEVHandbuch> - <versionXGenerator>3.0.1</versionXGenerator> - <versionModellierungswerkzeug>19.0</versionModellierungswerkzeug> - <nameModellierungswerkzeug>MagicDraw</nameModellierungswerkzeug> - </versionStandard> - </xs:appinfo> - </xs:annotation> - <xs:include schemaLocation="xdomea-Baukasten.xsd"/> - <xs:complexType name="GeaenderterBeteiligungsschrittType"> - <xs:annotation> - <xs:appinfo> - <title>GeaenderterBeteiligungsschritt</title> - </xs:appinfo> - <xs:documentation>Informationen zu einem geänderten Beteiligungsschritt eines Geschäftsgangs. Geändert kann in diesem Zusammenhang neu erstellt bzw. übersprungen heißen.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Nummer" type="xs:string"> - <xs:annotation> - <xs:documentation>Die Nummer des Beteiligungsschrittes innerhalb der fortlaufenden Nummerierung im Geschäftsgang. Die Nummerierung ist innerhalb eines xdomea-Geschäftsgangsobjekts eindeutig. Werden in den xdomea-Geschäftsgang neue Bearbeitungsschritte eingefügt, werden dementsprechend die Nummern der nachfolgenden Beteiligungsschritte verändert. Beteiligungsschritte, die abgeschlossen sind, sind unveränderlich.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Aenderungsart"> - <xs:annotation> - <xs:documentation>Die Änderungsart eines Beteiligungsschrittes.</xs:documentation> - </xs:annotation> - <xs:complexType> - <xs:choice> - <xs:element name="Neu" fixed="1" type="xs:boolean"> - <xs:annotation> - <xs:documentation>Der Beteiligungsschritt wurde dem Laufweg eines Geschäftsgangs neu hinzugefügt.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Uebersprungen" fixed="1" type="xs:boolean"> - <xs:annotation> - <xs:documentation>Der Beteiligungsschritt wird in dem Laufweg als übersprungen markiert, d.h. der Schritt bleibt im Geschäftsgang erhalten, wird jedoch nicht mehr aktiv beteiligt.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:choice> - </xs:complexType> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="HauptobjektType"> - <xs:annotation> - <xs:appinfo> - <title>Hauptobjekt</title> - <implementationHint>Akten oder Vorgänge sind als Element im Hauptobjekt nicht erlaubt.</implementationHint> - </xs:appinfo> - <xs:documentation>Ein Container für die Dokumente, auf die sich die Beteiligungsschritte im externen Geschäftsgang beziehen.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="Dokument" maxOccurs="unbounded" type="xdomea:DokumentType"> - <xs:annotation> - <xs:documentation>Ein in der Geschäftsgangs-Nachricht enthaltenes Dokument, auf das sich die Verfügungen im externen Geschäftsgang beziehen.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="NkGeschaeftsgangType"> - <xs:annotation> - <xs:appinfo> - <title>NkGeschaeftsgang</title> - </xs:appinfo> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger einer Nachricht, bei der es sich um einen Geschäftsgang handelt.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:extension base="xdomea:NkBasisType"> - <xs:sequence> - <xs:element name="EmpfangsbestaetigungAnInitiator" type="xs:boolean"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Für die Umsetzung in den Systemen wird empfohlen, sofern kein anderer Wert hinterlegt wurde, als Standardwert den Wert 0 für "keine Empfangsbestätigung senden" anzugeben.</implementationHint> - </xs:appinfo> - <xs:documentation>Die Angabe, ob vom Empfänger der Nachricht eine Empfangsbestätigung für den Initiator des Geschäftsgangs erwünscht wird. Eine erwünschte Empfangsbestätigung wird mit 1 gekennzeichnet. Wird keine Empfangsbestätigung gewünscht, so wird dies mit 0 gekennzeichnet.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="EmpfangsbestaetigungAnVorgaenger" type="xs:boolean"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Für die Umsetzung in den Systemen wird empfohlen, sofern kein anderer Wert hinterlegt wurde, als Standardwert den Wert 0 für "keine Empfangsbestätigung senden" anzugeben.</implementationHint> - </xs:appinfo> - <xs:documentation>Die Angabe, ob vom Empfänger der Nachricht eine Empfangsbestätigung für den Absender der Nachricht erwünscht wird. Eine erwünschte Empfangsbestätigung wird mit 1 gekennzeichnet. Wird keine Empfangsbestätigung gewünscht, so wird dies mit 0 gekennzeichnet.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:extension> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="NkRueckmeldungGeschaeftsgangType"> - <xs:annotation> - <xs:appinfo> - <title>NkRueckmeldungGeschaeftsgang</title> - </xs:appinfo> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger der Empfangs-/Importnachricht zu einer in Beziehung stehenden Nachricht, die durch den Empfänger versendet wurde und sich auf einen Geschäftsgang bezieht.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:extension base="xdomea:NkBasisType"> - <xs:sequence> - <xs:element name="WeitererEmpfaenger" minOccurs="0" type="xdomea:KontaktType"> - <xs:annotation> - <xs:documentation>Der weitere Empfänger der Nachricht.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:extension> - </xs:complexContent> - </xs:complexType> -</xs:schema> diff --git a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Typen-ZwischenarchivierungDurchfuehren.xsd b/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Typen-ZwischenarchivierungDurchfuehren.xsd deleted file mode 100644 index 6795daa0473e4f35f553446de65fd93d452a31ab..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea-Typen-ZwischenarchivierungDurchfuehren.xsd +++ /dev/null @@ -1,97 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" - xmlns:xdomea="urn:xoev-de:xdomea:schema:3.0.0" - targetNamespace="urn:xoev-de:xdomea:schema:3.0.0" - version="3.0.0" - elementFormDefault="qualified" - attributeFormDefault="unqualified"> - <xs:annotation> - <xs:appinfo> - <standard> - <nameLang>xdomea - XÖV-Standard für den IT-gestützten Austausch und die IT-gestützte Aussonderung behördlichen Schriftgutes</nameLang> - <nameKurz>xdomea</nameKurz> - <nameTechnisch>xdomea</nameTechnisch> - <kennung>urn:xoev-de:xdomea:kosit:standard:xdomea</kennung> - <beschreibung>xdomea ist der vom IT-Planungsrat verabschiedete verbindliche Standard für den Austausch von Akten, Vorgängen und Dokumenten im Kontext der Übermittlung, der Abgabe sowie der Aussonderung von Schriftgutobjekten (www.it-planungsrat.de, Beschluss 2017/39). Weiterhin kann xdomea für den Austausch zwischen Fachverfahren und DMS/VBS sowie für die Zwischenarchivierung genutzt werden. - -Um diese Anwendungsszenarien bestmöglich zu unterstützen, ist xdomea gemäß des XÖV-Rahmenwerkes nach dem Baukastenprinzip aufgebaut und bietet einzelne Nachrichten(gruppen) für die jeweiligen Prozesse an. - -Der Standard xdomea wird von der gleichnamigen Arbeitsgruppe des IT-Planungsrates weiterentwickelt und gepflegt. Der Betrieb des Standards erfolgt durch die Koordinierungsstelle für IT-Standards (KoSIT). -</beschreibung> - </standard> - <versionStandard> - <version>3.0.0</version> - <beschreibung>Die Version 3.0.0 ist durch den IT-Planungsrat beschlossen. Details zum Beschluss sowie zu den Fristen der Umsetzung sind der Veröffentlichung im Bundesanzeiger unter www.bundesanzeiger.de zu entnehmen.</beschreibung> - <versionXOEVProfil>1.7.2</versionXOEVProfil> - <versionXOEVHandbuch>2.3.1</versionXOEVHandbuch> - <versionXGenerator>3.0.1</versionXGenerator> - <versionModellierungswerkzeug>19.0</versionModellierungswerkzeug> - <nameModellierungswerkzeug>MagicDraw</nameModellierungswerkzeug> - </versionStandard> - </xs:appinfo> - </xs:annotation> - <xs:include schemaLocation="xdomea-Baukasten.xsd"/> - <xs:complexType name="ErfolgOderMisserfolgZwischenarchivierungType"> - <xs:annotation> - <xs:appinfo> - <title>ErfolgOderMisserfolgZwischenarchivierung</title> - </xs:appinfo> - <xs:documentation>Die Information zum erfolgreichen oder nicht erfolgreichen Import eines auszulagernden Schriftgutobjektes.</xs:documentation> - </xs:annotation> - <xs:sequence> - <xs:element name="IDSGO" type="xdomea:stringUUIDType"> - <xs:annotation> - <xs:documentation>Die ID des Schriftgutobjekts, das ausgelagert werden sollte.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Erfolgreich" type="xs:boolean"> - <xs:annotation> - <xs:documentation>Die Kennzeichnung des erfolgreichen oder nicht erfolgreichen Imports zu einem auszulagernden Schriftgutobjekt. Der erfolgreiche Import wird mit 1 und der nicht erfolgreiche Import mit 0 gekennzeichnet.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Fehlermeldung" - minOccurs="0" - maxOccurs="unbounded" - type="xs:string"> - <xs:annotation> - <xs:documentation>Die Information in Form eines Freitextes, aus welchem Grund der Import zum auszulagernden Schriftgutobjekt nicht erfolgreich war.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="FehlermeldungCode" - minOccurs="0" - maxOccurs="unbounded" - type="xdomea:SonstigeFehlermeldungCodeType"> - <xs:annotation> - <xs:documentation>Die Information in Form eines Codes, aus welchem Grund der Import zum auszulagernden Schriftgutobjekt nicht erfolgreich war.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="NkZwischenarchivierungType"> - <xs:annotation> - <xs:appinfo> - <title>NkAuslagerung</title> - </xs:appinfo> - <xs:documentation>Der Kopf der Nachricht enthält allgemeine Informationen für den Empfänger einer Nachricht, bei der es sich um eine Auslagerung handelt.</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:extension base="xdomea:NkNichtFVDatenWeitereEmpfaengerType"> - <xs:sequence> - <xs:element name="Importbestaetigung" fixed="1" type="xs:boolean"> - <xs:annotation> - <xs:documentation>Die Angabe, dass eine Importbestätigung vom Empfänger der Nachricht erwünscht wird.</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Empfangsbestaetigung" type="xs:boolean"> - <xs:annotation> - <xs:appinfo> - <implementationHint>Für die Umsetzung in den Systemen wird empfohlen, sofern kein anderer Wert hinterlegt wurde, als Standardwert den Wert 0 für "keine Empfangsbestätigung senden" anzugeben.</implementationHint> - </xs:appinfo> - <xs:documentation>Die Angabe, ob vom Empfänger der Nachricht eine Empfangsbestätigung erwünscht wird. Eine erwünschte Empfangsbestätigung wird mit 1 gekennzeichnet. Wird keine Empfangsbestätigung gewünscht, so wird dies mit 0 gekennzeichnet.</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:extension> - </xs:complexContent> - </xs:complexType> -</xs:schema> diff --git a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea.xsd b/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea.xsd deleted file mode 100644 index 79642b4d3e9408ec090a03553c981549909010fc..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/resources/xdomea_3-0-0_XML-Schemata/xdomea.xsd +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" - targetNamespace="urn:xoev-de:xdomea:schema:3.0.0" - version="3.0.0" - elementFormDefault="qualified" - attributeFormDefault="unqualified"> - <xs:include schemaLocation="xdomea-Baukasten.xsd"/> - <xs:include schemaLocation="xdomea-Datentypen.xsd"/> - <xs:include schemaLocation="xdomea-Nachrichten-AbgabeDurchfuehren.xsd"/> - <xs:include schemaLocation="xdomea-Nachrichten-AktenplanAustauschen.xsd"/> - <xs:include schemaLocation="xdomea-Nachrichten-Archivsystem.xsd"/> - <xs:include schemaLocation="xdomea-Nachrichten-AussonderungDurchfuehren.xsd"/> - <xs:include schemaLocation="xdomea-Nachrichten-DMS.xsd"/> - <xs:include schemaLocation="xdomea-Nachrichten-Fachverfahren.xsd"/> - <xs:include schemaLocation="xdomea-Nachrichten-FachverfahrensdatenAustauschen.xsd"/> - <xs:include schemaLocation="xdomea-Nachrichten-GeschaeftsgangDurchfuehren.xsd"/> - <xs:include schemaLocation="xdomea-Nachrichten-InformationAustauschen.xsd"/> - <xs:include schemaLocation="xdomea-Nachrichten-VBS.xsd"/> - <xs:include schemaLocation="xdomea-Nachrichten-ZwischenarchivierungDurchfuehren.xsd"/> - <xs:include schemaLocation="xdomea-Nachrichten-Zwischenarchivsystem.xsd"/> - <xs:include schemaLocation="xdomea-Typen-AbgabeDurchfuehren.xsd"/> - <xs:include schemaLocation="xdomea-Typen-AussonderungDurchfuehren.xsd"/> - <xs:include schemaLocation="xdomea-Typen-FachverfahrensdatenAustauschen.xsd"/> - <xs:include schemaLocation="xdomea-Typen-GeschaeftsgangDurchfuehren.xsd"/> - <xs:include schemaLocation="xdomea-Typen-ZwischenarchivierungDurchfuehren.xsd"/> -</xs:schema> diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/bescheid/BescheidExportDataTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/bescheid/BescheidExportDataTestFactory.java deleted file mode 100644 index e731e4838f28f5056d77210640b33845c7f4ef1b..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/bescheid/BescheidExportDataTestFactory.java +++ /dev/null @@ -1,24 +0,0 @@ -package de.ozgcloud.alfa.bescheid; - -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.export.DokumentTypeTestFactory; -import de.xoev.xdomea.DokumentType; - -public class BescheidExportDataTestFactory { - - public static final DokumentType DOKUMENT_TYPE = DokumentTypeTestFactory.create(); - public static final OzgFile ATTACHMENT = OzgFileTestFactory.createWithUniqueId(); - public static final OzgFile DOCUMENT = OzgFileTestFactory.createWithUniqueId(); - - public static BescheidExportData create() { - return createBuilder().build(); - } - - public static BescheidExportData.BescheidExportDataBuilder createBuilder() { - return BescheidExportData.builder() - .dokumentType(DOKUMENT_TYPE) - .file(DOCUMENT) - .file(ATTACHMENT); - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/bescheid/BescheidExportInputTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/bescheid/BescheidExportInputTestFactory.java deleted file mode 100644 index fbee5d69b45774fcfac881ab2f4550284704c447..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/bescheid/BescheidExportInputTestFactory.java +++ /dev/null @@ -1,26 +0,0 @@ -package de.ozgcloud.alfa.bescheid; - -import java.util.List; - -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.vorgang.ZustaendigeStelleTestFactory; - -public class BescheidExportInputTestFactory { - - public final static Bescheid BESCHEID = BescheidTestFactory.create(); - public final static String ORGANISATIONSEINHEITEN_ID = ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID; - public final static List<OzgFile> FILES = List.of(OzgFileTestFactory.createWithUniqueId()); - - public static BescheidExportInput create() { - return createBuilder().build(); - } - - public static BescheidExportInput.BescheidExportInputBuilder createBuilder() { - return BescheidExportInput.builder() - .bescheid(BESCHEID) - .organisationseinheitenId(ORGANISATIONSEINHEITEN_ID) - .files(FILES); - } - -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/bescheid/DokumentTypeBuilderTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/bescheid/DokumentTypeBuilderTest.java deleted file mode 100644 index 55e271e0050a302b0890245d0ca1bdc9f5adaa93..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/bescheid/DokumentTypeBuilderTest.java +++ /dev/null @@ -1,293 +0,0 @@ -package de.ozgcloud.alfa.bescheid; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.List; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.mockito.Spy; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.AnlageDokumentTypeBuilder; -import de.ozgcloud.alfa.common.AnlageDokumentTypeTestFactory; -import de.ozgcloud.alfa.common.DateConverter; -import de.ozgcloud.alfa.common.HistorienProtokollInformationTypeTestFactory; -import de.ozgcloud.alfa.common.IdentifikationObjektTypeBuilder; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.export.AllgemeineMetadatenTypeTestFactory; -import de.ozgcloud.alfa.export.IdentifikationObjektTypeTestFactory; -import de.ozgcloud.alfa.vorgang.ZustaendigeStelleTestFactory; -import de.xoev.xdomea.AllgemeineMetadatenType; -import de.xoev.xdomea.AnlageDokumentType; -import de.xoev.xdomea.HistorienProtokollInformationType; -import de.xoev.xdomea.IdentifikationObjektType; - -class DokumentTypeBuilderTest { - private final String fullName = UserProfileTestFactory.FULLNAME; - private final Bescheid bescheid = BescheidTestFactory.create(); - private final OzgFile document = OzgFileTestFactory.createWithUniqueId(); - - @Spy - private final DokumentTypeBuilder builder = DokumentTypeBuilder.builder() - .withBescheid(bescheid) - .withOrganisationseinheitenId(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID) - .withFullName(fullName) - .withFiles(List.of(document)); - - @Nested - class TestBuild { - private static final String TYP = "Bescheid"; - - private MockedStatic<IdentifikationObjektTypeBuilder> identifikationObjektTypeBuilderMockedStatic; - @Mock - private IdentifikationObjektTypeBuilder identifikationObjektTypeBuilder; - private final IdentifikationObjektType identifikationObjektType = IdentifikationObjektTypeTestFactory.create(); - - private final HistorienProtokollInformationType historienProtokollInformation = HistorienProtokollInformationTypeTestFactory.create(); - private final AllgemeineMetadatenType metadatenType = AllgemeineMetadatenTypeTestFactory.create(); - private final AnlageDokumentType anlageDokumentDocument = AnlageDokumentTypeTestFactory.create(); - - @BeforeEach - void setUp() { - identifikationObjektTypeBuilderMockedStatic = mockStatic(IdentifikationObjektTypeBuilder.class); - identifikationObjektTypeBuilderMockedStatic.when(IdentifikationObjektTypeBuilder::builder).thenReturn(identifikationObjektTypeBuilder); - when(identifikationObjektTypeBuilder.withObjectID(BescheidTestFactory.ID)).thenReturn(identifikationObjektTypeBuilder); - when(identifikationObjektTypeBuilder.build()).thenReturn(identifikationObjektType); - doReturn(anlageDokumentDocument).when(builder).createAnlage(document); - } - - @AfterEach - void tearDown() { - identifikationObjektTypeBuilderMockedStatic.close(); - } - - @Test - void shouldSetObjectId() { - builder.build(); - - verify(identifikationObjektTypeBuilder).withObjectID(bescheid.getId()); - } - - @Test - void shouldBuildIdentifikationObjectType() { - builder.build(); - - verify(identifikationObjektTypeBuilder).build(); - } - - @Test - void shouldHaveIdentifikation() { - var dokument = builder.build(); - - assertThat(dokument.getIdentifikation()).isEqualTo(identifikationObjektType); - } - - @Test - void shouldHaveTyp() { - var dokument = builder.build(); - - assertThat(dokument.getTyp()).isEqualTo(TYP); - } - - @Test - void shouldHaveBezugWithBetreff() { - var subject = LoremIpsum.getInstance().getWords(5); - builder.withBescheid(BescheidTestFactory.createBuilder().nachrichtSubject(subject).build()); - - var dokument = builder.build(); - - assertThat(dokument.getBezug()).isEqualTo(subject); - } - - @Test - void shouldHaveEmptyBezug() { - builder.withBescheid(BescheidTestFactory.createBuilder().nachrichtSubject(null).build()); - - var dokument = builder.build(); - - assertThat(dokument.getBezug()).isEmpty(); - } - - @Test - void shouldHaveMetadaten() { - doReturn(metadatenType).when(builder).createAllgemeineMetadaten(); - - var dokument = builder.build(); - - assertThat(dokument.getAllgemeineMetadaten()).isEqualTo(metadatenType); - } - - @Test - void shouldHaveHistorienProtokollInformation() { - doReturn(historienProtokollInformation).when(builder).createHistorienProtokollInformation(); - - var dokument = builder.build(); - - assertThat(dokument.getHistorienProtokollInformation()).containsExactly(historienProtokollInformation); - } - - @Nested - class TestWithoutAnlage { - @Test - void shouldHaveNoAnlage() { - var dokument = builder.build(); - - assertThat(dokument.getAnlage()).containsExactly(anlageDokumentDocument); - } - - } - - @Nested - class TestWithOneAnlage { - private final AnlageDokumentType anlageDokumentAttachment = AnlageDokumentTypeTestFactory.create(); - private final OzgFile attachment = OzgFileTestFactory.createWithUniqueId(); - - @Test - void shouldHaveOneAnlage() { - builder.withFiles(List.of(document, attachment)); - doReturn(anlageDokumentAttachment).when(builder).createAnlage(attachment); - - var dokument = builder.build(); - - assertThat(dokument.getAnlage()).containsExactly(anlageDokumentDocument, anlageDokumentAttachment); - } - } - } - - @Nested - class TestCreateAllgemeineMetadaten { - private final static String GENEHMIGT = "Bescheid wurde genehmigt."; - private final static String ABGELEHNT = "Bescheid wurde abgelehnt."; - - @Test - void shouldHaveBemerkungGenehmigt() { - builder.withBescheid(BescheidTestFactory.createBuilder().bewilligt(true).build()); - - var metadaten = builder.createAllgemeineMetadaten(); - - assertThat(metadaten.getBemerkung()).isEqualTo(GENEHMIGT); - } - - @Test - void shouldHaveBemerkungAbgelehnt() { - builder.withBescheid(BescheidTestFactory.createBuilder().bewilligt(false).build()); - - var metadaten = builder.createAllgemeineMetadaten(); - - assertThat(metadaten.getBemerkung()).isEqualTo(ABGELEHNT); - } - } - - @Nested - class TestCreateHistorienProtokollInformation { - private final static String GESPEICHERT = "Bescheid gespeichert"; - private final static String GESENDET = "Bescheid an Antragsteller gesendet"; - - @Test - void shouldHaveMetadatumName() { - var text = LoremIpsum.getInstance().getHtmlParagraphs(1, 1); - builder.withBescheid(BescheidTestFactory.createBuilder().nachrichtText(text).build()); - - var protokollInfo = builder.createHistorienProtokollInformation(); - - assertThat(protokollInfo.getMetadatumName()).isEqualTo(text); - } - - @Test - void shouldHaveEmptyMetadatumName() { - builder.withBescheid(BescheidTestFactory.createBuilder().nachrichtText(null).build()); - - var protokollInfo = builder.createHistorienProtokollInformation(); - - assertThat(protokollInfo.getMetadatumName()).isEmpty(); - } - - @Test - void shouldHaveAkteur() { - var protokollInfo = builder.createHistorienProtokollInformation(); - - assertThat(protokollInfo.getAkteur()).isEqualTo(fullName + "; " + ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID); - } - - @Test - void shouldHaveDatumUhrzeit() { - var protokollInfo = builder.createHistorienProtokollInformation(); - - assertThat(protokollInfo.getDatumUhrzeit()).isEqualTo(DateConverter.toXmlGregorianCalendar(SentInfoTestFactory.SENT_AT)); - } - - @Test - void shouldHaveGespeichertInAktion() { - builder.withBescheid(BescheidTestFactory.createBuilder().sendBy(SendBy.MANUAL).build()); - - var protokollInfo = builder.createHistorienProtokollInformation(); - - assertThat(protokollInfo.getAktion()).isEqualTo(GESPEICHERT); - } - - @Test - void shouldHaveGesendetInAktion() { - builder.withBescheid(BescheidTestFactory.createBuilder().sendBy(SendBy.NACHRICHT).build()); - - var protokollInfo = builder.createHistorienProtokollInformation(); - - assertThat(protokollInfo.getAktion()).isEqualTo(GESENDET); - } - } - - @Nested - class TestCreateAnlage { - private MockedStatic<AnlageDokumentTypeBuilder> anlageDokumentTypeBuilderMockedStatic; - @Mock - private AnlageDokumentTypeBuilder anlageDokumentTypeBuilder; - private final AnlageDokumentType expectedAnlage = AnlageDokumentTypeTestFactory.create(); - private final OzgFile attachment = OzgFileTestFactory.createWithUniqueId(); - - @BeforeEach - void setUp() { - anlageDokumentTypeBuilderMockedStatic = mockStatic(AnlageDokumentTypeBuilder.class); - anlageDokumentTypeBuilderMockedStatic.when(AnlageDokumentTypeBuilder::builder).thenReturn(anlageDokumentTypeBuilder); - when(anlageDokumentTypeBuilder.withOzgFile(attachment)).thenReturn(anlageDokumentTypeBuilder); - when(anlageDokumentTypeBuilder.build()).thenReturn(expectedAnlage); - } - - @AfterEach - void tearDown() { - anlageDokumentTypeBuilderMockedStatic.close(); - } - - @Test - void shouldSetOzgFile() { - callCreateAnlage(); - - verify(anlageDokumentTypeBuilder).withOzgFile(attachment); - } - - @Test - void shouldBuildAnlageDokumentType() { - callCreateAnlage(); - - verify(anlageDokumentTypeBuilder).build(); - } - - @Test - void shouldReturnBuiltAnlage() { - var resultAnlage = callCreateAnlage(); - - assertThat(resultAnlage).isEqualTo(expectedAnlage); - } - - private AnlageDokumentType callCreateAnlage() { - return builder.createAnlage(attachment); - } - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/bescheid/ExportBescheidServiceTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/bescheid/ExportBescheidServiceTest.java deleted file mode 100644 index c502ffde25714570e0897df946cf97c6cd72bc6f..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/bescheid/ExportBescheidServiceTest.java +++ /dev/null @@ -1,419 +0,0 @@ -package de.ozgcloud.alfa.bescheid; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.List; -import java.util.stream.Stream; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.mockito.Spy; - -import de.ozgcloud.alfa.bescheid.BescheidExportData.BescheidExportDataBuilder; -import de.ozgcloud.alfa.common.binaryfile.BinaryFileService; -import de.ozgcloud.alfa.common.binaryfile.FileId; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.common.user.UserProfile; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.common.user.UserService; -import de.ozgcloud.alfa.export.DokumentTypeTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; -import de.xoev.xdomea.DokumentType; - -class ExportBescheidServiceTest { - - @InjectMocks - @Spy - private ExportBescheidService service; - - @Mock - private BescheidService bescheidService; - - @Mock - private BinaryFileService binaryFileService; - - @Mock - private DocumentService documentService; - - @Mock - private UserService userService; - - @Nested - class TestCreateExportData { - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - private final Bescheid bescheid = BescheidTestFactory.create(); - private final BescheidExportData exportData = BescheidExportDataTestFactory.create(); - private final BescheidExportInput input = BescheidExportInputTestFactory.create(); - - private MockedStatic<BescheidExportData> bescheidExportDataMockedStatic; - @Mock - private BescheidExportDataBuilder exportDataBuilder; - - @BeforeEach - void setUpMocks() { - bescheidExportDataMockedStatic = mockStatic(BescheidExportData.class); - bescheidExportDataMockedStatic.when(BescheidExportData::builder).thenReturn(exportDataBuilder); - - doReturn(Stream.of(bescheid)).when(service).getBescheids(vorgang.getId()); - when(exportDataBuilder.build()).thenReturn(exportData); - doReturn(input).when(service).createBescheidExportInput(bescheid, vorgang); - doNothing().when(service).addBescheidExportData(input, exportDataBuilder); - } - - @AfterEach - void tearDown() { - bescheidExportDataMockedStatic.close(); - } - - @Test - void shouldGetBescheids() { - callService(); - - verify(service).getBescheids(vorgang.getId()); - } - - @Test - void shouldCreateInputData() { - callService(); - - verify(service).createBescheidExportInput(bescheid, vorgang); - } - - @Test - void shouldAddInputToBuilder() { - callService(); - - verify(service).addBescheidExportData(input, exportDataBuilder); - } - - @Test - void shouldBuildExportData() { - callService(); - - verify(exportDataBuilder).build(); - } - - @Test - void shouldReturnBuiltExportData() { - var result = callService(); - - assertThat(result).isEqualTo(exportData); - } - - private BescheidExportData callService() { - return service.createExportData(vorgang); - } - } - - @Nested - class TestGetBescheids { - private final String vorgangId = VorgangHeaderTestFactory.ID; - private final Bescheid bescheid = BescheidTestFactory.createBuilder().status(BescheidStatus.SENT).build(); - private final Bescheid bescheidDraft = BescheidTestFactory.createBuilder().status(BescheidStatus.DRAFT).build(); - - @Test - void shouldCallBescheidService() { - callService(); - - verify(bescheidService).findByVorgangIdSorted(vorgangId); - } - - @Test - void shouldReturnBescheids() { - when(bescheidService.findByVorgangIdSorted(vorgangId)).thenReturn(Stream.of(bescheid)); - - var resultBescheids = callService(); - - assertThat(resultBescheids).containsExactly(bescheid); - } - - @Test - void shouldNotReturnDrafts() { - when(bescheidService.findByVorgangIdSorted(vorgangId)).thenReturn(Stream.of(bescheid, bescheidDraft)); - - var resultBescheids = callService(); - - assertThat(resultBescheids).containsExactly(bescheid); - } - - private Stream<Bescheid> callService() { - return service.getBescheids(vorgangId); - } - } - - @Nested - class TestCreateBescheidExportInput { - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - private final Bescheid bescheid = BescheidTestFactory.create(); - private final OzgFile document = OzgFileTestFactory.createWithUniqueId(); - private final OzgFile attachment = OzgFileTestFactory.createWithUniqueId(); - - @BeforeEach - void setUpMocks() { - doReturn(Stream.of(attachment)).when(service).getAttachments(bescheid); - doReturn(document).when(service).getDocument(bescheid); - } - - @Test - void shouldCallGetAttachents() { - callService(); - - verify(service).getAttachments(bescheid); - } - - @Test - void shouldCallGetDocument() { - callService(); - - verify(service).getDocument(bescheid); - } - - @Test - void shouldReturnInputData() { - var resultInput = callService(); - - assertThat(resultInput).usingRecursiveComparison() - .isEqualTo(BescheidExportInputTestFactory.createBuilder().files(List.of(document, attachment)).build()); - } - - private BescheidExportInput callService() { - return service.createBescheidExportInput(bescheid, vorgang); - } - } - - @Nested - class TestGetDocument { - private final Bescheid bescheid = BescheidTestFactory.create(); - private final Document document = DocumentTestFactory.create(); - private final OzgFile ozgDocument = OzgFileTestFactory.create(); - - @BeforeEach - void setUpMock() { - when(documentService.getDocument(bescheid.getBescheidDocument())).thenReturn(document); - } - - @Test - void shouldCallDocumentService() { - callService(); - - verify(documentService).getDocument(bescheid.getBescheidDocument()); - } - - @Test - void shouldCallBinaryFileService() { - callService(); - - verify(binaryFileService).getFile(DocumentTestFactory.FILE_ID); - } - - @Test - void shouldReturnOzgFile() { - when(binaryFileService.getFile(DocumentTestFactory.FILE_ID)).thenReturn(ozgDocument); - - var resultDocument = callService(); - - assertThat(resultDocument).isEqualTo(ozgDocument); - } - - private OzgFile callService() { - return service.getDocument(bescheid); - } - } - - @Nested - class TestGetAttachments { - private final Bescheid bescheid = BescheidTestFactory.create(); - private final List<FileId> fileIds = BescheidTestFactory.ATTACHMENTS; - - @Test - void shouldCallBinaryFileServiceGetFile() { - service.getAttachments(bescheid); - - verify(binaryFileService).getFiles(fileIds); - } - - @Test - void shouldReturnGottenOzgFiles() { - var expectedOzgFile = OzgFileTestFactory.createWithUniqueId(); - when(binaryFileService.getFiles(fileIds)).thenReturn(Stream.of(expectedOzgFile)); - - var resultOzgFiles = service.getAttachments(bescheid); - - assertThat(resultOzgFiles).containsExactly(expectedOzgFile); - } - } - - @Nested - class TestAddBescheidExportData { - private final List<OzgFile> files = BescheidExportInputTestFactory.FILES; - private final DokumentType dokumentType = DokumentTypeTestFactory.create(); - private final BescheidExportInput exportInput = BescheidExportInputTestFactory.create(); - - @Mock - private BescheidExportDataBuilder exportDataBuilder; - - @BeforeEach - void setUpMocks() { - doReturn(dokumentType).when(service).buildDokumentType(exportInput); - when(exportDataBuilder.dokumentType(dokumentType)).thenReturn(exportDataBuilder); - } - - @Test - void shouldAddAttachmentsToBuilder() { - callService(); - - verify(exportDataBuilder).files(files); - } - - @Test - void shouldBuildDokumentType() { - callService(); - - verify(service).buildDokumentType(exportInput); - } - - @Test - void shouldAddDokumentTypeToBuilder() { - callService(); - - verify(exportDataBuilder).dokumentType(dokumentType); - } - - private void callService() { - service.addBescheidExportData(exportInput, exportDataBuilder); - } - } - - @Nested - class TestBuildDokumentType { - private final BescheidExportInput exportInput = BescheidExportInputTestFactory.create(); - private final Bescheid bescheid = BescheidExportInputTestFactory.BESCHEID; - private final List<OzgFile> files = BescheidExportInputTestFactory.FILES; - private final String fullName = UserProfileTestFactory.FULLNAME; - - private MockedStatic<DokumentTypeBuilder> dokumentTypeBuilderMockedStatic; - @Mock - private DokumentTypeBuilder dokumentTypeBuilder; - - @BeforeEach - void setUp() { - dokumentTypeBuilderMockedStatic = mockStatic(DokumentTypeBuilder.class); - dokumentTypeBuilderMockedStatic.when(DokumentTypeBuilder::builder).thenReturn(dokumentTypeBuilder); - - when(dokumentTypeBuilder.withBescheid(bescheid)).thenReturn(dokumentTypeBuilder); - when(dokumentTypeBuilder.withFiles(files)).thenReturn(dokumentTypeBuilder); - when(dokumentTypeBuilder.withFullName(fullName)).thenReturn(dokumentTypeBuilder); - when(dokumentTypeBuilder.withOrganisationseinheitenId(BescheidExportInputTestFactory.ORGANISATIONSEINHEITEN_ID)) - .thenReturn(dokumentTypeBuilder); - - doReturn(fullName).when(service).getFullName(bescheid); - } - - @AfterEach - void tearDown() { - dokumentTypeBuilderMockedStatic.close(); - } - - @Test - void shouldCallBuilder() { - callService(); - - dokumentTypeBuilderMockedStatic.verify(DokumentTypeBuilder::builder); - } - - @Test - void shouldBuildWithBescheid() { - callService(); - - verify(dokumentTypeBuilder).withBescheid(bescheid); - } - - @Test - void shouldBuildWithOzgFiles() { - callService(); - - verify(dokumentTypeBuilder).withFiles(files); - } - - @Test - void shouldGetFullName() { - callService(); - - verify(service).getFullName(bescheid); - } - - @Test - void shouldBuildWithFullName() { - callService(); - - verify(dokumentTypeBuilder).withFullName(fullName); - } - - @Test - void shouldBuildWithOrganisationseinheitenId() { - callService(); - - verify(dokumentTypeBuilder).withOrganisationseinheitenId(BescheidExportInputTestFactory.ORGANISATIONSEINHEITEN_ID); - } - - @Test - void shouldBuild() { - callService(); - - verify(dokumentTypeBuilder).build(); - } - - @Test - void shouldReturnBuiltDokumentType() { - var expectedDokumentType = DokumentTypeTestFactory.create(); - when(dokumentTypeBuilder.build()).thenReturn(expectedDokumentType); - - var resultDokumentType = callService(); - - assertThat(resultDokumentType).isEqualTo(expectedDokumentType); - } - - private DokumentType callService() { - return service.buildDokumentType(exportInput); - } - } - - @Nested - class TestGetFullName { - private final Bescheid bescheid = BescheidTestFactory.create(); - private final UserProfile userProfile = UserProfileTestFactory.create(); - private final String expectedFullName = UserProfileTestFactory.FULLNAME; - - @BeforeEach - void mockUserService() { - when(userService.getById(SentInfoTestFactory.SENT_BY)).thenReturn(userProfile); - } - - @Test - void shouldCallUserServiceGetbyId() { - callService(); - - verify(userService).getById(SentInfoTestFactory.SENT_BY); - } - - @Test - void shouldReturnOptionalOfUserProfile() { - var fullName = callService(); - - assertThat(fullName).isEqualTo(expectedFullName); - } - - private String callService() { - return service.getFullName(bescheid); - } - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/AnlageDokumentTypeBuilderTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/AnlageDokumentTypeBuilderTest.java deleted file mode 100644 index de772e2c7761a3135c5699ed06045d216c3a1b19..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/AnlageDokumentTypeBuilderTest.java +++ /dev/null @@ -1,110 +0,0 @@ -package de.ozgcloud.alfa.common; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.time.ZonedDateTime; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.export.IdentifikationObjektTypeTestFactory; -import de.xoev.xdomea.IdentifikationObjektType; -import de.xoev.xdomea.VersionType; - -class AnlageDokumentTypeBuilderTest { - - private final OzgFile ozgFile = OzgFileTestFactory.create(); - private final static ZonedDateTime CREATED_AT = ZonedDateTime.now(); - @Spy - private AnlageDokumentTypeBuilder builder = AnlageDokumentTypeBuilder.builder().withOzgFile(ozgFile).withCreatedAt(CREATED_AT); - - @Nested - class TestBuild { - private MockedStatic<IdentifikationObjektTypeBuilder> identifikationObjektTypeBuilderMockedStatic; - @Mock - private IdentifikationObjektTypeBuilder identifikationObjektTypeBuilder; - private final IdentifikationObjektType identifikationObjektType = IdentifikationObjektTypeTestFactory.create(); - - private MockedStatic<VersionTypeBuilder> versionTypeBuilderMockedStatic; - @Mock - private VersionTypeBuilder versionTypeBuilder; - private final VersionType version = VersionTypeTestFactory.create(); - - @BeforeEach - void setUp() { - identifikationObjektTypeBuilderMockedStatic = mockStatic(IdentifikationObjektTypeBuilder.class); - identifikationObjektTypeBuilderMockedStatic.when(IdentifikationObjektTypeBuilder::builder).thenReturn(identifikationObjektTypeBuilder); - when(identifikationObjektTypeBuilder.withObjectID(OzgFileTestFactory.ID.toString())).thenReturn(identifikationObjektTypeBuilder); - when(identifikationObjektTypeBuilder.build()).thenReturn(identifikationObjektType); - - versionTypeBuilderMockedStatic = mockStatic(VersionTypeBuilder.class); - versionTypeBuilderMockedStatic.when(VersionTypeBuilder::builder).thenReturn(versionTypeBuilder); - when(versionTypeBuilder.withCreatedAt(CREATED_AT)).thenReturn(versionTypeBuilder); - when(versionTypeBuilder.withOzgFile(ozgFile)).thenReturn(versionTypeBuilder); - when(versionTypeBuilder.build()).thenReturn(version); - } - - @AfterEach - void tearDown() { - identifikationObjektTypeBuilderMockedStatic.close(); - versionTypeBuilderMockedStatic.close(); - } - - @Test - void shouldSetObjectId() { - builder.build(); - - verify(identifikationObjektTypeBuilder).withObjectID(ozgFile.getId().toString()); - } - - @Test - void shouldBuildIdentifikationObjectType() { - builder.build(); - - verify(identifikationObjektTypeBuilder).build(); - } - - @Test - void shouldHaveIdentifikation() { - var anlage = builder.build(); - - assertThat(anlage.getIdentifikation()).isEqualTo(identifikationObjektType); - } - - @Test - void shouldSetCreatedAt() { - builder.build(); - - verify(versionTypeBuilder).withCreatedAt(CREATED_AT); - } - - @Test - void shouldSetOzgFile() { - builder.build(); - - verify(versionTypeBuilder).withOzgFile(ozgFile); - } - - @Test - void shouldBuildVersionType() { - builder.build(); - - verify(versionTypeBuilder).build(); - } - - @Test - void shouldHaveVersion() { - var anlage = builder.build(); - - assertThat(anlage.getVersion()).contains(version); - } - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/AnlageDokumentTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/AnlageDokumentTypeTestFactory.java deleted file mode 100644 index f932ea1d538e812148824460da9a0dd9bae5e494..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/AnlageDokumentTypeTestFactory.java +++ /dev/null @@ -1,11 +0,0 @@ -package de.ozgcloud.alfa.common; - -import de.xoev.xdomea.AnlageDokumentType; - -public class AnlageDokumentTypeTestFactory { - - public static AnlageDokumentType create() { - return new AnlageDokumentType(); - } - -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/DateConverterTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/DateConverterTest.java deleted file mode 100644 index d6673fc2325d7ef87fed22b5d7c920812308d5b0..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/DateConverterTest.java +++ /dev/null @@ -1,88 +0,0 @@ -package de.ozgcloud.alfa.common; - -import static org.assertj.core.api.Assertions.*; - -import java.time.ZonedDateTime; -import java.util.Optional; - -import javax.xml.datatype.DatatypeConfigurationException; -import javax.xml.datatype.DatatypeFactory; -import javax.xml.datatype.XMLGregorianCalendar; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; -import org.mockito.MockedStatic; -import org.mockito.Mockito; - -import de.ozgcloud.common.errorhandling.TechnicalException; - -class DateConverterTest { - - @Nested - class TestConvertGermanFormatToISO { - - private static final int YEAR = 2023; - private static final int MONTH = 2; - private static final int DAY = 14; - - private static final String DATE = String.format("%s.%s%s.%s", DAY, 0, MONTH, YEAR); - - @Test - void shouldConvert() { - var converted = callConverter(DATE); - - assertThat(converted).get().extracting(XMLGregorianCalendar::getYear, XMLGregorianCalendar::getMonth, XMLGregorianCalendar::getDay) - .containsExactly(YEAR, MONTH, DAY); - } - - @ParameterizedTest - @ValueSource(strings = { "2005-10-10", "abc", "19. February 1970", " ", "" }) - void shouldReturnEmpty(String dateStr) { - var converted = callConverter(dateStr); - - assertThat(converted).isEmpty(); - } - - @Test - void shouldReturnEmptyIfDateIsNull() { - var converted = callConverter(null); - - assertThat(converted).isEmpty(); - } - - private Optional<XMLGregorianCalendar> callConverter(String dateStr) { - return DateConverter.convertGermanFormatToISO(dateStr); - } - } - - @Nested - class TestCreateDatatypeFactory { - - @Test - void shouldThrowTechnicalException() { - try (MockedStatic<DatatypeFactory> datatypeFactory = Mockito.mockStatic(DatatypeFactory.class)) { - datatypeFactory.when(DatatypeFactory::newInstance).thenThrow(DatatypeConfigurationException.class); - - assertThatThrownBy(() -> DateConverter.createDatatypeFactory()).isInstanceOf(TechnicalException.class); - } - } - } - - @Nested - class TestToXmlGregorianCalendar { - - @Test - void shouldConvertZonedDateTime() { - var date = ZonedDateTime.now(); - - var xmlGregorianCalendar = DateConverter.toXmlGregorianCalendar(date); - - assertThat(xmlGregorianCalendar.getYear()).isEqualTo(date.getYear()); - assertThat(xmlGregorianCalendar.getMonth()).isEqualTo(date.getMonthValue()); - assertThat(xmlGregorianCalendar.getDay()).isEqualTo(date.getDayOfMonth()); - } - - } -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/DateiformatCodeTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/DateiformatCodeTest.java deleted file mode 100644 index 51be0e165911b9ddf5398b2a69b62abba8f0812b..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/DateiformatCodeTest.java +++ /dev/null @@ -1,70 +0,0 @@ -package de.ozgcloud.alfa.common; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.NullAndEmptySource; -import org.junit.jupiter.params.provider.ValueSource; - -class DateiformatCodeTest { - - @Nested - class TestGetXdomeaCode { - - @Test - void shouldReturnCode() { - var code = DateiformatCode.getXdomeaCode("application/pdf", "pdf"); - - assertThat(code).isEqualTo("018"); - } - - @Test - void shouldReturnSonstiges() { - var code = DateiformatCode.getXdomeaCode("abc", "abc"); - - assertThat(code).isEqualTo(DateiformatCode.SONSTIGES_CODE); - } - - @ParameterizedTest - @NullAndEmptySource - void shouldReturnCodeOnSingleFileExtensionMapping(String extension) { - var code = DateiformatCode.getXdomeaCode("application/pdf", extension); - - assertThat(code).isEqualTo("018"); - } - - @Test - void shouldReturnCodeOnMultipleFileExtensionMapping() { - var code = DateiformatCode.getXdomeaCode("image/jpeg", "jpg"); - - assertThat(code).isEqualTo("011"); - } - - @ParameterizedTest - @NullAndEmptySource - void shouldReturnSonstigesOnMultipleFileExtensionMapping(String extension) { - var code = DateiformatCode.getXdomeaCode("image/jpeg", extension); - - assertThat(code).isEqualTo(DateiformatCode.SONSTIGES_CODE); - } - - @ParameterizedTest - @NullAndEmptySource - void shouldReturnSonstigesOnEmptyMimeType(String mimeType) { - var code = DateiformatCode.getXdomeaCode(mimeType, "pdf"); - - assertThat(code).isEqualTo(DateiformatCode.SONSTIGES_CODE); - } - - @ParameterizedTest - @ValueSource(strings = { "application/xml", "text/xml" }) - void shouldReturnXml(String mimeType) { - var code = DateiformatCode.getXdomeaCode(mimeType, "xml"); - - assertThat(code).isEqualTo("030"); - } - } - -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/DateiformatCodeTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/DateiformatCodeTypeTestFactory.java deleted file mode 100644 index 299391ad928a9c7bacba0101e474592f55874c8a..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/DateiformatCodeTypeTestFactory.java +++ /dev/null @@ -1,11 +0,0 @@ -package de.ozgcloud.alfa.common; - -import de.xoev.xdomea.DateiformatCodeType; - -public class DateiformatCodeTypeTestFactory { - - public static DateiformatCodeType create() { - return new DateiformatCodeType(); - } - -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/FormatTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/FormatTypeTestFactory.java deleted file mode 100644 index ea0393aea974a6b7f00fad540c30e630d9e6e520..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/FormatTypeTestFactory.java +++ /dev/null @@ -1,10 +0,0 @@ -package de.ozgcloud.alfa.common; - -import de.xoev.xdomea.FormatType; - -public class FormatTypeTestFactory { - - public static FormatType create() { - return new FormatType(); - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/HistorienProtokollInformationTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/HistorienProtokollInformationTypeTestFactory.java deleted file mode 100644 index 425a9731e62f3055a703ef2aecd623ba5603ea83..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/HistorienProtokollInformationTypeTestFactory.java +++ /dev/null @@ -1,11 +0,0 @@ -package de.ozgcloud.alfa.common; - -import de.xoev.xdomea.HistorienProtokollInformationType; - -public class HistorienProtokollInformationTypeTestFactory { - - public static HistorienProtokollInformationType create() { - return new HistorienProtokollInformationType(); - } - -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/IdentifikationObjektTypeBuilderTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/IdentifikationObjektTypeBuilderTest.java deleted file mode 100644 index 55aeed8af0216295c413cab2c1e48443b105558a..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/IdentifikationObjektTypeBuilderTest.java +++ /dev/null @@ -1,63 +0,0 @@ -package de.ozgcloud.alfa.common; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.Random; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.MockedStatic; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.export.IdentifikationObjektTypeTestFactory; - -class IdentifikationObjektTypeBuilderTest { - private static final Long DOKUMENT_ORDINAL_NUMBER = new Random().nextLong(); - - @Spy - private IdentifikationObjektTypeBuilder builder = IdentifikationObjektTypeBuilder.builder().withObjectID(OzgFileTestFactory.ID.toString()) - .withOrdinalNumber(DOKUMENT_ORDINAL_NUMBER); - - @Nested - class TestBuild { - private MockedStatic<UUIDConverter> uuidConverterMockedStatic; - - @BeforeEach - void setUp() { - uuidConverterMockedStatic = mockStatic(UUIDConverter.class); - uuidConverterMockedStatic.when(() -> UUIDConverter.fromObjectId(OzgFileTestFactory.ID.toString())) - .thenReturn(IdentifikationObjektTypeTestFactory.ID); - } - - @AfterEach - void tearDown() { - uuidConverterMockedStatic.close(); - } - - @Test - void shouldConvertOzgFileId() { - builder.build(); - - uuidConverterMockedStatic.verify(() -> UUIDConverter.fromObjectId(OzgFileTestFactory.ID.toString())); - } - - @Test - void shouldHaveId() { - var identifikation = builder.build(); - - assertThat(identifikation.getID()).isEqualTo(IdentifikationObjektTypeTestFactory.ID); - } - - @Test - void shouldHaveNummerImUebergeordnetenContainer() { - var identifikation = builder.build(); - - assertThat(identifikation.getNummerImUebergeordnetenContainer()).isEqualTo(DOKUMENT_ORDINAL_NUMBER); - } - } - -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilderTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilderTest.java deleted file mode 100644 index c269f1948b14a8484a0250f77b29fcbe95fe8906..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilderTest.java +++ /dev/null @@ -1,106 +0,0 @@ -package de.ozgcloud.alfa.common; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.time.ZonedDateTime; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.MockedStatic; - -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; - -class PrimaerdokumentTypeBuilderTest { - - private final PrimaerdokumentTypeBuilder builder = PrimaerdokumentTypeBuilder.builder().withOzgFile(OzgFileTestFactory.createWithUniqueId()); - - @Nested - class TestBuild { - - private MockedStatic<ExportFilenameGenerator> exportFilenameGeneratorMockedStatic; - - private static final String ERSTELLER = "Ersteller"; - private static final String GENERATED_FILE_NAME = "file_name"; - private static final ZonedDateTime CREATED_AT = ZonedDateTime.now(); - private final OzgFile ozgFile = OzgFileTestFactory.createWithUniqueId(); - - @BeforeEach - void setUp() { - exportFilenameGeneratorMockedStatic = mockStatic(ExportFilenameGenerator.class); - exportFilenameGeneratorMockedStatic.when(() -> ExportFilenameGenerator.generateExportFilename(ozgFile)).thenReturn(GENERATED_FILE_NAME); - } - - @AfterEach - void tearDown() { - exportFilenameGeneratorMockedStatic.close(); - } - - @Test - void shouldGenerateExportFilename() { - builder.withOzgFile(ozgFile).build(); - - exportFilenameGeneratorMockedStatic.verify(() -> ExportFilenameGenerator.generateExportFilename(ozgFile)); - } - - @Test - void shouldHaveDateiname() { - var primaerdokumentType = builder.withOzgFile(ozgFile).build(); - - assertThat(primaerdokumentType.getDateiname()).isEqualTo(GENERATED_FILE_NAME); - } - - @Test - void shouldNotHaveDateiname() { - var primaerdokumentType = builder.build(); - - assertThat(primaerdokumentType.getDateiname()).isNull(); - } - - @Test - void shouldHaveDateinameOriginal() { - var primaerdokumentType = builder.withOzgFile(ozgFile).build(); - - assertThat(primaerdokumentType.getDateinameOriginal()).isEqualTo(OzgFileTestFactory.NAME); - } - - @Test - void shouldHaveErsteller() { - var primaerdokumentType = builder.withErsteller(ERSTELLER).build(); - - assertThat(primaerdokumentType.getErsteller()).isEqualTo(ERSTELLER); - } - - @Test - void shouldNotHaveErsteller() { - var primaerdokumentType = builder.build(); - - assertThat(primaerdokumentType.getErsteller()).isNull(); - } - - @Test - void shouldHaveDatumUhrzeit() { - var primaerdokumentType = builder.withCreatedAt(CREATED_AT).build(); - - assertThat(primaerdokumentType.getDatumUhrzeit()).isEqualTo(DateConverter.toXmlGregorianCalendar(CREATED_AT)); - } - - @Test - void shouldNotHaveDatumUhrzeit() { - var primaerdokumentType = builder.build(); - - assertThat(primaerdokumentType.getDatumUhrzeit()).isNull(); - } - - @Test - void shouldThrowIllegalgStateException() { - builder.withOzgFile(null); - - assertThatThrownBy(builder::build).isInstanceOf(IllegalStateException.class); - } - } - -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeTestFactory.java deleted file mode 100644 index 9ea20bb8172b6528091a928726a3e4beff46448c..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeTestFactory.java +++ /dev/null @@ -1,10 +0,0 @@ -package de.ozgcloud.alfa.common; - -import de.xoev.xdomea.PrimaerdokumentType; - -public class PrimaerdokumentTypeTestFactory { - - public static PrimaerdokumentType create() { - return new PrimaerdokumentType(); - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/VersionTypeBuilderTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/VersionTypeBuilderTest.java deleted file mode 100644 index 219cca4fdeb0a561cf52a66fd6af6414fcc2fd3f..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/VersionTypeBuilderTest.java +++ /dev/null @@ -1,208 +0,0 @@ -package de.ozgcloud.alfa.common; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.time.ZonedDateTime; - -import org.apache.commons.io.FilenameUtils; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.mockito.Spy; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.xoev.xdomea.DateiformatCodeType; -import de.xoev.xdomea.FormatType; - -class VersionTypeBuilderTest { - private static final String FILE_NAME = "TestFile.ext"; - private final OzgFile ozgFile = OzgFileTestFactory.createBuilder().name(FILE_NAME).build(); - private final static ZonedDateTime CREATED_AT = ZonedDateTime.now(); - private final static String ERSTELLER = LoremIpsum.getInstance().getName(); - private final static String SONSTIGER_NAME = LoremIpsum.getInstance().getName(); - @Spy - private VersionTypeBuilder builder = VersionTypeBuilder.builder().withOzgFile(ozgFile).withCreatedAt(CREATED_AT).withErsteller(ERSTELLER) - .withSonstigerName(SONSTIGER_NAME); - - @Nested - class TestBuild { - private final FormatType formatType = FormatTypeTestFactory.create(); - - @BeforeEach - void setUp() { - doReturn(formatType).when(builder).createFormatType(); - } - - @Test - void shouldCallCreateFormatType() { - builder.build(); - - verify(builder).createFormatType(); - } - - @Test - void shouldHaveNummer() { - var version = builder.build(); - - assertThat(version.getNummer()).isEqualTo(VersionTypeBuilder.VERSION_NUMMER); - } - - @Test - void shouldHaveFormatType() { - var version = builder.build(); - - assertThat(version.getFormat()).contains(formatType); - } - } - - @Nested - class TestCreateFormatType { - private MockedStatic<PrimaerdokumentTypeBuilder> primaerdokumentTypeBuilderMockedStatic; - @Mock - private PrimaerdokumentTypeBuilder primaerdokumentTypeBuilder; - - private final DateiformatCodeType dateiformatCodeType = DateiformatCodeTypeTestFactory.create(); - - @BeforeEach - void setUp() { - primaerdokumentTypeBuilderMockedStatic = mockStatic(PrimaerdokumentTypeBuilder.class); - primaerdokumentTypeBuilderMockedStatic.when(PrimaerdokumentTypeBuilder::builder).thenReturn(primaerdokumentTypeBuilder); - when(primaerdokumentTypeBuilder.withOzgFile(ozgFile)).thenReturn(primaerdokumentTypeBuilder); - when(primaerdokumentTypeBuilder.withCreatedAt(CREATED_AT)).thenReturn(primaerdokumentTypeBuilder); - when(primaerdokumentTypeBuilder.withErsteller(ERSTELLER)).thenReturn(primaerdokumentTypeBuilder); - doReturn(dateiformatCodeType).when(builder).createDateiformatCodeType(); - } - - @AfterEach - void tearDown() { - primaerdokumentTypeBuilderMockedStatic.close(); - } - - @Test - void shouldBuildPrimaerdokument() { - callCreateFormatType(); - - verify(primaerdokumentTypeBuilder).build(); - } - - @Test - void shouldSetOzgFile() { - callCreateFormatType(); - - verify(primaerdokumentTypeBuilder).withOzgFile(ozgFile); - } - - @Test - void shouldSetCreatedAt() { - callCreateFormatType(); - - verify(primaerdokumentTypeBuilder).withCreatedAt(CREATED_AT); - } - - @Test - void shouldSetErsteller() { - callCreateFormatType(); - - verify(primaerdokumentTypeBuilder).withErsteller(ERSTELLER); - } - - @Test - void shouldHaveEmptyVersion() { - var formatType = callCreateFormatType(); - - assertThat(formatType.getVersion()).isEmpty(); - } - - @Test - void shouldCreateDateiformatCode() { - callCreateFormatType(); - - verify(builder).createDateiformatCodeType(); - } - - @Test - void shouldHaveName() { - var formatType = callCreateFormatType(); - - assertThat(formatType.getName()).isEqualTo(dateiformatCodeType); - } - - @Test - void shouldHaveSonstigerName() { - var formatType = callCreateFormatType(); - - assertThat(formatType.getSonstigerName()).isEqualTo(SONSTIGER_NAME); - } - - private FormatType callCreateFormatType() { - return builder.createFormatType(); - } - } - - @Nested - class TestCreateDateiformatCodeType { - - private static final String CODE = "111"; - - private MockedStatic<DateiformatCode> dateiformatCodeMockedStatic; - - @BeforeEach - void setUp() { - dateiformatCodeMockedStatic = mockStatic(DateiformatCode.class); - dateiformatCodeMockedStatic.when( - () -> DateiformatCode.getXdomeaCode(OzgFileTestFactory.CONTENT_TYPE, FilenameUtils.getExtension(FILE_NAME))) - .thenReturn(CODE); - } - - @AfterEach - void tearDown() { - dateiformatCodeMockedStatic.close(); - } - - @Test - void shouldHaveListURI() { - var dateiformatCode = builder.createDateiformatCodeType(); - - assertThat(dateiformatCode.getListURI()).isEqualTo(VersionTypeBuilder.DATEI_FORMAT_LIST_URI); - } - - @Test - void shouldHaveListVersionID() { - var dateiformatCode = builder.createDateiformatCodeType(); - - assertThat(dateiformatCode.getListVersionID()).isEqualTo(VersionTypeBuilder.LIST_VERSION_ID); - } - - @Test - void shouldGetXdomeaCode() { - builder.createDateiformatCodeType(); - - dateiformatCodeMockedStatic.verify( - () -> DateiformatCode.getXdomeaCode(OzgFileTestFactory.CONTENT_TYPE, FilenameUtils.getExtension(FILE_NAME))); - } - - @Test - void shouldTransformExtensionToLowerCase() { - builder.withOzgFile(OzgFileTestFactory.createBuilder().name("TestFile.EXT").build()); - - builder.createDateiformatCodeType(); - - dateiformatCodeMockedStatic.verify( - () -> DateiformatCode.getXdomeaCode(OzgFileTestFactory.CONTENT_TYPE, FilenameUtils.getExtension(FILE_NAME))); - } - - @Test - void shouldHaveCode() { - var dateiformatCode = builder.createDateiformatCodeType(); - - assertThat(dateiformatCode.getCode()).isEqualTo(CODE); - } - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/VersionTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/VersionTypeTestFactory.java deleted file mode 100644 index f2fcd270fad8435d51170bd8963b3883baf7aa27..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/VersionTypeTestFactory.java +++ /dev/null @@ -1,12 +0,0 @@ -package de.ozgcloud.alfa.common; - -import de.xoev.xdomea.VersionType; - -public class VersionTypeTestFactory { - - public static VersionType create() { - var versionType = new VersionType(); - versionType.getFormat().add(FormatTypeTestFactory.create()); - return versionType; - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/AbgabeAbgabe0401TestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/AbgabeAbgabe0401TestFactory.java deleted file mode 100644 index 16ea606a308c0864e06bf26d32138166313b4b1a..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/AbgabeAbgabe0401TestFactory.java +++ /dev/null @@ -1,10 +0,0 @@ -package de.ozgcloud.alfa.export; - -import de.xoev.xdomea.AbgabeAbgabe0401; - -public class AbgabeAbgabe0401TestFactory { - - public static AbgabeAbgabe0401 create() { - return new AbgabeAbgabe0401(); - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/AkteTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/AkteTypeTestFactory.java deleted file mode 100644 index a13852e5a7eb4ad6cf42af49f7cf983d81a0e8a1..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/AkteTypeTestFactory.java +++ /dev/null @@ -1,10 +0,0 @@ -package de.ozgcloud.alfa.export; - -import de.xoev.xdomea.AkteType; - -public class AkteTypeTestFactory { - - public static AkteType create() { - return new AkteType(); - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/AllgemeineMetadatenTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/AllgemeineMetadatenTypeTestFactory.java deleted file mode 100644 index fc7dd301486edbb9fc0ba13bef92329bdf208872..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/AllgemeineMetadatenTypeTestFactory.java +++ /dev/null @@ -1,16 +0,0 @@ -package de.ozgcloud.alfa.export; - -import com.thedeanda.lorem.LoremIpsum; - -import de.xoev.xdomea.AllgemeineMetadatenType; - -public class AllgemeineMetadatenTypeTestFactory { - - public static final String KENNZEICHEN = LoremIpsum.getInstance().getWords(1); - - public static AllgemeineMetadatenType create() { - var allgemeineMetadatenType = new AllgemeineMetadatenType(); - allgemeineMetadatenType.setKennzeichen(KENNZEICHEN); - return allgemeineMetadatenType; - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/DokumentTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/DokumentTypeTestFactory.java deleted file mode 100644 index 8de8ed3e01318e4883481d704d6db97012b0c708..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/DokumentTypeTestFactory.java +++ /dev/null @@ -1,11 +0,0 @@ -package de.ozgcloud.alfa.export; - -import de.xoev.xdomea.DokumentType; - -public class DokumentTypeTestFactory { - - public static DokumentType create() { - var dokument = new DokumentType(); - return dokument; - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportConfigurationTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportConfigurationTest.java deleted file mode 100644 index 4dc62c958303b3a467bd9c32a432df417fcdab87..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportConfigurationTest.java +++ /dev/null @@ -1,77 +0,0 @@ -package de.ozgcloud.alfa.export; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.Map; - -import jakarta.xml.bind.Marshaller; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.oxm.jaxb.Jaxb2Marshaller; - -class ExportConfigurationTest { - - @Spy - @InjectMocks - private ExportConfiguration configuration; - - @Mock - private XdomeaNamespacePrefixMapper prefixMapper; - - @Nested - class TestCreateMarshallerProperties { - - @Test - void shouldFromatMarshalledXml() { - var props = configuration.createMarshallerProperties(); - - assertThat(props).containsEntry(Marshaller.JAXB_FORMATTED_OUTPUT, ExportConfiguration.JAXB_FORMATTED_OUTPUT); - } - - @Test - void shouldUseNamespacePrefixMapper() { - var props = configuration.createMarshallerProperties(); - - assertThat(props).containsEntry(ExportConfiguration.PROPERTY_NAMESPACE_PREFIX_MAPPER, prefixMapper); - } - } - - @Nested - class TestMarshaller { - - private final Map<String, Object> marshallerProps = Map.of(); - - @BeforeEach - void init() { - doReturn(marshallerProps).when(configuration).createMarshallerProperties(); - } - - @Test - void shouldSetContextPath() { - var marshaller = configuration.marshaller(); - - assertThat(marshaller.getContextPath()).isEqualTo(ExportConfiguration.CONTEXT_PATH); - } - - @Test - void shouldCreateMarshallerProperties() { - configuration.marshaller(); - - verify(configuration).createMarshallerProperties(); - } - - @Test - void shouldReturnMarshaller() { - var marshaller = configuration.marshaller(); - - assertThat(marshaller).isNotNull().isInstanceOf(Jaxb2Marshaller.class); - } - } - -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportDataTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportDataTestFactory.java deleted file mode 100644 index 84f4c718b85e1b76c6fa69fa3103fbd0c62fbe51..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportDataTestFactory.java +++ /dev/null @@ -1,25 +0,0 @@ -package de.ozgcloud.alfa.export; - -import java.util.Set; - -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.xoev.xdomea.AbgabeAbgabe0401; - -class ExportDataTestFactory { - - public static final String EXPORT_FILENAME = "file.zip"; - public static final OzgFile OZG_FILE = OzgFileTestFactory.create(); - public static final AbgabeAbgabe0401 ABGABE = AbgabeAbgabe0401TestFactory.create(); - - public static ExportData create() { - return createBuilder().build(); - } - - public static ExportData.ExportDataBuilder createBuilder() { - return ExportData.builder() - .exportFilename(EXPORT_FILENAME) - .abgabe(ABGABE) - .exportFiles(Set.of(OZG_FILE)); - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportFilenameGeneratorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportFilenameGeneratorTest.java deleted file mode 100644 index 0cf25b49436886e9478b67c4e204ff824c9abed9..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportFilenameGeneratorTest.java +++ /dev/null @@ -1,59 +0,0 @@ -package de.ozgcloud.alfa.export; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.MockedStatic; - -import de.ozgcloud.alfa.common.ExportFilenameGenerator; -import de.ozgcloud.alfa.common.AlfaTestUtils; -import de.ozgcloud.alfa.common.UUIDConverter; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; - -class ExportFilenameGeneratorTest { - - private MockedStatic<UUIDConverter> uuidConverter; - - @Nested - class TestGenerateExportFilename { - - private static final String UUID = "64a820d3-6285-172a-c028-0000000026d0"; - - private final OzgFile ozgFile = OzgFileTestFactory.create(); - - @BeforeEach - void init() { - uuidConverter = mockStatic(UUIDConverter.class); - uuidConverter.when(() -> UUIDConverter.fromObjectId(ozgFile.getId().toString())).thenReturn(UUID); - } - - @AfterEach - void cleanup() { - uuidConverter.close(); - } - - @Test - void shouldConvertObjectId() { - callGenerator(); - - uuidConverter.verify(() -> UUIDConverter.fromObjectId(ozgFile.getId().toString())); - } - - @Test - void shouldGenerate() { - var filename = callGenerator(); - - assertThat(filename).matches(String.format("^%s_%s$", AlfaTestUtils.UUID_REGEX, ozgFile.getName())); - } - - private String callGenerator() { - return ExportFilenameGenerator.generateExportFilename(ozgFile); - } - } - -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceITCase.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceITCase.java deleted file mode 100644 index a55f463cb200af363bfef7d3a08e39c15066b0d2..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceITCase.java +++ /dev/null @@ -1,87 +0,0 @@ -package de.ozgcloud.alfa.export; - -import static de.ozgcloud.alfa.common.AlfaTestUtils.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.io.ByteArrayOutputStream; -import java.util.UUID; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; - -import de.ozgcloud.alfa.bescheid.BescheidExportDataTestFactory; -import de.ozgcloud.alfa.bescheid.ExportBescheidService; -import de.ozgcloud.alfa.common.binaryfile.BinaryFileService; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.common.user.UserService; -import de.ozgcloud.alfa.file.ExportFileService; -import de.ozgcloud.alfa.historie.ExportHistorieService; -import de.ozgcloud.alfa.kommentar.ExportKommentarService; -import de.ozgcloud.alfa.kommentar.KommentarsExportDataTestFactory; -import de.ozgcloud.alfa.postfach.ExportNachrichtService; -import de.ozgcloud.alfa.postfach.PostfachMail; -import de.ozgcloud.alfa.postfach.PostfachMailExportDataTestFactory; -import de.ozgcloud.alfa.postfach.PostfachMailTestFactory; -import de.ozgcloud.alfa.vorgang.ExportVorgangService; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; -import de.ozgcloud.common.test.ITCase; - -@ITCase -class ExportServiceITCase { - - @SpyBean - private ExportFileService exportFileService; - @SpyBean - private ExportVorgangService exportVorgangService; - @MockBean - private ExportHistorieService exportHistorieService; - @MockBean - private ExportKommentarService exportKommentarService; - @MockBean - private BinaryFileService binaryFileService; - @MockBean - private ExportNachrichtService exportNachrichtService; - @MockBean - private ExportBescheidService exportBescheidService; - @MockBean - private UserService userService; - @Autowired - private ExportService exportService; - - @Nested - class TestWriteExport { - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - private final PostfachMail postfachMail = PostfachMailTestFactory.createBuilder().id(createMongoDbObjectId()).build(); - - @BeforeEach - void setup() { - doReturn(vorgang).when(exportVorgangService).getVorgang(VorgangHeaderTestFactory.ID); - doReturn(Stream.of(OzgFileTestFactory.createWithUniqueId())).when(exportFileService).getRepresentations(vorgang); - doReturn(Stream.of(OzgFileTestFactory.createWithUniqueId())).when(exportFileService).getAttachments(vorgang); - doReturn(Stream.of(OzgFileTestFactory.createWithUniqueId())).when(binaryFileService).getFiles(postfachMail.getAttachments()); - doReturn(UserProfileTestFactory.create()).when(userService).getById(UserProfileTestFactory.ID); - doNothing().when(exportFileService).writeOzgFile(any(), any()); - when(exportHistorieService.createHistorienProtokollInformationTypes(vorgang)).thenReturn(Stream.empty()); - when(exportKommentarService.createExportData(vorgang)).thenReturn(KommentarsExportDataTestFactory.create()); - when(exportNachrichtService.createExportData(vorgang)).thenReturn(PostfachMailExportDataTestFactory.create()); - when(exportBescheidService.createExportData(vorgang)).thenReturn(BescheidExportDataTestFactory.create()); - } - - @Test - void shouldNotThrowException() { - assertDoesNotThrow( - () -> exportService.writeExport(VorgangHeaderTestFactory.ID, UUID.randomUUID().toString(), new ByteArrayOutputStream())); - } - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceTest.java deleted file mode 100644 index 35bc4766a34a31b28701ce62ee9ec29a4033bf53..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceTest.java +++ /dev/null @@ -1,642 +0,0 @@ -package de.ozgcloud.alfa.export; - -import static de.ozgcloud.alfa.common.AlfaTestUtils.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.util.List; -import java.util.UUID; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.mockito.Spy; - -import de.ozgcloud.alfa.bescheid.BescheidExportData; -import de.ozgcloud.alfa.bescheid.BescheidExportDataTestFactory; -import de.ozgcloud.alfa.bescheid.ExportBescheidService; -import de.ozgcloud.alfa.common.ExportFilenameGenerator; -import de.ozgcloud.alfa.common.HistorienProtokollInformationTypeTestFactory; -import de.ozgcloud.alfa.common.AlfaTestUtils; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.file.ExportFileService; -import de.ozgcloud.alfa.historie.ExportHistorieService; -import de.ozgcloud.alfa.kommentar.ExportKommentarService; -import de.ozgcloud.alfa.kommentar.KommentarsExportData; -import de.ozgcloud.alfa.kommentar.KommentarsExportDataTestFactory; -import de.ozgcloud.alfa.postfach.ExportNachrichtService; -import de.ozgcloud.alfa.postfach.PostfachMailExportData; -import de.ozgcloud.alfa.postfach.PostfachMailExportDataTestFactory; -import de.ozgcloud.alfa.vorgang.EingangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.EingangTestFactory; -import de.ozgcloud.alfa.vorgang.ExportVorgangService; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangTypeTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.xoev.xdomea.AbgabeAbgabe0401; -import de.xoev.xdomea.AkteType; -import de.xoev.xdomea.DokumentType; -import de.xoev.xdomea.HistorienProtokollInformationType; -import de.xoev.xdomea.NkAbgabeType; -import de.xoev.xdomea.VorgangType; -import lombok.SneakyThrows; - -class ExportServiceTest { - - @Spy - @InjectMocks - private ExportService service; - - @Mock - private XdomeaXmlMarshaller xdomeaXmlMarshaller; - - @Mock - private ExportFileService exportFileService; - @Mock - private ExportVorgangService exportVorgangService; - @Mock - private ExportHistorieService exportHistorieService; - @Mock - private ExportKommentarService exportKommentarService; - @Mock - private ExportNachrichtService exportNachrichtService; - @Mock - private ExportBescheidService exportBescheidService; - - @DisplayName("Write exportToXdomea") - @Nested - class TestWriteExport { - - private static final String FILENAME_ID = UUID.randomUUID().toString(); - private final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - private final ExportData exportData = ExportDataTestFactory.create(); - - @Mock - private File zipFile; - - @BeforeEach - void setUp() { - doReturn(exportData).when(service).collectExportData(VorgangHeaderTestFactory.ID, FILENAME_ID); - doReturn(zipFile).when(service).createZipFile(exportData); - doNothing().when(service).writeZipFileContent(zipFile, outputStream); - } - - @Test - void shouldCollectExportData() { - callService(); - - verify(service).collectExportData(VorgangHeaderTestFactory.ID, FILENAME_ID); - } - - @Test - void shouldCreateZipFile() { - callService(); - - verify(service).createZipFile(exportData); - } - - @Test - void shouldWriteZipFileContentToOutputStream() { - callService(); - - verify(service).writeZipFileContent(zipFile, outputStream); - } - - private void callService() { - service.writeExport(VorgangHeaderTestFactory.ID, FILENAME_ID, outputStream); - } - } - - @Nested - class TestCollectExportData { - - private MockedStatic<XdomeaNachrichtBuilder> xdomeaNachrichtBuilderMockedStatic; - - private static final String FILENAME_ID = UUID.randomUUID().toString(); - private static final String FILE_NAME = "file.zip"; - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - private final VorgangType vorgangType = VorgangTypeTestFactory.create(); - private final NkAbgabeType kopfType = NkAbgabeTypeTestFactory.create(); - private final AbgabeAbgabe0401 abgabe = AbgabeAbgabe0401TestFactory.create(); - private final AkteType akteType = AkteTypeTestFactory.create(); - private final List<OzgFile> representations = List.of(OzgFileTestFactory.createWithUniqueId()); - private final List<OzgFile> attachments = List.of(OzgFileTestFactory.createWithUniqueId()); - private final List<DokumentType> representationsDokumentTypes = List.of(DokumentTypeTestFactory.create()); - private final List<DokumentType> attachmentsDokumentTypes = List.of(DokumentTypeTestFactory.create()); - private final List<HistorienProtokollInformationType> historienProtokollInformationTypes = List.of( - HistorienProtokollInformationTypeTestFactory.create()); - private final KommentarsExportData kommentarsExportData = KommentarsExportDataTestFactory.create(); - private final PostfachMailExportData postfachMailExportData = PostfachMailExportDataTestFactory.create(); - private final BescheidExportData bescheidExportData = BescheidExportDataTestFactory.create(); - - @Mock - private XdomeaNachrichtBuilder xdomeaNachrichtBuilder; - - @BeforeEach - void setUp() { - setUpVorgangService(); - setUpXdomeaNachrichtBuilder(); - setUpExportFileService(); - setUpExportHistorieService(); - setUpExportKommentarService(); - setUpExportNachrichtService(); - setUpExportBescheidService(); - - doReturn(FILE_NAME).when(service).buildXmlFilename(FILENAME_ID); - doReturn(EingangHeaderTestFactory.FORM_ENGINE_NAME).when(service).getFormEngineName(vorgang); - - } - - private void setUpVorgangService() { - when(exportVorgangService.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgang); - when(exportVorgangService.createVorgangType(vorgang)).thenReturn(vorgangType); - when(exportVorgangService.createKopf(vorgang)).thenReturn(kopfType); - when(exportVorgangService.createAkteType(vorgang)).thenReturn(akteType); - } - - private void setUpXdomeaNachrichtBuilder() { - xdomeaNachrichtBuilderMockedStatic = mockStatic(XdomeaNachrichtBuilder.class); - when(xdomeaNachrichtBuilder.withKopf(kopfType)).thenReturn(xdomeaNachrichtBuilder); - when(xdomeaNachrichtBuilder.withVorgang(vorgangType)).thenReturn(xdomeaNachrichtBuilder); - when(xdomeaNachrichtBuilder.withAktenzeichen(akteType)).thenReturn(xdomeaNachrichtBuilder); - when(xdomeaNachrichtBuilder.withRepresentations(representationsDokumentTypes)).thenReturn(xdomeaNachrichtBuilder); - when(xdomeaNachrichtBuilder.withAttachments(attachmentsDokumentTypes)).thenReturn(xdomeaNachrichtBuilder); - when(xdomeaNachrichtBuilder.withHistorie(historienProtokollInformationTypes)).thenReturn(xdomeaNachrichtBuilder); - when(xdomeaNachrichtBuilder.withKommentare(kommentarsExportData.getDokumentTypes())).thenReturn(xdomeaNachrichtBuilder); - when(xdomeaNachrichtBuilder.withPostfachMails(postfachMailExportData.getDokumentTypes())).thenReturn(xdomeaNachrichtBuilder); - when(xdomeaNachrichtBuilder.withBescheids(bescheidExportData.getDokumentTypes())).thenReturn(xdomeaNachrichtBuilder); - xdomeaNachrichtBuilderMockedStatic.when(XdomeaNachrichtBuilder::builder).thenReturn(xdomeaNachrichtBuilder); - when(xdomeaNachrichtBuilder.build()).thenReturn(abgabe); - } - - private void setUpExportFileService() { - mockStreamToList(representations, stream -> when(exportFileService.getRepresentations(vorgang)).thenReturn(stream)); - mockStreamToList(attachments, stream -> when(exportFileService.getAttachments(vorgang)).thenReturn(stream)); - mockStreamToList(representationsDokumentTypes, - stream -> when(exportFileService.createDokumentTypes(representations, EingangHeaderTestFactory.FORM_ENGINE_NAME)) - .thenReturn(stream)); - mockStreamToList(attachmentsDokumentTypes, - stream -> when(exportFileService.createDokumentTypes(attachments, EingangHeaderTestFactory.FORM_ENGINE_NAME)).thenReturn(stream)); - } - - private void setUpExportHistorieService() { - mockStreamToList(historienProtokollInformationTypes, - stream -> when(exportHistorieService.createHistorienProtokollInformationTypes(vorgang)).thenReturn(stream)); - } - - private void setUpExportKommentarService() { - when(exportKommentarService.createExportData(vorgang)).thenReturn(kommentarsExportData); - } - - private void setUpExportNachrichtService() { - when(exportNachrichtService.createExportData(vorgang)).thenReturn(postfachMailExportData); - } - - private void setUpExportBescheidService() { - when(exportBescheidService.createExportData(vorgang)).thenReturn(bescheidExportData); - } - - @AfterEach - void tearDown() { - xdomeaNachrichtBuilderMockedStatic.close(); - } - - @Test - void shouldLoadVorgang() { - callService(); - - verify(exportVorgangService).getVorgang(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldGenerateXmlFilename() { - callService(); - - verify(service).buildXmlFilename(FILENAME_ID); - } - - @Test - void shouldGetRepresentations() { - callService(); - - verify(exportFileService).getRepresentations(vorgang); - } - - @Test - void shouldGetAttachments() { - callService(); - - verify(exportFileService).getAttachments(vorgang); - } - - @Test - void shouldCreateKopf() { - callService(); - - verify(exportVorgangService).createKopf(vorgang); - } - - @Test - void shouldCreateVorgangType() { - callService(); - - verify(exportVorgangService).createVorgangType(vorgang); - } - - @Test - void shouldCreateRepresentationsDokumentTypes() { - callService(); - - verify(exportFileService).createDokumentTypes(representations, EingangHeaderTestFactory.FORM_ENGINE_NAME); - } - - @Test - void shouldCreateAttachmentsDokumentTypes() { - callService(); - - verify(exportFileService).createDokumentTypes(attachments, EingangHeaderTestFactory.FORM_ENGINE_NAME); - } - - @Test - void shouldCreatePostfachMailsExportData() { - callService(); - - verify(exportNachrichtService).createExportData(vorgang); - } - - @Test - void shouldCreateAkteType() { - callService(); - - verify(exportVorgangService).createAkteType(vorgang); - } - - @Test - void shouldSetKopf() { - callService(); - - verify(xdomeaNachrichtBuilder).withKopf(kopfType); - } - - @Test - void shouldSetVorgang() { - callService(); - - verify(xdomeaNachrichtBuilder).withVorgang(vorgangType); - } - - @Test - void shouldSetRepresentations() { - callService(); - - verify(xdomeaNachrichtBuilder).withRepresentations(representationsDokumentTypes); - } - - @Test - void shouldSetAttachments() { - callService(); - - verify(xdomeaNachrichtBuilder).withAttachments(attachmentsDokumentTypes); - } - - @Test - void shouldSetPostfachMails() { - callService(); - - verify(xdomeaNachrichtBuilder).withPostfachMails(postfachMailExportData.getDokumentTypes()); - } - - @Test - void shouldSetBescheids() { - callService(); - - verify(xdomeaNachrichtBuilder).withBescheids(bescheidExportData.getDokumentTypes()); - } - - @Test - void shouldSetAktenzeichen() { - callService(); - - verify(xdomeaNachrichtBuilder).withAktenzeichen(akteType); - } - - @Test - void shouldSetHistorie() { - callService(); - - verify(xdomeaNachrichtBuilder).withHistorie(historienProtokollInformationTypes); - } - - @Test - void shouldCreateAbgabe() { - callService(); - - verify(xdomeaNachrichtBuilder).build(); - } - - @Test - void shouldContainAbgabe() { - var exportData = callService(); - - assertThat(exportData.getAbgabe()).isEqualTo(abgabe); - } - - @Test - void shouldContainExportFilename() { - var exportData = callService(); - - assertThat(exportData.getExportFilename()).isEqualTo(FILE_NAME); - } - - @Test - void shouldContainExportFiles() { - var exportData = callService(); - - assertThat(exportData.getExportFiles()) - .hasSize(6) - .containsAll(representations) - .containsAll(attachments) - .containsAll(kommentarsExportData.getAttachments()) - .containsAll(postfachMailExportData.getAttachments()) - .containsAll(bescheidExportData.getFiles()); - } - - void shouldExportKommentare() { - callService(); - - verify(exportKommentarService).createExportData(vorgang); - } - - private ExportData callService() { - return service.collectExportData(VorgangHeaderTestFactory.ID, FILENAME_ID); - } - } - - @DisplayName("Build xml Filename") - @Nested - class TestBuildXmlFilename { - - @Test - void shouldMatchPattern() { - var filename = service.buildXmlFilename(UUID.randomUUID().toString()); - - assertThat(filename).matches(AlfaTestUtils.uuidRegexWithSuffix(ExportService.EXPORT_FILENAME_SUFFIX)); - } - } - - @DisplayName("Create xml content") - @Nested - class TestCreateXmlContent { - - private static final String XML_STRING = "<xml>"; - - @BeforeEach - void init() { - when(xdomeaXmlMarshaller.marshal(any())).thenReturn(XML_STRING); - } - - @Test - void shouldCallXmlMarshaller() { - callService(); - - verify(xdomeaXmlMarshaller).marshal(ExportDataTestFactory.ABGABE); - } - - @Test - void shouldReturnMarshalledString() { - var result = callService(); - - assertThat(result).isEqualTo(XML_STRING); - } - - private String callService() { - return service.createXmlContent(ExportDataTestFactory.ABGABE); - } - } - - @Nested - class TestCreateZipFile { - - private static final String XML_FILE_CONTENT = "<xml></xml>"; - private static final String XML_STRING = "<xml>"; - private final ExportData exportData = ExportDataTestFactory.create(); - - @Captor - private ArgumentCaptor<ZipOutputStream> zipOutputStreamArgumentCaptor; - - @SneakyThrows - @BeforeEach - void setUp() { - when(service.createXmlContent(ExportDataTestFactory.ABGABE)).thenReturn(XML_FILE_CONTENT); - doNothing().when(service).putOzgFileIntoZip(any(OzgFile.class), any(ZipOutputStream.class)); - } - - @Test - void shouldCreateXmlStringContent() { - callService(); - - verify(service).createXmlContent(ExportDataTestFactory.ABGABE); - } - - @Test - void shouldCreateZipEntry() throws IOException { - callService(); - - verify(service).putZipEntry(eq(ExportDataTestFactory.EXPORT_FILENAME), eq(XML_FILE_CONTENT), - any(ZipOutputStream.class)); - } - - @Test - void shouldCreateZipOutputStream() throws IOException { - callService(); - - verify(service).putZipEntry(eq(ExportDataTestFactory.EXPORT_FILENAME), eq(XML_FILE_CONTENT), - zipOutputStreamArgumentCaptor.capture()); - assertThat(zipOutputStreamArgumentCaptor.getValue()).isInstanceOf(ZipOutputStream.class); - } - - @Test - void shouldWriteBytes() { - var file = callService(); - - assertThat(file).isNotEmpty().content().hasSizeGreaterThan(100); - } - - @SneakyThrows - @Test - void shouldWritePdfFiles() { - callService(); - - verify(service).putOzgFileIntoZip(eq(ExportDataTestFactory.OZG_FILE), any(ZipOutputStream.class)); - } - - @Test - void shouldThrowTechnicalException() throws IOException { - doThrow(IOException.class).when(service).putZipEntry(anyString(), eq(XML_STRING), any(ZipOutputStream.class)); - - assertThatThrownBy(this::callService).isInstanceOf(TechnicalException.class); - } - - private File callService() { - return service.createZipFile(exportData); - } - - } - - @Nested - class TestPutZipEntry { - - @Mock - private ZipOutputStream zipOutputStream; - - @Captor - private ArgumentCaptor<ZipEntry> zipEntryArgumentCaptor; - - @Captor - private ArgumentCaptor<byte[]> fileDataArgumentCaptor; - - private final String FILE_NAME = "file.xml"; - private final String FILE_DATA = "xml content"; - - @SneakyThrows - @Test - void shouldPutNextEntry() { - callService(); - - verify(zipOutputStream).putNextEntry(zipEntryArgumentCaptor.capture()); - assertThat(zipEntryArgumentCaptor.getValue().getName()).isEqualTo(FILE_NAME); - } - - @SneakyThrows - @Test - void shouldWriteDataBytes() { - callService(); - - verify(zipOutputStream).write(fileDataArgumentCaptor.capture()); - assertThat(fileDataArgumentCaptor.getValue()).isEqualTo(FILE_DATA.getBytes(StandardCharsets.UTF_8)); - } - - @SneakyThrows - @Test - void shouldCloseEntry() { - callService(); - - verify(zipOutputStream).closeEntry(); - } - - @SneakyThrows - private void callService() { - service.putZipEntry(FILE_NAME, FILE_DATA, zipOutputStream); - } - } - - @Nested - class TestPutOzgFileIntoZip { - - private MockedStatic<ExportFilenameGenerator> exportFilenameGenerator; - - @Mock - private ZipOutputStream zipOutputStream; - - @Captor - private ArgumentCaptor<ZipEntry> zipEntryArgumentCaptor; - - private final OzgFile ozgFile = OzgFileTestFactory.create(); - - @BeforeEach - void setUp() { - exportFilenameGenerator = mockStatic(ExportFilenameGenerator.class); - exportFilenameGenerator.when(() -> ExportFilenameGenerator.generateExportFilename(ozgFile)).thenReturn(OzgFileTestFactory.NAME); - } - - @AfterEach - void cleanUp() { - exportFilenameGenerator.close(); - } - - @Test - void shouldGenerateExportFilename() { - callService(); - - exportFilenameGenerator.verify(() -> ExportFilenameGenerator.generateExportFilename(ozgFile)); - } - - @SneakyThrows - @Test - void shouldPutNextEntry() { - callService(); - - verify(zipOutputStream).putNextEntry(zipEntryArgumentCaptor.capture()); - assertThat(zipEntryArgumentCaptor.getValue().getName()).isEqualTo(OzgFileTestFactory.NAME); - } - - @Test - void shouldCallExportFileService() { - callService(); - - verify(exportFileService).writeOzgFile(OzgFileTestFactory.ID, zipOutputStream); - } - - @SneakyThrows - @Test - void shouldCloseEntry() { - callService(); - - verify(zipOutputStream).closeEntry(); - } - - @SneakyThrows - private void callService() { - service.putOzgFileIntoZip(ozgFile, zipOutputStream); - } - - } - - @Nested - class TestGetFormEngineName { - - @Test - void shouldReturnEmptyStringOnNullEingang() { - var vorgang = VorgangWithEingangTestFactory.createBuilder().eingang(null).build(); - - var formEngineName = service.getFormEngineName(vorgang); - - assertThat(formEngineName).isEmpty(); - } - - @Test - void shouldReturnEmptyStringOnNullEingangHeader() { - var vorgang = VorgangWithEingangTestFactory.createBuilder().eingang(EingangTestFactory.createBuilder().header(null).build()).build(); - - var formEngineName = service.getFormEngineName(vorgang); - - assertThat(formEngineName).isEmpty(); - } - - @Test - void shouldReturnFormEngineName() { - VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - var formEngineName = service.getFormEngineName(vorgang); - - assertThat(formEngineName).isEqualTo(EingangHeaderTestFactory.FORM_ENGINE_NAME); - } - } -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/IdentifikationObjektTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/IdentifikationObjektTypeTestFactory.java deleted file mode 100644 index 9946765cf3e8bb56674da6ed13f4d089b7f3c084..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/IdentifikationObjektTypeTestFactory.java +++ /dev/null @@ -1,16 +0,0 @@ -package de.ozgcloud.alfa.export; - -import java.util.UUID; - -import de.xoev.xdomea.IdentifikationObjektType; - -public class IdentifikationObjektTypeTestFactory { - - public static final String ID = UUID.randomUUID().toString(); - - public static IdentifikationObjektType create() { - var identifikationObjektType = new IdentifikationObjektType(); - identifikationObjektType.setID(ID); - return identifikationObjektType; - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/NamespacePrefixMapperTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/NamespacePrefixMapperTest.java deleted file mode 100644 index 1261762b14a1ae7278b4489016faef0187f53374..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/NamespacePrefixMapperTest.java +++ /dev/null @@ -1,72 +0,0 @@ -package de.ozgcloud.alfa.export; - -import static org.assertj.core.api.Assertions.*; - -import org.apache.commons.lang3.StringUtils; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; - -class NamespacePrefixMapperTest { - - private XdomeaNamespacePrefixMapper prefixMapper = new XdomeaNamespacePrefixMapper(); - - @DisplayName("Get preferred prefix") - @Nested - class TestGetPreferredPrefix { - - @Test - void shouldReturnXdomeaPrefix() { - var prefix = prefixMapper.getPreferredPrefix(XdomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_URI, StringUtils.EMPTY, false); - - assertThat(prefix).isEqualTo(XdomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_PREFIX); - } - - @Test - void shouldReturnSuggestion() { - var prefix = prefixMapper.getPreferredPrefix("not existing", "suggestion", false); - - assertThat(prefix).isEqualTo("suggestion"); - } - } - - @DisplayName("Get pre decrlared namespace uris") - @Nested - class TestGetPreDeclaredNamespaceUris { - - @Test - void shouldHaveSize() { - var uris = prefixMapper.getPreDeclaredNamespaceUris(); - - assertThat(uris).hasSize(4); - } - - @Test - void shouldContainsDinspec() { - var uris = prefixMapper.getPreDeclaredNamespaceUris(); - - assertThat(uris).contains(XdomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_DINSPEC_URI); - } - - @Test - void shouldContainsGml() { - var uris = prefixMapper.getPreDeclaredNamespaceUris(); - - assertThat(uris).contains(XdomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_GML_URI); - } - - @Test - void shouldContainsXoevCode() { - var uris = prefixMapper.getPreDeclaredNamespaceUris(); - - assertThat(uris).contains(XdomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_XOEV_CODE_URI); - } - - @Test - void shouldContainsXoevLx() { - var uris = prefixMapper.getPreDeclaredNamespaceUris(); - - assertThat(uris).contains(XdomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_XOEV_LC_URI); - } - } -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/NkAbgabeTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/NkAbgabeTypeTestFactory.java deleted file mode 100644 index e93a73419cc57dd0da460c220fe2e5fcaa7d3fa9..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/NkAbgabeTypeTestFactory.java +++ /dev/null @@ -1,11 +0,0 @@ -package de.ozgcloud.alfa.export; - -import de.xoev.xdomea.NkAbgabeType; - -public class NkAbgabeTypeTestFactory { - - public static NkAbgabeType create() { - return new NkAbgabeType(); - } - -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/UUIDConverterTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/UUIDConverterTest.java deleted file mode 100644 index 2af0c16013bf75ec4f81c938aad8092afc884083..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/UUIDConverterTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package de.ozgcloud.alfa.export; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; - -import de.ozgcloud.alfa.common.AlfaTestUtils; -import de.ozgcloud.alfa.common.UUIDConverter; - -class UUIDConverterTest { - - @Nested - class TestFromObjectId { - - @Test - void shouldReturnUUID() { - var result = UUIDConverter.fromObjectId("64a820d36285172ac02826d0"); - - assertThat(result).isEqualTo("64a820d3-6285-172a-c028-0000000026d0").matches(AlfaTestUtils.UUID_REGEX); - } - - @Test - void shouldThrowIllegalArgumentException() { - assertThatThrownBy(() -> UUIDConverter.fromObjectId("abc")).isInstanceOf(IllegalArgumentException.class); - } - } - -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilderTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilderTest.java deleted file mode 100644 index c524f4f7c82761a842f02be8f42dde2b2159af53..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilderTest.java +++ /dev/null @@ -1,167 +0,0 @@ -package de.ozgcloud.alfa.export; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.List; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.HistorienProtokollInformationTypeTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangTypeTestFactory; -import de.xoev.xdomea.AbgabeAbgabe0401; -import de.xoev.xdomea.AkteType; -import de.xoev.xdomea.DokumentType; -import de.xoev.xdomea.HistorienProtokollInformationType; -import de.xoev.xdomea.NkAbgabeType; -import de.xoev.xdomea.VorgangType; - -class XdomeaNachrichtBuilderTest { - - private final VorgangType vorgangType = VorgangTypeTestFactory.create(); - @Spy - private final XdomeaNachrichtBuilder builder = XdomeaNachrichtBuilder.builder().withVorgang(vorgangType); - - @Nested - class TestBuild { - private final AbgabeAbgabe0401 expectedAbgabe = AbgabeAbgabe0401TestFactory.create(); - - @BeforeEach - void setUpMock() { - doReturn(expectedAbgabe).when(builder).createAbgabeType(); - } - - @Test - void shouldCallAddVorgangDokumente() { - builder.build(); - - verify(builder).addVorgangDokumente(); - } - - @Test - void shouldCallAddVorgangChangeHistory() { - builder.build(); - - verify(builder).addVorgangChangeHistory(); - } - - @Test - void shouldCallCreateAbgabeType() { - builder.build(); - - verify(builder).createAbgabeType(); - } - - @Test - void shouldReturnAbgabeType() { - var abgabeType = builder.build(); - - assertThat(abgabeType).isEqualTo(expectedAbgabe); - } - } - - @Nested - class TestCreateAbgabeType { - private final NkAbgabeType kopfType = NkAbgabeTypeTestFactory.create(); - private final AkteType akte = AkteTypeTestFactory.create(); - - @Test - void shouldHaveKopf() { - var abgabeType = builder.withKopf(kopfType).createAbgabeType(); - - assertThat(abgabeType.getKopf()).isEqualTo(kopfType); - } - - @Test - void shoulAddTwoSchriftgutobjekt() { - var abgabeType = builder.withAktenzeichen(akte).createAbgabeType(); - - assertThat(abgabeType.getSchriftgutobjekt()).size().isEqualTo(2); - } - - @Test - void shouldHaveVorgangSchriftgutObjekt() { - var abgabeType = builder.createAbgabeType(); - - assertThat(abgabeType.getSchriftgutobjekt().get(0).getVorgang()).isEqualTo(vorgangType); - } - - @Test - void shouldHaveAkteSchriftgutObjekt() { - var abgabeType = builder.withAktenzeichen(akte).createAbgabeType(); - - assertThat(abgabeType.getSchriftgutobjekt().get(1).getAkte()).isEqualTo(akte); - } - - } - - @Nested - class TestAddVorgangDokumente { - private final List<DokumentType> representations = List.of(DokumentTypeTestFactory.create(), DokumentTypeTestFactory.create()); - private final List<DokumentType> attachments = List.of(DokumentTypeTestFactory.create(), DokumentTypeTestFactory.create()); - private final List<DokumentType> kommentare = List.of(DokumentTypeTestFactory.create(), DokumentTypeTestFactory.create()); - private final List<DokumentType> postfachMails = List.of(DokumentTypeTestFactory.create(), DokumentTypeTestFactory.create()); - private final List<DokumentType> bescheids = List.of(DokumentTypeTestFactory.create(), DokumentTypeTestFactory.create()); - - @Test - void shouldAddRepresentations() { - builder.withRepresentations(representations).addVorgangDokumente(); - - assertThat(vorgangType.getDokument()).isEqualTo(representations); - } - - @Test - void shouldAddAttachments() { - builder.withAttachments(attachments).addVorgangDokumente(); - - assertThat(vorgangType.getDokument()).isEqualTo(attachments); - } - - @Test - void shouldAddKommentare() { - builder.withKommentare(kommentare).addVorgangDokumente(); - - assertThat(vorgangType.getDokument()).isEqualTo(kommentare); - } - - @Test - void shouldAddPostfachMails() { - builder.withPostfachMails(postfachMails).addVorgangDokumente(); - - assertThat(vorgangType.getDokument()).isEqualTo(postfachMails); - } - - @Test - void shouldAddBescheids() { - builder.withBescheids(bescheids).addVorgangDokumente(); - - assertThat(vorgangType.getDokument()).isEqualTo(bescheids); - } - - } - - @Nested - class TestAddVorgangChangeHistory { - - private final List<HistorienProtokollInformationType> historie = List.of(HistorienProtokollInformationTypeTestFactory.create(), - HistorienProtokollInformationTypeTestFactory.create()); - - @Test - void shouldAddHistorie() { - builder.withHistorie(historie).addVorgangChangeHistory(); - - assertThat(vorgangType.getHistorienProtokollInformation()).isEqualTo(historie); - } - - @Test - void shouldNotAddHistorie() { - builder.addVorgangChangeHistory(); - - assertThat(vorgangType.getHistorienProtokollInformation()).isEmpty(); - } - } - -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaPropertiesTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaPropertiesTestFactory.java deleted file mode 100644 index 78d786011aeedec05d51b6407305c2fb3769a626..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaPropertiesTestFactory.java +++ /dev/null @@ -1,23 +0,0 @@ -package de.ozgcloud.alfa.export; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.export.XdomeaProperties.XdomeaPropertiesBuilder; - -public class XdomeaPropertiesTestFactory { - - public static final String BEHOERDENSCHLUESSEL = LoremIpsum.getInstance().getWords(1); - public static final String BEHOERDENSCHLUESSEL_URI = LoremIpsum.getInstance().getUrl(); - public static final String BEHOERDENSCHLUESSEL_VERSION = LoremIpsum.getInstance().getWords(1); - - public static XdomeaProperties create() { - return createBuilder().build(); - } - - public static XdomeaPropertiesBuilder createBuilder() { - return new XdomeaPropertiesBuilder() - .behoerdenschluessel(BEHOERDENSCHLUESSEL) - .behoerdenschluesselUri(BEHOERDENSCHLUESSEL_URI) - .behoerdenschluesselVersion(BEHOERDENSCHLUESSEL_VERSION); - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaPropertiesValidatorITCase.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaPropertiesValidatorITCase.java deleted file mode 100644 index 451d2c7c49059af03d5e26034ad45f7bc6929998..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaPropertiesValidatorITCase.java +++ /dev/null @@ -1,17 +0,0 @@ -package de.ozgcloud.alfa.export; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Test; -import org.springframework.context.ApplicationContext; - -import de.ozgcloud.common.test.ITCase; - -@ITCase -class XdomeaPropertiesValidatorITCase { - - @Test - void shouldExistInApplicationContext(ApplicationContext context) { - assertThat(context.getBean("configurationPropertiesValidator")).isNotNull().isInstanceOf(XdomeaPropertiesValidator.class); - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaPropertiesValidatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaPropertiesValidatorTest.java deleted file mode 100644 index cd6cf19672ab8118254ded34a4b2444d921f8f55..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaPropertiesValidatorTest.java +++ /dev/null @@ -1,138 +0,0 @@ -package de.ozgcloud.alfa.export; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.NullAndEmptySource; -import org.mockito.Spy; -import org.springframework.validation.Errors; - -class XdomeaPropertiesValidatorTest { - - @Spy - private XdomeaPropertiesValidator validator; - - @Nested - class TestSupports { - - @Test - void shouldSupportXdomeaProperties() { - var supports = validator.supports(XdomeaProperties.class); - - assertThat(supports).isTrue(); - } - } - - @Nested - class TestValidate { - - @Test - void shouldBeValidIfAllBehoerdenschluesselPropertiesAreSet() { - var properties = XdomeaPropertiesTestFactory.create(); - - var errors = validate(properties); - - assertThat(errors.hasErrors()).isFalse(); - } - - @ParameterizedTest - @NullAndEmptySource - void shouldBeValidIfBehoerdenschluesselIsNotSet(String behoerdenschluessel) { - var properties = XdomeaPropertiesTestFactory.createBuilder().behoerdenschluessel(behoerdenschluessel).build(); - - var errors = validate(properties); - - assertThat(errors.hasErrors()).isFalse(); - } - - @Nested - class OnUriNotSet { - - private static final String PROPERTY_NAME = "behoerdenschluesselUri"; - public static final String PROPERTY_PATH = "ozgcloud.xdomea." + PROPERTY_NAME; - public static final String ERROR_CODE = PROPERTY_PATH + ".empty"; - - @ParameterizedTest - @NullAndEmptySource - void shouldHaveFieldErrors(String uri) { - var properties = withBehoerdenschluesselUri(uri); - - var errors = validate(properties); - - assertThat(errors.hasFieldErrors(PROPERTY_NAME)).isTrue(); - } - - @ParameterizedTest - @NullAndEmptySource - void shouldHaveMeaningfulErrorMessage(String uri) { - var properties = withBehoerdenschluesselUri(uri); - - var errors = validate(properties); - - assertThat(errors.getFieldError(PROPERTY_NAME).getDefaultMessage()).contains(PROPERTY_NAME); - } - - @ParameterizedTest - @NullAndEmptySource - void shouldHaveErrorCode(String uri) { - var properties = withBehoerdenschluesselUri(uri); - - var errors = validate(properties); - - assertThat(errors.getFieldError(PROPERTY_NAME).getCode()).isEqualTo(ERROR_CODE); - } - - private XdomeaProperties withBehoerdenschluesselUri(String uri) { - return XdomeaPropertiesTestFactory.createBuilder().behoerdenschluesselUri(uri).build(); - } - } - - @Nested - class OnVersionNotSet { - - public static final String PROPERTY_NAME = "behoerdenschluesselVersion"; - public static final String PROPERTY_PATH = "ozgcloud.xdomea." + PROPERTY_NAME; - public static final String ERROR_CODE = PROPERTY_PATH + ".empty"; - - @ParameterizedTest - @NullAndEmptySource - void shouldHaveFieldErrors(String version) { - var properties = withBehoerdenschluesselVersion(version); - - var errors = validate(properties); - - assertThat(errors.hasFieldErrors(PROPERTY_NAME)).isTrue(); - } - - @ParameterizedTest - @NullAndEmptySource - void shouldHaveMeaningfulErrorMessage(String version) { - var properties = withBehoerdenschluesselVersion(version); - - var errors = validate(properties); - - assertThat(errors.getFieldError(PROPERTY_NAME).getDefaultMessage()).contains(PROPERTY_NAME); - } - - @ParameterizedTest - @NullAndEmptySource - void shouldHaveErrorCode(String version) { - var properties = withBehoerdenschluesselVersion(version); - - var errors = validate(properties); - - assertThat(errors.getFieldError(PROPERTY_NAME).getCode()).isEqualTo(ERROR_CODE); - } - - private XdomeaProperties withBehoerdenschluesselVersion(String version) { - return XdomeaPropertiesTestFactory.createBuilder().behoerdenschluesselVersion(version).build(); - } - } - - private Errors validate(XdomeaProperties properties) { - return validator.validateObject(properties); - } - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XmlMarshallerTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XmlMarshallerTest.java deleted file mode 100644 index 47e3c97c8f8bb27670b5bcde0b25a82700cb1148..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XmlMarshallerTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package de.ozgcloud.alfa.export; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.io.StringWriter; - -import javax.xml.transform.stream.StreamResult; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.oxm.jaxb.Jaxb2Marshaller; - -import de.xoev.xdomea.AbgabeAbgabe0401; - -class XmlMarshallerTest { - - @Spy - @InjectMocks - private XdomeaXmlMarshaller xdomeaXmlMarshaller; - - @Mock - private Jaxb2Marshaller marshaller; - - @Nested - class TestMarshal { - - private final AbgabeAbgabe0401 abgabe = AbgabeAbgabe0401TestFactory.create(); - - @Captor - private ArgumentCaptor<StreamResult> streamResultArgumentCaptor; - - @Test - void shouldMarshal() { - xdomeaXmlMarshaller.marshal(abgabe); - - verify(marshaller).marshal(eq(abgabe), streamResultArgumentCaptor.capture()); - assertThat(streamResultArgumentCaptor.getValue().getWriter()).isInstanceOf(StringWriter.class); - } - } -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeBuilderITCase.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeBuilderITCase.java deleted file mode 100644 index 60c0a2996f22512a3a9b740b65ecd22dc4c16d9d..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeBuilderITCase.java +++ /dev/null @@ -1,189 +0,0 @@ -package de.ozgcloud.alfa.file; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.Random; - -import org.apache.commons.lang3.StringUtils; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.MockedStatic; - -import de.ozgcloud.alfa.common.UUIDConverter; -import de.ozgcloud.alfa.common.VersionTypeBuilder; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.xoev.xdomea.AllgemeineMetadatenType; -import de.xoev.xdomea.DateiformatCodeType; -import de.xoev.xdomea.FormatType; -import de.xoev.xdomea.IdentifikationObjektType; -import de.xoev.xdomea.PrimaerdokumentType; -import de.xoev.xdomea.VersionType; - -class DokumentTypeBuilderITCase { - - private static final Long DOKUMENT_ORDINAL_NUMBER = new Random().nextLong(); - private static final String FORM_ENGINE_NAME = "DUMMY_NAME"; - private final OzgFile ozgFile = OzgFileTestFactory.createBuilder().contentType("application/pdf").build(); - - private final DokumentTypeBuilder builder = DokumentTypeBuilder.builder() - .withOzgFile(ozgFile) - .withFormEngineName(FORM_ENGINE_NAME) - .withOrdinalNumber(DOKUMENT_ORDINAL_NUMBER); - - private MockedStatic<UUIDConverter> uuidConverter; - - @BeforeEach - void init() { - uuidConverter = mockStatic(UUIDConverter.class); - } - - @AfterEach - void cleanup() { - uuidConverter.close(); - } - - @Nested - class TestBuild { - - private final String FILE_UUID = "64a820d3-6285-172a-c028-0000000026d0"; - - @BeforeEach - void init() { - uuidConverter.when(() -> UUIDConverter.fromObjectId(OzgFileTestFactory.ID.toString())).thenReturn(FILE_UUID); - } - - @Test - void shouldHaveIdentifikation() { - var identifikationObjekt = new IdentifikationObjektType(); - identifikationObjekt.setID(FILE_UUID); - identifikationObjekt.setNummerImUebergeordnetenContainer(DOKUMENT_ORDINAL_NUMBER); - var dokument = builder.build(); - - assertThat(dokument.getIdentifikation()).usingRecursiveComparison().isEqualTo(identifikationObjekt); - } - - @Nested - class TestAllgemeineMetadaten { - @Test - void shouldHaveBetreff() { - var allgemeineMetadaten = createAllgemeineMetadaten(); - - assertThat(allgemeineMetadaten.getBetreff()).isEqualTo(OzgFileTestFactory.NAME); - } - - @Test - void shouldHaveEmptyKennzeichen() { - var allgemeineMetadaten = createAllgemeineMetadaten(); - - assertThat(allgemeineMetadaten.getKennzeichen()).isEmpty(); - } - - @Test - void shouldHaveEmptyBemerkung() { - var allgemeineMetadaten = createAllgemeineMetadaten(); - - assertThat(allgemeineMetadaten.getBemerkung()).isEmpty(); - } - - @Test - void shouldHaveMedium() { - var allgemeineMetadaten = createAllgemeineMetadaten(); - - assertThat(allgemeineMetadaten.getMedium().getCode()).isEqualTo(DokumentTypeBuilder.ALLGEMEINE_METADATEN_MEDIUM_CODE); - } - - private AllgemeineMetadatenType createAllgemeineMetadaten() { - return builder.build().getAllgemeineMetadaten(); - } - } - - @Nested - class TestVersion { - - @Test - void shouldHaveNummer() { - var versionType = createVersion(); - - assertThat(versionType.getNummer()).isEqualTo(DokumentTypeBuilder.VERSION_NUMMER); - } - - private VersionType createVersion() { - return builder.build().getVersion().getFirst(); - } - - @Nested - class TestFormat { - @Test - void shouldHaveName() { - var expectedDateiformatCode = createDateiformatCode("018"); - - var formatType = createFormatType(); - - assertThat(formatType.getName()).usingRecursiveComparison().isEqualTo(expectedDateiformatCode); - } - - private DateiformatCodeType createDateiformatCode(String codeValue) { - var dateiFormatCode = new DateiformatCodeType(); - dateiFormatCode.setCode(codeValue); - dateiFormatCode.setListURI(VersionTypeBuilder.DATEI_FORMAT_LIST_URI); - dateiFormatCode.setListVersionID(VersionTypeBuilder.LIST_VERSION_ID); - return dateiFormatCode; - } - - @Test - void shouldHaveSonstinerNameEmptyString() { - var formatType = createFormatType(); - - assertThat(formatType.getSonstigerName()).isEqualTo(StringUtils.EMPTY); - } - - @Test - void shouldHaveVersionEmptyString() { - var formatType = createFormatType(); - - assertThat(formatType.getVersion()).isEqualTo(StringUtils.EMPTY); - } - - private FormatType createFormatType() { - return createVersion().getFormat().getFirst(); - } - - @Nested - class TestPrimaerDokument { - - @Test - void shouldHaveDateiname() { - var primaerdokument = createPrimaerdokumentType(); - - assertThat(primaerdokument.getDateiname()).isEqualTo(FILE_UUID + "_" + ozgFile.getName()); - } - - @Test - void shouldHaveDateinameOriginal() { - var primaerdokument = createPrimaerdokumentType(); - - assertThat(primaerdokument.getDateinameOriginal()).isEqualTo(ozgFile.getName()); - } - - @Test - void shouldHaveErsteller() { - var primaerdokument = createPrimaerdokumentType(); - - assertThat(primaerdokument.getErsteller()).isEqualTo(FORM_ENGINE_NAME); - } - - private PrimaerdokumentType createPrimaerdokumentType() { - return createFormatType().getPrimaerdokument(); - } - } - - } - - } - } - -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeBuilderTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeBuilderTest.java deleted file mode 100644 index 5278cd01777012fa5c4ff682918eee1506eb96bd..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeBuilderTest.java +++ /dev/null @@ -1,259 +0,0 @@ -package de.ozgcloud.alfa.file; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.Random; - -import org.apache.commons.lang3.StringUtils; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.IdentifikationObjektTypeBuilder; -import de.ozgcloud.alfa.common.UUIDConverter; -import de.ozgcloud.alfa.common.VersionTypeBuilder; -import de.ozgcloud.alfa.common.VersionTypeTestFactory; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.export.AllgemeineMetadatenTypeTestFactory; -import de.ozgcloud.alfa.export.IdentifikationObjektTypeTestFactory; -import de.xoev.xdomea.AllgemeineMetadatenType; -import de.xoev.xdomea.IdentifikationObjektType; -import de.xoev.xdomea.VersionType; - -class DokumentTypeBuilderTest { - - private static final Long DOKUMENT_ORDINAL_NUMBER = new Random().nextLong(); - private static final String FORM_ENGINE_NAME = "DUMMY_NAME"; - private final OzgFile ozgFile = OzgFileTestFactory.create(); - - @Spy - private final DokumentTypeBuilder builder = DokumentTypeBuilder.builder() - .withOzgFile(ozgFile) - .withFormEngineName(FORM_ENGINE_NAME) - .withOrdinalNumber(DOKUMENT_ORDINAL_NUMBER); - - private MockedStatic<UUIDConverter> uuidConverter; - - @BeforeEach - void init() { - uuidConverter = mockStatic(UUIDConverter.class); - } - - @AfterEach - void cleanup() { - uuidConverter.close(); - } - - @Nested - class TestBuild { - - private final IdentifikationObjektType identifikationObjekt = IdentifikationObjektTypeTestFactory.create(); - private final AllgemeineMetadatenType allgemeineMetadaten = AllgemeineMetadatenTypeTestFactory.create(); - private final VersionType versionType = VersionTypeTestFactory.create(); - - @BeforeEach - void setUp() { - doReturn(identifikationObjekt).when(builder).createIdentifikation(); - doReturn(versionType).when(builder).createVersionType(); - doReturn(allgemeineMetadaten).when(builder).createAllgemeineMetadaten(); - } - - @Test - void shouldCreateIdentifikation() { - builder.build(); - - verify(builder).createIdentifikation(); - } - - @Test - void shouldHaveIdentifikation() { - var dokument = builder.build(); - - assertThat(dokument.getIdentifikation()).isEqualTo(identifikationObjekt); - } - - @Test - void shouldCreateAllgemeineMetadaten() { - builder.build(); - - verify(builder).createAllgemeineMetadaten(); - } - - @Test - void shouldHaveAllgemeineMetadaten() { - var dokument = builder.build(); - - assertThat(dokument.getAllgemeineMetadaten()).isEqualTo(allgemeineMetadaten); - } - - @Test - void shouldCreateVersion() { - builder.build(); - - verify(builder).createVersionType(); - } - - @Test - void shouldHaveVersion() { - var dokumentType = builder.build(); - - assertThat(dokumentType.getVersion()).containsExactly(versionType); - } - - } - - @Nested - class TestCreateIdentifikation { - - private MockedStatic<IdentifikationObjektTypeBuilder> identifikationObjektTypeBuilderMockedStatic; - @Mock - private IdentifikationObjektTypeBuilder identifikationObjektTypeBuilder; - private final IdentifikationObjektType identifikationObjektType = IdentifikationObjektTypeTestFactory.create(); - - @BeforeEach - void setUp() { - identifikationObjektTypeBuilderMockedStatic = mockStatic(IdentifikationObjektTypeBuilder.class); - identifikationObjektTypeBuilderMockedStatic.when(IdentifikationObjektTypeBuilder::builder).thenReturn(identifikationObjektTypeBuilder); - when(identifikationObjektTypeBuilder.withObjectID(OzgFileTestFactory.ID.toString())).thenReturn(identifikationObjektTypeBuilder); - when(identifikationObjektTypeBuilder.withOrdinalNumber(DOKUMENT_ORDINAL_NUMBER)) - .thenReturn(identifikationObjektTypeBuilder); - when(identifikationObjektTypeBuilder.build()).thenReturn(identifikationObjektType); - } - - @AfterEach - void tearDown() { - identifikationObjektTypeBuilderMockedStatic.close(); - } - - @Test - void shouldSetObjectId() { - builder.createIdentifikation(); - - verify(identifikationObjektTypeBuilder).withObjectID(ozgFile.getId().toString()); - } - - @Test - void shouldSetNummerImUebergeordnetenContainer() { - builder.createIdentifikation(); - - verify(identifikationObjektTypeBuilder).withOrdinalNumber(DOKUMENT_ORDINAL_NUMBER); - } - - @Test - void shouldBuildIdentifikationObjectType() { - builder.createIdentifikation(); - - verify(identifikationObjektTypeBuilder).build(); - } - - @Test - void shouldReturnBuiltIdentifikation() { - var resultIdentifikation = builder.createIdentifikation(); - - assertThat(resultIdentifikation).isEqualTo(identifikationObjektType); - } - } - - @Nested - class TestCreateAllgemeineMetadaten { - - @Test - void shouldHaveBetreff() { - var allgemeineMetadaten = builder.createAllgemeineMetadaten(); - - assertThat(allgemeineMetadaten.getBetreff()).isEqualTo(OzgFileTestFactory.NAME); - } - - @Test - void shouldHaveEmptyKennzeichen() { - var allgemeineMetadaten = builder.createAllgemeineMetadaten(); - - assertThat(allgemeineMetadaten.getKennzeichen()).isEmpty(); - } - - @Test - void shouldHaveEmptyBemerkung() { - var allgemeineMetadaten = builder.createAllgemeineMetadaten(); - - assertThat(allgemeineMetadaten.getBemerkung()).isEmpty(); - } - - @Test - void shouldHaveMedium() { - var allgemeineMetadaten = builder.createAllgemeineMetadaten(); - - assertThat(allgemeineMetadaten.getMedium().getCode()).isEqualTo(DokumentTypeBuilder.ALLGEMEINE_METADATEN_MEDIUM_CODE); - } - - } - - @Nested - class CreateVersionType { - - private MockedStatic<VersionTypeBuilder> versionTypeBuilderMockedStatic; - @Mock - private VersionTypeBuilder versionTypeBuilder; - private final VersionType version = VersionTypeTestFactory.create(); - - @BeforeEach - void setUp() { - versionTypeBuilderMockedStatic = mockStatic(VersionTypeBuilder.class); - versionTypeBuilderMockedStatic.when(VersionTypeBuilder::builder).thenReturn(versionTypeBuilder); - when(versionTypeBuilder.withErsteller(FORM_ENGINE_NAME)).thenReturn(versionTypeBuilder); - when(versionTypeBuilder.withOzgFile(ozgFile)).thenReturn(versionTypeBuilder); - when(versionTypeBuilder.withSonstigerName(StringUtils.EMPTY)).thenReturn(versionTypeBuilder); - when(versionTypeBuilder.build()).thenReturn(version); - } - - @AfterEach - void tearDown() { - versionTypeBuilderMockedStatic.close(); - } - - @Test - void shouldSetOzgFile() { - callCreateVersionType(); - - verify(versionTypeBuilder).withOzgFile(ozgFile); - } - - @Test - void shouldSetErsteller() { - callCreateVersionType(); - - verify(versionTypeBuilder).withErsteller(FORM_ENGINE_NAME); - } - - @Test - void shouldSetSonstigerName() { - callCreateVersionType(); - - verify(versionTypeBuilder).withSonstigerName(StringUtils.EMPTY); - } - - @Test - void shouldBuildVersionType() { - callCreateVersionType(); - - verify(versionTypeBuilder).build(); - } - - @Test - void shouldReturnBuiltVersion() { - var resultVersionType = callCreateVersionType(); - - assertThat(resultVersionType).isEqualTo(version); - } - - private VersionType callCreateVersionType() { - return builder.createVersionType(); - } - } - -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/ExportFileServiceTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/ExportFileServiceTest.java deleted file mode 100644 index 502ab6599a36de2b53c4da6e2b0e3600b03b928f..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/ExportFileServiceTest.java +++ /dev/null @@ -1,226 +0,0 @@ -package de.ozgcloud.alfa.file; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.io.OutputStream; -import java.util.List; -import java.util.stream.Stream; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.springframework.http.MediaType; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileService; -import de.ozgcloud.alfa.common.binaryfile.FileId; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileService; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.export.DokumentTypeTestFactory; -import de.ozgcloud.alfa.vorgang.EingangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.EingangTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; -import de.xoev.xdomea.DokumentType; - -class ExportFileServiceTest { - - @InjectMocks - private ExportFileService service; - - @Mock - private OzgFileService ozgFileService; - - @Mock - private BinaryFileService binaryFileService; - - @Nested - class TestGetRepresentations { - - private final OzgFile representationPdfFile = OzgFileTestFactory.createBuilder().contentType(MediaType.APPLICATION_PDF_VALUE).build(); - private final OzgFile representationXmlFile = OzgFileTestFactory.createBuilder().contentType(MediaType.TEXT_XML_VALUE).build(); - - @Nested - class OnAvailableVorgangData { - - @BeforeEach - void init() { - when(ozgFileService.getRepresentationsByEingang(EingangTestFactory.ID)).thenReturn( - Stream.of(representationPdfFile, representationXmlFile)); - } - - @Test - void shouldLoadRepresentations() { - service.getRepresentations(VorgangWithEingangTestFactory.create()).toList(); - - verify(ozgFileService).getRepresentationsByEingang(EingangTestFactory.ID); - } - - @Test - void shouldReturnAllFiles() { - var representations = service.getRepresentations(VorgangWithEingangTestFactory.create()); - - assertThat(representations).hasSize(2).containsExactlyInAnyOrder(representationPdfFile, representationXmlFile); - } - } - - @Nested - class OnMissingVorgangData { - - @Test - void shouldReturnEmptyOnMissingEingang() { - var vorgang = VorgangWithEingangTestFactory.createBuilder().eingang(null).build(); - - var representations = service.getRepresentations(vorgang); - - assertThat(representations).isEmpty(); - } - - @Test - void shouldReturnEmptyOnMissingEingangId() { - var vorgang = VorgangWithEingangTestFactory.createBuilder().eingang(EingangTestFactory.createBuilder().id(null).build()).build(); - - var representations = service.getRepresentations(vorgang); - - assertThat(representations).isEmpty(); - } - - } - - } - - @Nested - class TestGetAttachments { - - private final OzgFile attachmentPdfFile = OzgFileTestFactory.createBuilder().contentType(MediaType.APPLICATION_PDF_VALUE).build(); - private final OzgFile attachmentXmlFile = OzgFileTestFactory.createBuilder().contentType(MediaType.TEXT_XML_VALUE).build(); - - @Nested - class OnAvailableVorgangData { - - @BeforeEach - void init() { - when(ozgFileService.getAttachmentsByEingang(EingangTestFactory.ID)).thenReturn(Stream.of(attachmentXmlFile, attachmentPdfFile)); - } - - @Test - void shouldLoadAttachments() { - service.getAttachments(VorgangWithEingangTestFactory.create()).toList(); - - verify(ozgFileService).getAttachmentsByEingang(EingangTestFactory.ID); - } - - @Test - void shouldReturnAllFiles() { - var ozgFiles = service.getAttachments(VorgangWithEingangTestFactory.create()); - - assertThat(ozgFiles).hasSize(2).containsExactlyInAnyOrder(attachmentPdfFile, attachmentXmlFile); - } - } - - @Nested - class OnMissingVorgangData { - @Test - void shouldReturnEmptyOnMissingEingang() { - var vorgang = VorgangWithEingangTestFactory.createBuilder().eingang(null).build(); - - var attachments = service.getAttachments(vorgang); - - assertThat(attachments).isEmpty(); - } - - @Test - void shouldReturnEmptyOnMissingEingangId() { - var vorgang = VorgangWithEingangTestFactory.createBuilder().eingang(EingangTestFactory.createBuilder().id(null).build()).build(); - - var attachments = service.getAttachments(vorgang); - - assertThat(attachments).isEmpty(); - } - } - } - - @Nested - class TestWriteOzgFile { - - private final FileId fileId = OzgFileTestFactory.ID; - - @Mock - private OutputStream outputStream; - - @Test - void shouldCallBinaryFileService() { - service.writeOzgFile(fileId, outputStream); - - verify(binaryFileService).writeFileContent(fileId, outputStream); - } - } - - @Nested - class TestCreateDokumentType { - - private MockedStatic<DokumentTypeBuilder> dokumentTypeBuilderMockedStatic; - - @Mock - private DokumentTypeBuilder dokumentTypeBuilder; - - private final OzgFile ozgFile = OzgFileTestFactory.create(); - private final DokumentType dokumentType = DokumentTypeTestFactory.create(); - - @BeforeEach - void setUp() { - dokumentTypeBuilderMockedStatic = mockStatic(DokumentTypeBuilder.class); - dokumentTypeBuilderMockedStatic.when(DokumentTypeBuilder::builder).thenReturn(dokumentTypeBuilder); - - when(dokumentTypeBuilder.withOzgFile(ozgFile)).thenReturn(dokumentTypeBuilder); - when(dokumentTypeBuilder.withOrdinalNumber(1L)).thenReturn(dokumentTypeBuilder); - when(dokumentTypeBuilder.withFormEngineName(EingangHeaderTestFactory.FORM_ENGINE_NAME)).thenReturn(dokumentTypeBuilder); - when(dokumentTypeBuilder.build()).thenReturn(dokumentType); - } - - @AfterEach - void tearDown() { - dokumentTypeBuilderMockedStatic.close(); - } - - @Test - void shouldBuild() { - service.createDokumentTypes(List.of(ozgFile), EingangHeaderTestFactory.FORM_ENGINE_NAME).toList(); - - verify(dokumentTypeBuilder).build(); - } - - @Test - void shouldSetOzgFile() { - service.createDokumentTypes(List.of(ozgFile), EingangHeaderTestFactory.FORM_ENGINE_NAME).toList(); - - verify(dokumentTypeBuilder).withOzgFile(ozgFile); - } - - @Test - void shouldSetOrdinalNumber() { - service.createDokumentTypes(List.of(ozgFile), EingangHeaderTestFactory.FORM_ENGINE_NAME).toList(); - - verify(dokumentTypeBuilder).withOrdinalNumber(1L); - } - - @Test - void shouldSetFormEngineName() { - service.createDokumentTypes(List.of(ozgFile), EingangHeaderTestFactory.FORM_ENGINE_NAME).toList(); - - verify(dokumentTypeBuilder).withFormEngineName(EingangHeaderTestFactory.FORM_ENGINE_NAME); - } - - @Test - void shouldReturnDokumentTypes() { - var dokumentTypes = service.createDokumentTypes(List.of(ozgFile), EingangHeaderTestFactory.FORM_ENGINE_NAME); - - assertThat(dokumentTypes).containsExactly(dokumentType); - } - } - -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/historie/ExportHistorieServiceTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/historie/ExportHistorieServiceTest.java deleted file mode 100644 index bb06b69d792ba8e9d7178d1e8a4204aeebd5c039..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/historie/ExportHistorieServiceTest.java +++ /dev/null @@ -1,292 +0,0 @@ -package de.ozgcloud.alfa.historie; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.junit.jupiter.params.provider.EnumSource.Mode; -import org.junit.jupiter.params.provider.NullAndEmptySource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.DateConverter; -import de.ozgcloud.alfa.common.HistorienProtokollInformationTypeTestFactory; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; -import de.xoev.xdomea.HistorienProtokollInformationType; - -class ExportHistorieServiceTest { - - @Spy - @InjectMocks - private ExportHistorieService service; - - @Mock - private VorgangChangeHistoryService vorgangChangeHistoryService; - - @Nested - class TestCreateHistorienProtokollInformationTypes { - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - private final VorgangChangeHistory history = VorgangChangeHistoryTestFactory.create(); - private final HistorienProtokollInformationType statusChangeHistorienProtokollInformationType = HistorienProtokollInformationTypeTestFactory - .create(); - private final HistorienProtokollInformationType aktenzeichenChangeHistorienProtokollInformationType = HistorienProtokollInformationTypeTestFactory - .create(); - private final HistorienProtokollInformationType assignUserChangeHistorienProtokollInformationType = HistorienProtokollInformationTypeTestFactory - .create(); - - @BeforeEach - void setUp() { - when(vorgangChangeHistoryService.createVorgangChangeHistory(vorgang)).thenReturn(history); - doReturn(statusChangeHistorienProtokollInformationType).when(service) - .createHistorienProtokollInformationType(VorgangChangeHistoryTestFactory.STATUS_CHANGE_HISTORY.get(0)); - doReturn(aktenzeichenChangeHistorienProtokollInformationType).when(service) - .createHistorienProtokollInformationType(VorgangChangeHistoryTestFactory.AKTENZEICHEN_CHANGE_HISTORY.get(0)); - doReturn(assignUserChangeHistorienProtokollInformationType).when(service) - .createHistorienProtokollInformationType(VorgangChangeHistoryTestFactory.ASSIGNED_USER_CHANGE_HISTORY.get(0)); - } - - @Test - void shouldGetVorgangChangeHistory() { - service.createHistorienProtokollInformationTypes(vorgang).toList(); - - verify(vorgangChangeHistoryService).createVorgangChangeHistory(vorgang); - } - - @Test - void shouldCreateStatusChangeHistory() { - service.createHistorienProtokollInformationTypes(vorgang).toList(); - - verify(service).createHistorienProtokollInformationType(VorgangChangeHistoryTestFactory.STATUS_CHANGE_HISTORY.get(0)); - } - - @Test - void shouldReturnStatusChangeHistorienProtokollInformationType() { - var historienProtokollInformationTypes = service.createHistorienProtokollInformationTypes(vorgang); - - assertThat(historienProtokollInformationTypes).contains(statusChangeHistorienProtokollInformationType); - } - - @Test - void shouldCreateAktenzeichenChangeHistory() { - service.createHistorienProtokollInformationTypes(vorgang).toList(); - - verify(service).createHistorienProtokollInformationType(VorgangChangeHistoryTestFactory.AKTENZEICHEN_CHANGE_HISTORY.get(0)); - } - - @Test - void shouldReturnAktenzeichenHistorienProtokollInformationType() { - var historienProtokollInformationTypes = service.createHistorienProtokollInformationTypes(vorgang); - - assertThat(historienProtokollInformationTypes).contains(aktenzeichenChangeHistorienProtokollInformationType); - } - - @Test - void shouldCreateAssignUserChangeHistory() { - service.createHistorienProtokollInformationTypes(vorgang).toList(); - - verify(service).createHistorienProtokollInformationType(VorgangChangeHistoryTestFactory.ASSIGNED_USER_CHANGE_HISTORY.get(0)); - } - - @Test - void shouldReturnAssignUserHistorienProtokollInformationType() { - var historienProtokollInformationTypes = service.createHistorienProtokollInformationTypes(vorgang); - - assertThat(historienProtokollInformationTypes).contains(assignUserChangeHistorienProtokollInformationType); - } - } - - @Nested - class TestCreateHistorienProtokollInformationType { - - private static final String CREATED_VALUE_BEFORE_CHANGE = VorgangChangeTestFactory.VALUE_BEFORE_CHANGE - + VorgangChangeTestFactory.ORGANISATIONSEINHEITEN_ID; - private static final String CREATED_VALUE_AFTER_CHANGE = VorgangChangeTestFactory.VALUE_AFTER_CHANGE - + VorgangChangeTestFactory.ORGANISATIONSEINHEITEN_ID; - private final VorgangChange vorgangChange = VorgangChangeTestFactory.create(); - - @BeforeEach - void setUp() { - doReturn(VorgangChangeTestFactory.CREATED_BY_NAME).when(service).createAkteur(vorgangChange); - doReturn(CREATED_VALUE_BEFORE_CHANGE).when(service).createValueBeforeChange(vorgangChange); - doReturn(CREATED_VALUE_AFTER_CHANGE).when(service).createValueAfterChange(vorgangChange); - } - - @Test - void shouldCreateValueBeforeChange() { - service.createHistorienProtokollInformationType(vorgangChange); - - verify(service).createValueBeforeChange(vorgangChange); - } - - @Test - void shouldHaveAlterWert() { - var created = service.createHistorienProtokollInformationType(vorgangChange); - - assertThat(created.getMetadatumAlterWert()).isEqualTo(CREATED_VALUE_BEFORE_CHANGE); - } - - @Test - void shouldCreateValueAfterChange() { - service.createHistorienProtokollInformationType(vorgangChange); - - verify(service).createValueAfterChange(vorgangChange); - } - - @Test - void shouldHaveNeuerWert() { - var created = service.createHistorienProtokollInformationType(vorgangChange); - - assertThat(created.getMetadatumNeuerWert()).isEqualTo(CREATED_VALUE_AFTER_CHANGE); - } - - @Test - void shouldHaveAkteur() { - var created = service.createHistorienProtokollInformationType(vorgangChange); - - assertThat(created.getAkteur()).isEqualTo(VorgangChangeTestFactory.CREATED_BY_NAME); - } - - @Test - void shouldHaveDatumUhrzeit() { - var created = service.createHistorienProtokollInformationType(vorgangChange); - - assertThat(created.getDatumUhrzeit()).isEqualTo(DateConverter.toXmlGregorianCalendar(VorgangChangeTestFactory.FINISHED_AT)); - } - - @Test - void shouldHaveAktion() { - var created = service.createHistorienProtokollInformationType(vorgangChange); - - assertThat(created.getAktion()).isEqualTo(VorgangChangeTestFactory.ORDER); - } - - @Test - void shouldCreateAkteur() { - service.createHistorienProtokollInformationType(vorgangChange); - - verify(service).createAkteur(vorgangChange); - } - } - - @Nested - class TestCreateAkteur { - - private static final String VALUE_FOR_AKTEUR = LoremIpsum.getInstance().getWords(2); - - @Test - void shouldGetValueForAkteur() { - service.createAkteur(VorgangChangeTestFactory.create()); - - verify(service).appendOrganisationseinheitenID(VorgangChangeTestFactory.CREATED_BY_NAME, - VorgangChangeTestFactory.ORGANISATIONSEINHEITEN_ID); - } - - @Test - void shouldReturnValueForAkteur() { - doReturn(VALUE_FOR_AKTEUR).when(service) - .appendOrganisationseinheitenID(VorgangChangeTestFactory.CREATED_BY_NAME, VorgangChangeTestFactory.ORGANISATIONSEINHEITEN_ID); - - var akteur = service.createAkteur(VorgangChangeTestFactory.create()); - - assertThat(akteur).isEqualTo(VALUE_FOR_AKTEUR); - } - } - - @Nested - class TestCreateValueBeforeChange { - - private static final String ASSIGNED_USER = LoremIpsum.getInstance().getWords(2); - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = "ASSIGN_USER") - void shouldReturnValueForOrder(CommandOrder order) { - var value = service.createValueBeforeChange(VorgangChangeTestFactory.createBuilder().order(order.name()).build()); - - assertThat(value).isEqualTo(VorgangChangeTestFactory.VALUE_BEFORE_CHANGE); - } - - @Test - void shouldGetValueForAssignUserOrder() { - service.createValueBeforeChange(VorgangChangeTestFactory.createBuilder().order(CommandOrder.ASSIGN_USER.name()).build()); - - verify(service).appendOrganisationseinheitenID(VorgangChangeTestFactory.VALUE_BEFORE_CHANGE, - VorgangChangeTestFactory.ORGANISATIONSEINHEITEN_ID); - } - - @Test - void shouldReturnValueForAssignUserOrder() { - doReturn(ASSIGNED_USER).when(service) - .appendOrganisationseinheitenID(VorgangChangeTestFactory.VALUE_BEFORE_CHANGE, VorgangChangeTestFactory.ORGANISATIONSEINHEITEN_ID); - - var value = service - .createValueBeforeChange(VorgangChangeTestFactory.createBuilder().order(CommandOrder.ASSIGN_USER.name()).build()); - - assertThat(value).isEqualTo(ASSIGNED_USER); - } - } - - @Nested - class TestCreateValueAfterChange { - - private static final String ASSIGNED_USER = LoremIpsum.getInstance().getWords(2); - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = "ASSIGN_USER") - void shouldReturnValueForOrder(CommandOrder order) { - var value = service.createValueAfterChange(VorgangChangeTestFactory.createBuilder().order(order.name()).build()); - - assertThat(value).isEqualTo(VorgangChangeTestFactory.VALUE_AFTER_CHANGE); - } - - @Test - void shouldGetValueForAssignUserOrder() { - service.createValueAfterChange(VorgangChangeTestFactory.createBuilder().order(CommandOrder.ASSIGN_USER.name()).build()); - - verify(service).appendOrganisationseinheitenID(VorgangChangeTestFactory.VALUE_AFTER_CHANGE, - VorgangChangeTestFactory.ORGANISATIONSEINHEITEN_ID); - } - - @Test - void shouldReturnValueForAssignUserOrder() { - doReturn(ASSIGNED_USER).when(service) - .appendOrganisationseinheitenID(VorgangChangeTestFactory.VALUE_AFTER_CHANGE, VorgangChangeTestFactory.ORGANISATIONSEINHEITEN_ID); - - var value = service.createValueAfterChange(VorgangChangeTestFactory.createBuilder().order(CommandOrder.ASSIGN_USER.name()).build()); - - assertThat(value).isEqualTo(ASSIGNED_USER); - } - } - - @Nested - class TestAppendOrganisationseinheitenID { - - private static final String TEXT = LoremIpsum.getInstance().getWords(2); - - @ParameterizedTest - @NullAndEmptySource - void shouldReturnEmpty(String assignedUser) { - var value = service.appendOrganisationseinheitenID(assignedUser, VorgangChangeTestFactory.ORGANISATIONSEINHEITEN_ID); - - assertThat(value).isEmpty(); - } - - @Test - void shouldAppendOrganisationseinheitenID() { - var value = service.appendOrganisationseinheitenID(TEXT, VorgangChangeTestFactory.ORGANISATIONSEINHEITEN_ID); - - assertThat(value).isEqualTo( - String.format("%s; %s", TEXT, VorgangChangeTestFactory.ORGANISATIONSEINHEITEN_ID)); - } - } - -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/kommentar/DokumentTypeBuilderITCase.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/kommentar/DokumentTypeBuilderITCase.java deleted file mode 100644 index 366b478272feb2591773b77c42d6c7d6a08088c9..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/kommentar/DokumentTypeBuilderITCase.java +++ /dev/null @@ -1,187 +0,0 @@ -package de.ozgcloud.alfa.kommentar; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.List; -import java.util.stream.Stream; - -import org.apache.commons.lang3.StringUtils; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.MethodSource; -import org.mockito.MockedStatic; - -import de.ozgcloud.alfa.common.UUIDConverter; -import de.ozgcloud.alfa.common.VersionTypeBuilder; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.xoev.xdomea.AnlageDokumentType; -import de.xoev.xdomea.DateiformatCodeType; -import de.xoev.xdomea.FormatType; -import de.xoev.xdomea.IdentifikationObjektType; -import de.xoev.xdomea.VersionType; - -class DokumentTypeBuilderITCase { - - private static final String VERSION_NUMMER = "1"; - private static final String TYP = "Notiz"; - - private static final int IDX_ANLAGE_PDF = 0; - private static final int IDX_ANLAGE_JPEG = 1; - private static final int IDX_ANLAGE_JPG = 2; - - private final Kommentar kommentar = KommentarTestFactory.create(); - private final OzgFile attachment1 = OzgFileTestFactory.createBuilder().contentType("application/pdf").build(); - private final OzgFile attachment2 = OzgFileTestFactory.createBuilder().contentType("image/jpeg").name("Testfile.jpeg").build(); - private final OzgFile attachment3 = OzgFileTestFactory.createBuilder().contentType("image/jpeg").name("Testfile.jpg").build(); - private final List<OzgFile> attachments = List.of(attachment1, attachment2, attachment3); - private final DokumentTypeBuilder builder = DokumentTypeBuilder.builder().withKommentar(kommentar).withKommentarAttachments(attachments); - - @Nested - class TestBuild { - private MockedStatic<UUIDConverter> uuidConverterMockedStatic; - private final static String KOMMENTAR_UUID = "correct kommentar ID"; - private final static String ATTACHMENT1_UUID = "correct attachment ID"; - - @BeforeEach - void setUp() { - uuidConverterMockedStatic = mockStatic(UUIDConverter.class); - uuidConverterMockedStatic.when(() -> UUIDConverter.fromObjectId(KommentarTestFactory.ID)) - .thenReturn(KOMMENTAR_UUID); - uuidConverterMockedStatic.when(() -> UUIDConverter.fromObjectId(attachment1.getId().toString())) - .thenReturn(ATTACHMENT1_UUID); - } - - @AfterEach - void tearDown() { - uuidConverterMockedStatic.close(); - } - - @Test - void shouldHaveTyp() { - var dokumentType = builder.build(); - - assertThat(dokumentType.getTyp()).isEqualTo(TYP); - } - - @Test - void shouldHaveIdentifikation() { - var expectedIdentifikation = new IdentifikationObjektType(); - expectedIdentifikation.setID(KOMMENTAR_UUID); - - var dokumentType = builder.build(); - - assertThat(dokumentType.getIdentifikation()).usingRecursiveComparison().isEqualTo(expectedIdentifikation); - } - - @Nested - class TestAnlage { - @Test - void shouldHaveIdentifikation() { - var expectedIdentifikation = new IdentifikationObjektType(); - expectedIdentifikation.setID(ATTACHMENT1_UUID); - - var anlageType = getAnlage(IDX_ANLAGE_PDF); - - assertThat(anlageType.getIdentifikation()).usingRecursiveComparison().isEqualTo(expectedIdentifikation); - } - - @Nested - class TestVersion { - @Test - void shouldHaveNummer() { - var version = getVersion(IDX_ANLAGE_PDF); - - assertThat(version.getNummer()).isEqualTo(VERSION_NUMMER); - } - - private VersionType getVersion(int anlageIndex) { - var anlage = getAnlage(anlageIndex); - assertThat(anlage.getVersion()).hasSize(1); - return getAnlage(anlageIndex).getVersion().getFirst(); - } - - @Nested - class TestFormat { - @Test - void shouldHaveNameForPdf() { - var expectedDateiFormat = createDateiformatCode("018"); - - var format = getFormat(IDX_ANLAGE_PDF); - - assertThat(format.getName()).usingRecursiveComparison().isEqualTo(expectedDateiFormat); - } - - @ParameterizedTest - @MethodSource("shouldHaveNameForJpegDataProvider") - void shouldHaveNameForJpeg(int anlageIdx, String expectedCode) { - var expectedDateiFormat = createDateiformatCode(expectedCode); - - var format = getFormat(anlageIdx); - - assertThat(format.getName()).usingRecursiveComparison().isEqualTo(expectedDateiFormat); - } - - private static Stream<Arguments> shouldHaveNameForJpegDataProvider() { - return Stream.of( - Arguments.of(IDX_ANLAGE_JPEG, "010"), - Arguments.of(IDX_ANLAGE_JPG, "011")); - } - - private DateiformatCodeType createDateiformatCode(String codeValue) { - var dateiFormatCode = new DateiformatCodeType(); - dateiFormatCode.setCode(codeValue); - dateiFormatCode.setListURI(VersionTypeBuilder.DATEI_FORMAT_LIST_URI); - dateiFormatCode.setListVersionID(VersionTypeBuilder.LIST_VERSION_ID); - return dateiFormatCode; - } - - @Test - void shouldHaveVersion() { - var format = getFormat(IDX_ANLAGE_PDF); - - assertThat(format.getVersion()).isEqualTo(StringUtils.EMPTY); - - } - - private FormatType getFormat(int anlageIndex) { - var version = getVersion(anlageIndex); - assertThat(version.getFormat()).hasSize(1); - return getVersion(anlageIndex).getFormat().getFirst(); - } - - @Nested - class TestPrimaerDokument { - @Test - void shouldHaveDateiname() { - var primaerdokument = getFormat(IDX_ANLAGE_PDF).getPrimaerdokument(); - - assertThat(primaerdokument.getDateiname()) - .isEqualTo(ATTACHMENT1_UUID + "_" + attachment1.getName()); - - } - - @Test - void shouldHaveDateinameOriginal() { - var primaerdokument = getFormat(IDX_ANLAGE_PDF).getPrimaerdokument(); - - assertThat(primaerdokument.getDateinameOriginal()) - .isEqualTo(attachment1.getName()); - - } - } - } - - } - - private AnlageDokumentType getAnlage(int index) { - return builder.build().getAnlage().get(index); - } - } - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/kommentar/DokumentTypeBuilderTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/kommentar/DokumentTypeBuilderTest.java deleted file mode 100644 index e09747b371014cfb5b9b776f8fed4a533649421e..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/kommentar/DokumentTypeBuilderTest.java +++ /dev/null @@ -1,278 +0,0 @@ -package de.ozgcloud.alfa.kommentar; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.List; - -import javax.xml.datatype.XMLGregorianCalendar; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.mockito.Spy; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.AnlageDokumentTypeBuilder; -import de.ozgcloud.alfa.common.AnlageDokumentTypeTestFactory; -import de.ozgcloud.alfa.common.DateConverter; -import de.ozgcloud.alfa.common.HistorienProtokollInformationTypeTestFactory; -import de.ozgcloud.alfa.common.IdentifikationObjektTypeBuilder; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.export.IdentifikationObjektTypeTestFactory; -import de.ozgcloud.alfa.vorgang.ZustaendigeStelleTestFactory; -import de.xoev.xdomea.AnlageDokumentType; -import de.xoev.xdomea.DokumentType; -import de.xoev.xdomea.HistorienProtokollInformationType; -import de.xoev.xdomea.IdentifikationObjektType; - -class DokumentTypeBuilderTest { - - @Spy - private DokumentTypeBuilder builder = DokumentTypeBuilder.builder().withKommentar(KommentarTestFactory.create()); - - @Nested - class TestBuild { - - private MockedStatic<IdentifikationObjektTypeBuilder> identifikationObjektTypeBuilderMockedStatic; - @Mock - private IdentifikationObjektTypeBuilder identifikationObjektTypeBuilder; - private final IdentifikationObjektType identifikationObjektType = IdentifikationObjektTypeTestFactory.create(); - - private final OzgFile ozgFile = OzgFileTestFactory.create(); - private final AnlageDokumentType anlageDokumentType = AnlageDokumentTypeTestFactory.create(); - - private final HistorienProtokollInformationType historienProtokollInformationType = HistorienProtokollInformationTypeTestFactory.create(); - - @BeforeEach - void setUp() { - identifikationObjektTypeBuilderMockedStatic = mockStatic(IdentifikationObjektTypeBuilder.class); - identifikationObjektTypeBuilderMockedStatic.when(IdentifikationObjektTypeBuilder::builder).thenReturn(identifikationObjektTypeBuilder); - when(identifikationObjektTypeBuilder.withObjectID(KommentarTestFactory.ID)).thenReturn(identifikationObjektTypeBuilder); - when(identifikationObjektTypeBuilder.build()).thenReturn(identifikationObjektType); - doReturn(historienProtokollInformationType).when(builder).createHistorie(); - } - - @AfterEach - void tearDown() { - identifikationObjektTypeBuilderMockedStatic.close(); - } - - @Test - void shouldSetObjectId() { - builder.build(); - - verify(identifikationObjektTypeBuilder).withObjectID(KommentarTestFactory.ID); - } - - @Test - void shouldBuildIdentifikationObjectType() { - builder.build(); - - verify(identifikationObjektTypeBuilder).build(); - } - - @Nested - class WithoutKommentareAttachments { - - @Test - void shouldHaveIdentifikation() { - var dokumentType = builder.build(); - - assertThat(dokumentType.getIdentifikation()).isEqualTo(identifikationObjektType); - } - - @Test - void shouldHaveTypNotiz() { - var dokumentType = builder.build(); - - assertThat(dokumentType.getTyp()).isEqualTo(DokumentTypeBuilder.TYP); - } - } - - @Nested - class WithKommentareAttachments { - - @BeforeEach - void setUp() { - doReturn(anlageDokumentType).when(builder).createAnlage(ozgFile); - } - - @Test - void shouldCreateAnlagenForKommentarAttachments() { - builder.withKommentarAttachments(List.of(ozgFile)).build(); - - verify(builder).createAnlage(ozgFile); - } - - @Test - void shouldHaveAnlagen() { - var dokumentType = builder.withKommentarAttachments(List.of(ozgFile)).build(); - - assertThat(dokumentType.getAnlage()).contains(anlageDokumentType); - } - } - - @Test - void shouldHaveHistorienProtokoll() { - DokumentType dokumentType = builder.build(); - - assertThat(dokumentType.getHistorienProtokollInformation().get(0)).isEqualTo(historienProtokollInformationType); - } - - @Test - void shouldHaveOneHistorienProtokoll() { - DokumentType dokumentType = builder.build(); - - assertThat(dokumentType.getHistorienProtokollInformation()).size().isEqualTo(1); - } - - @Test - void shouldCreateHistorienProtokoll() { - builder.build(); - - verify(builder).createHistorie(); - } - - } - - @Nested - class TestCreateAnlage { - - private final OzgFile ozgFile = OzgFileTestFactory.create(); - - private MockedStatic<AnlageDokumentTypeBuilder> anlageDokumentTypeBuilderMockedStatic; - @Mock - private AnlageDokumentTypeBuilder anlageDokumentTypeBuilder; - private AnlageDokumentType expectedAnlage = AnlageDokumentTypeTestFactory.create(); - - @BeforeEach - void setUp() { - anlageDokumentTypeBuilderMockedStatic = mockStatic(AnlageDokumentTypeBuilder.class); - anlageDokumentTypeBuilderMockedStatic.when(AnlageDokumentTypeBuilder::builder).thenReturn(anlageDokumentTypeBuilder); - when(anlageDokumentTypeBuilder.withOzgFile(ozgFile)).thenReturn(anlageDokumentTypeBuilder); - when(anlageDokumentTypeBuilder.build()).thenReturn(expectedAnlage); - } - - @AfterEach - void tearDown() { - anlageDokumentTypeBuilderMockedStatic.close(); - } - - @Test - void shouldSetOzgFile() { - callCreateAnlage(); - - verify(anlageDokumentTypeBuilder).withOzgFile(ozgFile); - } - - @Test - void shouldBuildAnlageDokumentType() { - callCreateAnlage(); - - verify(anlageDokumentTypeBuilder).build(); - } - - @Test - void shouldReturnBuiltAnlage() { - var resultAnlage = callCreateAnlage(); - - assertThat(resultAnlage).isEqualTo(expectedAnlage); - } - - private AnlageDokumentType callCreateAnlage() { - return builder.createAnlage(ozgFile); - } - } - - @Nested - class TestWithOrganisationseinheitenID { - @Test - void shouldReturnBuilder() { - var result = builder.withOrganisationseinheitenID(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID); - - assertThat(result).isNotNull(); - } - } - - @Nested - class TestWithAuthorFullName { - @Test - void shouldReturnBuilder() { - var result = builder.withAuthorFullName(UserProfileTestFactory.FULLNAME); - - assertThat(result).isNotNull(); - } - } - - @Nested - class TestCreateHistorie { - - Kommentar kommentar = KommentarTestFactory.create(); - - @BeforeEach - void setupBuilder() { - builder.withKommentar(kommentar); - } - - @Test - void shouldHaveMetadatumName() { - var historie = builder.createHistorie(); - - assertThat(historie.getMetadatumName()).isEqualTo(KommentarTestFactory.TEXT); - } - - @Test - void shouldHaveAkteur() { - String expectedAkteurName = LoremIpsum.getInstance().getWords(5); - doReturn(expectedAkteurName).when(builder).createAkteur(); - - var historie = builder.createHistorie(); - - assertThat(historie.getAkteur()).isEqualTo(expectedAkteurName); - } - - @Test - void shouldHaveDatumUhrzeit() { - var historie = builder.createHistorie(); - - assertThat(historie.getDatumUhrzeit()).isEqualTo(createExpectedDatumUhrzeit()); - } - - @Test - void shouldHaveAktion() { - var historie = builder.createHistorie(); - - assertThat(historie).hasFieldOrPropertyWithValue("aktion", DokumentTypeBuilder.AKTION); - } - - private XMLGregorianCalendar createExpectedDatumUhrzeit() { - return DateConverter.toXmlGregorianCalendar(kommentar.getCreatedAt()); - } - } - - @Nested - class TestCreateAkteur { - @Test - void shouldCreateName() { - builder.withAuthorFullName(UserProfileTestFactory.FULLNAME); - builder.withOrganisationseinheitenID(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID); - - String akteur = builder.createAkteur(); - - assertThat(akteur).isEqualTo(createExpectedAkteurName()); - } - - private String createExpectedAkteurName() { - return UserProfileTestFactory.FULLNAME + "; " + ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID; - } - - } - -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/kommentar/ExportKommentarServiceTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/kommentar/ExportKommentarServiceTest.java deleted file mode 100644 index 66d5b18b2bb00cf80d1747fc2fa4804fba28dd48..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/kommentar/ExportKommentarServiceTest.java +++ /dev/null @@ -1,259 +0,0 @@ -package de.ozgcloud.alfa.kommentar; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.List; -import java.util.stream.Stream; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileService; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.common.user.UserService; -import de.ozgcloud.alfa.export.DokumentTypeTestFactory; -import de.ozgcloud.alfa.kommentar.KommentarsExportData.KommentarsExportDataBuilder; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; -import de.ozgcloud.alfa.vorgang.ZustaendigeStelleTestFactory; -import de.xoev.xdomea.DokumentType; - -class ExportKommentarServiceTest { - - @Spy - @InjectMocks - private ExportKommentarService service; - - @Mock - private KommentarService kommentarService; - @Mock - private BinaryFileService binaryFileService; - - @Mock - private UserService userService; - - private final Kommentar kommentar = KommentarTestFactory.create(); - - @Nested - class TestCreateExportData { - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - private final KommentarsExportData exportData = KommentarsExportDataTestFactory.create(); - - private final ExportKommentarService.KommentarExportData kommentarExportData = new ExportKommentarService.KommentarExportData( - ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID, kommentar); - - private MockedStatic<KommentarsExportData> kommentarsExportDataMockedStatic; - @Mock - private KommentarsExportDataBuilder exportDataBuilder; - - @BeforeEach - void setUp() { - kommentarsExportDataMockedStatic = mockStatic(KommentarsExportData.class); - kommentarsExportDataMockedStatic.when(KommentarsExportData::builder).thenReturn(exportDataBuilder); - when(service.getKommentare(vorgang)).thenReturn(Stream.of(kommentar)); - when(service.createKommentarExportData(vorgang, kommentar)).thenReturn(kommentarExportData); - doNothing().when(service).addKommentarExportData(kommentarExportData, exportDataBuilder); - when(exportDataBuilder.build()).thenReturn(exportData); - } - - @AfterEach - void tearDown() { - kommentarsExportDataMockedStatic.close(); - } - - @Test - void shouldAddKommentarExportData() { - callService(); - - verify(service).addKommentarExportData(eq(kommentarExportData), eq(exportDataBuilder)); - } - - @Test - void shouldBuildExportData() { - callService(); - - verify(exportDataBuilder).build(); - } - - @Test - void shouldReturnBuiltExportData() { - var result = callService(); - - assertThat(result).isEqualTo(exportData); - } - - private KommentarsExportData callService() { - return service.createExportData(vorgang); - } - } - - @Nested - class TestAddKommentarExportData { - - private final String authorFullName = UserProfileTestFactory.FULLNAME; - private final List<OzgFile> attachments = List.of(KommentarsExportDataTestFactory.OZG_FILE); - private final DokumentType dokumentType = DokumentTypeTestFactory.create(); - private final String organisationsEinheitenID = ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID; - private final ExportKommentarService.KommentarExportData kommentarExportData = new ExportKommentarService.KommentarExportData( - organisationsEinheitenID, - kommentar - ); - private MockedStatic<DokumentTypeBuilder> dokumentTypeBuilderMockedStatic; - @Mock - private DokumentTypeBuilder dokumentTypeBuilder; - @Mock - private KommentarsExportDataBuilder exportDataBuilder; - - @BeforeEach - void setUp() { - doReturn(attachments).when(service).getAttachments(kommentar); - doReturn(authorFullName).when(service).getAuthorFullName(kommentar); - - dokumentTypeBuilderMockedStatic = mockStatic(DokumentTypeBuilder.class); - dokumentTypeBuilderMockedStatic.when(() -> DokumentTypeBuilder.builder()).thenReturn(dokumentTypeBuilder); - - doReturn(dokumentTypeBuilder).when(dokumentTypeBuilder).withKommentarAttachments(attachments); - doReturn(dokumentTypeBuilder).when(dokumentTypeBuilder).withKommentar(kommentar); - doReturn(dokumentTypeBuilder).when(dokumentTypeBuilder) - .withOrganisationseinheitenID(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID); - doReturn(dokumentTypeBuilder).when(dokumentTypeBuilder).withAuthorFullName(authorFullName); - doReturn(dokumentType).when(dokumentTypeBuilder).build(); - } - - @AfterEach - void tearDown() { - dokumentTypeBuilderMockedStatic.close(); - } - - @Test - void shouldSetDokumentType() { - callService(); - - verify(exportDataBuilder).dokumentType(dokumentType); - } - - @Test - void shouldSetAttachments() { - callService(); - - verify(exportDataBuilder).attachments(attachments); - } - - @Test - void shouldSetOzgFile() { - callService(); - - verify(dokumentTypeBuilder).withKommentarAttachments(attachments); - } - - @Test - void shouldSetKommentar() { - callService(); - - verify(dokumentTypeBuilder).withKommentar(kommentar); - } - - @Test - void shouldSetOrganisationseinheitID() { - callService(); - - verify(dokumentTypeBuilder).withOrganisationseinheitenID(organisationsEinheitenID); - } - - @Test - void shouldReturnAuthorFullName() { - callService(); - - verify(dokumentTypeBuilder).withAuthorFullName(authorFullName); - } - - @Test - void shouldBuildDokumentType() { - callService(); - - verify(dokumentTypeBuilder).build(); - } - - private void callService() { - service.addKommentarExportData(kommentarExportData, exportDataBuilder); - } - } - - @Nested - class TestGetAttachments { - - @Test - void shouldGetFiles() { - service.getAttachments(kommentar); - - verify(binaryFileService).getFiles(KommentarTestFactory.ATTACHMENTS); - } - - @Test - void shouldReturnAttachments() { - List<OzgFile> attachments = List.of(KommentarsExportDataTestFactory.OZG_FILE); - when(binaryFileService.getFiles(KommentarTestFactory.ATTACHMENTS)).thenReturn(attachments.stream()); - - var result = service.getAttachments(kommentar); - - assertThat(result).isEqualTo(attachments); - } - } - - @Nested - class TestGetAuthorFullName { - - @BeforeEach - void init() { - when(userService.getById(UserProfileTestFactory.ID)).thenReturn(UserProfileTestFactory.create()); - } - - @Test - void shouldGetUser() { - service.getAuthorFullName(KommentarTestFactory.create()); - - verify(userService).getById(eq(UserId.from(KommentarTestFactory.CREATED_BY))); - } - - @Test - void shouldReturnAuthorsFullName() { - var authorFullName = service.getAuthorFullName(KommentarTestFactory.create()); - - assertThat(authorFullName).isEqualTo(UserProfileTestFactory.FULLNAME); - } - } - - @Nested - class TestGetKommentare { - - private VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - @Test - void shouldFindKommentareByVorgang() { - service.getKommentare(vorgang); - - verify(kommentarService).findByVorgangId(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldReturnKommentare() { - when(kommentarService.findByVorgangId(VorgangHeaderTestFactory.ID)).thenReturn(Stream.of(kommentar)); - - var result = service.getKommentare(vorgang); - - assertThat(result).containsExactly(kommentar); - } - } - -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/kommentar/KommentarsExportDataTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/kommentar/KommentarsExportDataTestFactory.java deleted file mode 100644 index a27b9da5f377ac5adf07be8cf939536b2edafb03..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/kommentar/KommentarsExportDataTestFactory.java +++ /dev/null @@ -1,23 +0,0 @@ -package de.ozgcloud.alfa.kommentar; - -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.export.DokumentTypeTestFactory; -import de.ozgcloud.alfa.kommentar.KommentarsExportData.KommentarsExportDataBuilder; -import de.xoev.xdomea.DokumentType; - -public class KommentarsExportDataTestFactory { - - public static final DokumentType DOKUMENT_TYPE = DokumentTypeTestFactory.create(); - public static final OzgFile OZG_FILE = OzgFileTestFactory.createWithUniqueId(); - - public static KommentarsExportData create() { - return createBuilder().build(); - } - - public static KommentarsExportDataBuilder createBuilder() { - return KommentarsExportData.builder() - .dokumentType(DOKUMENT_TYPE) - .attachment(OZG_FILE); - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/postfach/DokumentTypeBuilderTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/postfach/DokumentTypeBuilderTest.java deleted file mode 100644 index 92f88ef542e125d0c0054564bfca590d0b0d5b32..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/postfach/DokumentTypeBuilderTest.java +++ /dev/null @@ -1,297 +0,0 @@ -package de.ozgcloud.alfa.postfach; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.time.ZonedDateTime; -import java.util.Collections; -import java.util.List; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.AnlageDokumentTypeBuilder; -import de.ozgcloud.alfa.common.AnlageDokumentTypeTestFactory; -import de.ozgcloud.alfa.common.DateConverter; -import de.ozgcloud.alfa.common.HistorienProtokollInformationTypeTestFactory; -import de.ozgcloud.alfa.common.IdentifikationObjektTypeBuilder; -import de.ozgcloud.alfa.common.binaryfile.BinaryFileTestFactory; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.common.user.UserProfile; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.export.IdentifikationObjektTypeTestFactory; -import de.ozgcloud.alfa.postfach.PostfachMail.Direction; -import de.ozgcloud.alfa.vorgang.ZustaendigeStelleTestFactory; -import de.xoev.xdomea.AnlageDokumentType; -import de.xoev.xdomea.HistorienProtokollInformationType; -import de.xoev.xdomea.IdentifikationObjektType; - -public class DokumentTypeBuilderTest { - - private final PostfachMail postfachMail = PostfachMailTestFactory.create(); - private final OzgFile ozgFile = OzgFileTestFactory.createBuilder().id(BinaryFileTestFactory.FILE_ID).build(); - - @Spy - @InjectMocks - private final DokumentTypeBuilder builder = DokumentTypeBuilder.builder() - .withPostfachMail(postfachMail) - .withOzgFiles(List.of(ozgFile)) - .withOrganisationseinheitenId(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID); - - @Nested - class TestBuild { - private static final String TYP = "Nachricht"; - - private MockedStatic<IdentifikationObjektTypeBuilder> identifikationObjektTypeBuilderMockedStatic; - @Mock - private IdentifikationObjektTypeBuilder identifikationObjektTypeBuilder; - private final IdentifikationObjektType identifikationObjektType = IdentifikationObjektTypeTestFactory.create(); - - private final AnlageDokumentType anlageDokument = AnlageDokumentTypeTestFactory.create(); - private final HistorienProtokollInformationType historienProtokollInformation = HistorienProtokollInformationTypeTestFactory.create(); - - @BeforeEach - void setUp() { - identifikationObjektTypeBuilderMockedStatic = mockStatic(IdentifikationObjektTypeBuilder.class); - identifikationObjektTypeBuilderMockedStatic.when(IdentifikationObjektTypeBuilder::builder).thenReturn(identifikationObjektTypeBuilder); - when(identifikationObjektTypeBuilder.withObjectID(PostfachMailTestFactory.ID)).thenReturn(identifikationObjektTypeBuilder); - when(identifikationObjektTypeBuilder.build()).thenReturn(identifikationObjektType); - - doReturn(historienProtokollInformation).when(builder).createHistorienProtokollInformation(); - } - - @AfterEach - void tearDown() { - identifikationObjektTypeBuilderMockedStatic.close(); - } - - @Nested - class TestWithOneAnlage { - @BeforeEach - void mockCreateAnlage() { - doReturn(anlageDokument).when(builder).createAnlage(ozgFile); - } - - @Test - void shouldSetObjectId() { - builder.build(); - - verify(identifikationObjektTypeBuilder).withObjectID(postfachMail.getId()); - } - - @Test - void shouldBuildIdentifikationObjectType() { - builder.build(); - - verify(identifikationObjektTypeBuilder).build(); - } - - @Test - void shouldHaveIdentifikation() { - var dokument = builder.build(); - - assertThat(dokument.getIdentifikation()).isEqualTo(identifikationObjektType); - } - - @Test - void shouldHaveTyp() { - var dokument = builder.build(); - - assertThat(dokument.getTyp()).isEqualTo(TYP); - } - - @Test - void shouldHaveHistorienProtokollInformation() { - var dokument = builder.build(); - - assertThat(dokument.getHistorienProtokollInformation()).containsExactly(historienProtokollInformation); - } - - @Test - void shouldCallCreateAnlage() { - builder.build(); - - verify(builder).createAnlage(ozgFile); - } - - @Test - void shouldHaveOneAnlage() { - var dokument = builder.build(); - - assertThat(dokument.getAnlage()).containsExactly(anlageDokument); - } - } - - @Nested - class TestWithoutAnlage { - @Test - void shouldHaveNoAnlage() { - var dokument = builder.withOzgFiles(Collections.emptyList()).build(); - - assertThat(dokument.getAnlage()).isEmpty(); - } - } - } - - @Nested - class TestCreateHistorienProtokollInformation { - private static final String AKTEUR = "correct aktuer"; - private static final String NACHRICHT_EMPFANGEN = "Nachricht empfangen"; - private static final String NACHRICHT_GESENDET = "Nachricht gesendet"; - - @BeforeEach - void setUpMock() { - doReturn(AKTEUR).when(builder).getAkteur(); - doReturn(PostfachMailTestFactory.CREATED_AT).when(builder).getSentTime(); - } - - @Test - void shouldHaveMetadatumName() { - var resultHistorie = callCreateHistorienProtokollInformation(); - - assertThat(resultHistorie.getMetadatumName()).isEqualTo(PostfachMailTestFactory.MAIL_BODY); - } - - @Test - void shouldHaveAkteur() { - var resultHistorie = callCreateHistorienProtokollInformation(); - - assertThat(resultHistorie.getAkteur()).isEqualTo(AKTEUR); - } - - @Test - void shouldCallGetSentTime() { - callCreateHistorienProtokollInformation(); - - verify(builder).getSentTime(); - } - - @Test - void shouldHaveDatumUhrzeit() { - var resultHistorie = callCreateHistorienProtokollInformation(); - - assertThat(resultHistorie.getDatumUhrzeit()).isEqualTo(DateConverter.toXmlGregorianCalendar(PostfachMailTestFactory.CREATED_AT)); - } - - @Test - void shouldReturnAktionWithGesendet() { - builder.withPostfachMail(PostfachMailTestFactory.createBuilder().direction(Direction.OUT).build()); - - var resultHistorie = callCreateHistorienProtokollInformation(); - - assertThat(resultHistorie.getAktion()).isEqualTo(NACHRICHT_GESENDET); - } - - @Test - void shouldReturnAktionWithEmpfangen() { - builder.withPostfachMail(PostfachMailTestFactory.createBuilder().direction(Direction.IN).build()); - - var resultHistorie = callCreateHistorienProtokollInformation(); - - assertThat(resultHistorie.getAktion()).isEqualTo(NACHRICHT_EMPFANGEN); - } - - private HistorienProtokollInformationType callCreateHistorienProtokollInformation() { - return builder.createHistorienProtokollInformation(); - } - } - - @Nested - class TestGetAkteur { - private final UserProfile userProfile = UserProfileTestFactory.create(); - - @Test - void shouldReturnNameAndOrgaIdOfBearbeiter() { - builder.withUserProfile(userProfile); - - var akteur = builder.getAkteur(); - - assertThat(akteur).isEqualTo(UserProfileTestFactory.FULLNAME + "; " + ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID); - } - - @Test - void shouldReturnAntragsteller() { - builder.withUserProfile(null); - - var akteur = builder.getAkteur(); - - assertThat(akteur).isEqualTo("Antragsteller"); - } - } - - @Nested - class TestCreateAnlage { - private MockedStatic<AnlageDokumentTypeBuilder> anlageDokumentTypeBuilderMockedStatic; - @Mock - private AnlageDokumentTypeBuilder anlageDokumentTypeBuilder; - private AnlageDokumentType expectedAnlage = AnlageDokumentTypeTestFactory.create(); - - @BeforeEach - void setUp() { - anlageDokumentTypeBuilderMockedStatic = mockStatic(AnlageDokumentTypeBuilder.class); - anlageDokumentTypeBuilderMockedStatic.when(AnlageDokumentTypeBuilder::builder).thenReturn(anlageDokumentTypeBuilder); - when(anlageDokumentTypeBuilder.withOzgFile(ozgFile)).thenReturn(anlageDokumentTypeBuilder); - when(anlageDokumentTypeBuilder.build()).thenReturn(expectedAnlage); - } - - @AfterEach - void tearDown() { - anlageDokumentTypeBuilderMockedStatic.close(); - } - - @Test - void shouldSetOzgFile() { - callCreateAnlage(); - - verify(anlageDokumentTypeBuilder).withOzgFile(ozgFile); - } - - @Test - void shouldBuildAnlageDokumentType() { - callCreateAnlage(); - - verify(anlageDokumentTypeBuilder).build(); - } - - @Test - void shouldReturnBuiltAnlage() { - var resultAnlage = callCreateAnlage(); - - assertThat(resultAnlage).isEqualTo(expectedAnlage); - } - - private AnlageDokumentType callCreateAnlage() { - return builder.createAnlage(ozgFile); - } - } - - @Nested - class TestGetSentTime { - private final ZonedDateTime testTime = ZonedDateTime.now().withNano(0); - - @Test - void shouldReturnCreatedAtForIncoming() { - builder.withPostfachMail(PostfachMailTestFactory.createBuilder().direction(Direction.IN).createdAt(testTime).build()); - - var resultTime = builder.getSentTime(); - - assertThat(resultTime).isEqualTo(testTime); - } - - @Test - void shouldReturnSentAtForOutgoing() { - builder.withPostfachMail(PostfachMailTestFactory.createBuilder().direction(Direction.OUT).sentAt(testTime).build()); - - var resultTime = builder.getSentTime(); - - assertThat(resultTime).isEqualTo(testTime); - } - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/postfach/ExportNachrichtServiceTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/postfach/ExportNachrichtServiceTest.java deleted file mode 100644 index b72bbbf4aa5d1b736b8b55751111154e64564023..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/postfach/ExportNachrichtServiceTest.java +++ /dev/null @@ -1,342 +0,0 @@ -package de.ozgcloud.alfa.postfach; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.List; -import java.util.Optional; -import java.util.stream.Stream; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentMatcher; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileService; -import de.ozgcloud.alfa.common.binaryfile.BinaryFileTestFactory; -import de.ozgcloud.alfa.common.binaryfile.FileId; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.common.user.UserProfile; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.common.user.UserService; -import de.ozgcloud.alfa.export.DokumentTypeTestFactory; -import de.ozgcloud.alfa.postfach.PostfachMailExportData.PostfachMailExportDataBuilder; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; -import de.xoev.xdomea.DokumentType; - -class ExportNachrichtServiceTest { - - @Spy - @InjectMocks - private ExportNachrichtService service; - - @Mock - private PostfachMailService postfachMailService; - - @Mock - private UserService userService; - - @Mock - private BinaryFileService binaryFileService; - - @Nested - class TestCreateExportData { - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - private final PostfachMail postfachMail = PostfachMailTestFactory.create(); - private final List<OzgFile> attachments = List.of(OzgFileTestFactory.create()); - private final PostfachMailExportData exportData = PostfachMailExportDataTestFactory.create(); - - private final ArgumentMatcher<PostfachMailExportInput> exportInputMatcher = input -> input.postfachMail().equals(postfachMail) - && input.organisationseinheitenId().equals(PostfachMailExportInputTestFactory.ORGANISATIONSEINHEITEN_ID) - && input.attachments().equals(attachments); - - private MockedStatic<PostfachMailExportData> postfachMailExportDataMockedStatic; - @Mock - private PostfachMailExportDataBuilder exportDataBuilder; - - @BeforeEach - void setUpMock() { - postfachMailExportDataMockedStatic = mockStatic(PostfachMailExportData.class); - postfachMailExportDataMockedStatic.when(PostfachMailExportData::builder).thenReturn(exportDataBuilder); - doReturn(Stream.of(postfachMail)).when(service).getPostfachMails(VorgangHeaderTestFactory.ID); - doReturn(attachments).when(service).getAttachments(postfachMail); - doNothing().when(service).addPostfachMailExportData(argThat(exportInputMatcher), eq(exportDataBuilder)); - when(exportDataBuilder.build()).thenReturn(exportData); - } - - @AfterEach - void tearDown() { - postfachMailExportDataMockedStatic.close(); - } - - @Test - void shouldgetPostfachMails() { - callService(); - - verify(service).getPostfachMails(vorgang.getId()); - } - - @Test - void shouldCallGetAttachents() { - callService(); - - verify(service).getAttachments(postfachMail); - } - - @Test - void shouldAddInputToBuilder() { - callService(); - - verify(service).addPostfachMailExportData(argThat(exportInputMatcher), eq(exportDataBuilder)); - } - - @Test - void shouldBuildExportData() { - callService(); - - verify(exportDataBuilder).build(); - } - - @Test - void shouldReturnBuiltExportData() { - var result = callService(); - - assertThat(result).isEqualTo(exportData); - } - - private PostfachMailExportData callService() { - return service.createExportData(vorgang); - } - } - - @Nested - class TestAddPostfachMailExportData { - private final List<OzgFile> attachments = PostfachMailExportInputTestFactory.ATTACHMENTS; - private final DokumentType dokumentType = DokumentTypeTestFactory.create(); - private final PostfachMailExportInput exportInput = PostfachMailExportInputTestFactory.create(); - - @Mock - private PostfachMailExportDataBuilder exportDataBuilder; - - @BeforeEach - void setUpMocks() { - doReturn(dokumentType).when(service).buildDokumentType(exportInput); - } - - @Test - void shouldAddAttachmentsToBuilder() { - callService(); - - verify(exportDataBuilder).attachments(attachments); - } - - @Test - void shouldBuildDokumentType() { - callService(); - - verify(service).buildDokumentType(exportInput); - } - - @Test - void shouldAddDokumentTypeToBuilder() { - callService(); - - verify(exportDataBuilder).dokumentType(dokumentType); - } - - private void callService() { - service.addPostfachMailExportData(exportInput, exportDataBuilder); - } - } - - @Nested - class TestGetPostfachMails { - private final PostfachMail postfachMail = PostfachMailTestFactory.create(); - - @Test - void shouldCallPostfachMailServiceGetAll() { - service.getPostfachMails(VorgangHeaderTestFactory.ID); - - verify(postfachMailService).getAll(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldReturnPostfachMails() { - when(postfachMailService.getAll(VorgangHeaderTestFactory.ID)).thenReturn(Stream.of(postfachMail)); - - var postfachMails = service.getPostfachMails(VorgangHeaderTestFactory.ID); - - assertThat(postfachMails).containsExactly(postfachMail); - } - } - - @Nested - class TestBuildDokumentType { - private final PostfachMailExportInput exportInput = PostfachMailExportInputTestFactory.create(); - private final PostfachMail postfachMail = PostfachMailExportInputTestFactory.POSTFACH_MAIL; - private final List<OzgFile> attachments = PostfachMailExportInputTestFactory.ATTACHMENTS; - private final UserProfile userProfile = UserProfileTestFactory.create(); - - private MockedStatic<DokumentTypeBuilder> dokumentTypeBuilderMockedStatic; - @Mock - private DokumentTypeBuilder dokumentTypeBuilder; - - @BeforeEach - void setUp() { - dokumentTypeBuilderMockedStatic = mockStatic(DokumentTypeBuilder.class); - dokumentTypeBuilderMockedStatic.when(DokumentTypeBuilder::builder).thenReturn(dokumentTypeBuilder); - - when(dokumentTypeBuilder.withPostfachMail(postfachMail)).thenReturn(dokumentTypeBuilder); - when(dokumentTypeBuilder.withOzgFiles(attachments)).thenReturn(dokumentTypeBuilder); - when(dokumentTypeBuilder.withUserProfile(userProfile)).thenReturn(dokumentTypeBuilder); - when(dokumentTypeBuilder.withOrganisationseinheitenId(PostfachMailExportInputTestFactory.ORGANISATIONSEINHEITEN_ID)) - .thenReturn(dokumentTypeBuilder); - doReturn(Optional.of(userProfile)).when(service).getUserProfile(postfachMail); - } - - @AfterEach - void tearDown() { - dokumentTypeBuilderMockedStatic.close(); - } - - @Test - void shouldCallBuilder() { - callService(); - - dokumentTypeBuilderMockedStatic.verify(() -> DokumentTypeBuilder.builder()); - } - - @Test - void shouldCallGetUserProfile() { - callService(); - - verify(service).getUserProfile(postfachMail); - } - - @Test - void shouldBuildWithPostfachMail() { - callService(); - - verify(dokumentTypeBuilder).withPostfachMail(postfachMail); - } - - @Test - void shouldBuildWithOzgFiles() { - callService(); - - verify(dokumentTypeBuilder).withOzgFiles(attachments); - } - - @Test - void shouldBuildWithUserProfile() { - callService(); - - verify(dokumentTypeBuilder).withUserProfile(userProfile); - } - - @Test - void shouldBuildWithOrganisationseinheitenId() { - callService(); - - verify(dokumentTypeBuilder).withOrganisationseinheitenId(PostfachMailExportInputTestFactory.ORGANISATIONSEINHEITEN_ID); - } - - @Test - void shouldBuild() { - callService(); - - verify(dokumentTypeBuilder).build(); - } - - @Test - void shouldReturnBuiltDokumentType() { - var expectedDokumentType = DokumentTypeTestFactory.create(); - when(dokumentTypeBuilder.build()).thenReturn(expectedDokumentType); - - var resultDokumentType = callService(); - - assertThat(resultDokumentType).isEqualTo(expectedDokumentType); - } - - private DokumentType callService() { - return service.buildDokumentType(exportInput); - } - } - - @Nested - class TestGetAttachments { - private final PostfachMail postfachMail = PostfachMailTestFactory.create(); - private final List<FileId> fileIds = List.of(BinaryFileTestFactory.FILE_ID); - - @Test - void shouldCallBinaryFileServiceGetFile() { - service.getAttachments(postfachMail); - - verify(binaryFileService).getFiles(fileIds); - } - - @Test - void shouldReturnGottenOzgFiles() { - var expectedOzgFile = OzgFileTestFactory.create(); - when(binaryFileService.getFiles(fileIds)).thenReturn(Stream.of(expectedOzgFile)); - - var resultOzgFiles = service.getAttachments(postfachMail); - - assertThat(resultOzgFiles).containsExactly(expectedOzgFile); - } - } - - @Nested - class TestGetUserProfile { - @Nested - class TestWithNullUserId { - @Test - void shouldReturnEmptyOptional() { - var postfachMail = PostfachMailTestFactory.createBuilder().createdBy(null).build(); - - var userProfile = callService(postfachMail); - - assertThat(userProfile).isEmpty(); - } - } - - @Nested - class TestWithValidUserId { - private PostfachMail postfachMail = PostfachMailTestFactory.create(); - private UserProfile expectedUserProfile = UserProfileTestFactory.create(); - - @BeforeEach - void mockUserService() { - when(userService.getById(postfachMail.getCreatedBy())).thenReturn(expectedUserProfile); - } - - @Test - void shouldCallUserServiceGetbyId() { - callService(postfachMail); - - verify(userService).getById(PostfachMailTestFactory.CREATED_BY); - } - - @Test - void shouldReturnOptionalOfUserProfile() { - var userProfile = callService(postfachMail); - - assertThat(userProfile).contains(expectedUserProfile); - } - - } - - private Optional<UserProfile> callService(PostfachMail postfachMail) { - return service.getUserProfile(postfachMail); - } - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailExportDataTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailExportDataTestFactory.java deleted file mode 100644 index 8e121779722428e9a71a6022d62304e0f841b49f..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailExportDataTestFactory.java +++ /dev/null @@ -1,23 +0,0 @@ -package de.ozgcloud.alfa.postfach; - -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.export.DokumentTypeTestFactory; -import de.ozgcloud.alfa.postfach.PostfachMailExportData.PostfachMailExportDataBuilder; -import de.xoev.xdomea.DokumentType; - -public class PostfachMailExportDataTestFactory { - - public static final DokumentType DOKUMENT_TYPE = DokumentTypeTestFactory.create(); - public static final OzgFile OZG_FILE = OzgFileTestFactory.createWithUniqueId(); - - public static PostfachMailExportData create() { - return createBuilder().build(); - } - - public static PostfachMailExportDataBuilder createBuilder() { - return PostfachMailExportData.builder() - .dokumentType(DOKUMENT_TYPE) - .attachment(OZG_FILE); - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailExportInputTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailExportInputTestFactory.java deleted file mode 100644 index 7a712bb7fc5552f3816bd86ecaf5c902421dc157..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailExportInputTestFactory.java +++ /dev/null @@ -1,19 +0,0 @@ -package de.ozgcloud.alfa.postfach; - -import java.util.List; - -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.vorgang.ZustaendigeStelleTestFactory; - -public class PostfachMailExportInputTestFactory { - - public final static PostfachMail POSTFACH_MAIL = PostfachMailTestFactory.create(); - public final static String ORGANISATIONSEINHEITEN_ID = ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID; - public final static List<OzgFile> ATTACHMENTS = List.of(OzgFileTestFactory.create()); - - public static PostfachMailExportInput create() { - return new PostfachMailExportInput(POSTFACH_MAIL, ORGANISATIONSEINHEITEN_ID, ATTACHMENTS); - } - -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/AntragsdatenItemTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/AntragsdatenItemTypeTestFactory.java deleted file mode 100644 index 78beaf2e220c513cd516506ea459a848fa4964f3..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/AntragsdatenItemTypeTestFactory.java +++ /dev/null @@ -1,47 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import java.util.List; - -import de.xoev.xdomea.AntragsdatenGroupType; -import de.xoev.xdomea.AntragsdatenItemType; -import de.xoev.xdomea.AntragsdatenMultiValueFieldType; -import de.xoev.xdomea.AntragsdatenSingleValueFieldType; -import de.xoev.xdomea.DatatypeType; - -public class AntragsdatenItemTypeTestFactory { - - public static final String KEY_STRING = "string"; - public static final String KEY_MAP = "map"; - public static final String KEY_COLLECTION = "collection"; - public static final String VALUE_STRING = "value1"; - public static final Integer VALUE_INTEGER = 1; - - public static AntragsdatenSingleValueFieldType createSingleValueField() { - var antragsdatenItemType = new AntragsdatenSingleValueFieldType(); - antragsdatenItemType.setType(DatatypeType.STRING); - antragsdatenItemType.setName(KEY_STRING); - antragsdatenItemType.setValue(VALUE_STRING); - return antragsdatenItemType; - } - - public static AntragsdatenMultiValueFieldType createMultiValueField() { - var antragsdatenItemType = new AntragsdatenMultiValueFieldType(); - antragsdatenItemType.setType(DatatypeType.INTEGER); - antragsdatenItemType.setName(KEY_COLLECTION); - antragsdatenItemType.getValue().add(VALUE_INTEGER); - return antragsdatenItemType; - } - - public static AntragsdatenGroupType createGroup() { - var antragsdatenGroupType = new AntragsdatenGroupType(); - antragsdatenGroupType.setName(KEY_MAP); - - antragsdatenGroupType.getItem().addAll(createAntragsdatenItemTypes()); - - return antragsdatenGroupType; - } - - public static List<AntragsdatenItemType> createAntragsdatenItemTypes() { - return List.of(createMultiValueField(), createSingleValueField()); - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungTypeCreatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungTypeCreatorTest.java deleted file mode 100644 index ce274988405747bdcb4c47960c7b96699db5896d..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungTypeCreatorTest.java +++ /dev/null @@ -1,69 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.xoev.xdomea.AnwendungsspezifischeErweiterungType; -import de.xoev.xdomea.FeldgruppeType; - -class AnwendungsspezifischeErweiterungTypeCreatorTest { - - @Spy - @InjectMocks - private AnwendungsspezifischeErweiterungTypeCreator creator; - - @Mock - private FeldGruppeTypeCreator feldGruppeTypeCreator; - - @Nested - class TestCreate { - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - private final FeldgruppeType feldgruppeType = new FeldgruppeType(); - - @BeforeEach - void init() { - when(feldGruppeTypeCreator.create(vorgang)).thenReturn(feldgruppeType); - } - - @Test - void shouldHaveKennung() { - var anwendungsspezifischeErweiterung = create(); - - assertThat(anwendungsspezifischeErweiterung.getKennung()).isEqualTo(AnwendungsspezifischeErweiterungTypeCreator.KENNUNG); - } - - @Test - void shouldHaveName() { - var anwendungsspezifischeErweiterung = create(); - - assertThat(anwendungsspezifischeErweiterung.getName()).isEqualTo(AnwendungsspezifischeErweiterungTypeCreator.NAME); - } - - @Test - void shouldCallFeldgrupperMapper() { - create(); - - verify(feldGruppeTypeCreator).create(vorgang); - } - - @Test - void shouldHaveFeldGruppe() { - var anwendungsspezifischeErweiterung = create(); - - assertThat(anwendungsspezifischeErweiterung.getFeldgruppe()).hasSize(1).first().isEqualTo(feldgruppeType); - } - - private AnwendungsspezifischeErweiterungType create() { - return creator.create(vorgang); - } - } - -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungTypeTestFactory.java deleted file mode 100644 index c23de6fe41c1d9ff17d9395478793d9830de4280..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungTypeTestFactory.java +++ /dev/null @@ -1,10 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import de.xoev.xdomea.AnwendungsspezifischeErweiterungType; - -public class AnwendungsspezifischeErweiterungTypeTestFactory { - - public static AnwendungsspezifischeErweiterungType create() { - return new AnwendungsspezifischeErweiterungType(); - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungXMLTypeCreatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungXMLTypeCreatorTest.java deleted file mode 100644 index 554dd1f7d98990b064a334d55217db0b40837f73..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungXMLTypeCreatorTest.java +++ /dev/null @@ -1,53 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.xoev.xdomea.Antragsdaten; -import de.xoev.xdomea.AnwendungsspezifischeErweiterungXMLType; - -public class AnwendungsspezifischeErweiterungXMLTypeCreatorTest { - - @Spy - @InjectMocks - private AnwendungsspezifischeErweiterungXMLTypeCreator creator; - @Mock - private FormDataMapper formDataMapper; - - @Nested - class TestCreate { - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - private final Antragsdaten Antragsdaten = new Antragsdaten(); - - @BeforeEach - void init() { - when(formDataMapper.toAntragsdaten(any())).thenReturn(Antragsdaten); - } - - @Test - void shouldCallFormDataMapper() { - create(); - - verify(formDataMapper).toAntragsdaten(vorgang); - } - - @Test - void shouldHaveAntragsdaten() { - var anwendungsspezifischeErweiterung = create(); - - assertThat(anwendungsspezifischeErweiterung.getAny()).hasSize(1).first().isEqualTo(Antragsdaten); - } - - private AnwendungsspezifischeErweiterungXMLType create() { - return creator.create(vorgang); - } - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/DatatypeMapperTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/DatatypeMapperTest.java deleted file mode 100644 index 2fc79e9adf1c6d41b455c8baf7679b1c53435b9b..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/DatatypeMapperTest.java +++ /dev/null @@ -1,89 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import static org.assertj.core.api.Assertions.*; - -import java.time.LocalDate; -import java.time.ZonedDateTime; -import java.util.List; - -import org.apache.commons.lang3.StringUtils; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.NullSource; -import org.junit.jupiter.params.provider.ValueSource; -import org.mockito.InjectMocks; - -import de.xoev.xdomea.DatatypeType; - -class DatatypeMapperTest { - - @InjectMocks - private DatatypeMapper datatypeMapper; - - @DisplayName("should return DatatypeType STRING when") - @ParameterizedTest(name = "\"{0}\"") - @NullSource - @ValueSource(strings = { StringUtils.EMPTY, "a" }) - void shouldReturnString(String arg) { - var datatype = datatypeMapper.from(arg); - - assertThat(datatype).isEqualTo(DatatypeType.STRING); - } - - @Test - void shouldReturnStringAsDefault() { - var datatype = datatypeMapper.from(new Object()); - - assertThat(datatype).isEqualTo(DatatypeType.STRING); - } - - @Test - void shouldReturnDate() { - var datatype = datatypeMapper.from(LocalDate.now()); - - assertThat(datatype).isEqualTo(DatatypeType.DATE); - } - - @Test - void shouldReturnDatetime() { - var datatype = datatypeMapper.from(ZonedDateTime.now()); - - assertThat(datatype).isEqualTo(DatatypeType.DATETIME); - } - - @Test - void shouldReturnInteger() { - var datatype = datatypeMapper.from(1); - - assertThat(datatype).isEqualTo(DatatypeType.INTEGER); - } - - @Test - void shouldReturnFloat() { - var datatype = datatypeMapper.from(1.0f); - - assertThat(datatype).isEqualTo(DatatypeType.FLOAT); - } - - @Test - void shouldReturnBoolean() { - var datatype = datatypeMapper.from(true); - - assertThat(datatype).isEqualTo(DatatypeType.BOOLEAN); - } - - @Test - void shouldReturnTypeOfElementsInCollection() { - var datatype = datatypeMapper.from(List.of(1, 2)); - - assertThat(datatype).isEqualTo(DatatypeType.INTEGER); - } - - @Test - void shouldReturnDefaultIfCollectionIsEmpty() { - var datatype = datatypeMapper.from(new Object[] {}); - - assertThat(datatype).isEqualTo(DatatypeType.STRING); - } -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/ExportFelderTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/ExportFelderTest.java deleted file mode 100644 index ae5c14a26f56bde7b114c41bcf87b62bcf56ae1d..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/ExportFelderTest.java +++ /dev/null @@ -1,51 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; - -import de.xoev.xdomea.FeldType; - -class ExportFelderTest { - - @Nested - class TestCreateFeld { - - private static final FeldType FELD = ExportFelder.LEIKA_ID.createFeld(); - - @Test - void shouldHaveName() { - assertThat(FELD.getName()).isEqualTo(ExportFelder.LEIKA_ID.getName()); - } - - @Test - void shouldHaveBeschreibung() { - assertThat(FELD.getBeschreibung()).isEqualTo(ExportFelder.LEIKA_ID.getBeschreibung()); - } - - @Test - void shouldHaveDatentyp() { - assertThat(FELD.getDatentyp().getCode()).isEqualTo(ExportFelder.LEIKA_ID.getDatentypCode()); - } - - @Test - void shouldNotHaveWert() { - assertThat(FELD.getWert()).isNull(); - } - - @Nested - class MitWert { - - private static final String FELD_WERT = "123"; - - @Test - void shouldHaveWert() { - var feld = ExportFelder.LEIKA_ID.createFeld(FELD_WERT); - - assertThat(feld.getWert()).isEqualTo(FELD_WERT); - } - } - } - -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/ExportVorgangServiceITCase.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/ExportVorgangServiceITCase.java deleted file mode 100644 index 8116403db510a3af998bb644a0f56f2e5e810f7b..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/ExportVorgangServiceITCase.java +++ /dev/null @@ -1,100 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import static de.ozgcloud.alfa.vorgang.AntragsdatenItemTypeTestFactory.*; -import static org.assertj.core.api.Assertions.*; - -import java.util.List; -import java.util.Map; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; - -import de.ozgcloud.common.test.ITCase; -import de.xoev.xdomea.Antragsdaten; -import de.xoev.xdomea.AntragsdatenGroupType; -import de.xoev.xdomea.AntragsdatenItemType; -import de.xoev.xdomea.AntragsdatenSingleValueFieldType; - -@ITCase -class ExportVorgangServiceITCase { - - @Autowired - private ExportVorgangService exportVorgangService; - - @Nested - class TestMapVorgang { - - @Nested - class TestMapAntragsdaten { - - private static final Map<String, Object> FORM_DATA = Map.of( - KEY_STRING, VALUE_STRING - - ); - - private static final Map<String, Object> OTHER_DATA = Map.of( - KEY_MAP, Map.of(KEY_COLLECTION, List.of(VALUE_INTEGER)) - ); - - @Test - void shouldContainSingleAntragsdatenElement() { - var vorgangType = exportVorgangService.createVorgangType(VorgangWithEingangTestFactory.create()); - - assertThat(vorgangType.getAnwendungsspezifischeErweiterungXML().getAny()).hasSize(1).first().isInstanceOf(Antragsdaten.class); - } - - @Test - void shouldMapSingleField() { - var antragsdaten = mapToAntragsdaten(); - - assertThat(antragsdaten.getItem()).hasSize(2); - assertContainsSingleValueField(antragsdaten.getItem()); - } - - private void assertContainsSingleValueField(List<AntragsdatenItemType> items) { - var singleValueField = items.stream().filter(item -> item instanceof AntragsdatenSingleValueFieldType).findFirst(); - assertThat(singleValueField).isPresent().get().usingRecursiveComparison().isEqualTo(createSingleValueField()); - } - - @Test - void shouldMapGroup() { - var antragsdaten = mapToAntragsdaten(); - - assertThat(antragsdaten.getItem()).hasSize(2); - assertContainsGroup(antragsdaten.getItem()); - } - - private void assertContainsGroup(List<AntragsdatenItemType> items) { - var group = items.stream().filter(item -> item instanceof AntragsdatenGroupType).findFirst(); - assertThat(group).isPresent().get().extracting(AntragsdatenItemType::getName).isEqualTo(KEY_MAP); - } - - @Test - void shouldMapItemsInGroup() { - var antragsdaten = mapToAntragsdaten(); - - assertThat(antragsdaten.getItem()).hasSize(2); - assertContainsItemsInGroup(antragsdaten.getItem()); - } - - private void assertContainsItemsInGroup(List<AntragsdatenItemType> items) { - var groupItem = items.stream().filter(item -> item instanceof AntragsdatenGroupType) - .map(item -> ((AntragsdatenGroupType) item)) - .map(AntragsdatenGroupType::getItem) - .flatMap(List::stream).findFirst(); - assertThat(groupItem).isPresent().get().usingRecursiveComparison().isEqualTo(createMultiValueField()); - - } - - private Antragsdaten mapToAntragsdaten() { - var eingang = EingangTestFactory.createBuilder().formData(FORM_DATA) - .antragsteller(AntragstellerTestFactory.createBuilder().otherData(OTHER_DATA).build()) - .build(); - var vorgangWithEingang = VorgangWithEingangTestFactory.createBuilder().eingang(eingang).build(); - var vorgangType = exportVorgangService.createVorgangType(vorgangWithEingang); - return (Antragsdaten) vorgangType.getAnwendungsspezifischeErweiterungXML().getAny().get(0); - } - } - } -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/ExportVorgangServiceTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/ExportVorgangServiceTest.java deleted file mode 100644 index 4bf5f5eaf384761f16046c10c23662a344ecabf8..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/ExportVorgangServiceTest.java +++ /dev/null @@ -1,115 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.export.AllgemeineMetadatenTypeTestFactory; -import de.ozgcloud.alfa.export.IdentifikationObjektTypeTestFactory; - -public class ExportVorgangServiceTest { - - private final static String VORGANG_ID = "DUMMY_ID"; - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - @Spy - @InjectMocks - private ExportVorgangService exportVorgangService; - - @Mock - private VorgangService vorgangService; - - @Nested - class TestGetVorgang { - - @BeforeEach - void init() { - when(vorgangService.findVorgangWithEingang(VORGANG_ID)).thenReturn(vorgang); - } - - @Test - void shouldCallVorgangService() { - exportVorgangService.getVorgang(VORGANG_ID); - - verify(vorgangService).findVorgangWithEingang(VORGANG_ID); - } - - @Test - void shouldReturnVorgangWithEingang() { - assertThat(exportVorgangService.getVorgang(VORGANG_ID)).isEqualTo(vorgang); - } - } - - @Nested - class TestCreateAkteType { - - @Test - void shouldCallCreateIdentifikationObjektType() { - exportVorgangService.createAkteType(vorgang); - - verify(exportVorgangService).createIdentifikationObjektType(); - } - - @Test - void shouldSetIdentifikationObjektType() { - var identifikationObjektType = IdentifikationObjektTypeTestFactory.create(); - doReturn(identifikationObjektType).when(exportVorgangService).createIdentifikationObjektType(); - - var akteType = exportVorgangService.createAkteType(vorgang); - - assertThat(akteType.getIdentifikation()).isEqualTo(identifikationObjektType); - } - - @Test - void shouldCallCreateAllgemeineMetadatenType() { - exportVorgangService.createAkteType(vorgang); - - verify(exportVorgangService).createAllgemeineMetadatenType(vorgang); - } - - @Test - void shouldSetAllgemeineMetadatenType() { - var allgemeineMetadatenType = AllgemeineMetadatenTypeTestFactory.create(); - doReturn(allgemeineMetadatenType).when(exportVorgangService).createAllgemeineMetadatenType(vorgang); - - var akteType = exportVorgangService.createAkteType(vorgang); - - assertThat(akteType.getAllgemeineMetadaten()).isEqualTo(allgemeineMetadatenType); - } - } - - @Nested - class TestCreateIdentifikationObjektType { - - @Test - void shouldSetID() { - var identifikationObjektType = exportVorgangService.createIdentifikationObjektType(); - - assertThat(identifikationObjektType.getID()).isNotBlank(); - } - } - - @Nested - class TestCreateAllgemeineMetadatenType { - - @Test - void shouldSetKennzeichen() { - var allgemeineMetadatenType = exportVorgangService.createAllgemeineMetadatenType(vorgang); - - assertThat(allgemeineMetadatenType.getKennzeichen()).isEqualTo(VorgangHeaderTestFactory.AKTENZEICHEN); - } - - @Test - void shouldSetEmptyKennzeichen() { - var akteType = exportVorgangService.createAkteType(VorgangWithEingangTestFactory.createBuilder().aktenzeichen(null).build()); - - assertThat(akteType.getAllgemeineMetadaten().getKennzeichen()).isEmpty(); - } - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FeldGruppeTypeCreatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FeldGruppeTypeCreatorTest.java deleted file mode 100644 index a78cd333af20803b76a8324e731eba5d760b4e8c..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FeldGruppeTypeCreatorTest.java +++ /dev/null @@ -1,526 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.DatentypCode; -import de.xoev.xdomea.DatentypCodeType; -import de.xoev.xdomea.FeldType; - -class FeldGruppeTypeCreatorTest { - - @Spy - private FeldGruppeTypeCreator creator; - - @Nested - class TestCreate { - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - @Test - void shouldHaveName() { - var created = creator.create(vorgang); - - assertThat(created.getName()).isEqualTo("FeldgruppeOZGCloudBasis"); - } - - @Test - void shouldHaveBeschreibung() { - var created = creator.create(vorgang); - - assertThat(created.getBeschreibung()).isEqualTo("Feldgruppe für OZGCloud Basis"); - } - - @Test - void shouldCreateFeldType() { - creator.create(vorgang); - - verify(creator).createFeldType(vorgang); - } - } - - @Nested - class TestCreateFeldType { - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - @DisplayName("LeikaId") - @Nested - class TestLeikaId { - - @Test - void shouldHaveName() { - var created = create(); - - assertThat(created).extracting(FeldType::getName).isEqualTo("LeikaID"); - } - - @Test - void shouldHaveBeschreibung() { - var created = create(); - - assertThat(created).extracting(FeldType::getBeschreibung).isEqualTo("ID einer Leistung aus dem OZG-Leistungskatalog"); - } - - @Test - void shouldHaveWert() { - var created = create(); - - assertThat(created).extracting(FeldType::getWert).isNull(); - } - - @DisplayName("DatentypCode") - @Nested - class TestDatentypCode { - - @Test - void shouldHaveCode() { - var created = create(); - - assertThat(created).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getCode) - .isEqualTo(DatentypCode.STRING.getCode()); - } - - @Test - void shouldHaveListURI() { - var created = create(); - - assertThat(created).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getListURI) - .isEqualTo("urn:xoev-de:xdomea:codeliste:datentyp"); - } - - @Test - void shouldHaveListVersionID() { - var created = create(); - - assertThat(created).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getListVersionID).isEqualTo("1.1"); - } - - } - - private FeldType create() { - return creator.createFeldType(vorgang).stream() - .filter(feldType -> feldType.getName().equals(ExportFelder.LEIKA_ID.getName())) - .toList().get(0); - } - } - - @DisplayName("Datum Antragseingang") - @Nested - class TestDatumAntragseingang { - - @Test - void shouldHaveName() { - var created = create(); - - assertThat(created).extracting(FeldType::getName).isEqualTo("DatumAntragseingang"); - } - - @Test - void shouldHaveBeschreibung() { - var created = create(); - - assertThat(created).extracting(FeldType::getBeschreibung).isEqualTo("Das Datum des Antragseingangs"); - } - - @Test - void shouldHaveWert() { - var created = create(); - - assertThat(created).extracting(FeldType::getWert).isEqualTo(VorgangHeaderTestFactory.CREATED_AT_STR); - } - - @DisplayName("DatentypCode") - @Nested - class TestDatentypCode { - - @Test - void shouldHaveCode() { - var created = create(); - - assertThat(created).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getCode) - .isEqualTo(DatentypCode.DATE.getCode()); - } - - @Test - void shouldHaveListURI() { - var created = create(); - - assertThat(created).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getListURI) - .isEqualTo("urn:xoev-de:xdomea:codeliste:datentyp"); - } - - @Test - void shouldHaveListVersionID() { - var created = create(); - - assertThat(created).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getListVersionID).isEqualTo("1.1"); - } - - } - - private FeldType create() { - return creator.createFeldType(vorgang).stream() - .filter(feldType -> feldType.getName().equals(ExportFelder.DATUM_ANTRAGSEINGANG.getName())) - .toList().get(0); - } - } - - @DisplayName("Name") - @Nested - class TestName { - - @Test - void shouldHaveName() { - var created = create(vorgang); - - assertThat(created).extracting(FeldType::getName).isEqualTo("Name"); - } - - @Test - void shouldNotHaveBeschreibung() { - var created = create(vorgang); - - assertThat(created).extracting(FeldType::getBeschreibung).isNull(); - } - - @Test - void shouldHaveWert() { - var created = create(vorgang); - - assertThat(created).extracting(FeldType::getWert).isEqualTo(AntragstellerTestFactory.NACHNAME); - } - - @Test - void shouldBeEmptyStringForNullEingang() { - var created = create(VorgangWithEingangTestFactory.createBuilder().eingang(null).build()); - - assertThat(created.getWert()).isEmpty(); - } - - @Test - void shouldBeEmptyStringForNullAntragsteller() { - var created = create( - VorgangWithEingangTestFactory.createBuilder().eingang(EingangTestFactory.createBuilder().antragsteller(null).build()) - .build()); - - assertThat(created.getWert()).isEmpty(); - } - - @Test - void shouldBeEmptyStringForNullNachname() { - var created = create( - VorgangWithEingangTestFactory.createBuilder().eingang( - EingangTestFactory.createBuilder().antragsteller(AntragstellerTestFactory.createBuilder().nachname(null).build()) - .build()) - .build()); - - assertThat(created.getWert()).isEmpty(); - } - - @DisplayName("DatentypCode") - @Nested - class TestDatentypCode { - - @Test - void shouldHaveCode() { - var created = create(vorgang); - - assertThat(created).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getCode) - .isEqualTo(DatentypCode.STRING.getCode()); - } - - @Test - void shouldHaveListURI() { - var created = create(vorgang); - - assertThat(created).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getListURI) - .isEqualTo("urn:xoev-de:xdomea:codeliste:datentyp"); - } - - @Test - void shouldHaveListVersionID() { - var created = create(vorgang); - - assertThat(created).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getListVersionID).isEqualTo("1.1"); - } - - } - - private FeldType create(VorgangWithEingang vorgang) { - return creator.createFeldType(vorgang).stream() - .filter(feldType -> feldType.getName().equals(ExportFelder.NAME.getName())) - .toList().get(0); - } - } - - @DisplayName("Vorname") - @Nested - class TestVorname { - - @Test - void shouldHaveName() { - var created = create(vorgang); - - assertThat(created).extracting(FeldType::getName).isEqualTo("Vorname"); - } - - @Test - void shouldHaveNotHaveBeschreibung() { - var created = create(vorgang); - - assertThat(created).extracting(FeldType::getBeschreibung).isNull(); - } - - @Test - void shouldHaveWert() { - var created = create(vorgang); - - assertThat(created).extracting(FeldType::getWert).isEqualTo(AntragstellerTestFactory.VORNAME); - } - - @Test - void shouldBeEmptyStringForNullEingang() { - var created = create(VorgangWithEingangTestFactory.createBuilder().eingang(null).build()); - - assertThat(created.getWert()).isEmpty(); - } - - @Test - void shouldBeEmptyStringForNullAntragsteller() { - var created = create( - VorgangWithEingangTestFactory.createBuilder().eingang(EingangTestFactory.createBuilder().antragsteller(null).build()) - .build()); - - assertThat(created.getWert()).isEmpty(); - } - - @Test - void shouldBeEmptyStringForNullVorname() { - var created = create( - VorgangWithEingangTestFactory.createBuilder().eingang( - EingangTestFactory.createBuilder().antragsteller(AntragstellerTestFactory.createBuilder().vorname(null).build()) - .build()) - .build()); - - assertThat(created.getWert()).isEmpty(); - } - - @DisplayName("DatentypCode") - @Nested - class TestDatentypCode { - - @Test - void shouldHaveCode() { - var created = create(vorgang); - - assertThat(created).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getCode) - .isEqualTo(DatentypCode.STRING.getCode()); - } - - @Test - void shouldHaveListURI() { - var created = create(vorgang); - - assertThat(created).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getListURI) - .isEqualTo("urn:xoev-de:xdomea:codeliste:datentyp"); - } - - @Test - void shouldHaveListVersionID() { - var created = create(vorgang); - - assertThat(created).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getListVersionID).isEqualTo("1.1"); - } - - } - - private FeldType create(VorgangWithEingang vorgang) { - return creator.createFeldType(vorgang).stream() - .filter(feldType -> feldType.getName().equals(ExportFelder.VORNAME.getName())) - .toList().get(0); - } - } - - @DisplayName("Geburtsdatum") - @Nested - class TestGeburtsdatum { - - @Test - void shouldHaveName() { - var created = create(vorgang); - - assertThat(created).extracting(FeldType::getName).isEqualTo("Geburtsdatum"); - } - - @Test - void shouldHaveNotHaveBeschreibung() { - var created = create(vorgang); - - assertThat(created).extracting(FeldType::getBeschreibung).isNull(); - } - - @Test - void shouldHaveWert() { - var created = create(vorgang); - - assertThat(created).extracting(FeldType::getWert).isEqualTo(AntragstellerTestFactory.GEBURTSDATUM_STR); - } - - @Test - void shouldBeEmptyStringForNullEingang() { - var created = create(VorgangWithEingangTestFactory.createBuilder().eingang(null).build()); - - assertThat(created.getWert()).isEmpty(); - } - - @Test - void shouldBeEmptyStringForNullAntragsteller() { - var created = create( - VorgangWithEingangTestFactory.createBuilder().eingang(EingangTestFactory.createBuilder().antragsteller(null).build()) - .build()); - - assertThat(created.getWert()).isEmpty(); - } - - @Test - void shouldBeEmptyStringForNullGeburtsdatum() { - var created = create( - VorgangWithEingangTestFactory.createBuilder().eingang( - EingangTestFactory.createBuilder().antragsteller(AntragstellerTestFactory.createBuilder().geburtsdatum(null).build()) - .build()) - .build()); - - assertThat(created.getWert()).isEmpty(); - } - - @DisplayName("DatentypCode") - @Nested - class TestDatentypCode { - - @Test - void shouldHaveCode() { - var created = create(vorgang); - - assertThat(created).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getCode) - .isEqualTo(DatentypCode.DATE.getCode()); - } - - @Test - void shouldHaveListURI() { - var created = create(vorgang); - - assertThat(created).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getListURI) - .isEqualTo("urn:xoev-de:xdomea:codeliste:datentyp"); - } - - @Test - void shouldHaveListVersionID() { - var created = create(vorgang); - - assertThat(created).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getListVersionID).isEqualTo("1.1"); - } - - } - - private FeldType create(VorgangWithEingang vorgang) { - return creator.createFeldType(vorgang).stream() - .filter(feldType -> feldType.getName().equals(ExportFelder.GEBURTSDATUM.getName())) - .toList().get(0); - } - } - - @DisplayName("Plz") - @Nested - class TestPlz { - - @Test - void shouldHaveName() { - var created = create(vorgang); - - assertThat(created).extracting(FeldType::getName).isEqualTo("PLZAntragsteller"); - } - - @Test - void shouldHaveNotHaveBeschreibung() { - var created = create(vorgang); - - assertThat(created).extracting(FeldType::getBeschreibung).isNull(); - } - - @Test - void shouldHaveWert() { - var created = create(vorgang); - - assertThat(created).extracting(FeldType::getWert).isEqualTo(AntragstellerTestFactory.PLZ); - } - - @Test - void shouldBeEmptyStringForNullEingang() { - var created = create(VorgangWithEingangTestFactory.createBuilder().eingang(null).build()); - - assertThat(created.getWert()).isEmpty(); - } - - @Test - void shouldBeEmptyStringForNullAntragsteller() { - var created = create( - VorgangWithEingangTestFactory.createBuilder().eingang(EingangTestFactory.createBuilder().antragsteller(null).build()) - .build()); - - assertThat(created.getWert()).isEmpty(); - } - - @Test - void shouldBeEmptyStringForNullPlz() { - var created = create( - VorgangWithEingangTestFactory.createBuilder().eingang( - EingangTestFactory.createBuilder().antragsteller(AntragstellerTestFactory.createBuilder().plz(null).build()) - .build()) - .build()); - - assertThat(created.getWert()).isEmpty(); - } - - @DisplayName("DatentypCode") - @Nested - class TestDatentypCode { - - @Test - void shouldHaveCode() { - var created = create(vorgang); - - assertThat(created).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getCode) - .isEqualTo(DatentypCode.STRING.getCode()); - } - - @Test - void shouldHaveListURI() { - var created = create(vorgang); - - assertThat(created).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getListURI) - .isEqualTo("urn:xoev-de:xdomea:codeliste:datentyp"); - } - - @Test - void shouldHaveListVersionID() { - var created = create(vorgang); - - assertThat(created).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getListVersionID).isEqualTo("1.1"); - } - - } - - private FeldType create(VorgangWithEingang vorgang) { - return creator.createFeldType(vorgang).stream() - .filter(feldType -> feldType.getName().equals(ExportFelder.PLZ.getName())) - .toList().get(0); - } - } - } -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FormDataMapperTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FormDataMapperTest.java deleted file mode 100644 index 637eabe623a23b20161a6acf1cd103839c1bb3f1..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FormDataMapperTest.java +++ /dev/null @@ -1,468 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.time.ZonedDateTime; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.NullAndEmptySource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.DateConverter; -import de.xoev.xdomea.AntragsdatenFieldType; -import de.xoev.xdomea.AntragsdatenGroupType; -import de.xoev.xdomea.AntragsdatenItemType; -import de.xoev.xdomea.AntragsdatenMultiValueFieldType; -import de.xoev.xdomea.AntragsdatenSingleValueFieldType; -import de.xoev.xdomea.DatatypeType; - -class FormDataMapperTest { - - @Spy - @InjectMocks - private FormDataMapper formDataMapper; - - @Mock - private DatatypeMapper datatypeMapper; - - @Nested - class TestToAntragsdaten { - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - private final List<AntragsdatenFieldType> formDataItems = List.of(AntragsdatenItemTypeTestFactory.createSingleValueField(), - AntragsdatenItemTypeTestFactory.createSingleValueField()); - private final List<AntragsdatenFieldType> otherDataItems = List.of(AntragsdatenItemTypeTestFactory.createMultiValueField()); - - @Test - void shouldMapFormData() { - mockMapDataMethodsToReturnNotEmptyResults(); - - formDataMapper.toAntragsdaten(vorgang); - - verify(formDataMapper).mapFormData(vorgang); - } - - @Test - void shouldMapOtherData() { - mockMapDataMethodsToReturnNotEmptyResults(); - - formDataMapper.toAntragsdaten(vorgang); - - verify(formDataMapper).mapOtherData(vorgang); - } - - @Test - void shouldSetItemToEmptyListIfNoDataWasMapped() { - mockMapDataMethodsToReturnEmptyResults(); - - var antragsdaten = formDataMapper.toAntragsdaten(vorgang); - - assertThat(antragsdaten.getItem()).isEmpty(); - } - - @Test - void shouldAddMappedFormDataToAntragsdaten() { - mockMapDataMethodsToReturnNotEmptyResults(); - - var antragsdaten = formDataMapper.toAntragsdaten(vorgang); - - assertThat(antragsdaten.getItem()).containsAll(formDataItems); - } - - @Test - void shouldAddMappedOtherDataToAntragsdaten() { - mockMapDataMethodsToReturnNotEmptyResults(); - - var antragsdaten = formDataMapper.toAntragsdaten(vorgang); - - assertThat(antragsdaten.getItem()).containsAll(otherDataItems); - } - - private void mockMapDataMethodsToReturnNotEmptyResults() { - doReturn(formDataItems).when(formDataMapper).mapFormData(vorgang); - doReturn(otherDataItems).when(formDataMapper).mapOtherData(vorgang); - } - - private void mockMapDataMethodsToReturnEmptyResults() { - doReturn(List.of()).when(formDataMapper).mapFormData(vorgang); - doReturn(List.of()).when(formDataMapper).mapOtherData(vorgang); - } - } - - @Nested - class TestMapFormData { - - private VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - private final List<AntragsdatenFieldType> mapDataResult = List.of(AntragsdatenItemTypeTestFactory.createSingleValueField(), - AntragsdatenItemTypeTestFactory.createSingleValueField()); - - @Test - void shouldReturnEmptyOnNullEingang() { - vorgang = VorgangWithEingangTestFactory.createBuilder().eingang(null).build(); - - var antragsdatenItemTypes = formDataMapper.mapFormData(vorgang); - - assertThat(antragsdatenItemTypes).isEmpty(); - } - - @ParameterizedTest - @NullAndEmptySource - void shouldReturnEmptyOnMissingFormData(Map<String, Object> formData) { - vorgang = VorgangWithEingangTestFactory.createBuilder() - .eingang(EingangTestFactory.createBuilder().formData(formData).build()) - .build(); - - var antragsdatenItemTypes = formDataMapper.mapFormData(vorgang); - - assertThat(antragsdatenItemTypes).isEmpty(); - } - - @Test - void shouldMapData() { - doReturn(List.of()).when(formDataMapper).mapData(EingangTestFactory.AS_MAP); - - formDataMapper.mapFormData(vorgang); - - verify(formDataMapper).mapData(EingangTestFactory.AS_MAP); - } - - @Test - void shouldReturnMappedData() { - doReturn(mapDataResult).when(formDataMapper).mapData(vorgang.getEingang().getFormData()); - - var antragsdatenItemTypes = formDataMapper.mapFormData(vorgang); - - assertThat(antragsdatenItemTypes).containsExactlyElementsOf(mapDataResult); - } - } - - @Nested - class TestMapOtherData { - - private VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - private final List<AntragsdatenFieldType> mapDataResult = List.of(AntragsdatenItemTypeTestFactory.createSingleValueField(), - AntragsdatenItemTypeTestFactory.createSingleValueField()); - - @Test - void shouldReturnEmptyOnNullEingang() { - vorgang = VorgangWithEingangTestFactory.createBuilder().eingang(null).build(); - - var antragsdatenItemTypes = formDataMapper.mapOtherData(vorgang); - - assertThat(antragsdatenItemTypes).isEmpty(); - } - - @Test - void shouldReturnEmptyOnNullAntragsteller() { - vorgang = VorgangWithEingangTestFactory.createBuilder() - .eingang(EingangTestFactory.createBuilder().antragsteller(null).build()) - .build(); - - var antragsdatenItemTypes = formDataMapper.mapOtherData(vorgang); - - assertThat(antragsdatenItemTypes).isEmpty(); - } - - @ParameterizedTest - @NullAndEmptySource - void shouldReturnEmptyOnMissingOtherData(Map<String, Object> otherData) { - vorgang = VorgangWithEingangTestFactory.createBuilder() - .eingang(EingangTestFactory.createBuilder() - .antragsteller(AntragstellerTestFactory.createBuilder() - .otherData(otherData) - .build()) - .build()) - .build(); - - var antragsdatenItemTypes = formDataMapper.mapOtherData(vorgang); - - assertThat(antragsdatenItemTypes).isEmpty(); - } - - @Test - void shouldMapData() { - doReturn(List.of()).when(formDataMapper).mapData(AntragstellerTestFactory.OTHER_DATA); - - formDataMapper.mapOtherData(vorgang); - - verify(formDataMapper).mapData(AntragstellerTestFactory.OTHER_DATA); - } - - @Test - void shouldReturnMappedData() { - doReturn(mapDataResult).when(formDataMapper).mapData(AntragstellerTestFactory.OTHER_DATA); - - var antragsdatenItemTypes = formDataMapper.mapOtherData(vorgang); - - assertThat(antragsdatenItemTypes).containsExactlyElementsOf(mapDataResult); - } - } - - @Nested - class TestMapData { - - private final Map<String, Object> originalData = Map.of("orig-key1", "orig-value1", "orig-key2", "orig-value2"); - private final Map<String, Object> extractedData = Map.of("ext-key1", "ext-value1", "ext-key2", "ext-value2"); - private final List<AntragsdatenFieldType> mapDataResult = List.of(AntragsdatenItemTypeTestFactory.createSingleValueField(), - AntragsdatenItemTypeTestFactory.createSingleValueField()); - private MockedStatic<WrappedValueExtractor> wrappedValueExtractor; - - @BeforeEach - void init() { - wrappedValueExtractor = mockStatic(WrappedValueExtractor.class); - wrappedValueExtractor.when(() -> WrappedValueExtractor.extractWrappedValues(originalData)).thenReturn(extractedData); - doReturn(mapDataResult).when(formDataMapper).buildItems(extractedData); - } - - @AfterEach - void cleanup() { - wrappedValueExtractor.close(); - } - - @Test - void shouldCallWrappedValueExtractor() { - formDataMapper.mapData(originalData); - - wrappedValueExtractor.verify(() -> WrappedValueExtractor.extractWrappedValues(originalData)); - } - - @Test - void shouldCallBuildItemsWithExtractedData() { - formDataMapper.mapData(originalData); - - verify(formDataMapper).buildItems(extractedData); - } - - @Test - void shouldReturnBuildItemsResult() { - var mappedData = formDataMapper.mapData(originalData); - - assertThat(mappedData).isEqualTo(mapDataResult); - } - } - - @Nested - class TestBuildItems { - - private static final String FORMDATA_KEY = "key1"; - private static final String SINGLE_VALUE = "value"; - private static final List<Object> COLLECTION_OF_VALUES = List.of("value"); - private static final Map<String, Object> FORMDATA_SUBMAP = Map.of("key2", "value"); - - @Mock - private AntragsdatenItemType expectedAntragsdatenItem; - - @Test - void shouldReturnEmptyList() { - var items = formDataMapper.buildItems(Collections.emptyMap()); - - assertThat(items).isEmpty(); - } - - @Test - void shoulAddSubmap() { - doReturn(expectedAntragsdatenItem).when(formDataMapper).buildAntragsdatenGroup(FORMDATA_KEY, FORMDATA_SUBMAP); - - var items = formDataMapper.buildItems(Map.of(FORMDATA_KEY, FORMDATA_SUBMAP)); - - assertThat(items).hasSize(1).first().isEqualTo(expectedAntragsdatenItem); - } - - @Test - void shouldAddCollection() { - doReturn(expectedAntragsdatenItem).when(formDataMapper).buildMultiValueField(FORMDATA_KEY, COLLECTION_OF_VALUES); - - var items = formDataMapper.buildItems(Map.of(FORMDATA_KEY, COLLECTION_OF_VALUES)); - - assertThat(items).hasSize(1).first().isEqualTo(expectedAntragsdatenItem); - } - - @Test - void shouldAddSingleValue() { - doReturn(expectedAntragsdatenItem).when(formDataMapper).buildSingleValueField(FORMDATA_KEY, SINGLE_VALUE); - - var items = formDataMapper.buildItems(Map.of(FORMDATA_KEY, SINGLE_VALUE)); - - assertThat(items).hasSize(1).first().isEqualTo(expectedAntragsdatenItem); - } - } - - @Nested - class TestBuildAntragsdatenGroup { - - private static final String NAME = "name"; - private static final String FORMDATA_SUBMAP_VALUE = "value"; - private static final Map<String, Object> FORMDATA_SUBMAP = Map.of("key", FORMDATA_SUBMAP_VALUE); - private final List<AntragsdatenItemType> items = AntragsdatenItemTypeTestFactory.createAntragsdatenItemTypes(); - - @Test - void shouldSetName() { - mockFormatValue(); - - var antragsdatenGroup = formDataMapper.buildAntragsdatenGroup(NAME, FORMDATA_SUBMAP); - - assertThat(antragsdatenGroup.getName()).isEqualTo(NAME); - } - - @Test - void shouldSetItems() { - doReturn(items).when(formDataMapper).buildItems(FORMDATA_SUBMAP); - - var antragsdatenGroup = (AntragsdatenGroupType) formDataMapper.buildAntragsdatenGroup(NAME, FORMDATA_SUBMAP); - - assertThat(antragsdatenGroup.getItem()).containsExactlyElementsOf(items); - } - - @Test - void shouldCallBuildItems() { - mockFormatValue(); - - formDataMapper.buildAntragsdatenGroup(NAME, FORMDATA_SUBMAP); - - verify(formDataMapper).buildItems(FORMDATA_SUBMAP); - } - - private void mockFormatValue() { - when(datatypeMapper.from(FORMDATA_SUBMAP_VALUE)).thenReturn(DatatypeType.STRING); - doReturn(new Object()).when(formDataMapper).formatValue(DatatypeType.STRING, FORMDATA_SUBMAP_VALUE); - } - } - - @Nested - class TestBuildMultiValueField { - - private static final String NAME = "name"; - private static final List<String> FORMDATA_COLLECTION = List.of("value1"); - - @Test - void shouldSetName() { - when(datatypeMapper.from(FORMDATA_COLLECTION)).thenReturn(DatatypeType.STRING); - - var antragsdatenMultiValueFieldType = formDataMapper.buildMultiValueField(NAME, FORMDATA_COLLECTION); - - assertThat(antragsdatenMultiValueFieldType.getName()).isEqualTo(NAME); - } - - @Test - void shouldSetType() { - when(datatypeMapper.from(FORMDATA_COLLECTION)).thenReturn(DatatypeType.STRING); - - var antragsdatenMultiValueFieldType = (AntragsdatenFieldType) formDataMapper.buildMultiValueField(NAME, FORMDATA_COLLECTION); - - assertThat(antragsdatenMultiValueFieldType.getType()).isEqualTo(DatatypeType.STRING); - } - - @Test - void shouldSetValue() { - var formData = List.of(1, 2); - when(datatypeMapper.from(formData)).thenReturn(DatatypeType.INTEGER); - - var antragsdatenMultiValueFieldType = (AntragsdatenMultiValueFieldType) formDataMapper.buildMultiValueField(NAME, formData); - - assertThat(antragsdatenMultiValueFieldType.getValue()).containsExactlyElementsOf(formData); - } - - @Test - void shouldCallFormatValue() { - when(datatypeMapper.from(FORMDATA_COLLECTION)).thenReturn(DatatypeType.STRING); - - formDataMapper.buildMultiValueField(NAME, FORMDATA_COLLECTION); - - verify(formDataMapper).formatValue(DatatypeType.STRING, FORMDATA_COLLECTION.get(0)); - } - } - - @Nested - class TestBuildSingleValueField { - - private static final String NAME = "name"; - private static final String FORMDATA_VALUE = "value"; - - @Test - void shouldSetName() { - mockFormatValue(); - var antragsdatenSingleValueFieldType = formDataMapper.buildSingleValueField(NAME, FORMDATA_VALUE); - - assertThat(antragsdatenSingleValueFieldType.getName()).isEqualTo(NAME); - } - - @Test - void shouldSetType() { - when(datatypeMapper.from(FORMDATA_VALUE)).thenReturn(DatatypeType.STRING); - - var antragsdatenSingleValueFieldType = (AntragsdatenFieldType) formDataMapper.buildSingleValueField(NAME, FORMDATA_VALUE); - - assertThat(antragsdatenSingleValueFieldType.getType()).isEqualTo(DatatypeType.STRING); - } - - @Test - void shouldSetValue() { - mockFormatValue(); - - var antragsdatenSingleValueFieldType = (AntragsdatenSingleValueFieldType) formDataMapper.buildSingleValueField(NAME, FORMDATA_VALUE); - - assertThat(antragsdatenSingleValueFieldType.getValue()).isEqualTo(FORMDATA_VALUE); - } - - @Test - void shouldNotSetIfValueIsNull() { - formDataMapper.buildSingleValueField(NAME, null); - - verify(formDataMapper, never()).formatValue(DatatypeType.STRING, null); - } - - @Test - void shouldCallFormatValue() { - when(datatypeMapper.from(FORMDATA_VALUE)).thenReturn(DatatypeType.STRING); - - formDataMapper.buildSingleValueField(NAME, FORMDATA_VALUE); - - verify(formDataMapper).formatValue(DatatypeType.STRING, FORMDATA_VALUE); - } - - private void mockFormatValue() { - when(datatypeMapper.from(FORMDATA_VALUE)).thenReturn(DatatypeType.STRING); - doReturn(FORMDATA_VALUE).when(formDataMapper).formatValue(DatatypeType.STRING, FORMDATA_VALUE); - } - } - - @Nested - class TestFormatValue { - - @Test - void shouldFormatStringType() { - var value = formDataMapper.formatValue(DatatypeType.STRING, 1); - - assertThat(value).isEqualTo("1"); - } - - @Test - void shouldFormatDateTimeType() { - try (var dateConverter = mockStatic(DateConverter.class)) { - var dateTime = ZonedDateTime.now(); - - formDataMapper.formatValue(DatatypeType.DATETIME, dateTime); - - dateConverter.verify(() -> DateConverter.toXmlGregorianCalendar(dateTime)); - } - } - - @Test - void shouldFormatNull() { - var value = formDataMapper.formatValue(DatatypeType.STRING, null); - - assertThat(value).isEqualTo("null"); - } - } -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/GeburtTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/GeburtTypeTestFactory.java deleted file mode 100644 index 1eff8f3fd7bca104f131c92d107fdebe1ed16b12..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/GeburtTypeTestFactory.java +++ /dev/null @@ -1,10 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import de.xoev.xdomea.GeburtType; - -public class GeburtTypeTestFactory { - - public static GeburtType create() { - return new GeburtType(); - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KontaktTypeCreatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KontaktTypeCreatorTest.java deleted file mode 100644 index 400b0b1458aeb14c39ca8afec7fb35beb461f763..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KontaktTypeCreatorTest.java +++ /dev/null @@ -1,346 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.Optional; - -import javax.xml.datatype.XMLGregorianCalendar; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.NullAndEmptySource; -import org.junit.jupiter.params.provider.ValueSource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.DateConverter; -import de.xoev.xdomea.GeburtType; -import de.xoev.xdomea.KontaktType; -import de.xoev.xdomea.NameNatuerlichePersonType; -import jakarta.annotation.Nullable; - -class KontaktTypeCreatorTest { - - @Spy - @InjectMocks - private KontaktTypeCreator creator; - - @Mock - private NameNatuerlichePersonTypeCreator nameNatuerlichePersonTypeCreator; - - @Nested - class TestCreate { - - @Nested - class TestWithAntragsteller { - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - private final KontaktType kontaktType = KontaktTypeTestFactory.create(); - - @BeforeEach - void setUp() { - doReturn(Optional.of(vorgang.getEingang().getAntragsteller())).when(creator).getAntragstellerIfHasRequiredData(vorgang); - doReturn(kontaktType).when(creator).toKontaktType(vorgang.getEingang().getAntragsteller()); - } - - @Test - void shouldGetAntragsteller() { - callCreator(vorgang); - - verify(creator).getAntragstellerIfHasRequiredData(vorgang); - } - - @Test - void shouldMapToKontaktType() { - callCreator(vorgang); - - verify(creator).toKontaktType(vorgang.getEingang().getAntragsteller()); - } - - @Test - void shouldReturnKontakt() { - var kontakt = callCreator(vorgang); - - assertThat(kontakt).get().isEqualTo(kontaktType); - } - } - - @Nested - class TestWithoutAntragsteller { - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.createBuilder() - .eingang(EingangTestFactory.createBuilder().antragsteller(null).build()) - .build(); - - @BeforeEach - void setUp() { - doReturn(Optional.empty()).when(creator).getAntragstellerIfHasRequiredData(vorgang); - } - - @Test - void shouldBeEmpty() { - var kontakt = callCreator(vorgang); - - assertThat(kontakt).isEmpty(); - } - } - - private Optional<KontaktType> callCreator(VorgangWithEingang vorgang) { - return creator.create(vorgang); - } - } - - @Nested - class TestGeburtsdatumToISO { - - @Mock - private XMLGregorianCalendar geburtsdatum; - - private MockedStatic<DateConverter> dateConverter; - - private final Antragsteller antragsteller = AntragstellerTestFactory.create(); - - void setUpDateConverter() { - dateConverter = mockStatic(DateConverter.class); - dateConverter.when(() -> DateConverter.convertGermanFormatToISO(AntragstellerTestFactory.GEBURTSDATUM_STR)) - .thenReturn(Optional.of(geburtsdatum)); - } - - @BeforeEach - void setUp() { - setUpDateConverter(); - } - - @AfterEach - void cleanUp() { - dateConverter.close(); - } - - @Test - void shouldCallDateConverter() { - callGeburtsdatumToISO(antragsteller); - - dateConverter.verify(() -> DateConverter.convertGermanFormatToISO(antragsteller.getGeburtsdatum())); - } - - @Test - void shouldReturnGeburtsdatumIso() { - var result = callGeburtsdatumToISO(antragsteller); - - assertThat(result).isEqualTo(Optional.of(geburtsdatum)); - } - - private Optional<XMLGregorianCalendar> callGeburtsdatumToISO(Antragsteller antragsteller) { - return creator.geburtsdatumToISO(antragsteller); - } - - } - - @Nested - class TestToKontaktType { - - @Nested - class WhenHavingGeburtsdatum { - - @Mock - private XMLGregorianCalendar geburtsdatum; - - private MockedStatic<KontaktTypeCreator> mockStatic; - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - private final Antragsteller antragsteller = vorgang.getEingang().getAntragsteller(); - private final NameNatuerlichePersonType nameNatuerlichePerson = NameNatuerlichePersonTypeTestFactory.create(); - private final GeburtType geburtType = GeburtTypeTestFactory.create(); - - @BeforeEach - void setUp() { - when(nameNatuerlichePersonTypeCreator.create(vorgang.getEingang().getAntragsteller())).thenReturn(nameNatuerlichePerson); - - mockStatic = mockStatic(KontaktTypeCreator.class); - mockStatic.when(() -> KontaktTypeCreator.geburtsdatumToISO(antragsteller)).thenReturn(Optional.of(geburtsdatum)); - - doReturn(geburtType).when(creator).createGeburtType(geburtsdatum); - } - - @AfterEach - void tearDown() { - mockStatic.close(); - } - - @Test - void shouldCreateNameNatuerlichePerson() { - callCreator(vorgang); - - verify(nameNatuerlichePersonTypeCreator).create(vorgang.getEingang().getAntragsteller()); - } - - @Test - void shouldHaveNameNatuerlichePerson() { - var kontakt = callCreator(vorgang); - - assertThat(kontakt.getName()).isEqualTo(nameNatuerlichePerson); - } - - @Test - void shouldCallDateConverter() { - callCreator(vorgang); - - verify(creator).createGeburtType(geburtsdatum); - } - - @Test - void shouldCreateGeburtType() { - callCreator(vorgang); - - verify(creator).createGeburtType(geburtsdatum); - } - - @Test - void shouldHaveGeburtType() { - var kontakt = callCreator(vorgang); - - assertThat(kontakt.getGeburt()).isEqualTo(geburtType); - } - } - - @Nested - class WhenHavingInvalidGeburtsdatum { - - @ParameterizedTest - @NullAndEmptySource - @ValueSource(strings = { "unreadable" }) - void shouldNotSetForInvalidGeburtsdatum(String geburtsdatum) { - var result = callCreator(createVorgangWithAntragstellerGeburtsdatum(geburtsdatum)); - - assertThat(result.getGeburt()).isNull(); - } - - @ParameterizedTest - @NullAndEmptySource - @ValueSource(strings = { "unreadable" }) - void shouldNotCallCreateGeburtType(String geburtsdatum) { - callCreator(createVorgangWithAntragstellerGeburtsdatum(geburtsdatum)); - - verify(creator, never()).createGeburtType(any()); - } - - } - - private VorgangWithEingang createVorgangWithAntragstellerGeburtsdatum(@Nullable String geburtsdatum) { - return VorgangWithEingangTestFactory.createBuilder().eingang( - EingangTestFactory.createBuilder().antragsteller( - AntragstellerTestFactory.createBuilder().geburtsdatum(geburtsdatum).build()).build()).build(); - } - - private KontaktType callCreator(VorgangWithEingang vorgang) { - return creator.toKontaktType(vorgang.getEingang().getAntragsteller()); - } - } - - @Nested - class TestCreateGeburtType { - - @Mock - private XMLGregorianCalendar geburtsdatum; - - private MockedStatic<DateConverter> dateConverter; - - @BeforeEach - void setUp() { - dateConverter = mockStatic(DateConverter.class); - dateConverter.when(() -> DateConverter.convertGermanFormatToISO(AntragstellerTestFactory.GEBURTSDATUM_STR)) - .thenReturn(Optional.of(geburtsdatum)); - } - - @AfterEach - void tearDown() { - dateConverter.close(); - } - - @Test - void shouldCreate() { - var geburtType = callCreator(geburtsdatum); - - assertThat(geburtType.getDatum()).isEqualTo(geburtsdatum); - } - - private GeburtType callCreator(XMLGregorianCalendar geburtsdatum) { - return creator.createGeburtType(geburtsdatum); - } - } - - @Nested - class TestGetAntragstellerIfHasRequiredData { - - @Mock - private XMLGregorianCalendar geburtsdatum; - - @Test - void shouldBeEmptyIfAntragstellerNull() { - var antragsteller = callCreator(buildVorgang(null)); - - assertThat(antragsteller).isEmpty(); - } - - @Test - void shouldBeEmptyIfNoneOfRequiredDataExists() { - try (var dateConverter = mockStatic(DateConverter.class)) { - dateConverter.when(() -> DateConverter.convertGermanFormatToISO(null)).thenReturn(Optional.empty()); - - var antragsteller = callCreator(buildVorgang(Antragsteller.builder().build())); - - assertThat(antragsteller).isEmpty(); - } - } - - @Test - void shouldNotBeEmptyIfHasVorname() { - var antragsteller = callCreator(buildVorgang(Antragsteller.builder().vorname(AntragstellerTestFactory.VORNAME).build())); - - assertThat(antragsteller).isNotEmpty(); - } - - @Test - void shouldNotBeEmptyIfHasNachname() { - var antragsteller = callCreator(buildVorgang(Antragsteller.builder().nachname(AntragstellerTestFactory.NACHNAME).build())); - - assertThat(antragsteller).isNotEmpty(); - } - - @Test - void shouldNotBeEmptyIfHasAnrede() { - var antragsteller = callCreator(buildVorgang(Antragsteller.builder().anrede(AntragstellerTestFactory.ANREDE).build())); - - assertThat(antragsteller).isNotEmpty(); - } - - @Test - void shouldNotBeEmptyIfHasGeburtsdatum() { - try (var dateConverter = mockStatic(DateConverter.class)) { - dateConverter.when(() -> DateConverter.convertGermanFormatToISO(AntragstellerTestFactory.GEBURTSDATUM_STR)) - .thenReturn(Optional.of(geburtsdatum)); - - var antragsteller = callCreator( - buildVorgang(Antragsteller.builder().geburtsdatum(AntragstellerTestFactory.GEBURTSDATUM_STR).build())); - - assertThat(antragsteller).isNotEmpty(); - } - } - - private Optional<Antragsteller> callCreator(VorgangWithEingang vorgang) { - return creator.getAntragstellerIfHasRequiredData(vorgang); - } - - private VorgangWithEingang buildVorgang(Antragsteller antragsteller) { - return VorgangWithEingangTestFactory.createBuilder().eingang(EingangTestFactory.createBuilder().antragsteller(antragsteller).build()) - .build(); - } - } - -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KontaktTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KontaktTypeTestFactory.java deleted file mode 100644 index 964eb818e77f28b7fb396c3a4d1d33d0937c418f..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KontaktTypeTestFactory.java +++ /dev/null @@ -1,10 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import de.xoev.xdomea.KontaktType; - -public class KontaktTypeTestFactory { - - public static KontaktType create() { - return new KontaktType(); - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KopfCreatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KopfCreatorTest.java deleted file mode 100644 index ad2a07d492a41a25956fe6032f940df5b82c0f9e..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KopfCreatorTest.java +++ /dev/null @@ -1,324 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import static de.ozgcloud.alfa.export.XdomeaPropertiesTestFactory.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.time.ZoneOffset; -import java.time.ZonedDateTime; - -import javax.xml.datatype.XMLGregorianCalendar; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.NullAndEmptySource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.mockito.Spy; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.DateConverter; -import de.ozgcloud.alfa.common.UUIDConverter; -import de.ozgcloud.alfa.export.XdomeaProperties; -import de.xoev.xdomea.BehoerdenkennungType; -import de.xoev.xdomea.Code; -import de.xoev.xdomea.KontaktType; -import de.xoev.xdomea.NachrichtentypCodeType; -import de.xoev.xdomea.NkAbgabeType; -import de.xoev.xdomea.OrganisationseinheitType; -import de.xoev.xdomea.SystemType; - -class KopfCreatorTest { - - @Spy - @InjectMocks - private KopfCreator creator; - - @Mock - private XdomeaProperties xdomeaProperties; - - @Nested - class TestCreateKopf { - - static final ZonedDateTime CREATION_TIME = ZonedDateTime.now(); - - private MockedStatic<UUIDConverter> mockedUUIDConverter; - - @BeforeEach - void setUpUUIDMock() { - mockedUUIDConverter = mockStatic(UUIDConverter.class); - } - - @AfterEach - void tearDown() { - mockedUUIDConverter.close(); - } - - @Test - void shouldSetProcessId() { - var uuid = LoremIpsum.getInstance().getWords(1); - mockedUUIDConverter.when(() -> UUIDConverter.fromObjectId(VorgangHeaderTestFactory.ID)).thenReturn(uuid); - - var kopf = createKopf(); - - assertThat(kopf.getProzessID()).isEqualTo(uuid); - } - - @Test - void shouldSetNachrichtentyp() { - var expectedValue = new NachrichtentypCodeType(); - doReturn(expectedValue).when(creator).createNachrichtentyp(); - - var kopf = createKopf(); - - assertThat(kopf.getNachrichtentyp()).isEqualTo(expectedValue); - } - - @Test - void shouldSetErstellungszeitpunkt() { - try (var zonedDateTime = mockStatic(ZonedDateTime.class); var dateConverter = mockStatic(DateConverter.class)) { - zonedDateTime.when(() -> ZonedDateTime.now(ZoneOffset.UTC)).thenReturn(CREATION_TIME); - - var expectedValue = mock(XMLGregorianCalendar.class); - dateConverter.when(() -> DateConverter.toXmlGregorianCalendar(CREATION_TIME)).thenReturn(expectedValue); - - var kopf = createKopf(); - - assertThat(kopf.getErstellungszeitpunkt()).isEqualTo(expectedValue); - } - } - - @Test - void shouldSetAbsender() { - var expectedValue = new KontaktType(); - doReturn(expectedValue).when(creator).createAbsender(any()); - - var kopf = createKopf(); - - assertThat(kopf.getAbsender()).isEqualTo(expectedValue); - } - - @Test - void shouldSetEmpfaenger() { - var expectedValue = new KontaktType(); - doReturn(expectedValue).when(creator).createKontaktType(); - - var kopf = createKopf(); - - assertThat(kopf.getEmpfaenger()).isEqualTo(expectedValue); - } - - @Test - void shouldSetSendendesSystem() { - var sendendesSystem = new SystemType(); - doReturn(sendendesSystem).when(creator).createSendendesSystem(); - - var kopf = createKopf(); - - assertThat(kopf.getSendendesSystem()).isEqualTo(sendendesSystem); - } - - @Test - void shouldSetImportbestaetigung() { - var kopf = createKopf(); - - assertThat(kopf.isImportbestaetigung()).isTrue(); - } - - @Test - void shouldSetEmpfangsbestaetigung() { - var kopf = createKopf(); - - assertThat(kopf.isEmpfangsbestaetigung()).isTrue(); - } - - private NkAbgabeType createKopf() { - return creator.createKopf(VorgangWithEingangTestFactory.create()); - } - } - - @Nested - class TestCreateNachrichtentype { - - @Test - void shouldSetCode() { - var nachrichtentyp = creator.createNachrichtentyp(); - - assertThat(nachrichtentyp.getCode()).isEqualTo(KopfCreator.NACHRICHTENTYP_ABGABE_ABGABE_TYPE_CODE); - } - - @Test - void shouldSetListURI() { - var nachrichtentyp = creator.createNachrichtentyp(); - - assertThat(nachrichtentyp.getListURI()).isEqualTo(KopfCreator.NACHRICHTENTYP_CODE_TYPE_LIST_URI); - } - - @Test - void shouldSetListVersionID() { - var nachrichtentyp = creator.createNachrichtentyp(); - - assertThat(nachrichtentyp.getListVersionID()).isEqualTo(KopfCreator.NACHRICHTENTYP_CODE_TYPE_LIST_VERSION_ID); - } - } - - @Nested - class TestCreateAbsender { - - @Test - void shouldCallCreateKontaktType() { - creator.createAbsender(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID); - - verify(creator).createKontaktType(); - } - - @Test - void shouldSetOrganisationseinheitType() { - var expectedValue = new OrganisationseinheitType(); - doReturn(expectedValue).when(creator).createOrganisationseinheitType(any()); - - var absender = creator.createAbsender(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID); - - assertThat(absender.getOrganisationseinheit()).isEqualTo(expectedValue); - } - } - - @Nested - class TestCreateKontaktType { - - @Nested - class OnBehoerdenschluesselNotSet { - - @ParameterizedTest - @NullAndEmptySource - void shouldNotCreateBehoerdenkennung(String behoerdenschluessel) { - when(xdomeaProperties.getBehoerdenschluessel()).thenReturn(behoerdenschluessel); - - creator.createKontaktType(); - - verify(creator, never()).createBehoerdenkennung(); - } - - @ParameterizedTest - @NullAndEmptySource - void shouldNotSetBehoerdenkennung(String behoerdenschluessel) { - when(xdomeaProperties.getBehoerdenschluessel()).thenReturn(behoerdenschluessel); - - var kontaktType = creator.createKontaktType(); - - assertThat(kontaktType.getBehoerdenkennung()).isNull(); - } - } - - @Nested - class OnBehoerdenschluesselSet { - - private static final BehoerdenkennungType expectedValue = new BehoerdenkennungType(); - - @BeforeEach - void init() { - when(xdomeaProperties.getBehoerdenschluessel()).thenReturn(BEHOERDENSCHLUESSEL); - doReturn(expectedValue).when(creator).createBehoerdenkennung(); - } - - @Test - void shouldCreateBehoerdenkennung() { - creator.createKontaktType(); - - verify(creator).createBehoerdenkennung(); - } - - @Test - void shouldSetBehoerdenkennung() { - var kontaktType = creator.createKontaktType(); - - assertThat(kontaktType.getBehoerdenkennung()).isEqualTo(expectedValue); - } - } - } - - @Nested - class TestCreateOrganisationseinheitType { - - @Test - void shouldSetName() { - var organisationseinheitType = creator.createOrganisationseinheitType(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID); - - assertThat(organisationseinheitType.getName()).isEqualTo(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID); - } - } - - @Nested - class TestCreateBehoerdenkennung { - - private final Code expectedBehoerdenschluessel = new Code(); - - @BeforeEach - void init() { - doReturn(expectedBehoerdenschluessel).when(creator).createBehoerdenschluessel(); - } - - @Test - void shouldcreateBehoerdenschluessel() { - creator.createBehoerdenkennung(); - - verify(creator).createBehoerdenschluessel(); - } - - @Test - void shouldSetBehoerdenschluessel() { - var behoerdenkennungType = creator.createBehoerdenkennung(); - - assertThat(behoerdenkennungType.getBehoerdenschluessel()).isEqualTo(expectedBehoerdenschluessel); - } - } - - @Nested - class TestCreateBehoerdenschlussel { - - @BeforeEach - void init() { - when(xdomeaProperties.getBehoerdenschluessel()).thenReturn(BEHOERDENSCHLUESSEL); - when(xdomeaProperties.getBehoerdenschluesselUri()).thenReturn(BEHOERDENSCHLUESSEL_URI); - when(xdomeaProperties.getBehoerdenschluesselVersion()).thenReturn(BEHOERDENSCHLUESSEL_VERSION); - } - - @Test - void shouldSetCode() { - var behoerdenschlussel = creator.createBehoerdenschluessel(); - - assertThat(behoerdenschlussel.getCode()).isEqualTo(BEHOERDENSCHLUESSEL); - } - - @Test - void shouldSetListURI() { - var behoerdenschlussel = creator.createBehoerdenschluessel(); - - assertThat(behoerdenschlussel.getListURI()).isEqualTo(BEHOERDENSCHLUESSEL_URI); - } - - @Test - void shouldSetListVersionID() { - var behoerdenschlussel = creator.createBehoerdenschluessel(); - - assertThat(behoerdenschlussel.getListVersionID()).isEqualTo(BEHOERDENSCHLUESSEL_VERSION); - } - } - - @Nested - class TestCreateSendendesSystem { - - @Test - void shouldSetSystemName() { - var sendendesSystem = creator.createSendendesSystem(); - - assertThat(sendendesSystem.getProduktname()).isEqualTo(KopfCreator.PRODUKT_NAME); - } - } -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/NameNatuerlichePersonTypeCreatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/NameNatuerlichePersonTypeCreatorTest.java deleted file mode 100644 index 04bed62960387ee3ebef07bcc2cc59156371547d..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/NameNatuerlichePersonTypeCreatorTest.java +++ /dev/null @@ -1,91 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; - -import de.xoev.xdomea.NameNatuerlichePersonType; - -class NameNatuerlichePersonTypeCreatorTest { - - @InjectMocks - private NameNatuerlichePersonTypeCreator creator; - - @Nested - class TestCreate { - - @Test - void shouldHaveAnrede() { - var nameNatuerlichePerson = callCreator(AntragstellerTestFactory.create()); - - assertThat(nameNatuerlichePerson.getAnrede()).isEqualTo(AntragstellerTestFactory.ANREDE); - } - - @Test - void shouldHaveEmptyAnrede() { - var nameNatuerlichePerson = callCreator(AntragstellerTestFactory.createBuilder().anrede(null).build()); - - assertThat(nameNatuerlichePerson.getAnrede()).isEmpty(); - } - - @Test - void shouldHaveVorname() { - var nameNatuerlichePerson = callCreator(AntragstellerTestFactory.create()); - - assertThat(nameNatuerlichePerson.getVorname().getName()).isEqualTo(AntragstellerTestFactory.VORNAME); - } - - @Test - void shouldHaveEmptyVorname() { - var nameNatuerlichePerson = callCreator(AntragstellerTestFactory.createBuilder().vorname(null).build()); - - assertThat(nameNatuerlichePerson.getVorname().getName()).isEmpty(); - } - - @Test - void shouldHaveFamilienname() { - var nameNatuerlichePerson = callCreator(AntragstellerTestFactory.create()); - - assertThat(nameNatuerlichePerson.getFamilienname().getName()).isEqualTo(AntragstellerTestFactory.NACHNAME); - } - - @Test - void shouldHaveEmptyFamilienname() { - var nameNatuerlichePerson = callCreator(AntragstellerTestFactory.createBuilder().nachname(null).build()); - - assertThat(nameNatuerlichePerson.getFamilienname().getName()).isEmpty(); - } - - @Nested - class TestWhenNullAntragsteller { - - @Test - void shouldHaveEmptyAnrede() { - var nameNatuerlichePerson = callCreator(null); - - assertThat(nameNatuerlichePerson.getAnrede()).isEmpty(); - } - - @Test - void shouldHaveEmptyVorname() { - var nameNatuerlichePerson = callCreator(null); - - assertThat(nameNatuerlichePerson.getVorname().getName()).isEmpty(); - } - - @Test - void shouldHaveEmptyFamilienname() { - var nameNatuerlichePerson = callCreator(null); - - assertThat(nameNatuerlichePerson.getFamilienname().getName()).isEmpty(); - } - } - - private NameNatuerlichePersonType callCreator(Antragsteller antragsteller) { - return creator.create(antragsteller); - } - } - -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/NameNatuerlichePersonTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/NameNatuerlichePersonTypeTestFactory.java deleted file mode 100644 index 09b861eca1903f844baf2075c85fd3f9b01219ae..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/NameNatuerlichePersonTypeTestFactory.java +++ /dev/null @@ -1,10 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import de.xoev.xdomea.NameNatuerlichePersonType; - -public class NameNatuerlichePersonTypeTestFactory { - - public static NameNatuerlichePersonType create() { - return new NameNatuerlichePersonType(); - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/VorgangTypeCreatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/VorgangTypeCreatorTest.java deleted file mode 100644 index 47ec3761ac84e0351a9cae1dcea008c995cb80a3..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/VorgangTypeCreatorTest.java +++ /dev/null @@ -1,197 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.Optional; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.AlfaTestUtils; -import de.ozgcloud.alfa.export.AllgemeineMetadatenTypeTestFactory; -import de.ozgcloud.alfa.export.IdentifikationObjektTypeTestFactory; -import de.xoev.xdomea.AllgemeineMetadatenType; -import de.xoev.xdomea.AnwendungsspezifischeErweiterungType; -import de.xoev.xdomea.AnwendungsspezifischeErweiterungXMLType; -import de.xoev.xdomea.IdentifikationObjektType; -import de.xoev.xdomea.KontaktType; -import de.xoev.xdomea.VorgangType; - -class VorgangTypeCreatorTest { - - @Spy - @InjectMocks - private VorgangTypeCreator creator; - - @Mock - private AnwendungsspezifischeErweiterungTypeCreator anwendungsspezifischeErweiterungTypeCreator; - - @Mock - private AnwendungsspezifischeErweiterungXMLTypeCreator anwendungsspezifischeErweiterungXMLTypeCreator; - - @Mock - private KontaktTypeCreator kontaktTypeCreator; - - @Nested - class TestCreate { - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - private final IdentifikationObjektType identifikationObjekt = IdentifikationObjektTypeTestFactory.create(); - private final AllgemeineMetadatenType allgemeineMetadaten = AllgemeineMetadatenTypeTestFactory.create(); - private final AnwendungsspezifischeErweiterungType anwendungsspezifischeErweiterung = AnwendungsspezifischeErweiterungTypeTestFactory.create(); - private final AnwendungsspezifischeErweiterungXMLType anwendungsspezifischeErweiterungXML = new AnwendungsspezifischeErweiterungXMLType(); - private final KontaktType kontakt = KontaktTypeTestFactory.create(); - - @BeforeEach - void init() { - doReturn(identifikationObjekt).when(creator).createIdentifikation(); - doReturn(allgemeineMetadaten).when(creator).createAllgemeineMetadaten(vorgang); - - when(anwendungsspezifischeErweiterungTypeCreator.create(vorgang)).thenReturn(anwendungsspezifischeErweiterung); - when(anwendungsspezifischeErweiterungXMLTypeCreator.create(vorgang)).thenReturn(anwendungsspezifischeErweiterungXML); - when(kontaktTypeCreator.create(vorgang)).thenReturn(Optional.of(kontakt)); - } - - @Test - void shouldCallAnwendungsspezifischeErweiterungTypeCreator() { - callCreator(); - - verify(anwendungsspezifischeErweiterungTypeCreator).create(vorgang); - } - - @Test - void shouldHaveAnwendungsspezifischeErweiterungType() { - var vorgangType = callCreator(); - - assertThat(vorgangType.getAnwendungsspezifischeErweiterung()).isEqualTo(anwendungsspezifischeErweiterung); - } - - @Test - void shouldCallAnwendungsspezifischeErweiterungXMLTypeCreator() { - callCreator(); - - verify(anwendungsspezifischeErweiterungXMLTypeCreator).create(vorgang); - } - - @Test - void shouldHaveAnwendungsspezifischeErweiterungXMLType() { - var vorgangType = callCreator(); - - assertThat(vorgangType.getAnwendungsspezifischeErweiterungXML()).isEqualTo(anwendungsspezifischeErweiterungXML); - } - - @Test - void shouldCallCreateIdentifikation() { - callCreator(); - - verify(creator).createIdentifikation(); - } - - @Test - void shouldHaveIdentifikation() { - var vorgangType = callCreator(); - - assertThat(vorgangType.getIdentifikation()).isEqualTo(identifikationObjekt); - } - - @Test - void shouldCallCreateAllgemeineMetadaten() { - callCreator(); - - verify(creator).createAllgemeineMetadaten(vorgang); - } - - @Test - void shouldHaveAllgemeineMetadaten() { - var vorgangType = callCreator(); - - assertThat(vorgangType.getAllgemeineMetadaten()).isEqualTo(allgemeineMetadaten); - } - - @Test - void shouldCallKontaktTypeCreator() { - callCreator(); - - verify(kontaktTypeCreator).create(vorgang); - } - - @Test - void shouldHaveKontakt() { - var vorgangType = callCreator(); - - assertThat(vorgangType.getKontakt()).containsExactly(kontakt); - } - - @Test - void shouldNotHaveKontakt() { - when(kontaktTypeCreator.create(vorgang)).thenReturn(Optional.empty()); - var vorgangType = callCreator(); - - assertThat(vorgangType.getKontakt()).isEmpty(); - } - - private VorgangType callCreator() { - return creator.create(vorgang); - } - } - - @Nested - class TestCreateAllgemeineMetadaten { - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - @Test - void shouldHaveBetreff() { - var allgemeineMetadaten = creator.createAllgemeineMetadaten(vorgang); - - assertThat(allgemeineMetadaten.getBetreff()).isEqualTo(VorgangHeaderTestFactory.NAME); - } - - @Test - void shouldHaveKennzeichen() { - var allgemeineMetadaten = creator.createAllgemeineMetadaten(vorgang); - - assertThat(allgemeineMetadaten.getKennzeichen()).isEqualTo(VorgangHeaderTestFactory.NUMMER); - } - - @Test - void shouldHaveBemerkung() { - var allgemeineMetadaten = creator.createAllgemeineMetadaten(vorgang); - - assertThat(allgemeineMetadaten.getBemerkung()).isEmpty(); - } - - @Test - void shouldHaveMedium() { - var allgemeineMetadaten = creator.createAllgemeineMetadaten(vorgang); - - assertThat(allgemeineMetadaten.getMedium().getCode()).isEqualTo(VorgangTypeCreator.ALLGEMEINE_METADATEN_MEDIUM_CODE); - } - - } - - @Nested - class TestCreateIdentifikation { - - @Test - void shouldHaveId() { - var identifikation = creator.createIdentifikation(); - - assertThat(identifikation.getID()).matches(AlfaTestUtils.UUID_REGEX); - } - - @Test - void shouldHaveNummerImUebergeordnetenContainer() { - var identifikation = creator.createIdentifikation(); - - assertThat(identifikation.getNummerImUebergeordnetenContainer()).isEqualTo(VorgangTypeCreator.NUMMER_IM_UEBERGEORDNETEN_CONTAINER); - } - } - -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/VorgangTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/VorgangTypeTestFactory.java deleted file mode 100644 index 45ca4e476144809edd9e1b2a064a884bef92d68d..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/VorgangTypeTestFactory.java +++ /dev/null @@ -1,10 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import de.xoev.xdomea.VorgangType; - -public class VorgangTypeTestFactory { - - public static VorgangType create() { - return new VorgangType(); - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/WrappedValueExtractorITCase.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/WrappedValueExtractorITCase.java deleted file mode 100644 index 2235bb23d85ac3e6a812a49aa88b2ec107a32ea7..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/WrappedValueExtractorITCase.java +++ /dev/null @@ -1,55 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import static de.ozgcloud.alfa.vorgang.WrappedValueExtractor.*; -import static org.assertj.core.api.Assertions.*; - -import java.util.Map; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; - -public class WrappedValueExtractorITCase { - - @Nested - class TestExtractWrappedValues { - - @Test - void shouldPreserveWrapperKeyWithoutParent() { - Map<String, Object> formData = Map.of(WRAPPER_KEY, "Kiel"); - - var formDataWithoutValueKeys = WrappedValueExtractor.extractWrappedValues(formData); - - assertThat(formDataWithoutValueKeys).isEqualTo(formData); - } - - @Test - void shouldEliminateWrapperKeyWithoutSiblings() { - Map<String, Object> formData = Map.of("ort", Map.of(WRAPPER_KEY, "Kiel")); - Map<String, Object> expected = Map.of("ort", "Kiel"); - - var formDataWithoutValueKeys = WrappedValueExtractor.extractWrappedValues(formData); - - assertThat(formDataWithoutValueKeys).isEqualTo(expected); - } - - @Test - void shouldPreserveWrapperKeyIfHasSiblings() { - Map<String, Object> formData = Map.of("ort", Map.of(WRAPPER_KEY, "Kiel", "value2", "Kiel")); - - var formDataWithoutValueKeys = WrappedValueExtractor.extractWrappedValues(formData); - - assertThat(formDataWithoutValueKeys).isEqualTo(formData); - } - - @Test - void shouldPreserveNonWrapperKeys() { - Map<String, Object> formData = Map.of("empfangendestelle", - Map.of(WRAPPER_KEY, Map.of("OrganisationseinheitenAuswahl", Map.of(WRAPPER_KEY, "123456")))); - Map<String, Object> expected = Map.of("empfangendestelle", Map.of("OrganisationseinheitenAuswahl", "123456")); - - var formDataWithoutValueKeys = WrappedValueExtractor.extractWrappedValues(formData); - - assertThat(formDataWithoutValueKeys).isEqualTo(expected); - } - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/WrappedValueExtractorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/WrappedValueExtractorTest.java deleted file mode 100644 index 419c371d6aaf4f8a75904ec986814ffa4187881b..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/WrappedValueExtractorTest.java +++ /dev/null @@ -1,176 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import static de.ozgcloud.alfa.vorgang.WrappedValueExtractor.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.Map; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.MockedStatic; - -public class WrappedValueExtractorTest { - - @Nested - class TestExtractWrappedValues { - - private static final String KEY1 = "key1"; - private static final String KEY2 = "key2"; - private static final String KEY3 = "key3"; - - @Captor - private ArgumentCaptor<Object> valueCaptor; - private final Map<String, Object> originalData = Map.of(KEY1, "value1", KEY2, true, KEY3, 100); - private final Map<String, Object> extractedData = Map.of(KEY1, "extracted1", KEY2, "extracted2", KEY3, "extracted3"); - - @Test - void shouldCallReplaceWrappedValueWithDirectValue() { - try (MockedStatic<WrappedValueExtractor> wrappedValueExtractor = mockStatic(WrappedValueExtractor.class)) { - unmockMethodUnderTest(wrappedValueExtractor); - - WrappedValueExtractor.extractWrappedValues(originalData); - - wrappedValueExtractor.verify(() -> WrappedValueExtractor.replaceWrappedValueWithDirectValue(valueCaptor.capture()), times( - originalData.size())); - assertThat(valueCaptor.getAllValues()).containsExactlyElementsOf(originalData.values()); - } - } - - @Test - void shouldReturnMapWithReplacedValues() { - try (MockedStatic<WrappedValueExtractor> wrappedValueExtractor = mockStatic(WrappedValueExtractor.class)) { - unmockMethodUnderTest(wrappedValueExtractor); - wrappedValueExtractor.when(() -> WrappedValueExtractor.replaceWrappedValueWithDirectValue(originalData.get(KEY1))).thenReturn(extractedData.get(KEY1)); - wrappedValueExtractor.when(() -> WrappedValueExtractor.replaceWrappedValueWithDirectValue(originalData.get(KEY2))).thenReturn(extractedData.get(KEY2)); - wrappedValueExtractor.when(() -> WrappedValueExtractor.replaceWrappedValueWithDirectValue(originalData.get(KEY3))).thenReturn(extractedData.get(KEY3)); - - var result = WrappedValueExtractor.extractWrappedValues(originalData); - - assertThat(result).isEqualTo(extractedData); - } - } - - private void unmockMethodUnderTest(MockedStatic<WrappedValueExtractor> wrappedValueExtractor) { - wrappedValueExtractor.when(() -> WrappedValueExtractor.extractWrappedValues(any())).thenCallRealMethod(); - } - } - - @Nested - class TestReplaceWrappedValueWithDirectValue { - - private final String simpleValue = "simple value"; - private final Map<String, Object> mapValue = Map.of("key1", "value1", "key2", "value2"); - private final Map<String, Object> wrappedValue = Map.of(WRAPPER_KEY, "value1"); - - @Test - void shouldReturnValue() { - try (MockedStatic<WrappedValueExtractor> wrappedValueExtractor = mockStatic(WrappedValueExtractor.class)) { - unmockMethodUnderTest(wrappedValueExtractor); - - var result = WrappedValueExtractor.replaceWrappedValueWithDirectValue(simpleValue); - - assertThat(result).isEqualTo(simpleValue); - } - } - - @Test - void shouldCallIsWrappedValue() { - try (MockedStatic<WrappedValueExtractor> wrappedValueExtractor = mockStatic(WrappedValueExtractor.class)) { - unmockMethodUnderTest(wrappedValueExtractor); - - WrappedValueExtractor.replaceWrappedValueWithDirectValue(mapValue); - - wrappedValueExtractor.verify(() -> WrappedValueExtractor.isWrappedValue(mapValue)); - } - } - - @Test - void shouldCallItself() { - try (MockedStatic<WrappedValueExtractor> wrappedValueExtractor = mockStatic(WrappedValueExtractor.class)) { - unmockMethodUnderTest(wrappedValueExtractor); - wrappedValueExtractor.when(() -> WrappedValueExtractor.isWrappedValue(wrappedValue)).thenReturn(true); - - WrappedValueExtractor.replaceWrappedValueWithDirectValue(wrappedValue); - - wrappedValueExtractor.verify(() -> WrappedValueExtractor.replaceWrappedValueWithDirectValue(wrappedValue.get(WRAPPER_KEY))); - } - } - - @Test - void shouldReturnResultOfCallingItself() { - try (MockedStatic<WrappedValueExtractor> wrappedValueExtractor = mockStatic(WrappedValueExtractor.class)) { - unmockMethodUnderTest(wrappedValueExtractor); - wrappedValueExtractor.when(() -> WrappedValueExtractor.isWrappedValue(wrappedValue)).thenReturn(true); - - var result = WrappedValueExtractor.replaceWrappedValueWithDirectValue(wrappedValue); - - assertThat(result).isEqualTo(wrappedValue.get(WRAPPER_KEY)); - } - } - - @Test - void shouldCallExtractWrappedValues() { - try (MockedStatic<WrappedValueExtractor> wrappedValueExtractor = mockStatic(WrappedValueExtractor.class)) { - unmockMethodUnderTest(wrappedValueExtractor); - wrappedValueExtractor.when(() -> WrappedValueExtractor.isWrappedValue(mapValue)).thenReturn(false); - - WrappedValueExtractor.replaceWrappedValueWithDirectValue(mapValue); - - wrappedValueExtractor.verify(() -> WrappedValueExtractor.extractWrappedValues(mapValue)); - } - } - - @Test - void shouldReturnResultOfExtractWrappedValues() { - final Map<String, Object> extractVrappedValuesResult = Map.of("resultKey", "resultValue"); - try (MockedStatic<WrappedValueExtractor> wrappedValueExtractor = mockStatic(WrappedValueExtractor.class)) { - unmockMethodUnderTest(wrappedValueExtractor); - wrappedValueExtractor.when(() -> WrappedValueExtractor.isWrappedValue(mapValue)).thenReturn(false); - wrappedValueExtractor.when(() -> WrappedValueExtractor.extractWrappedValues(any())).thenReturn(extractVrappedValuesResult); - - var result = WrappedValueExtractor.replaceWrappedValueWithDirectValue(mapValue); - - assertThat(result).isEqualTo(extractVrappedValuesResult); - } - } - - private void unmockMethodUnderTest(MockedStatic<WrappedValueExtractor> wrappedValueExtractor) { - wrappedValueExtractor.when(() -> WrappedValueExtractor.replaceWrappedValueWithDirectValue(any())).thenCallRealMethod(); - } - } - - @Nested - class TestIsWrappedValue { - - @Test - void shouldReturnTrueIfWrapped() { - var result = WrappedValueExtractor.isWrappedValue(Map.of(WRAPPER_KEY, "value1")); - - assertThat(result).isTrue(); - } - - @Test - void shouldReturnFalseIfHasMultipleEntries() { - var result = WrappedValueExtractor.isWrappedValue(Map.of(WRAPPER_KEY, "value1", "key2", "value2")); - - assertThat(result).isFalse(); - } - - @Test - void shouldReturnFalseIfNotWrapped() { - var result = WrappedValueExtractor.isWrappedValue(Map.of("key1", "value1")); - - assertThat(result).isFalse(); - } - - @Test - void shouldReturnFalseIfEmpty() { - var result = WrappedValueExtractor.isWrappedValue(Map.of()); - - assertThat(result).isFalse(); - } - } -} diff --git a/alfa-xdomea/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension b/alfa-xdomea/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension deleted file mode 100644 index 79b126e6cdb86bec1f4f08c205de8961bde1934a..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension +++ /dev/null @@ -1 +0,0 @@ -org.mockito.junit.jupiter.MockitoExtension \ No newline at end of file diff --git a/alfa-xdomea/src/test/resources/application-itcase.yaml b/alfa-xdomea/src/test/resources/application-itcase.yaml deleted file mode 100644 index c6f85b1e94d61d1ee6c5992b97cbac70b7260e24..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/resources/application-itcase.yaml +++ /dev/null @@ -1,5 +0,0 @@ -ozgcloud: - xdomea: - behoerdenschluessel: ABC - behoerdenschluesselUri: http://meine.behoer.de - behoerdenschluesselVersion: 1.0.15b \ No newline at end of file diff --git a/alfa-xdomea/src/test/resources/junit-platform.properties b/alfa-xdomea/src/test/resources/junit-platform.properties deleted file mode 100644 index 1cebb76d5a58ac034b2627d12411d82d1e85821e..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/resources/junit-platform.properties +++ /dev/null @@ -1 +0,0 @@ -junit.jupiter.extensions.autodetection.enabled = true \ No newline at end of file diff --git a/alfa-xdomea/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/alfa-xdomea/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker deleted file mode 100644 index ca6ee9cea8ec189a088d50559325d4e84ff8ad09..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker +++ /dev/null @@ -1 +0,0 @@ -mock-maker-inline \ No newline at end of file diff --git a/pom.xml b/pom.xml index e05df380d5db04e9031bf6d4d0c59d49253bc3d9..e1e8d8fc73a898af035a72f0cee6eed9f3c434a8 100644 --- a/pom.xml +++ b/pom.xml @@ -35,14 +35,13 @@ <groupId>de.ozgcloud.alfa</groupId> <artifactId>alfa</artifactId> - <version>2.14.0-SNAPSHOT</version> + <version>2.16.0-SNAPSHOT</version> <name>Alfa Parent</name> <packaging>pom</packaging> <modules> <module>alfa-client</module> <module>alfa-server</module> - <module>alfa-xdomea</module> <module>alfa-service</module> </modules> @@ -54,7 +53,8 @@ <nachrichten-manager.version>2.11.0</nachrichten-manager.version> <ozgcloud-common-pdf.version>3.0.1</ozgcloud-common-pdf.version> <user-manager.version>2.8.0</user-manager.version> - <zufi-manager.version>1.3.0</zufi-manager.version> + <zufi-manager.version>1.5.0</zufi-manager.version> + <archive-manager.version>0.1.0-SNAPSHOT</archive-manager.version> <spring-cloud-config-client.version>4.1.3</spring-cloud-config-client.version> <!-- TODO: die Version über ozgcloud-common ziehen --> @@ -140,6 +140,11 @@ </exclusion> </exclusions> </dependency> + <dependency> + <groupId>de.ozgcloud.archive</groupId> + <artifactId>archive-manager-interface</artifactId> + <version>${archive-manager.version}</version> + </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> diff --git a/release-startdev.sh b/release-startdev.sh index 1a0b61139aba8cad4e1b13f77bcb9f9382148b8c..960b59df8fb9a765221405fe7166050d4a5d6e9d 100755 --- a/release-startdev.sh +++ b/release-startdev.sh @@ -17,8 +17,7 @@ echo # PROJECTS="pom.xml:main alfa-service/pom.xml:parent - alfa-xdomea/pom.xml:parent - alfa-server/pom.xml:parent + alfa-server/pom.xml:parent alfa-client/pom.xml:parent " for PROJECT in $PROJECTS; diff --git a/src/main/helm/templates/_helpers.tpl b/src/main/helm/templates/_helpers.tpl index fde4a4e14938c745ee8972e5a8c9781a7f5c0669..d372c36a7bf03ba41f97df64697eda36d8ecf120 100644 --- a/src/main/helm/templates/_helpers.tpl +++ b/src/main/helm/templates/_helpers.tpl @@ -53,8 +53,12 @@ app.kubernetes.io/namespace: {{ include "app.namespace" . }} {{ printf "dns:///%s.%s:9090" ( coalesce .Values.vorgangManagerName "vorgang-manager" ) .Release.Namespace | replace "+" "_" | trunc 63 | trimSuffix "-" }} {{- end -}} +{{- define "app.grpc_client_archive_manager_address" -}} +{{ printf "dns:///%s.%s:9090" ( coalesce .Values.archiveManagerName "vorgang-manager" ) .Release.Namespace | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end -}} + {{- define "app.grpc_client_user-manager_address" -}} -{{ printf "%s.%s:9000" ( coalesce .Values.usermanagerName "user-manager" ) .Release.Namespace }} +{{ printf "dns:///%s.%s:9000" ( coalesce .Values.usermanagerName "user-manager" ) .Release.Namespace }} {{- end -}} {{- define "app.spring_cloud_config_administration_address" -}} diff --git a/src/main/helm/templates/deployment.yaml b/src/main/helm/templates/deployment.yaml index 585408d9e599665f5ac4777b117051c601ebeaec..91335d88865df4177cdc971a2585193d9811cf61 100644 --- a/src/main/helm/templates/deployment.yaml +++ b/src/main/helm/templates/deployment.yaml @@ -78,6 +78,10 @@ spec: value: {{ include "app.grpc_client_user-manager_address" . }} - name: grpc_client_user-manager_negotiationType value: {{ (.Values.userManager).grpcClientNegotiationType | default "TLS" }} + - name: grpc_client_archive-manager_address + value: {{ include "app.grpc_client_archive_manager_address" . }} + - name: grpc_client_archive-manager_negotiationType + value: {{ (.Values.archiveManager).grpcClientNegotiationType | default "TLS" }} - name: spring_profiles_active value: {{ include "app.envSpringProfiles" . }} - name: keycloak_realm diff --git a/src/test/helm/deployment_archive_manager_address_env_test.yaml b/src/test/helm/deployment_archive_manager_address_env_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..148184f0fae94370660e8f49ba6caa74b9182653 --- /dev/null +++ b/src/test/helm/deployment_archive_manager_address_env_test.yaml @@ -0,0 +1,49 @@ +# +# Copyright (C) 2024 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. +# + +suite: test deployment archive-manager address +release: + name: alfa + namespace: sh-helm-test +templates: + - templates/deployment.yaml +set: + baseUrl: test.company.local + ozgcloud: + environment: test + bundesland: sh + bezeichner: helm + sso: + serverUrl: https://sso.company.local + imagePullSecret: image-pull-secret +tests: + - it: should set the archive-manager name + set: + archiveManagerName: my-test-archive-manager-name + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: grpc_client_archive-manager_address + value: dns:///my-test-archive-manager-name.sh-helm-test:9090 diff --git a/src/test/helm/deployment_defaults_env_test.yaml b/src/test/helm/deployment_defaults_env_test.yaml index f02a3b9989743688a6baa2527e7376ca7c9945f4..ec868f133c64569d5ddf0cf73c8dc2c1cde3e9b8 100644 --- a/src/test/helm/deployment_defaults_env_test.yaml +++ b/src/test/helm/deployment_defaults_env_test.yaml @@ -53,7 +53,12 @@ tests: path: spec.template.spec.containers[0].env content: name: grpc_client_user-manager_address - value: user-manager.sh-helm-test:9000 + value: dns:///user-manager.sh-helm-test:9000 + - contains: + path: spec.template.spec.containers[0].env + content: + name: grpc_client_archive-manager_address + value: dns:///vorgang-manager.sh-helm-test:9090 - it: should have service binding root set: @@ -150,3 +155,21 @@ tests: content: name: grpc_client_vorgang-manager_negotiationType value: TLS + + - it: should set archive-manager negotiationType plaintext + set: + archiveManager.grpcClientNegotiationType: PLAINTEXT + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: grpc_client_archive-manager_negotiationType + value: PLAINTEXT + + - it: should contain default archive-manager negotiationType tls + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: grpc_client_archive-manager_negotiationType + value: TLS