From 9557d9025b62b9f815929fd5e01e90d3f08cb973 Mon Sep 17 00:00:00 2001 From: Nicolas Frizzarin Date: Wed, 29 Nov 2023 14:35:19 +0000 Subject: [PATCH] chore(workshop): migrate to Angular 17 feat: migrate all workshop on the new code flow --- .editorconfig | 3 +- .github/workflows/tp.yml | 6 +- .prettierrc | 2 +- apps/01-hands-on-solution/project.json | 19 +- apps/01-hands-on/project.json | 19 +- apps/02-ngg-solution/project.json | 21 +- apps/02-ngg/project.json | 21 +- apps/03-cpt-hierarchy-solution/project.json | 19 +- apps/03-cpt-hierarchy/project.json | 21 +- apps/04-binding-solution/project.json | 19 +- apps/04-binding/project.json | 19 +- apps/05-events-solution/project.json | 19 +- apps/05-events/project.json | 19 +- apps/06-http-solution/project.json | 19 +- .../src/app/feature/home/home.component.html | 68 +- apps/06-http/project.json | 19 +- apps/07-router-solution/project.json | 19 +- .../src/app/feature/home/home.component.html | 68 +- apps/07-router/project.json | 19 +- .../src/app/feature/home/home.component.html | 69 +- apps/08-ng-for-solution/project.json | 19 +- .../src/app/feature/home/home.component.html | 68 +- .../app/feature/people/people.component.html | 68 +- apps/08-ng-for/project.json | 19 +- .../src/app/feature/home/home.component.html | 68 +- apps/09-input-solution/project.json | 19 +- .../src/app/feature/home/home.component.html | 6 +- .../app/feature/people/people.component.html | 4 +- apps/09-input/project.json | 19 +- .../src/app/feature/home/home.component.html | 68 +- .../app/feature/people/people.component.html | 68 +- apps/10-output-solution/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 5 +- apps/10-output/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 4 +- apps/11-service-solution/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 5 +- apps/11-service/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 5 +- apps/12-pipe-using-solution/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 5 +- apps/12-pipe-using/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 5 +- apps/13-pipe-custom-solution/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 5 +- apps/13-pipe-custom/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 5 +- apps/14-directive-using-solution/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 47 +- apps/14-directive-using/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 21 +- .../15-directive-custom-solution/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 53 +- .../app/shared/directives/badge.directive.ts | 5 +- apps/15-directive-custom/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 47 +- .../project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 52 +- .../app/feature/people/people.component.ts | 7 +- .../app/shared/directives/badge.directive.ts | 5 +- apps/16-template-driven-form/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 53 +- .../app/feature/people/people.component.ts | 5 +- .../app/shared/directives/badge.directive.ts | 5 +- .../project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 55 +- .../app/feature/people/people.component.ts | 7 +- .../components/form/form.component.html | 31 +- .../app/shared/directives/badge.directive.ts | 5 +- .../project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 54 +- .../app/feature/people/people.component.ts | 7 +- .../app/shared/directives/badge.directive.ts | 5 +- .../project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 52 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 8 +- .../components/form/form.component.html | 29 +- .../app/shared/directives/badge.directive.ts | 5 +- .../project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 54 +- .../app/feature/people/people.component.ts | 7 +- .../components/form/form.component.html | 33 +- .../app/shared/directives/badge.directive.ts | 5 +- apps/19-reactive-form-solution/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 55 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 8 +- .../components/form/form.component.html | 34 +- .../app/shared/directives/badge.directive.ts | 5 +- apps/19-reactive-form/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 54 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 8 +- .../components/form/form.component.html | 33 +- .../app/shared/directives/badge.directive.ts | 5 +- .../project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 55 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 8 +- .../components/form/form.component.html | 37 +- .../app/shared/directives/badge.directive.ts | 5 +- .../project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 54 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 8 +- .../components/form/form.component.html | 36 +- .../app/shared/directives/badge.directive.ts | 5 +- apps/21-lazyloading-solution/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 55 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 8 +- .../components/form/form.component.html | 39 +- .../app/shared/directives/badge.directive.ts | 5 +- apps/21-lazyloading/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 54 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 8 +- .../components/form/form.component.html | 41 +- .../app/shared/directives/badge.directive.ts | 5 +- apps/22-guards-solution/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 55 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 8 +- .../components/form/form.component.html | 37 +- .../app/shared/directives/badge.directive.ts | 5 +- apps/22-guards/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 54 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 8 +- .../components/form/form.component.html | 41 +- .../app/shared/directives/badge.directive.ts | 5 +- apps/23-resolver-solution/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 52 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 6 +- .../components/form/form.component.html | 44 +- .../app/shared/directives/badge.directive.ts | 5 +- apps/23-resolver/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 54 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 8 +- .../components/form/form.component.html | 44 +- .../app/shared/directives/badge.directive.ts | 5 +- apps/24-interceptor-solution/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 52 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 6 +- .../components/form/form.component.html | 44 +- .../app/shared/directives/badge.directive.ts | 5 +- apps/24-interceptor/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 54 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 6 +- .../components/form/form.component.html | 41 +- .../app/shared/directives/badge.directive.ts | 5 +- apps/25-teleportation-solution/project.json | 19 +- .../header/header.component.spec.ts | 2 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 52 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 6 +- .../components/form/form.component.html | 44 +- .../app/shared/directives/badge.directive.ts | 5 +- apps/25-teleportation/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 54 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 6 +- .../components/form/form.component.html | 44 +- .../app/shared/directives/badge.directive.ts | 5 +- .../project.json | 19 +- .../header/header.component.spec.ts | 2 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 52 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 6 +- .../components/form/form.component.html | 44 +- .../app/shared/directives/badge.directive.ts | 5 +- apps/26-hostbinding-hostlistener/project.json | 19 +- .../header/header.component.spec.ts | 2 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 54 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 6 +- .../components/form/form.component.html | 44 +- .../app/shared/directives/badge.directive.ts | 5 +- .../project.json | 19 +- .../header/header.component.spec.ts | 2 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 52 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 6 +- .../components/form/form.component.html | 44 +- .../app/shared/directives/badge.directive.ts | 5 +- .../shared/directives/display.directive.ts | 5 +- apps/27-structural-directive/project.json | 19 +- .../header/header.component.spec.ts | 2 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 54 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 6 +- .../components/form/form.component.html | 44 +- .../app/shared/directives/badge.directive.ts | 5 +- apps/28-custom-control-solution/project.json | 19 +- .../header/header.component.spec.ts | 2 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 52 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 6 +- .../custom-input/custom-input.component.html | 4 +- .../custom-input/custom-input.component.ts | 4 +- .../components/form/form.component.html | 39 +- .../app/shared/directives/badge.directive.ts | 5 +- .../shared/directives/display.directive.ts | 5 +- apps/28-custom-control/project.json | 19 +- .../header/header.component.spec.ts | 2 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 54 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 6 +- .../components/form/form.component.html | 43 +- .../app/shared/directives/badge.directive.ts | 5 +- .../shared/directives/display.directive.ts | 5 +- apps/29-elf-store-solution/project.json | 19 +- .../header/header.component.spec.ts | 2 +- .../src/app/core/providers/people.service.ts | 5 +- .../src/app/core/store/app.store.ts | 2 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 56 +- .../app/feature/people/people.component.ts | 4 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 6 +- .../custom-input/custom-input.component.html | 4 +- .../custom-input/custom-input.component.ts | 4 +- .../components/form/form.component.html | 40 +- .../app/shared/directives/badge.directive.ts | 5 +- .../shared/directives/display.directive.ts | 5 +- apps/29-elf-store/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 58 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 6 +- .../custom-input/custom-input.component.html | 4 +- .../custom-input/custom-input.component.ts | 4 +- .../components/form/form.component.html | 40 +- .../app/shared/directives/badge.directive.ts | 5 +- .../shared/directives/display.directive.ts | 5 +- apps/30-ngxs-store-solution/project.json | 19 +- .../header/header.component.spec.ts | 2 +- .../src/app/core/providers/people.service.ts | 5 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 59 +- .../app/feature/people/people.component.ts | 8 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 6 +- .../custom-input/custom-input.component.html | 4 +- .../custom-input/custom-input.component.ts | 4 +- .../components/form/form.component.html | 41 +- .../app/shared/directives/badge.directive.ts | 5 +- .../shared/directives/display.directive.ts | 5 +- apps/30-ngxs-store/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 58 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 6 +- .../custom-input/custom-input.component.html | 5 +- .../custom-input/custom-input.component.ts | 4 +- .../components/form/form.component.html | 39 +- .../app/shared/directives/badge.directive.ts | 5 +- .../shared/directives/display.directive.ts | 5 +- .../src/app/shared/shared.module.ts | 4 +- apps/31-ngrx-store-solution/project.json | 19 +- .../header/header.component.spec.ts | 2 +- .../src/app/core/providers/people.service.ts | 5 +- .../src/app/core/store/reducer.ts | 2 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 56 +- .../app/feature/people/people.component.ts | 8 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 6 +- .../custom-input/custom-input.component.html | 4 +- .../custom-input/custom-input.component.ts | 4 +- .../components/form/form.component.html | 40 +- .../app/shared/directives/badge.directive.ts | 5 +- .../shared/directives/display.directive.ts | 5 +- apps/31-ngrx-store/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 58 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 6 +- .../custom-input/custom-input.component.html | 4 +- .../custom-input/custom-input.component.ts | 4 +- .../components/form/form.component.html | 40 +- .../app/shared/directives/badge.directive.ts | 5 +- .../shared/directives/display.directive.ts | 5 +- apps/32-unit-tests-solution/project.json | 19 +- .../header/header.component.spec.ts | 2 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 52 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 6 +- .../custom-input/custom-input.component.html | 4 +- .../custom-input/custom-input.component.ts | 4 +- .../components/form/form.component.html | 39 +- .../app/shared/directives/badge.directive.ts | 5 +- .../shared/directives/display.directive.ts | 5 +- apps/32-unit-tests/project.json | 19 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 56 +- .../app/feature/people/people.component.ts | 7 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 6 +- .../custom-input/custom-input.component.html | 4 +- .../custom-input/custom-input.component.ts | 4 +- .../components/form/form.component.html | 42 +- .../app/shared/directives/badge.directive.ts | 5 +- .../shared/directives/display.directive.ts | 5 +- .../project.json | 19 +- .../header/header.component.spec.ts | 2 +- .../interceptors/authorization.interceptor.ts | 2 +- .../src/app/core/store/reducer.ts | 2 +- .../src/app/feature/home/home.component.html | 4 +- .../src/app/feature/home/home.component.ts | 6 +- .../app/feature/people/people.component.html | 56 +- .../app/feature/people/people.component.ts | 6 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 6 +- .../custom-input/custom-input.component.html | 4 +- .../custom-input/custom-input.component.ts | 8 +- .../components/form/form.component.html | 40 +- .../shared/components/form/form.component.ts | 4 +- .../app/shared/directives/badge.directive.ts | 5 +- .../shared/directives/display.directive.ts | 5 +- apps/33-standalone-component/project.json | 19 +- .../src/app/core/providers/people.service.ts | 5 +- .../src/app/core/store/reducer.ts | 2 +- .../src/app/feature/home/home.component.html | 4 +- .../app/feature/people/people.component.html | 58 +- .../app/feature/people/people.component.ts | 8 +- .../update-person.component.html | 5 +- .../update-person/update-person.component.ts | 6 +- .../custom-input/custom-input.component.html | 4 +- .../custom-input/custom-input.component.ts | 4 +- .../components/form/form.component.html | 42 +- .../app/shared/directives/badge.directive.ts | 5 +- .../shared/directives/display.directive.ts | 5 +- apps/34-signal-solution/.eslintrc.json | 28 +- apps/34-signal-solution/project.json | 21 +- .../header/header.component.spec.ts | 2 +- .../interceptors/authorization.interceptor.ts | 2 +- .../src/app/feature/home/home.component.html | 4 +- .../src/app/feature/home/home.component.ts | 3 +- .../app/feature/people/people.component.html | 63 +- .../app/feature/people/people.component.ts | 6 +- .../update-person.component.html | 5 +- .../update-person.component.spec.ts | 2 +- .../update-person/update-person.component.ts | 8 +- .../components/card/card.component.html | 20 +- .../components/card/card.component.spec.ts | 8 +- .../shared/components/card/card.component.ts | 9 +- .../custom-input/custom-input.component.html | 4 +- .../custom-input/custom-input.component.ts | 15 +- .../components/form/form.component.html | 40 +- .../shared/components/form/form.component.ts | 4 +- .../app/shared/directives/badge.directive.ts | 5 +- .../shared/directives/display.directive.ts | 5 +- apps/34-signal/project.json | 21 +- .../header/header.component.spec.ts | 2 +- .../interceptors/authorization.interceptor.ts | 2 +- apps/34-signal/src/app/core/store/reducer.ts | 2 +- .../src/app/feature/home/home.component.html | 4 +- .../src/app/feature/home/home.component.ts | 6 +- .../app/feature/people/people.component.html | 56 +- .../app/feature/people/people.component.ts | 19 +- .../update-person.component.html | 6 +- .../update-person/update-person.component.ts | 6 +- .../custom-input/custom-input.component.html | 4 +- .../custom-input/custom-input.component.ts | 4 +- .../components/form/form.component.html | 40 +- .../shared/components/form/form.component.ts | 6 +- .../app/shared/directives/badge.directive.ts | 5 +- .../shared/directives/display.directive.ts | 5 +- nx.json | 49 +- package-lock.json | 8506 +++++++++-------- package.json | 76 +- 441 files changed, 8461 insertions(+), 7130 deletions(-) diff --git a/.editorconfig b/.editorconfig index 03696692..05c90c04 100644 --- a/.editorconfig +++ b/.editorconfig @@ -7,9 +7,10 @@ indent_style = space indent_size = 2 insert_final_newline = true trim_trailing_whitespace = true -max_line_length=150 +max_line_length = 150 [*.md] max_line_length = off trim_trailing_whitespace = false indent_size = 2 + diff --git a/.github/workflows/tp.yml b/.github/workflows/tp.yml index ca0516be..c0ad978b 100644 --- a/.github/workflows/tp.yml +++ b/.github/workflows/tp.yml @@ -1,6 +1,6 @@ name: TP CI Action -on: [push] +on: [ push ] jobs: build-and-run-tests: @@ -12,10 +12,10 @@ jobs: with: fetch-depth: 0 - - name: Use Node.js 18.x + - name: Use Node.js 20.x uses: actions/setup-node@v3 with: - node-version: 18.x + node-version: 20.x cache: 'npm' cache-dependency-path: '**/package-lock.json' diff --git a/.prettierrc b/.prettierrc index c296369a..52d3b3f7 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,5 +1,5 @@ { - "$schema": "http://json.schemastore.org/prettierrc", + "$schema": "https://json.schemastore.org/prettierrc", "singleQuote": true, "printWidth": 150, "bracketSpacing": true, diff --git a/apps/01-hands-on-solution/project.json b/apps/01-hands-on-solution/project.json index 7ac188c4..4f90c3e8 100644 --- a/apps/01-hands-on-solution/project.json +++ b/apps/01-hands-on-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/01-hands-on-solution", "index": "apps/01-hands-on-solution/src/index.html", - "main": "apps/01-hands-on-solution/src/main.ts", - "polyfills": "apps/01-hands-on-solution/src/polyfills.ts", + "browser": "apps/01-hands-on-solution/src/main.ts", + "polyfills": [ + "apps/01-hands-on-solution/src/polyfills.ts" + ], "tsConfig": "apps/01-hands-on-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "01-hands-on-solution:build:production" + "buildTarget": "01-hands-on-solution:build:production" }, "development": { - "browserTarget": "01-hands-on-solution:build:development" + "buildTarget": "01-hands-on-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "01-hands-on-solution:build" + "buildTarget": "01-hands-on-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/01-hands-on-solution" ], "options": { - "jestConfig": "apps/01-hands-on-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/01-hands-on-solution/jest.config.ts" } } }, diff --git a/apps/01-hands-on/project.json b/apps/01-hands-on/project.json index 08afdf26..1af73d05 100644 --- a/apps/01-hands-on/project.json +++ b/apps/01-hands-on/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/01-hands-on", "index": "apps/01-hands-on/src/index.html", - "main": "apps/01-hands-on/src/main.ts", - "polyfills": "apps/01-hands-on/src/polyfills.ts", + "browser": "apps/01-hands-on/src/main.ts", + "polyfills": [ + "apps/01-hands-on/src/polyfills.ts" + ], "tsConfig": "apps/01-hands-on/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "01-hands-on:build:production" + "buildTarget": "01-hands-on:build:production" }, "development": { - "browserTarget": "01-hands-on:build:development" + "buildTarget": "01-hands-on:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "01-hands-on:build" + "buildTarget": "01-hands-on:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/01-hands-on" ], "options": { - "jestConfig": "apps/01-hands-on/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/01-hands-on/jest.config.ts" } } }, diff --git a/apps/02-ngg-solution/project.json b/apps/02-ngg-solution/project.json index 394a3a38..82592b37 100644 --- a/apps/02-ngg-solution/project.json +++ b/apps/02-ngg-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/02-ngg-solution", "index": "apps/02-ngg-solution/src/index.html", - "main": "apps/02-ngg-solution/src/main.ts", - "polyfills": "apps/02-ngg-solution/src/polyfills.ts", + "browser": "apps/02-ngg-solution/src/main.ts", + "polyfills": [ + "apps/02-ngg-solution/src/polyfills.ts" + ], "tsConfig": "apps/02-ngg-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "02-ngg-solution:build:production" + "buildTarget": "02-ngg-solution:build:production" }, "development": { - "browserTarget": "02-ngg-solution:build:development" + "buildTarget": "02-ngg-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "02-ngg-solution:build" + "buildTarget": "02-ngg-solution:build" } }, "lint": { @@ -93,10 +93,9 @@ "{workspaceRoot}/coverage/apps/02-ngg-solution" ], "options": { - "jestConfig": "apps/02-ngg-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/02-ngg-solution/jest.config.ts" } } }, "tags": [] -} +} \ No newline at end of file diff --git a/apps/02-ngg/project.json b/apps/02-ngg/project.json index 0936d662..a47cc6fd 100644 --- a/apps/02-ngg/project.json +++ b/apps/02-ngg/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/02-ngg", "index": "apps/02-ngg/src/index.html", - "main": "apps/02-ngg/src/main.ts", - "polyfills": "apps/02-ngg/src/polyfills.ts", + "browser": "apps/02-ngg/src/main.ts", + "polyfills": [ + "apps/02-ngg/src/polyfills.ts" + ], "tsConfig": "apps/02-ngg/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "02-ngg:build:production" + "buildTarget": "02-ngg:build:production" }, "development": { - "browserTarget": "02-ngg:build:development" + "buildTarget": "02-ngg:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "02-ngg:build" + "buildTarget": "02-ngg:build" } }, "lint": { @@ -93,10 +93,9 @@ "{workspaceRoot}/coverage/apps/02-ngg" ], "options": { - "jestConfig": "apps/02-ngg/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/02-ngg/jest.config.ts" } } }, "tags": [] -} +} \ No newline at end of file diff --git a/apps/03-cpt-hierarchy-solution/project.json b/apps/03-cpt-hierarchy-solution/project.json index 916dc41e..7ef4e01a 100644 --- a/apps/03-cpt-hierarchy-solution/project.json +++ b/apps/03-cpt-hierarchy-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/03-cpt-hierarchy-solution", "index": "apps/03-cpt-hierarchy-solution/src/index.html", - "main": "apps/03-cpt-hierarchy-solution/src/main.ts", - "polyfills": "apps/03-cpt-hierarchy-solution/src/polyfills.ts", + "browser": "apps/03-cpt-hierarchy-solution/src/main.ts", + "polyfills": [ + "apps/03-cpt-hierarchy-solution/src/polyfills.ts" + ], "tsConfig": "apps/03-cpt-hierarchy-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "03-cpt-hierarchy-solution:build:production" + "buildTarget": "03-cpt-hierarchy-solution:build:production" }, "development": { - "browserTarget": "03-cpt-hierarchy-solution:build:development" + "buildTarget": "03-cpt-hierarchy-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "03-cpt-hierarchy-solution:build" + "buildTarget": "03-cpt-hierarchy-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/03-cpt-hierarchy-solution" ], "options": { - "jestConfig": "apps/03-cpt-hierarchy-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/03-cpt-hierarchy-solution/jest.config.ts" } } }, diff --git a/apps/03-cpt-hierarchy/project.json b/apps/03-cpt-hierarchy/project.json index 2d154498..79db0644 100644 --- a/apps/03-cpt-hierarchy/project.json +++ b/apps/03-cpt-hierarchy/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/03-cpt-hierarchy", "index": "apps/03-cpt-hierarchy/src/index.html", - "main": "apps/03-cpt-hierarchy/src/main.ts", - "polyfills": "apps/03-cpt-hierarchy/src/polyfills.ts", + "browser": "apps/03-cpt-hierarchy/src/main.ts", + "polyfills": [ + "apps/03-cpt-hierarchy/src/polyfills.ts" + ], "tsConfig": "apps/03-cpt-hierarchy/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "03-cpt-hierarchy:build:production" + "buildTarget": "03-cpt-hierarchy:build:production" }, "development": { - "browserTarget": "03-cpt-hierarchy:build:development" + "buildTarget": "03-cpt-hierarchy:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "03-cpt-hierarchy:build" + "buildTarget": "03-cpt-hierarchy:build" } }, "lint": { @@ -93,10 +93,9 @@ "{workspaceRoot}/coverage/apps/03-cpt-hierarchy" ], "options": { - "jestConfig": "apps/03-cpt-hierarchy/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/03-cpt-hierarchy/jest.config.ts" } } }, "tags": [] -} +} \ No newline at end of file diff --git a/apps/04-binding-solution/project.json b/apps/04-binding-solution/project.json index a72b6ad8..1cbc2e88 100644 --- a/apps/04-binding-solution/project.json +++ b/apps/04-binding-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/04-binding-solution", "index": "apps/04-binding-solution/src/index.html", - "main": "apps/04-binding-solution/src/main.ts", - "polyfills": "apps/04-binding-solution/src/polyfills.ts", + "browser": "apps/04-binding-solution/src/main.ts", + "polyfills": [ + "apps/04-binding-solution/src/polyfills.ts" + ], "tsConfig": "apps/04-binding-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "04-binding-solution:build:production" + "buildTarget": "04-binding-solution:build:production" }, "development": { - "browserTarget": "04-binding-solution:build:development" + "buildTarget": "04-binding-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "04-binding-solution:build" + "buildTarget": "04-binding-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/04-binding-solution" ], "options": { - "jestConfig": "apps/04-binding-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/04-binding-solution/jest.config.ts" } } }, diff --git a/apps/04-binding/project.json b/apps/04-binding/project.json index ef2de659..c46a23b0 100644 --- a/apps/04-binding/project.json +++ b/apps/04-binding/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/04-binding", "index": "apps/04-binding/src/index.html", - "main": "apps/04-binding/src/main.ts", - "polyfills": "apps/04-binding/src/polyfills.ts", + "browser": "apps/04-binding/src/main.ts", + "polyfills": [ + "apps/04-binding/src/polyfills.ts" + ], "tsConfig": "apps/04-binding/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "04-binding:build:production" + "buildTarget": "04-binding:build:production" }, "development": { - "browserTarget": "04-binding:build:development" + "buildTarget": "04-binding:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "04-binding:build" + "buildTarget": "04-binding:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/04-binding" ], "options": { - "jestConfig": "apps/04-binding/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/04-binding/jest.config.ts" } } }, diff --git a/apps/05-events-solution/project.json b/apps/05-events-solution/project.json index 0ee82586..87cd0a59 100644 --- a/apps/05-events-solution/project.json +++ b/apps/05-events-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/05-events-solution", "index": "apps/05-events-solution/src/index.html", - "main": "apps/05-events-solution/src/main.ts", - "polyfills": "apps/05-events-solution/src/polyfills.ts", + "browser": "apps/05-events-solution/src/main.ts", + "polyfills": [ + "apps/05-events-solution/src/polyfills.ts" + ], "tsConfig": "apps/05-events-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "05-events-solution:build:production" + "buildTarget": "05-events-solution:build:production" }, "development": { - "browserTarget": "05-events-solution:build:development" + "buildTarget": "05-events-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "05-events-solution:build" + "buildTarget": "05-events-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/05-events-solution" ], "options": { - "jestConfig": "apps/05-events-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/05-events-solution/jest.config.ts" } } }, diff --git a/apps/05-events/project.json b/apps/05-events/project.json index ef1ad2fd..7cd0fc32 100644 --- a/apps/05-events/project.json +++ b/apps/05-events/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/05-events", "index": "apps/05-events/src/index.html", - "main": "apps/05-events/src/main.ts", - "polyfills": "apps/05-events/src/polyfills.ts", + "browser": "apps/05-events/src/main.ts", + "polyfills": [ + "apps/05-events/src/polyfills.ts" + ], "tsConfig": "apps/05-events/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "05-events:build:production" + "buildTarget": "05-events:build:production" }, "development": { - "browserTarget": "05-events:build:development" + "buildTarget": "05-events:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "05-events:build" + "buildTarget": "05-events:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/05-events" ], "options": { - "jestConfig": "apps/05-events/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/05-events/jest.config.ts" } } }, diff --git a/apps/06-http-solution/project.json b/apps/06-http-solution/project.json index ed0286a8..a1a4e198 100644 --- a/apps/06-http-solution/project.json +++ b/apps/06-http-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/06-http-solution", "index": "apps/06-http-solution/src/index.html", - "main": "apps/06-http-solution/src/main.ts", - "polyfills": "apps/06-http-solution/src/polyfills.ts", + "browser": "apps/06-http-solution/src/main.ts", + "polyfills": [ + "apps/06-http-solution/src/polyfills.ts" + ], "tsConfig": "apps/06-http-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "06-http-solution:build:production" + "buildTarget": "06-http-solution:build:production" }, "development": { - "browserTarget": "06-http-solution:build:development" + "buildTarget": "06-http-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "06-http-solution:build" + "buildTarget": "06-http-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/06-http-solution" ], "options": { - "jestConfig": "apps/06-http-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/06-http-solution/jest.config.ts" } } }, diff --git a/apps/06-http-solution/src/app/feature/home/home.component.html b/apps/06-http-solution/src/app/feature/home/home.component.html index eafcfa5e..3957c9d2 100644 --- a/apps/06-http-solution/src/app/feature/home/home.component.html +++ b/apps/06-http-solution/src/app/feature/home/home.component.html @@ -1,35 +1,37 @@
- - - person-photo - - {{ person.firstname + ' ' + person.lastname}} - - {{ person.entity }} - - email - {{person.email}} - - - phone - {{person.phone}} - - - - -
LocationSFEIR
- -
-
+ @if (person$|async;as person) { + + + person-photo + + {{ person.firstname + ' ' + person.lastname }} + + {{ person.entity }} + + email + {{ person.email }} + + + phone + {{ person.phone }} + + + + +
LocationSFEIR
+ +
+
+ }
- \ No newline at end of file + diff --git a/apps/06-http/project.json b/apps/06-http/project.json index e5fb4240..772e028e 100644 --- a/apps/06-http/project.json +++ b/apps/06-http/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/06-http", "index": "apps/06-http/src/index.html", - "main": "apps/06-http/src/main.ts", - "polyfills": "apps/06-http/src/polyfills.ts", + "browser": "apps/06-http/src/main.ts", + "polyfills": [ + "apps/06-http/src/polyfills.ts" + ], "tsConfig": "apps/06-http/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "06-http:build:production" + "buildTarget": "06-http:build:production" }, "development": { - "browserTarget": "06-http:build:development" + "buildTarget": "06-http:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "06-http:build" + "buildTarget": "06-http:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/06-http" ], "options": { - "jestConfig": "apps/06-http/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/06-http/jest.config.ts" } } }, diff --git a/apps/07-router-solution/project.json b/apps/07-router-solution/project.json index 7bba817b..d15fab1e 100644 --- a/apps/07-router-solution/project.json +++ b/apps/07-router-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/07-router-solution", "index": "apps/07-router-solution/src/index.html", - "main": "apps/07-router-solution/src/main.ts", - "polyfills": "apps/07-router-solution/src/polyfills.ts", + "browser": "apps/07-router-solution/src/main.ts", + "polyfills": [ + "apps/07-router-solution/src/polyfills.ts" + ], "tsConfig": "apps/07-router-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "07-router-solution:build:production" + "buildTarget": "07-router-solution:build:production" }, "development": { - "browserTarget": "07-router-solution:build:development" + "buildTarget": "07-router-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "07-router-solution:build" + "buildTarget": "07-router-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/07-router-solution" ], "options": { - "jestConfig": "apps/07-router-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/07-router-solution/jest.config.ts" } } }, diff --git a/apps/07-router-solution/src/app/feature/home/home.component.html b/apps/07-router-solution/src/app/feature/home/home.component.html index eafcfa5e..7b9d63b0 100644 --- a/apps/07-router-solution/src/app/feature/home/home.component.html +++ b/apps/07-router-solution/src/app/feature/home/home.component.html @@ -1,35 +1,37 @@
- - - person-photo - - {{ person.firstname + ' ' + person.lastname}} - - {{ person.entity }} - - email - {{person.email}} - - - phone - {{person.phone}} - - - - -
LocationSFEIR
- -
-
+ @if (person$ |async;as person) { + + + person-photo + + {{ person.firstname + ' ' + person.lastname }} + + {{ person.entity }} + + email + {{ person.email }} + + + phone + {{ person.phone }} + + + + +
LocationSFEIR
+ +
+
+ }
- \ No newline at end of file + diff --git a/apps/07-router/project.json b/apps/07-router/project.json index 2690695e..d00cb048 100644 --- a/apps/07-router/project.json +++ b/apps/07-router/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/07-router", "index": "apps/07-router/src/index.html", - "main": "apps/07-router/src/main.ts", - "polyfills": "apps/07-router/src/polyfills.ts", + "browser": "apps/07-router/src/main.ts", + "polyfills": [ + "apps/07-router/src/polyfills.ts" + ], "tsConfig": "apps/07-router/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "07-router:build:production" + "buildTarget": "07-router:build:production" }, "development": { - "browserTarget": "07-router:build:development" + "buildTarget": "07-router:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "07-router:build" + "buildTarget": "07-router:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/07-router" ], "options": { - "jestConfig": "apps/07-router/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/07-router/jest.config.ts" } } }, diff --git a/apps/07-router/src/app/feature/home/home.component.html b/apps/07-router/src/app/feature/home/home.component.html index eafcfa5e..3d7b19a6 100644 --- a/apps/07-router/src/app/feature/home/home.component.html +++ b/apps/07-router/src/app/feature/home/home.component.html @@ -1,35 +1,38 @@
- - - person-photo - - {{ person.firstname + ' ' + person.lastname}} - - {{ person.entity }} - - email - {{person.email}} - - - phone - {{person.phone}} - - - - -
LocationSFEIR
- -
-
+ @if (person$ |async;as person) { + + + person-photo + + {{ person.firstname + ' ' + person.lastname }} + + {{ person.entity }} + + email + {{ person.email }} + + + phone + {{ person.phone }} + + + + +
LocationSFEIR
+ +
+
+ }
- \ No newline at end of file + + diff --git a/apps/08-ng-for-solution/project.json b/apps/08-ng-for-solution/project.json index cb3cd7c2..384cc6cd 100644 --- a/apps/08-ng-for-solution/project.json +++ b/apps/08-ng-for-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/08-ng-for-solution", "index": "apps/08-ng-for-solution/src/index.html", - "main": "apps/08-ng-for-solution/src/main.ts", - "polyfills": "apps/08-ng-for-solution/src/polyfills.ts", + "browser": "apps/08-ng-for-solution/src/main.ts", + "polyfills": [ + "apps/08-ng-for-solution/src/polyfills.ts" + ], "tsConfig": "apps/08-ng-for-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "08-ng-for-solution:build:production" + "buildTarget": "08-ng-for-solution:build:production" }, "development": { - "browserTarget": "08-ng-for-solution:build:development" + "buildTarget": "08-ng-for-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "08-ng-for-solution:build" + "buildTarget": "08-ng-for-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/08-ng-for-solution-solution" ], "options": { - "jestConfig": "apps/08-ng-for-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/08-ng-for-solution/jest.config.ts" } } }, diff --git a/apps/08-ng-for-solution/src/app/feature/home/home.component.html b/apps/08-ng-for-solution/src/app/feature/home/home.component.html index eafcfa5e..7b9d63b0 100644 --- a/apps/08-ng-for-solution/src/app/feature/home/home.component.html +++ b/apps/08-ng-for-solution/src/app/feature/home/home.component.html @@ -1,35 +1,37 @@
- - - person-photo - - {{ person.firstname + ' ' + person.lastname}} - - {{ person.entity }} - - email - {{person.email}} - - - phone - {{person.phone}} - - - - -
LocationSFEIR
- -
-
+ @if (person$ |async;as person) { + + + person-photo + + {{ person.firstname + ' ' + person.lastname }} + + {{ person.entity }} + + email + {{ person.email }} + + + phone + {{ person.phone }} + + + + +
LocationSFEIR
+ +
+
+ }
- \ No newline at end of file + diff --git a/apps/08-ng-for-solution/src/app/feature/people/people.component.html b/apps/08-ng-for-solution/src/app/feature/people/people.component.html index 1b4ed38c..43c55a7c 100644 --- a/apps/08-ng-for-solution/src/app/feature/people/people.component.html +++ b/apps/08-ng-for-solution/src/app/feature/people/people.component.html @@ -1,34 +1,36 @@
- - - person-photo - - {{ person.firstname + ' ' + person.lastname}} - - {{ person.entity }} - - email - {{person.email}} - - - phone - {{person.phone}} - - - - -
LocationSFEIR
- -
-
-
\ No newline at end of file + @for (person of people$ |async;track person.id) { + + + person-photo + + {{ person.firstname + ' ' + person.lastname }} + + {{ person.entity }} + + email + {{ person.email }} + + + phone + {{ person.phone }} + + + + +
LocationSFEIR
+ +
+
+ } + diff --git a/apps/08-ng-for/project.json b/apps/08-ng-for/project.json index d81060fe..71ae54d4 100644 --- a/apps/08-ng-for/project.json +++ b/apps/08-ng-for/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/08-ng-for", "index": "apps/08-ng-for/src/index.html", - "main": "apps/08-ng-for/src/main.ts", - "polyfills": "apps/08-ng-for/src/polyfills.ts", + "browser": "apps/08-ng-for/src/main.ts", + "polyfills": [ + "apps/08-ng-for/src/polyfills.ts" + ], "tsConfig": "apps/08-ng-for/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "08-ng-for:build:production" + "buildTarget": "08-ng-for:build:production" }, "development": { - "browserTarget": "08-ng-for:build:development" + "buildTarget": "08-ng-for:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "08-ng-for:build" + "buildTarget": "08-ng-for:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/08-ng-for" ], "options": { - "jestConfig": "apps/08-ng-for/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/08-ng-for/jest.config.ts" } } }, diff --git a/apps/08-ng-for/src/app/feature/home/home.component.html b/apps/08-ng-for/src/app/feature/home/home.component.html index eafcfa5e..d441af40 100644 --- a/apps/08-ng-for/src/app/feature/home/home.component.html +++ b/apps/08-ng-for/src/app/feature/home/home.component.html @@ -1,35 +1,37 @@
- - - person-photo - - {{ person.firstname + ' ' + person.lastname}} - - {{ person.entity }} - - email - {{person.email}} - - - phone - {{person.phone}} - - - - -
LocationSFEIR
- -
-
+ @if (person$ | async;as person) { + + + person-photo + + {{ person.firstname + ' ' + person.lastname }} + + {{ person.entity }} + + email + {{ person.email }} + + + phone + {{ person.phone }} + + + + +
LocationSFEIR
+ +
+
+ }
- \ No newline at end of file + diff --git a/apps/09-input-solution/project.json b/apps/09-input-solution/project.json index a1369ca0..b548199c 100644 --- a/apps/09-input-solution/project.json +++ b/apps/09-input-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/09-input-solution", "index": "apps/09-input-solution/src/index.html", - "main": "apps/09-input-solution/src/main.ts", - "polyfills": "apps/09-input-solution/src/polyfills.ts", + "browser": "apps/09-input-solution/src/main.ts", + "polyfills": [ + "apps/09-input-solution/src/polyfills.ts" + ], "tsConfig": "apps/09-input-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "09-input-solution:build:production" + "buildTarget": "09-input-solution:build:production" }, "development": { - "browserTarget": "09-input-solution:build:development" + "buildTarget": "09-input-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "09-input-solution:build" + "buildTarget": "09-input-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/09-input-solution" ], "options": { - "jestConfig": "apps/09-input-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/09-input-solution/jest.config.ts" } } }, diff --git a/apps/09-input-solution/src/app/feature/home/home.component.html b/apps/09-input-solution/src/app/feature/home/home.component.html index ee0d49a3..a51a6fa4 100644 --- a/apps/09-input-solution/src/app/feature/home/home.component.html +++ b/apps/09-input-solution/src/app/feature/home/home.component.html @@ -1,5 +1,7 @@
- + @if (person$ |async;as person) { + + }
+ class="material-icons">autorenew diff --git a/apps/09-input-solution/src/app/feature/people/people.component.html b/apps/09-input-solution/src/app/feature/people/people.component.html index 3886916a..662f0fe6 100644 --- a/apps/09-input-solution/src/app/feature/people/people.component.html +++ b/apps/09-input-solution/src/app/feature/people/people.component.html @@ -1,3 +1,5 @@
- + @for (person of people$ | async;track person.id) { + + }
diff --git a/apps/09-input/project.json b/apps/09-input/project.json index 51bb18a1..064f679d 100644 --- a/apps/09-input/project.json +++ b/apps/09-input/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/09-input", "index": "apps/09-input/src/index.html", - "main": "apps/09-input/src/main.ts", - "polyfills": "apps/09-input/src/polyfills.ts", + "browser": "apps/09-input/src/main.ts", + "polyfills": [ + "apps/09-input/src/polyfills.ts" + ], "tsConfig": "apps/09-input/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "09-input:build:production" + "buildTarget": "09-input:build:production" }, "development": { - "browserTarget": "09-input:build:development" + "buildTarget": "09-input:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "09-input:build" + "buildTarget": "09-input:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/09-input" ], "options": { - "jestConfig": "apps/09-input/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/09-input/jest.config.ts" } } }, diff --git a/apps/09-input/src/app/feature/home/home.component.html b/apps/09-input/src/app/feature/home/home.component.html index eafcfa5e..d441af40 100644 --- a/apps/09-input/src/app/feature/home/home.component.html +++ b/apps/09-input/src/app/feature/home/home.component.html @@ -1,35 +1,37 @@
- - - person-photo - - {{ person.firstname + ' ' + person.lastname}} - - {{ person.entity }} - - email - {{person.email}} - - - phone - {{person.phone}} - - - - -
LocationSFEIR
- -
-
+ @if (person$ | async;as person) { + + + person-photo + + {{ person.firstname + ' ' + person.lastname }} + + {{ person.entity }} + + email + {{ person.email }} + + + phone + {{ person.phone }} + + + + +
LocationSFEIR
+ +
+
+ }
- \ No newline at end of file + diff --git a/apps/09-input/src/app/feature/people/people.component.html b/apps/09-input/src/app/feature/people/people.component.html index 1b4ed38c..ce5f119d 100644 --- a/apps/09-input/src/app/feature/people/people.component.html +++ b/apps/09-input/src/app/feature/people/people.component.html @@ -1,34 +1,36 @@
- - - person-photo - - {{ person.firstname + ' ' + person.lastname}} - - {{ person.entity }} - - email - {{person.email}} - - - phone - {{person.phone}} - - - - -
LocationSFEIR
- -
-
-
\ No newline at end of file + @for (person of people$|async;track person.id) { + + + person-photo + + {{ person.firstname + ' ' + person.lastname }} + + {{ person.entity }} + + email + {{ person.email }} + + + phone + {{ person.phone }} + + + + +
LocationSFEIR
+ +
+
+ } + diff --git a/apps/10-output-solution/project.json b/apps/10-output-solution/project.json index 73c95be7..c940d7d7 100644 --- a/apps/10-output-solution/project.json +++ b/apps/10-output-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/10-output-solution", "index": "apps/10-output-solution/src/index.html", - "main": "apps/10-output-solution/src/main.ts", - "polyfills": "apps/10-output-solution/src/polyfills.ts", + "browser": "apps/10-output-solution/src/main.ts", + "polyfills": [ + "apps/10-output-solution/src/polyfills.ts" + ], "tsConfig": "apps/10-output-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "10-output-solution:build:production" + "buildTarget": "10-output-solution:build:production" }, "development": { - "browserTarget": "10-output-solution:build:development" + "buildTarget": "10-output-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "10-output-solution:build" + "buildTarget": "10-output-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/10-output-solution" ], "options": { - "jestConfig": "apps/10-output-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/10-output-solution/jest.config.ts" } } }, diff --git a/apps/10-output-solution/src/app/feature/home/home.component.html b/apps/10-output-solution/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/10-output-solution/src/app/feature/home/home.component.html +++ b/apps/10-output-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/10-output-solution/src/app/feature/people/people.component.html b/apps/10-output-solution/src/app/feature/people/people.component.html index 9fb55fe0..dd783d29 100644 --- a/apps/10-output-solution/src/app/feature/people/people.component.html +++ b/apps/10-output-solution/src/app/feature/people/people.component.html @@ -1,4 +1,5 @@
- - + @for (person of people$ | async;track person.id) { + + }
diff --git a/apps/10-output/project.json b/apps/10-output/project.json index 2c02a03d..1f638017 100644 --- a/apps/10-output/project.json +++ b/apps/10-output/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/10-output", "index": "apps/10-output/src/index.html", - "main": "apps/10-output/src/main.ts", - "polyfills": "apps/10-output/src/polyfills.ts", + "browser": "apps/10-output/src/main.ts", + "polyfills": [ + "apps/10-output/src/polyfills.ts" + ], "tsConfig": "apps/10-output/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "10-output:build:production" + "buildTarget": "10-output:build:production" }, "development": { - "browserTarget": "10-output:build:development" + "buildTarget": "10-output:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "10-output:build" + "buildTarget": "10-output:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/10-output" ], "options": { - "jestConfig": "apps/10-output/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/10-output/jest.config.ts" } } }, diff --git a/apps/10-output/src/app/feature/home/home.component.html b/apps/10-output/src/app/feature/home/home.component.html index 586b6320..d027570d 100644 --- a/apps/10-output/src/app/feature/home/home.component.html +++ b/apps/10-output/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$|async;as person) { + + }
diff --git a/apps/10-output/src/app/feature/people/people.component.html b/apps/10-output/src/app/feature/people/people.component.html index 3886916a..e360936e 100644 --- a/apps/10-output/src/app/feature/people/people.component.html +++ b/apps/10-output/src/app/feature/people/people.component.html @@ -1,3 +1,5 @@
- + @for (person of people$|async;track person.id) { + + }
diff --git a/apps/11-service-solution/project.json b/apps/11-service-solution/project.json index 4450e46e..a814915d 100644 --- a/apps/11-service-solution/project.json +++ b/apps/11-service-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/11-service-solution", "index": "apps/11-service-solution/src/index.html", - "main": "apps/11-service-solution/src/main.ts", - "polyfills": "apps/11-service-solution/src/polyfills.ts", + "browser": "apps/11-service-solution/src/main.ts", + "polyfills": [ + "apps/11-service-solution/src/polyfills.ts" + ], "tsConfig": "apps/11-service-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "11-service-solution:build:production" + "buildTarget": "11-service-solution:build:production" }, "development": { - "browserTarget": "11-service-solution:build:development" + "buildTarget": "11-service-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "11-service-solution:build" + "buildTarget": "11-service-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/11-service-solution" ], "options": { - "jestConfig": "apps/11-service-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/11-service-solution/jest.config.ts" } } }, diff --git a/apps/11-service-solution/src/app/feature/home/home.component.html b/apps/11-service-solution/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/11-service-solution/src/app/feature/home/home.component.html +++ b/apps/11-service-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/11-service-solution/src/app/feature/people/people.component.html b/apps/11-service-solution/src/app/feature/people/people.component.html index 9fb55fe0..61fd3e6a 100644 --- a/apps/11-service-solution/src/app/feature/people/people.component.html +++ b/apps/11-service-solution/src/app/feature/people/people.component.html @@ -1,4 +1,5 @@
- - + @for (person of people$|async;track person.id) { + + }
diff --git a/apps/11-service/project.json b/apps/11-service/project.json index 244e5e14..4be54398 100644 --- a/apps/11-service/project.json +++ b/apps/11-service/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/11-service", "index": "apps/11-service/src/index.html", - "main": "apps/11-service/src/main.ts", - "polyfills": "apps/11-service/src/polyfills.ts", + "browser": "apps/11-service/src/main.ts", + "polyfills": [ + "apps/11-service/src/polyfills.ts" + ], "tsConfig": "apps/11-service/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "11-service:build:production" + "buildTarget": "11-service:build:production" }, "development": { - "browserTarget": "11-service:build:development" + "buildTarget": "11-service:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "11-service:build" + "buildTarget": "11-service:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/11-service" ], "options": { - "jestConfig": "apps/11-service/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/11-service/jest.config.ts" } } }, diff --git a/apps/11-service/src/app/feature/home/home.component.html b/apps/11-service/src/app/feature/home/home.component.html index ab23356a..bf71d090 100644 --- a/apps/11-service/src/app/feature/home/home.component.html +++ b/apps/11-service/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$|async;as person) { + + }
diff --git a/apps/11-service/src/app/feature/people/people.component.html b/apps/11-service/src/app/feature/people/people.component.html index 9fb55fe0..a8c8973e 100644 --- a/apps/11-service/src/app/feature/people/people.component.html +++ b/apps/11-service/src/app/feature/people/people.component.html @@ -1,4 +1,5 @@
- - + @for (person of people$ |async;track person.id) { + + }
diff --git a/apps/12-pipe-using-solution/project.json b/apps/12-pipe-using-solution/project.json index fc51fbeb..59d7abe3 100644 --- a/apps/12-pipe-using-solution/project.json +++ b/apps/12-pipe-using-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/12-pipe-using-solution", "index": "apps/12-pipe-using-solution/src/index.html", - "main": "apps/12-pipe-using-solution/src/main.ts", - "polyfills": "apps/12-pipe-using-solution/src/polyfills.ts", + "browser": "apps/12-pipe-using-solution/src/main.ts", + "polyfills": [ + "apps/12-pipe-using-solution/src/polyfills.ts" + ], "tsConfig": "apps/12-pipe-using-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "12-pipe-using-solution:build:production" + "buildTarget": "12-pipe-using-solution:build:production" }, "development": { - "browserTarget": "12-pipe-using-solution:build:development" + "buildTarget": "12-pipe-using-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "12-pipe-using-solution:build" + "buildTarget": "12-pipe-using-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/12-pipe-using-solution" ], "options": { - "jestConfig": "apps/12-pipe-using-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/12-pipe-using-solution/jest.config.ts" } } }, diff --git a/apps/12-pipe-using-solution/src/app/feature/home/home.component.html b/apps/12-pipe-using-solution/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/12-pipe-using-solution/src/app/feature/home/home.component.html +++ b/apps/12-pipe-using-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/12-pipe-using-solution/src/app/feature/people/people.component.html b/apps/12-pipe-using-solution/src/app/feature/people/people.component.html index 9fb55fe0..a8c8973e 100644 --- a/apps/12-pipe-using-solution/src/app/feature/people/people.component.html +++ b/apps/12-pipe-using-solution/src/app/feature/people/people.component.html @@ -1,4 +1,5 @@
- - + @for (person of people$ |async;track person.id) { + + }
diff --git a/apps/12-pipe-using/project.json b/apps/12-pipe-using/project.json index 74332881..eec281a6 100644 --- a/apps/12-pipe-using/project.json +++ b/apps/12-pipe-using/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/12-pipe-using", "index": "apps/12-pipe-using/src/index.html", - "main": "apps/12-pipe-using/src/main.ts", - "polyfills": "apps/12-pipe-using/src/polyfills.ts", + "browser": "apps/12-pipe-using/src/main.ts", + "polyfills": [ + "apps/12-pipe-using/src/polyfills.ts" + ], "tsConfig": "apps/12-pipe-using/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "12-pipe-using:build:production" + "buildTarget": "12-pipe-using:build:production" }, "development": { - "browserTarget": "12-pipe-using:build:development" + "buildTarget": "12-pipe-using:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "12-pipe-using:build" + "buildTarget": "12-pipe-using:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/12-pipe-using" ], "options": { - "jestConfig": "apps/12-pipe-using/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/12-pipe-using/jest.config.ts" } } }, diff --git a/apps/12-pipe-using/src/app/feature/home/home.component.html b/apps/12-pipe-using/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/12-pipe-using/src/app/feature/home/home.component.html +++ b/apps/12-pipe-using/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/12-pipe-using/src/app/feature/people/people.component.html b/apps/12-pipe-using/src/app/feature/people/people.component.html index 9fb55fe0..61fd3e6a 100644 --- a/apps/12-pipe-using/src/app/feature/people/people.component.html +++ b/apps/12-pipe-using/src/app/feature/people/people.component.html @@ -1,4 +1,5 @@
- - + @for (person of people$|async;track person.id) { + + }
diff --git a/apps/13-pipe-custom-solution/project.json b/apps/13-pipe-custom-solution/project.json index d46d4f3c..9f01c510 100644 --- a/apps/13-pipe-custom-solution/project.json +++ b/apps/13-pipe-custom-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/13-pipe-custom-solution", "index": "apps/13-pipe-custom-solution/src/index.html", - "main": "apps/13-pipe-custom-solution/src/main.ts", - "polyfills": "apps/13-pipe-custom-solution/src/polyfills.ts", + "browser": "apps/13-pipe-custom-solution/src/main.ts", + "polyfills": [ + "apps/13-pipe-custom-solution/src/polyfills.ts" + ], "tsConfig": "apps/13-pipe-custom-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "13-pipe-custom-solution:build:production" + "buildTarget": "13-pipe-custom-solution:build:production" }, "development": { - "browserTarget": "13-pipe-custom-solution:build:development" + "buildTarget": "13-pipe-custom-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "13-pipe-custom-solution:build" + "buildTarget": "13-pipe-custom-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/13-pipe-custom-solution" ], "options": { - "jestConfig": "apps/13-pipe-custom-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/13-pipe-custom-solution/jest.config.ts" } } }, diff --git a/apps/13-pipe-custom-solution/src/app/feature/home/home.component.html b/apps/13-pipe-custom-solution/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/13-pipe-custom-solution/src/app/feature/home/home.component.html +++ b/apps/13-pipe-custom-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/13-pipe-custom-solution/src/app/feature/people/people.component.html b/apps/13-pipe-custom-solution/src/app/feature/people/people.component.html index 9fb55fe0..a8c8973e 100644 --- a/apps/13-pipe-custom-solution/src/app/feature/people/people.component.html +++ b/apps/13-pipe-custom-solution/src/app/feature/people/people.component.html @@ -1,4 +1,5 @@
- - + @for (person of people$ |async;track person.id) { + + }
diff --git a/apps/13-pipe-custom/project.json b/apps/13-pipe-custom/project.json index 53d57b0d..20d05092 100644 --- a/apps/13-pipe-custom/project.json +++ b/apps/13-pipe-custom/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/13-pipe-custom", "index": "apps/13-pipe-custom/src/index.html", - "main": "apps/13-pipe-custom/src/main.ts", - "polyfills": "apps/13-pipe-custom/src/polyfills.ts", + "browser": "apps/13-pipe-custom/src/main.ts", + "polyfills": [ + "apps/13-pipe-custom/src/polyfills.ts" + ], "tsConfig": "apps/13-pipe-custom/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "13-pipe-custom:build:production" + "buildTarget": "13-pipe-custom:build:production" }, "development": { - "browserTarget": "13-pipe-custom:build:development" + "buildTarget": "13-pipe-custom:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "13-pipe-custom:build" + "buildTarget": "13-pipe-custom:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/13-pipe-custom" ], "options": { - "jestConfig": "apps/13-pipe-custom/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/13-pipe-custom/jest.config.ts" } } }, diff --git a/apps/13-pipe-custom/src/app/feature/home/home.component.html b/apps/13-pipe-custom/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/13-pipe-custom/src/app/feature/home/home.component.html +++ b/apps/13-pipe-custom/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/13-pipe-custom/src/app/feature/people/people.component.html b/apps/13-pipe-custom/src/app/feature/people/people.component.html index 9fb55fe0..a8c8973e 100644 --- a/apps/13-pipe-custom/src/app/feature/people/people.component.html +++ b/apps/13-pipe-custom/src/app/feature/people/people.component.html @@ -1,4 +1,5 @@
- - + @for (person of people$ |async;track person.id) { + + }
diff --git a/apps/14-directive-using-solution/project.json b/apps/14-directive-using-solution/project.json index 53c2b0de..40609510 100644 --- a/apps/14-directive-using-solution/project.json +++ b/apps/14-directive-using-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/14-directive-using-solution", "index": "apps/14-directive-using-solution/src/index.html", - "main": "apps/14-directive-using-solution/src/main.ts", - "polyfills": "apps/14-directive-using-solution/src/polyfills.ts", + "browser": "apps/14-directive-using-solution/src/main.ts", + "polyfills": [ + "apps/14-directive-using-solution/src/polyfills.ts" + ], "tsConfig": "apps/14-directive-using-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "14-directive-using-solution:build:production" + "buildTarget": "14-directive-using-solution:build:production" }, "development": { - "browserTarget": "14-directive-using-solution:build:development" + "buildTarget": "14-directive-using-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "14-directive-using-solution:build" + "buildTarget": "14-directive-using-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/14-directive-using-solution" ], "options": { - "jestConfig": "apps/14-directive-using-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/14-directive-using-solution/jest.config.ts" } } }, diff --git a/apps/14-directive-using-solution/src/app/feature/home/home.component.html b/apps/14-directive-using-solution/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/14-directive-using-solution/src/app/feature/home/home.component.html +++ b/apps/14-directive-using-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/14-directive-using-solution/src/app/feature/people/people.component.html b/apps/14-directive-using-solution/src/app/feature/people/people.component.html index 6381dafc..f3a61861 100644 --- a/apps/14-directive-using-solution/src/app/feature/people/people.component.html +++ b/apps/14-directive-using-solution/src/app/feature/people/people.component.html @@ -1,22 +1,33 @@ - -
- - -
-
- - - photo-people -

{{ person.firstname }} {{ person.lastname }}

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

{{ person.firstname }} {{ person.lastname }}

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
-
+} + + diff --git a/apps/14-directive-using/project.json b/apps/14-directive-using/project.json index 85f9b356..0da561bf 100644 --- a/apps/14-directive-using/project.json +++ b/apps/14-directive-using/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/14-directive-using", "index": "apps/14-directive-using/src/index.html", - "main": "apps/14-directive-using/src/main.ts", - "polyfills": "apps/14-directive-using/src/polyfills.ts", + "browser": "apps/14-directive-using/src/main.ts", + "polyfills": [ + "apps/14-directive-using/src/polyfills.ts" + ], "tsConfig": "apps/14-directive-using/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "14-directive-using:build:production" + "buildTarget": "14-directive-using:build:production" }, "development": { - "browserTarget": "14-directive-using:build:development" + "buildTarget": "14-directive-using:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "14-directive-using:build" + "buildTarget": "14-directive-using:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/14-directive-using" ], "options": { - "jestConfig": "apps/14-directive-using/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/14-directive-using/jest.config.ts" } } }, diff --git a/apps/14-directive-using/src/app/feature/home/home.component.html b/apps/14-directive-using/src/app/feature/home/home.component.html index ab23356a..61ec8781 100644 --- a/apps/14-directive-using/src/app/feature/home/home.component.html +++ b/apps/14-directive-using/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ | async;as person) { + + }
diff --git a/apps/14-directive-using/src/app/feature/people/people.component.html b/apps/14-directive-using/src/app/feature/people/people.component.html index 373d113b..e47cba85 100644 --- a/apps/14-directive-using/src/app/feature/people/people.component.html +++ b/apps/14-directive-using/src/app/feature/people/people.component.html @@ -1,16 +1,19 @@
- - + @for (person of people$ |async;track person.id) { + + }
- - person-image -

{{ person.firstname }} {{ person.lastname }}

-

- {{ person.entity }} — {{ person.email }} -

--> -
+ @for (person of people$ | async;track person.id) { + + person-image +

{{ person.firstname }} {{ person.lastname }}

+

+ {{ person.entity }} — {{ person.email }} +

+
+ }
diff --git a/apps/15-directive-custom-solution/project.json b/apps/15-directive-custom-solution/project.json index a686be97..8da11489 100644 --- a/apps/15-directive-custom-solution/project.json +++ b/apps/15-directive-custom-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/15-directive-custom-solution", "index": "apps/15-directive-custom-solution/src/index.html", - "main": "apps/15-directive-custom-solution/src/main.ts", - "polyfills": "apps/15-directive-custom-solution/src/polyfills.ts", + "browser": "apps/15-directive-custom-solution/src/main.ts", + "polyfills": [ + "apps/15-directive-custom-solution/src/polyfills.ts" + ], "tsConfig": "apps/15-directive-custom-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "15-directive-custom-solution:build:production" + "buildTarget": "15-directive-custom-solution:build:production" }, "development": { - "browserTarget": "15-directive-custom-solution:build:development" + "buildTarget": "15-directive-custom-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "15-directive-custom-solution:build" + "buildTarget": "15-directive-custom-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/15-directive-custom-solution" ], "options": { - "jestConfig": "apps/15-directive-custom-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/15-directive-custom-solution/jest.config.ts" } } }, diff --git a/apps/15-directive-custom-solution/src/app/feature/home/home.component.html b/apps/15-directive-custom-solution/src/app/feature/home/home.component.html index ab23356a..61ec8781 100644 --- a/apps/15-directive-custom-solution/src/app/feature/home/home.component.html +++ b/apps/15-directive-custom-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ | async;as person) { + + }
diff --git a/apps/15-directive-custom-solution/src/app/feature/people/people.component.html b/apps/15-directive-custom-solution/src/app/feature/people/people.component.html index 5163bfab..29873aec 100644 --- a/apps/15-directive-custom-solution/src/app/feature/people/people.component.html +++ b/apps/15-directive-custom-solution/src/app/feature/people/people.component.html @@ -1,24 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

{{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
-
-
+} + + diff --git a/apps/15-directive-custom-solution/src/app/shared/directives/badge.directive.ts b/apps/15-directive-custom-solution/src/app/shared/directives/badge.directive.ts index c7f8f4d4..24699532 100644 --- a/apps/15-directive-custom-solution/src/app/shared/directives/badge.directive.ts +++ b/apps/15-directive-custom-solution/src/app/shared/directives/badge.directive.ts @@ -6,7 +6,10 @@ import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core'; export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/15-directive-custom/project.json b/apps/15-directive-custom/project.json index 254b9db2..82eaaf3d 100644 --- a/apps/15-directive-custom/project.json +++ b/apps/15-directive-custom/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/15-directive-custom", "index": "apps/15-directive-custom/src/index.html", - "main": "apps/15-directive-custom/src/main.ts", - "polyfills": "apps/15-directive-custom/src/polyfills.ts", + "browser": "apps/15-directive-custom/src/main.ts", + "polyfills": [ + "apps/15-directive-custom/src/polyfills.ts" + ], "tsConfig": "apps/15-directive-custom/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "15-directive-custom:build:production" + "buildTarget": "15-directive-custom:build:production" }, "development": { - "browserTarget": "15-directive-custom:build:development" + "buildTarget": "15-directive-custom:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "15-directive-custom:build" + "buildTarget": "15-directive-custom:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/15-directive-custom" ], "options": { - "jestConfig": "apps/15-directive-custom/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/15-directive-custom/jest.config.ts" } } }, diff --git a/apps/15-directive-custom/src/app/feature/home/home.component.html b/apps/15-directive-custom/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/15-directive-custom/src/app/feature/home/home.component.html +++ b/apps/15-directive-custom/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/15-directive-custom/src/app/feature/people/people.component.html b/apps/15-directive-custom/src/app/feature/people/people.component.html index dfb03480..594d3dde 100644 --- a/apps/15-directive-custom/src/app/feature/people/people.component.html +++ b/apps/15-directive-custom/src/app/feature/people/people.component.html @@ -1,22 +1,31 @@ - -
- - -
-
- - - -

{{ person.firstname }} {{ person.lastname }}

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

{{ person.firstname }} {{ person.lastname }}

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
-
-
+} diff --git a/apps/16-template-driven-form-solution/project.json b/apps/16-template-driven-form-solution/project.json index 3875ce7b..114e4138 100644 --- a/apps/16-template-driven-form-solution/project.json +++ b/apps/16-template-driven-form-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/16-template-driven-form-solution", "index": "apps/16-template-driven-form-solution/src/index.html", - "main": "apps/16-template-driven-form-solution/src/main.ts", - "polyfills": "apps/16-template-driven-form-solution/src/polyfills.ts", + "browser": "apps/16-template-driven-form-solution/src/main.ts", + "polyfills": [ + "apps/16-template-driven-form-solution/src/polyfills.ts" + ], "tsConfig": "apps/16-template-driven-form-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "16-template-driven-form-solution:build:production" + "buildTarget": "16-template-driven-form-solution:build:production" }, "development": { - "browserTarget": "16-template-driven-form-solution:build:development" + "buildTarget": "16-template-driven-form-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "16-template-driven-form-solution:build" + "buildTarget": "16-template-driven-form-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/16-template-driven-form-solution" ], "options": { - "jestConfig": "apps/16-template-driven-form-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/16-template-driven-form-solution/jest.config.ts" } } }, diff --git a/apps/16-template-driven-form-solution/src/app/feature/home/home.component.html b/apps/16-template-driven-form-solution/src/app/feature/home/home.component.html index ab23356a..1e216cc5 100644 --- a/apps/16-template-driven-form-solution/src/app/feature/home/home.component.html +++ b/apps/16-template-driven-form-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ | async; as person) { + + }
diff --git a/apps/16-template-driven-form-solution/src/app/feature/people/people.component.html b/apps/16-template-driven-form-solution/src/app/feature/people/people.component.html index 6694414f..5815ad34 100644 --- a/apps/16-template-driven-form-solution/src/app/feature/people/people.component.html +++ b/apps/16-template-driven-form-solution/src/app/feature/people/people.component.html @@ -1,25 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
-
-
+} diff --git a/apps/16-template-driven-form-solution/src/app/feature/people/people.component.ts b/apps/16-template-driven-form-solution/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/16-template-driven-form-solution/src/app/feature/people/people.component.ts +++ b/apps/16-template-driven-form-solution/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/16-template-driven-form-solution/src/app/shared/directives/badge.directive.ts b/apps/16-template-driven-form-solution/src/app/shared/directives/badge.directive.ts index c7f8f4d4..24699532 100644 --- a/apps/16-template-driven-form-solution/src/app/shared/directives/badge.directive.ts +++ b/apps/16-template-driven-form-solution/src/app/shared/directives/badge.directive.ts @@ -6,7 +6,10 @@ import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core'; export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/16-template-driven-form/project.json b/apps/16-template-driven-form/project.json index 798ef0aa..70375802 100644 --- a/apps/16-template-driven-form/project.json +++ b/apps/16-template-driven-form/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/16-template-driven-form", "index": "apps/16-template-driven-form/src/index.html", - "main": "apps/16-template-driven-form/src/main.ts", - "polyfills": "apps/16-template-driven-form/src/polyfills.ts", + "browser": "apps/16-template-driven-form/src/main.ts", + "polyfills": [ + "apps/16-template-driven-form/src/polyfills.ts" + ], "tsConfig": "apps/16-template-driven-form/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "16-template-driven-form:build:production" + "buildTarget": "16-template-driven-form:build:production" }, "development": { - "browserTarget": "16-template-driven-form:build:development" + "buildTarget": "16-template-driven-form:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "16-template-driven-form:build" + "buildTarget": "16-template-driven-form:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/16-template-driven-form" ], "options": { - "jestConfig": "apps/16-template-driven-form/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/16-template-driven-form/jest.config.ts" } } }, diff --git a/apps/16-template-driven-form/src/app/feature/home/home.component.html b/apps/16-template-driven-form/src/app/feature/home/home.component.html index ab23356a..1e216cc5 100644 --- a/apps/16-template-driven-form/src/app/feature/home/home.component.html +++ b/apps/16-template-driven-form/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ | async; as person) { + + }
diff --git a/apps/16-template-driven-form/src/app/feature/people/people.component.html b/apps/16-template-driven-form/src/app/feature/people/people.component.html index 383b8e22..7869cd4b 100644 --- a/apps/16-template-driven-form/src/app/feature/people/people.component.html +++ b/apps/16-template-driven-form/src/app/feature/people/people.component.html @@ -1,25 +1,36 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

{{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
-
-
\ No newline at end of file +} + + diff --git a/apps/16-template-driven-form/src/app/feature/people/people.component.ts b/apps/16-template-driven-form/src/app/feature/people/people.component.ts index 82a2b3c6..e0bc1089 100644 --- a/apps/16-template-driven-form/src/app/feature/people/people.component.ts +++ b/apps/16-template-driven-form/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); diff --git a/apps/16-template-driven-form/src/app/shared/directives/badge.directive.ts b/apps/16-template-driven-form/src/app/shared/directives/badge.directive.ts index c7f8f4d4..24699532 100644 --- a/apps/16-template-driven-form/src/app/shared/directives/badge.directive.ts +++ b/apps/16-template-driven-form/src/app/shared/directives/badge.directive.ts @@ -6,7 +6,10 @@ import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core'; export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/17-template-driven-form-validation-solution/project.json b/apps/17-template-driven-form-validation-solution/project.json index be6f0db0..9115e527 100644 --- a/apps/17-template-driven-form-validation-solution/project.json +++ b/apps/17-template-driven-form-validation-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/17-template-driven-form-validation-solution", "index": "apps/17-template-driven-form-validation-solution/src/index.html", - "main": "apps/17-template-driven-form-validation-solution/src/main.ts", - "polyfills": "apps/17-template-driven-form-validation-solution/src/polyfills.ts", + "browser": "apps/17-template-driven-form-validation-solution/src/main.ts", + "polyfills": [ + "apps/17-template-driven-form-validation-solution/src/polyfills.ts" + ], "tsConfig": "apps/17-template-driven-form-validation-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "17-template-driven-form-validation-solution:build:production" + "buildTarget": "17-template-driven-form-validation-solution:build:production" }, "development": { - "browserTarget": "17-template-driven-form-validation-solution:build:development" + "buildTarget": "17-template-driven-form-validation-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "17-template-driven-form-validation-solution:build" + "buildTarget": "17-template-driven-form-validation-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/17-template-driven-form-validation-solution" ], "options": { - "jestConfig": "apps/17-template-driven-form-validation-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/17-template-driven-form-validation-solution/jest.config.ts" } } }, diff --git a/apps/17-template-driven-form-validation-solution/src/app/feature/home/home.component.html b/apps/17-template-driven-form-validation-solution/src/app/feature/home/home.component.html index ab23356a..61ec8781 100644 --- a/apps/17-template-driven-form-validation-solution/src/app/feature/home/home.component.html +++ b/apps/17-template-driven-form-validation-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ | async;as person) { + + }
diff --git a/apps/17-template-driven-form-validation-solution/src/app/feature/people/people.component.html b/apps/17-template-driven-form-validation-solution/src/app/feature/people/people.component.html index 83647691..9d57f2bc 100644 --- a/apps/17-template-driven-form-validation-solution/src/app/feature/people/people.component.html +++ b/apps/17-template-driven-form-validation-solution/src/app/feature/people/people.component.html @@ -1,26 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async; as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async; track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async; track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
- - +
-
+} diff --git a/apps/17-template-driven-form-validation-solution/src/app/feature/people/people.component.ts b/apps/17-template-driven-form-validation-solution/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/17-template-driven-form-validation-solution/src/app/feature/people/people.component.ts +++ b/apps/17-template-driven-form-validation-solution/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/17-template-driven-form-validation-solution/src/app/shared/components/form/form.component.html b/apps/17-template-driven-form-validation-solution/src/app/shared/components/form/form.component.html index 2f9ca913..5a309cb5 100644 --- a/apps/17-template-driven-form-validation-solution/src/app/shared/components/form/form.component.html +++ b/apps/17-template-driven-form-validation-solution/src/app/shared/components/form/form.component.html @@ -1,7 +1,7 @@
- + person-photo
@@ -9,28 +9,41 @@ First name - Ce champs est requis - Ce champs doit posséder minimum 2 caractères + @if (firstname.errors?.['required']) { + Ce champs est requis + } + @if (firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Last name - Ce champs est requis - Ce champs doit posséder minimum 2 caractères + @if (lastname.errors?.['required']) { + Ce champs est requis + } + @if (lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Email - Ce champs est requis + @if (email.errors?.['required']) { + Ce champs est requis + } phone - Ce champs est requis - Ce champs doit respecter le pattern suivant (10 chiffres) - + @if (phone.errors?.['required']) { + Ce champs est requis + } + @if (phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 chiffres) + }
diff --git a/apps/17-template-driven-form-validation-solution/src/app/shared/directives/badge.directive.ts b/apps/17-template-driven-form-validation-solution/src/app/shared/directives/badge.directive.ts index c7f8f4d4..24699532 100644 --- a/apps/17-template-driven-form-validation-solution/src/app/shared/directives/badge.directive.ts +++ b/apps/17-template-driven-form-validation-solution/src/app/shared/directives/badge.directive.ts @@ -6,7 +6,10 @@ import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core'; export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/17-template-driven-form-validation/project.json b/apps/17-template-driven-form-validation/project.json index 54a8d308..c9269070 100644 --- a/apps/17-template-driven-form-validation/project.json +++ b/apps/17-template-driven-form-validation/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/17-template-driven-form-validation", "index": "apps/17-template-driven-form-validation/src/index.html", - "main": "apps/17-template-driven-form-validation/src/main.ts", - "polyfills": "apps/17-template-driven-form-validation/src/polyfills.ts", + "browser": "apps/17-template-driven-form-validation/src/main.ts", + "polyfills": [ + "apps/17-template-driven-form-validation/src/polyfills.ts" + ], "tsConfig": "apps/17-template-driven-form-validation/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "17-template-driven-form-validation:build:production" + "buildTarget": "17-template-driven-form-validation:build:production" }, "development": { - "browserTarget": "17-template-driven-form-validation:build:development" + "buildTarget": "17-template-driven-form-validation:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "17-template-driven-form-validation:build" + "buildTarget": "17-template-driven-form-validation:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/17-template-driven-form-validation" ], "options": { - "jestConfig": "apps/17-template-driven-form-validation/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/17-template-driven-form-validation/jest.config.ts" } } }, diff --git a/apps/17-template-driven-form-validation/src/app/feature/home/home.component.html b/apps/17-template-driven-form-validation/src/app/feature/home/home.component.html index ab23356a..bf71d090 100644 --- a/apps/17-template-driven-form-validation/src/app/feature/home/home.component.html +++ b/apps/17-template-driven-form-validation/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$|async;as person) { + + }
diff --git a/apps/17-template-driven-form-validation/src/app/feature/people/people.component.html b/apps/17-template-driven-form-validation/src/app/feature/people/people.component.html index c25ac50e..5815ad34 100644 --- a/apps/17-template-driven-form-validation/src/app/feature/people/people.component.html +++ b/apps/17-template-driven-form-validation/src/app/feature/people/people.component.html @@ -1,25 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
- - +
-
+} diff --git a/apps/17-template-driven-form-validation/src/app/feature/people/people.component.ts b/apps/17-template-driven-form-validation/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/17-template-driven-form-validation/src/app/feature/people/people.component.ts +++ b/apps/17-template-driven-form-validation/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/17-template-driven-form-validation/src/app/shared/directives/badge.directive.ts b/apps/17-template-driven-form-validation/src/app/shared/directives/badge.directive.ts index c7f8f4d4..24699532 100644 --- a/apps/17-template-driven-form-validation/src/app/shared/directives/badge.directive.ts +++ b/apps/17-template-driven-form-validation/src/app/shared/directives/badge.directive.ts @@ -6,7 +6,10 @@ import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core'; export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/18-template-driven-form-update-mode-solution/project.json b/apps/18-template-driven-form-update-mode-solution/project.json index 98addd6e..e49cc403 100644 --- a/apps/18-template-driven-form-update-mode-solution/project.json +++ b/apps/18-template-driven-form-update-mode-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/18-template-driven-form-update-mode-solution", "index": "apps/18-template-driven-form-update-mode-solution/src/index.html", - "main": "apps/18-template-driven-form-update-mode-solution/src/main.ts", - "polyfills": "apps/18-template-driven-form-update-mode-solution/src/polyfills.ts", + "browser": "apps/18-template-driven-form-update-mode-solution/src/main.ts", + "polyfills": [ + "apps/18-template-driven-form-update-mode-solution/src/polyfills.ts" + ], "tsConfig": "apps/18-template-driven-form-update-mode-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "18-template-driven-form-update-mode-solution:build:production" + "buildTarget": "18-template-driven-form-update-mode-solution:build:production" }, "development": { - "browserTarget": "18-template-driven-form-update-mode-solution:build:development" + "buildTarget": "18-template-driven-form-update-mode-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "18-template-driven-form-update-mode-solution:build" + "buildTarget": "18-template-driven-form-update-mode-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/18-template-driven-form-update-mode-solution" ], "options": { - "jestConfig": "apps/18-template-driven-form-update-mode-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/18-template-driven-form-update-mode-solution/jest.config.ts" } } }, diff --git a/apps/18-template-driven-form-update-mode-solution/src/app/feature/home/home.component.html b/apps/18-template-driven-form-update-mode-solution/src/app/feature/home/home.component.html index ab23356a..61ec8781 100644 --- a/apps/18-template-driven-form-update-mode-solution/src/app/feature/home/home.component.html +++ b/apps/18-template-driven-form-update-mode-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ | async;as person) { + + }
diff --git a/apps/18-template-driven-form-update-mode-solution/src/app/feature/people/people.component.html b/apps/18-template-driven-form-update-mode-solution/src/app/feature/people/people.component.html index 06ae316a..9d57f2bc 100644 --- a/apps/18-template-driven-form-update-mode-solution/src/app/feature/people/people.component.html +++ b/apps/18-template-driven-form-update-mode-solution/src/app/feature/people/people.component.html @@ -1,25 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async; as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async; track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async; track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
-
-
+} diff --git a/apps/18-template-driven-form-update-mode-solution/src/app/feature/people/people.component.ts b/apps/18-template-driven-form-update-mode-solution/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/18-template-driven-form-update-mode-solution/src/app/feature/people/people.component.ts +++ b/apps/18-template-driven-form-update-mode-solution/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/18-template-driven-form-update-mode-solution/src/app/feature/update-person/update-person.component.html b/apps/18-template-driven-form-update-mode-solution/src/app/feature/update-person/update-person.component.html index 3e3d80fb..26471f25 100644 --- a/apps/18-template-driven-form-update-mode-solution/src/app/feature/update-person/update-person.component.html +++ b/apps/18-template-driven-form-update-mode-solution/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ | async;as person) { + + }
diff --git a/apps/18-template-driven-form-update-mode-solution/src/app/feature/update-person/update-person.component.ts b/apps/18-template-driven-form-update-mode-solution/src/app/feature/update-person/update-person.component.ts index ff1f7737..bb3e88e9 100644 --- a/apps/18-template-driven-form-update-mode-solution/src/app/feature/update-person/update-person.component.ts +++ b/apps/18-template-driven-form-update-mode-solution/src/app/feature/update-person/update-person.component.ts @@ -12,12 +12,16 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.paramMap.pipe( map(params => params.get('id')), - switchMap(id => this.peopleService.getPersonDetails(id)) + switchMap(id => this.peopleService.getPersonDetails(id)), ); } diff --git a/apps/18-template-driven-form-update-mode-solution/src/app/shared/components/form/form.component.html b/apps/18-template-driven-form-update-mode-solution/src/app/shared/components/form/form.component.html index ff579005..9fcb67cf 100644 --- a/apps/18-template-driven-form-update-mode-solution/src/app/shared/components/form/form.component.html +++ b/apps/18-template-driven-form-update-mode-solution/src/app/shared/components/form/form.component.html @@ -9,29 +9,42 @@ First name - Ce champs est requis - Ce champs doit posséder minimum 2 caractères + @if (firstname.errors?.['required']) { + Ce champs est requis + } + @if (firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Last name - Ce champs est requis - Ce champs doit posséder minimum 2 caractères + @if (lastname.errors?.['required']) { + Ce champs est requis + } + @if (lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Email - Ce champs est requis + @if (email.errors?.['required']) { + Ce champs est requis + } phone - Ce champs est requis - Ce champs doit respecter le pattern suivant (10 caractères) - + @if (phone.errors?.['required']) { + Ce champs est requis + } + @if (phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + } diff --git a/apps/18-template-driven-form-update-mode-solution/src/app/shared/directives/badge.directive.ts b/apps/18-template-driven-form-update-mode-solution/src/app/shared/directives/badge.directive.ts index c7f8f4d4..24699532 100644 --- a/apps/18-template-driven-form-update-mode-solution/src/app/shared/directives/badge.directive.ts +++ b/apps/18-template-driven-form-update-mode-solution/src/app/shared/directives/badge.directive.ts @@ -6,7 +6,10 @@ import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core'; export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/18-template-driven-form-update-mode/project.json b/apps/18-template-driven-form-update-mode/project.json index 3756a92c..3c18340f 100644 --- a/apps/18-template-driven-form-update-mode/project.json +++ b/apps/18-template-driven-form-update-mode/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/18-template-driven-form-update-mode", "index": "apps/18-template-driven-form-update-mode/src/index.html", - "main": "apps/18-template-driven-form-update-mode/src/main.ts", - "polyfills": "apps/18-template-driven-form-update-mode/src/polyfills.ts", + "browser": "apps/18-template-driven-form-update-mode/src/main.ts", + "polyfills": [ + "apps/18-template-driven-form-update-mode/src/polyfills.ts" + ], "tsConfig": "apps/18-template-driven-form-update-mode/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "18-template-driven-form-update-mode:build:production" + "buildTarget": "18-template-driven-form-update-mode:build:production" }, "development": { - "browserTarget": "18-template-driven-form-update-mode:build:development" + "buildTarget": "18-template-driven-form-update-mode:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "18-template-driven-form-update-mode:build" + "buildTarget": "18-template-driven-form-update-mode:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/18-template-driven-form-update-mode" ], "options": { - "jestConfig": "apps/18-template-driven-form-update-mode/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/18-template-driven-form-update-mode/jest.config.ts" } } }, diff --git a/apps/18-template-driven-form-update-mode/src/app/feature/home/home.component.html b/apps/18-template-driven-form-update-mode/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/18-template-driven-form-update-mode/src/app/feature/home/home.component.html +++ b/apps/18-template-driven-form-update-mode/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/18-template-driven-form-update-mode/src/app/feature/people/people.component.html b/apps/18-template-driven-form-update-mode/src/app/feature/people/people.component.html index 12e47084..5815ad34 100644 --- a/apps/18-template-driven-form-update-mode/src/app/feature/people/people.component.html +++ b/apps/18-template-driven-form-update-mode/src/app/feature/people/people.component.html @@ -1,25 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
- - +
-
+} diff --git a/apps/18-template-driven-form-update-mode/src/app/feature/people/people.component.ts b/apps/18-template-driven-form-update-mode/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/18-template-driven-form-update-mode/src/app/feature/people/people.component.ts +++ b/apps/18-template-driven-form-update-mode/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/18-template-driven-form-update-mode/src/app/shared/components/form/form.component.html b/apps/18-template-driven-form-update-mode/src/app/shared/components/form/form.component.html index b516aaae..5a309cb5 100644 --- a/apps/18-template-driven-form-update-mode/src/app/shared/components/form/form.component.html +++ b/apps/18-template-driven-form-update-mode/src/app/shared/components/form/form.component.html @@ -1,7 +1,7 @@ - +
- + person-photo
@@ -9,28 +9,41 @@ First name - Ce champs est requis - Ce champs doit posséder minimum 2 caractères + @if (firstname.errors?.['required']) { + Ce champs est requis + } + @if (firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Last name - Ce champs est requis - Ce champs doit posséder minimum 2 caractères + @if (lastname.errors?.['required']) { + Ce champs est requis + } + @if (lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Email - Ce champs est requis + @if (email.errors?.['required']) { + Ce champs est requis + } phone - Ce champs est requis - Ce champs doit respecter le pattern suivant (10 chiffres) - + @if (phone.errors?.['required']) { + Ce champs est requis + } + @if (phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 chiffres) + }
diff --git a/apps/18-template-driven-form-update-mode/src/app/shared/directives/badge.directive.ts b/apps/18-template-driven-form-update-mode/src/app/shared/directives/badge.directive.ts index c7f8f4d4..24699532 100644 --- a/apps/18-template-driven-form-update-mode/src/app/shared/directives/badge.directive.ts +++ b/apps/18-template-driven-form-update-mode/src/app/shared/directives/badge.directive.ts @@ -6,7 +6,10 @@ import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core'; export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/19-reactive-form-solution/project.json b/apps/19-reactive-form-solution/project.json index 89619a5c..d50add96 100644 --- a/apps/19-reactive-form-solution/project.json +++ b/apps/19-reactive-form-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/19-reactive-form-solution", "index": "apps/19-reactive-form-solution/src/index.html", - "main": "apps/19-reactive-form-solution/src/main.ts", - "polyfills": "apps/19-reactive-form-solution/src/polyfills.ts", + "browser": "apps/19-reactive-form-solution/src/main.ts", + "polyfills": [ + "apps/19-reactive-form-solution/src/polyfills.ts" + ], "tsConfig": "apps/19-reactive-form-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "19-reactive-form-solution:build:production" + "buildTarget": "19-reactive-form-solution:build:production" }, "development": { - "browserTarget": "19-reactive-form-solution:build:development" + "buildTarget": "19-reactive-form-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "19-reactive-form-solution:build" + "buildTarget": "19-reactive-form-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/19-reactive-form-solution" ], "options": { - "jestConfig": "apps/19-reactive-form-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/19-reactive-form-solution/jest.config.ts" } } }, diff --git a/apps/19-reactive-form-solution/src/app/feature/home/home.component.html b/apps/19-reactive-form-solution/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/19-reactive-form-solution/src/app/feature/home/home.component.html +++ b/apps/19-reactive-form-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/19-reactive-form-solution/src/app/feature/people/people.component.html b/apps/19-reactive-form-solution/src/app/feature/people/people.component.html index 2f395068..5815ad34 100644 --- a/apps/19-reactive-form-solution/src/app/feature/people/people.component.html +++ b/apps/19-reactive-form-solution/src/app/feature/people/people.component.html @@ -1,26 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
- - +
-
+} diff --git a/apps/19-reactive-form-solution/src/app/feature/people/people.component.ts b/apps/19-reactive-form-solution/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/19-reactive-form-solution/src/app/feature/people/people.component.ts +++ b/apps/19-reactive-form-solution/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/19-reactive-form-solution/src/app/feature/update-person/update-person.component.html b/apps/19-reactive-form-solution/src/app/feature/update-person/update-person.component.html index 3e3d80fb..0ebdc4ff 100644 --- a/apps/19-reactive-form-solution/src/app/feature/update-person/update-person.component.html +++ b/apps/19-reactive-form-solution/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/19-reactive-form-solution/src/app/feature/update-person/update-person.component.ts b/apps/19-reactive-form-solution/src/app/feature/update-person/update-person.component.ts index ff1f7737..bb3e88e9 100644 --- a/apps/19-reactive-form-solution/src/app/feature/update-person/update-person.component.ts +++ b/apps/19-reactive-form-solution/src/app/feature/update-person/update-person.component.ts @@ -12,12 +12,16 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.paramMap.pipe( map(params => params.get('id')), - switchMap(id => this.peopleService.getPersonDetails(id)) + switchMap(id => this.peopleService.getPersonDetails(id)), ); } diff --git a/apps/19-reactive-form-solution/src/app/shared/components/form/form.component.html b/apps/19-reactive-form-solution/src/app/shared/components/form/form.component.html index 933135cf..2ce15f6d 100644 --- a/apps/19-reactive-form-solution/src/app/shared/components/form/form.component.html +++ b/apps/19-reactive-form-solution/src/app/shared/components/form/form.component.html @@ -8,29 +8,39 @@ First name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Last name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Email - Ce champs est requis + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } phone - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + } @@ -38,4 +48,4 @@ - \ No newline at end of file + diff --git a/apps/19-reactive-form-solution/src/app/shared/directives/badge.directive.ts b/apps/19-reactive-form-solution/src/app/shared/directives/badge.directive.ts index c7f8f4d4..24699532 100644 --- a/apps/19-reactive-form-solution/src/app/shared/directives/badge.directive.ts +++ b/apps/19-reactive-form-solution/src/app/shared/directives/badge.directive.ts @@ -6,7 +6,10 @@ import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core'; export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/19-reactive-form/project.json b/apps/19-reactive-form/project.json index aef81a3e..cc2eddb6 100644 --- a/apps/19-reactive-form/project.json +++ b/apps/19-reactive-form/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/19-reactive-form", "index": "apps/19-reactive-form/src/index.html", - "main": "apps/19-reactive-form/src/main.ts", - "polyfills": "apps/19-reactive-form/src/polyfills.ts", + "browser": "apps/19-reactive-form/src/main.ts", + "polyfills": [ + "apps/19-reactive-form/src/polyfills.ts" + ], "tsConfig": "apps/19-reactive-form/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "19-reactive-form:build:production" + "buildTarget": "19-reactive-form:build:production" }, "development": { - "browserTarget": "19-reactive-form:build:development" + "buildTarget": "19-reactive-form:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "19-reactive-form:build" + "buildTarget": "19-reactive-form:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/19-reactive-form" ], "options": { - "jestConfig": "apps/19-reactive-form/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/19-reactive-form/jest.config.ts" } } }, diff --git a/apps/19-reactive-form/src/app/feature/home/home.component.html b/apps/19-reactive-form/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/19-reactive-form/src/app/feature/home/home.component.html +++ b/apps/19-reactive-form/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/19-reactive-form/src/app/feature/people/people.component.html b/apps/19-reactive-form/src/app/feature/people/people.component.html index c25ac50e..5815ad34 100644 --- a/apps/19-reactive-form/src/app/feature/people/people.component.html +++ b/apps/19-reactive-form/src/app/feature/people/people.component.html @@ -1,25 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
- - +
-
+} diff --git a/apps/19-reactive-form/src/app/feature/people/people.component.ts b/apps/19-reactive-form/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/19-reactive-form/src/app/feature/people/people.component.ts +++ b/apps/19-reactive-form/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/19-reactive-form/src/app/feature/update-person/update-person.component.html b/apps/19-reactive-form/src/app/feature/update-person/update-person.component.html index 3e3d80fb..0ebdc4ff 100644 --- a/apps/19-reactive-form/src/app/feature/update-person/update-person.component.html +++ b/apps/19-reactive-form/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/19-reactive-form/src/app/feature/update-person/update-person.component.ts b/apps/19-reactive-form/src/app/feature/update-person/update-person.component.ts index ff1f7737..bb3e88e9 100644 --- a/apps/19-reactive-form/src/app/feature/update-person/update-person.component.ts +++ b/apps/19-reactive-form/src/app/feature/update-person/update-person.component.ts @@ -12,12 +12,16 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.paramMap.pipe( map(params => params.get('id')), - switchMap(id => this.peopleService.getPersonDetails(id)) + switchMap(id => this.peopleService.getPersonDetails(id)), ); } diff --git a/apps/19-reactive-form/src/app/shared/components/form/form.component.html b/apps/19-reactive-form/src/app/shared/components/form/form.component.html index 57213f94..9fcb67cf 100644 --- a/apps/19-reactive-form/src/app/shared/components/form/form.component.html +++ b/apps/19-reactive-form/src/app/shared/components/form/form.component.html @@ -1,7 +1,7 @@ -
+
- person-photo + person-photo
@@ -9,29 +9,42 @@ First name - Ce champs est requis - Ce champs doit posséder minimum 2 caractères + @if (firstname.errors?.['required']) { + Ce champs est requis + } + @if (firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Last name - Ce champs est requis - Ce champs doit posséder minimum 2 caractères + @if (lastname.errors?.['required']) { + Ce champs est requis + } + @if (lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Email - Ce champs est requis + @if (email.errors?.['required']) { + Ce champs est requis + } phone - Ce champs est requis - Ce champs doit respecter le pattern suivant (10 caractères) - + @if (phone.errors?.['required']) { + Ce champs est requis + } + @if (phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
diff --git a/apps/19-reactive-form/src/app/shared/directives/badge.directive.ts b/apps/19-reactive-form/src/app/shared/directives/badge.directive.ts index c7f8f4d4..24699532 100644 --- a/apps/19-reactive-form/src/app/shared/directives/badge.directive.ts +++ b/apps/19-reactive-form/src/app/shared/directives/badge.directive.ts @@ -6,7 +6,10 @@ import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core'; export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/20-reactive-form-custom-validator-solution/project.json b/apps/20-reactive-form-custom-validator-solution/project.json index efbc8768..36a8ffa6 100644 --- a/apps/20-reactive-form-custom-validator-solution/project.json +++ b/apps/20-reactive-form-custom-validator-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/20-reactive-form-custom-validator-solution", "index": "apps/20-reactive-form-custom-validator-solution/src/index.html", - "main": "apps/20-reactive-form-custom-validator-solution/src/main.ts", - "polyfills": "apps/20-reactive-form-custom-validator-solution/src/polyfills.ts", + "browser": "apps/20-reactive-form-custom-validator-solution/src/main.ts", + "polyfills": [ + "apps/20-reactive-form-custom-validator-solution/src/polyfills.ts" + ], "tsConfig": "apps/20-reactive-form-custom-validator-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "20-reactive-form-custom-validator-solution:build:production" + "buildTarget": "20-reactive-form-custom-validator-solution:build:production" }, "development": { - "browserTarget": "20-reactive-form-custom-validator-solution:build:development" + "buildTarget": "20-reactive-form-custom-validator-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "20-reactive-form-custom-validator-solution:build" + "buildTarget": "20-reactive-form-custom-validator-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/20-reactive-form-custom-validator-solution" ], "options": { - "jestConfig": "apps/20-reactive-form-custom-validator-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/20-reactive-form-custom-validator-solution/jest.config.ts" } } }, diff --git a/apps/20-reactive-form-custom-validator-solution/src/app/feature/home/home.component.html b/apps/20-reactive-form-custom-validator-solution/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/20-reactive-form-custom-validator-solution/src/app/feature/home/home.component.html +++ b/apps/20-reactive-form-custom-validator-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/20-reactive-form-custom-validator-solution/src/app/feature/people/people.component.html b/apps/20-reactive-form-custom-validator-solution/src/app/feature/people/people.component.html index 2f395068..5815ad34 100644 --- a/apps/20-reactive-form-custom-validator-solution/src/app/feature/people/people.component.html +++ b/apps/20-reactive-form-custom-validator-solution/src/app/feature/people/people.component.html @@ -1,26 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
- - +
-
+} diff --git a/apps/20-reactive-form-custom-validator-solution/src/app/feature/people/people.component.ts b/apps/20-reactive-form-custom-validator-solution/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/20-reactive-form-custom-validator-solution/src/app/feature/people/people.component.ts +++ b/apps/20-reactive-form-custom-validator-solution/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/20-reactive-form-custom-validator-solution/src/app/feature/update-person/update-person.component.html b/apps/20-reactive-form-custom-validator-solution/src/app/feature/update-person/update-person.component.html index 3e3d80fb..fbed357c 100644 --- a/apps/20-reactive-form-custom-validator-solution/src/app/feature/update-person/update-person.component.html +++ b/apps/20-reactive-form-custom-validator-solution/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/20-reactive-form-custom-validator-solution/src/app/feature/update-person/update-person.component.ts b/apps/20-reactive-form-custom-validator-solution/src/app/feature/update-person/update-person.component.ts index ff1f7737..bb3e88e9 100644 --- a/apps/20-reactive-form-custom-validator-solution/src/app/feature/update-person/update-person.component.ts +++ b/apps/20-reactive-form-custom-validator-solution/src/app/feature/update-person/update-person.component.ts @@ -12,12 +12,16 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.paramMap.pipe( map(params => params.get('id')), - switchMap(id => this.peopleService.getPersonDetails(id)) + switchMap(id => this.peopleService.getPersonDetails(id)), ); } diff --git a/apps/20-reactive-form-custom-validator-solution/src/app/shared/components/form/form.component.html b/apps/20-reactive-form-custom-validator-solution/src/app/shared/components/form/form.component.html index 64b45085..1b107304 100644 --- a/apps/20-reactive-form-custom-validator-solution/src/app/shared/components/form/form.component.html +++ b/apps/20-reactive-form-custom-validator-solution/src/app/shared/components/form/form.component.html @@ -8,31 +8,42 @@ First name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Last name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Email - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } phone - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + } diff --git a/apps/20-reactive-form-custom-validator-solution/src/app/shared/directives/badge.directive.ts b/apps/20-reactive-form-custom-validator-solution/src/app/shared/directives/badge.directive.ts index c7f8f4d4..24699532 100644 --- a/apps/20-reactive-form-custom-validator-solution/src/app/shared/directives/badge.directive.ts +++ b/apps/20-reactive-form-custom-validator-solution/src/app/shared/directives/badge.directive.ts @@ -6,7 +6,10 @@ import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core'; export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/20-reactive-form-custom-validator/project.json b/apps/20-reactive-form-custom-validator/project.json index d7d02ec1..3b670d48 100644 --- a/apps/20-reactive-form-custom-validator/project.json +++ b/apps/20-reactive-form-custom-validator/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/20-reactive-form-custom-validator", "index": "apps/20-reactive-form-custom-validator/src/index.html", - "main": "apps/20-reactive-form-custom-validator/src/main.ts", - "polyfills": "apps/20-reactive-form-custom-validator/src/polyfills.ts", + "browser": "apps/20-reactive-form-custom-validator/src/main.ts", + "polyfills": [ + "apps/20-reactive-form-custom-validator/src/polyfills.ts" + ], "tsConfig": "apps/20-reactive-form-custom-validator/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "20-reactive-form-custom-validator:build:production" + "buildTarget": "20-reactive-form-custom-validator:build:production" }, "development": { - "browserTarget": "20-reactive-form-custom-validator:build:development" + "buildTarget": "20-reactive-form-custom-validator:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "20-reactive-form-custom-validator:build" + "buildTarget": "20-reactive-form-custom-validator:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/20-reactive-form-custom-validator" ], "options": { - "jestConfig": "apps/20-reactive-form-custom-validator/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/20-reactive-form-custom-validator/jest.config.ts" } } }, diff --git a/apps/20-reactive-form-custom-validator/src/app/feature/home/home.component.html b/apps/20-reactive-form-custom-validator/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/20-reactive-form-custom-validator/src/app/feature/home/home.component.html +++ b/apps/20-reactive-form-custom-validator/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/20-reactive-form-custom-validator/src/app/feature/people/people.component.html b/apps/20-reactive-form-custom-validator/src/app/feature/people/people.component.html index c25ac50e..5815ad34 100644 --- a/apps/20-reactive-form-custom-validator/src/app/feature/people/people.component.html +++ b/apps/20-reactive-form-custom-validator/src/app/feature/people/people.component.html @@ -1,25 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
- - +
-
+} diff --git a/apps/20-reactive-form-custom-validator/src/app/feature/people/people.component.ts b/apps/20-reactive-form-custom-validator/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/20-reactive-form-custom-validator/src/app/feature/people/people.component.ts +++ b/apps/20-reactive-form-custom-validator/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/20-reactive-form-custom-validator/src/app/feature/update-person/update-person.component.html b/apps/20-reactive-form-custom-validator/src/app/feature/update-person/update-person.component.html index 3e3d80fb..0ebdc4ff 100644 --- a/apps/20-reactive-form-custom-validator/src/app/feature/update-person/update-person.component.html +++ b/apps/20-reactive-form-custom-validator/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/20-reactive-form-custom-validator/src/app/feature/update-person/update-person.component.ts b/apps/20-reactive-form-custom-validator/src/app/feature/update-person/update-person.component.ts index ff1f7737..bb3e88e9 100644 --- a/apps/20-reactive-form-custom-validator/src/app/feature/update-person/update-person.component.ts +++ b/apps/20-reactive-form-custom-validator/src/app/feature/update-person/update-person.component.ts @@ -12,12 +12,16 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.paramMap.pipe( map(params => params.get('id')), - switchMap(id => this.peopleService.getPersonDetails(id)) + switchMap(id => this.peopleService.getPersonDetails(id)), ); } diff --git a/apps/20-reactive-form-custom-validator/src/app/shared/components/form/form.component.html b/apps/20-reactive-form-custom-validator/src/app/shared/components/form/form.component.html index 71bdca2f..2ce15f6d 100644 --- a/apps/20-reactive-form-custom-validator/src/app/shared/components/form/form.component.html +++ b/apps/20-reactive-form-custom-validator/src/app/shared/components/form/form.component.html @@ -1,36 +1,46 @@ - +
- + person-photo
First name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Last name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Email - Ce champs est requis + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } phone - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
diff --git a/apps/20-reactive-form-custom-validator/src/app/shared/directives/badge.directive.ts b/apps/20-reactive-form-custom-validator/src/app/shared/directives/badge.directive.ts index c7f8f4d4..24699532 100644 --- a/apps/20-reactive-form-custom-validator/src/app/shared/directives/badge.directive.ts +++ b/apps/20-reactive-form-custom-validator/src/app/shared/directives/badge.directive.ts @@ -6,7 +6,10 @@ import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core'; export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/21-lazyloading-solution/project.json b/apps/21-lazyloading-solution/project.json index d80f8788..7f8808d8 100644 --- a/apps/21-lazyloading-solution/project.json +++ b/apps/21-lazyloading-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/21-lazyloading-solution", "index": "apps/21-lazyloading-solution/src/index.html", - "main": "apps/21-lazyloading-solution/src/main.ts", - "polyfills": "apps/21-lazyloading-solution/src/polyfills.ts", + "browser": "apps/21-lazyloading-solution/src/main.ts", + "polyfills": [ + "apps/21-lazyloading-solution/src/polyfills.ts" + ], "tsConfig": "apps/21-lazyloading-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "21-lazyloading-solution:build:production" + "buildTarget": "21-lazyloading-solution:build:production" }, "development": { - "browserTarget": "21-lazyloading-solution:build:development" + "buildTarget": "21-lazyloading-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "21-lazyloading-solution:build" + "buildTarget": "21-lazyloading-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/21-lazyloading-solution" ], "options": { - "jestConfig": "apps/21-lazyloading-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/21-lazyloading-solution/jest.config.ts" } } }, diff --git a/apps/21-lazyloading-solution/src/app/feature/home/home.component.html b/apps/21-lazyloading-solution/src/app/feature/home/home.component.html index ab23356a..1e216cc5 100644 --- a/apps/21-lazyloading-solution/src/app/feature/home/home.component.html +++ b/apps/21-lazyloading-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ | async; as person) { + + }
diff --git a/apps/21-lazyloading-solution/src/app/feature/people/people.component.html b/apps/21-lazyloading-solution/src/app/feature/people/people.component.html index 2f395068..5815ad34 100644 --- a/apps/21-lazyloading-solution/src/app/feature/people/people.component.html +++ b/apps/21-lazyloading-solution/src/app/feature/people/people.component.html @@ -1,26 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
- - +
-
+} diff --git a/apps/21-lazyloading-solution/src/app/feature/people/people.component.ts b/apps/21-lazyloading-solution/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/21-lazyloading-solution/src/app/feature/people/people.component.ts +++ b/apps/21-lazyloading-solution/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/21-lazyloading-solution/src/app/feature/update-person/update-person.component.html b/apps/21-lazyloading-solution/src/app/feature/update-person/update-person.component.html index 3e3d80fb..0ebdc4ff 100644 --- a/apps/21-lazyloading-solution/src/app/feature/update-person/update-person.component.html +++ b/apps/21-lazyloading-solution/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/21-lazyloading-solution/src/app/feature/update-person/update-person.component.ts b/apps/21-lazyloading-solution/src/app/feature/update-person/update-person.component.ts index ff1f7737..bb3e88e9 100644 --- a/apps/21-lazyloading-solution/src/app/feature/update-person/update-person.component.ts +++ b/apps/21-lazyloading-solution/src/app/feature/update-person/update-person.component.ts @@ -12,12 +12,16 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.paramMap.pipe( map(params => params.get('id')), - switchMap(id => this.peopleService.getPersonDetails(id)) + switchMap(id => this.peopleService.getPersonDetails(id)), ); } diff --git a/apps/21-lazyloading-solution/src/app/shared/components/form/form.component.html b/apps/21-lazyloading-solution/src/app/shared/components/form/form.component.html index 5e53760f..1b107304 100644 --- a/apps/21-lazyloading-solution/src/app/shared/components/form/form.component.html +++ b/apps/21-lazyloading-solution/src/app/shared/components/form/form.component.html @@ -1,38 +1,49 @@
- person-photo + person-photo
First name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Last name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Email - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } phone - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
diff --git a/apps/21-lazyloading-solution/src/app/shared/directives/badge.directive.ts b/apps/21-lazyloading-solution/src/app/shared/directives/badge.directive.ts index c7f8f4d4..24699532 100644 --- a/apps/21-lazyloading-solution/src/app/shared/directives/badge.directive.ts +++ b/apps/21-lazyloading-solution/src/app/shared/directives/badge.directive.ts @@ -6,7 +6,10 @@ import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core'; export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/21-lazyloading/project.json b/apps/21-lazyloading/project.json index 8917bf48..45557240 100644 --- a/apps/21-lazyloading/project.json +++ b/apps/21-lazyloading/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/21-lazyloading", "index": "apps/21-lazyloading/src/index.html", - "main": "apps/21-lazyloading/src/main.ts", - "polyfills": "apps/21-lazyloading/src/polyfills.ts", + "browser": "apps/21-lazyloading/src/main.ts", + "polyfills": [ + "apps/21-lazyloading/src/polyfills.ts" + ], "tsConfig": "apps/21-lazyloading/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "21-lazyloading:build:production" + "buildTarget": "21-lazyloading:build:production" }, "development": { - "browserTarget": "21-lazyloading:build:development" + "buildTarget": "21-lazyloading:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "21-lazyloading:build" + "buildTarget": "21-lazyloading:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/21-lazyloading" ], "options": { - "jestConfig": "apps/21-lazyloading/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/21-lazyloading/jest.config.ts" } } }, diff --git a/apps/21-lazyloading/src/app/feature/home/home.component.html b/apps/21-lazyloading/src/app/feature/home/home.component.html index ab23356a..1e216cc5 100644 --- a/apps/21-lazyloading/src/app/feature/home/home.component.html +++ b/apps/21-lazyloading/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ | async; as person) { + + }
diff --git a/apps/21-lazyloading/src/app/feature/people/people.component.html b/apps/21-lazyloading/src/app/feature/people/people.component.html index c25ac50e..5815ad34 100644 --- a/apps/21-lazyloading/src/app/feature/people/people.component.html +++ b/apps/21-lazyloading/src/app/feature/people/people.component.html @@ -1,25 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
- - +
-
+} diff --git a/apps/21-lazyloading/src/app/feature/people/people.component.ts b/apps/21-lazyloading/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/21-lazyloading/src/app/feature/people/people.component.ts +++ b/apps/21-lazyloading/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/21-lazyloading/src/app/feature/update-person/update-person.component.html b/apps/21-lazyloading/src/app/feature/update-person/update-person.component.html index 3e3d80fb..fbed357c 100644 --- a/apps/21-lazyloading/src/app/feature/update-person/update-person.component.html +++ b/apps/21-lazyloading/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/21-lazyloading/src/app/feature/update-person/update-person.component.ts b/apps/21-lazyloading/src/app/feature/update-person/update-person.component.ts index ff1f7737..bb3e88e9 100644 --- a/apps/21-lazyloading/src/app/feature/update-person/update-person.component.ts +++ b/apps/21-lazyloading/src/app/feature/update-person/update-person.component.ts @@ -12,12 +12,16 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.paramMap.pipe( map(params => params.get('id')), - switchMap(id => this.peopleService.getPersonDetails(id)) + switchMap(id => this.peopleService.getPersonDetails(id)), ); } diff --git a/apps/21-lazyloading/src/app/shared/components/form/form.component.html b/apps/21-lazyloading/src/app/shared/components/form/form.component.html index 84e28bb3..1b107304 100644 --- a/apps/21-lazyloading/src/app/shared/components/form/form.component.html +++ b/apps/21-lazyloading/src/app/shared/components/form/form.component.html @@ -1,38 +1,49 @@ - +
- person-photo + person-photo
First name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Last name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Email - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } phone - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
diff --git a/apps/21-lazyloading/src/app/shared/directives/badge.directive.ts b/apps/21-lazyloading/src/app/shared/directives/badge.directive.ts index c7f8f4d4..24699532 100644 --- a/apps/21-lazyloading/src/app/shared/directives/badge.directive.ts +++ b/apps/21-lazyloading/src/app/shared/directives/badge.directive.ts @@ -6,7 +6,10 @@ import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core'; export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/22-guards-solution/project.json b/apps/22-guards-solution/project.json index d2d420f1..1d96e0ca 100644 --- a/apps/22-guards-solution/project.json +++ b/apps/22-guards-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/22-guards-solution", "index": "apps/22-guards-solution/src/index.html", - "main": "apps/22-guards-solution/src/main.ts", - "polyfills": "apps/22-guards-solution/src/polyfills.ts", + "browser": "apps/22-guards-solution/src/main.ts", + "polyfills": [ + "apps/22-guards-solution/src/polyfills.ts" + ], "tsConfig": "apps/22-guards-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "22-guards-solution:build:production" + "buildTarget": "22-guards-solution:build:production" }, "development": { - "browserTarget": "22-guards-solution:build:development" + "buildTarget": "22-guards-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "22-guards-solution:build" + "buildTarget": "22-guards-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/22-guards-solution" ], "options": { - "jestConfig": "apps/22-guards-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/22-guards-solution/jest.config.ts" } } }, diff --git a/apps/22-guards-solution/src/app/feature/home/home.component.html b/apps/22-guards-solution/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/22-guards-solution/src/app/feature/home/home.component.html +++ b/apps/22-guards-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/22-guards-solution/src/app/feature/people/people.component.html b/apps/22-guards-solution/src/app/feature/people/people.component.html index 2f395068..5815ad34 100644 --- a/apps/22-guards-solution/src/app/feature/people/people.component.html +++ b/apps/22-guards-solution/src/app/feature/people/people.component.html @@ -1,26 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
- - +
-
+} diff --git a/apps/22-guards-solution/src/app/feature/people/people.component.ts b/apps/22-guards-solution/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/22-guards-solution/src/app/feature/people/people.component.ts +++ b/apps/22-guards-solution/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/22-guards-solution/src/app/feature/update-person/update-person.component.html b/apps/22-guards-solution/src/app/feature/update-person/update-person.component.html index 3e3d80fb..d8930156 100644 --- a/apps/22-guards-solution/src/app/feature/update-person/update-person.component.html +++ b/apps/22-guards-solution/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ | async; as person) { + + }
diff --git a/apps/22-guards-solution/src/app/feature/update-person/update-person.component.ts b/apps/22-guards-solution/src/app/feature/update-person/update-person.component.ts index ff1f7737..bb3e88e9 100644 --- a/apps/22-guards-solution/src/app/feature/update-person/update-person.component.ts +++ b/apps/22-guards-solution/src/app/feature/update-person/update-person.component.ts @@ -12,12 +12,16 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.paramMap.pipe( map(params => params.get('id')), - switchMap(id => this.peopleService.getPersonDetails(id)) + switchMap(id => this.peopleService.getPersonDetails(id)), ); } diff --git a/apps/22-guards-solution/src/app/shared/components/form/form.component.html b/apps/22-guards-solution/src/app/shared/components/form/form.component.html index 64b45085..1b107304 100644 --- a/apps/22-guards-solution/src/app/shared/components/form/form.component.html +++ b/apps/22-guards-solution/src/app/shared/components/form/form.component.html @@ -8,31 +8,42 @@ First name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Last name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Email - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } phone - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + } diff --git a/apps/22-guards-solution/src/app/shared/directives/badge.directive.ts b/apps/22-guards-solution/src/app/shared/directives/badge.directive.ts index c7f8f4d4..24699532 100644 --- a/apps/22-guards-solution/src/app/shared/directives/badge.directive.ts +++ b/apps/22-guards-solution/src/app/shared/directives/badge.directive.ts @@ -6,7 +6,10 @@ import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core'; export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/22-guards/project.json b/apps/22-guards/project.json index f7bc4cc7..251e887a 100644 --- a/apps/22-guards/project.json +++ b/apps/22-guards/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/22-guards", "index": "apps/22-guards/src/index.html", - "main": "apps/22-guards/src/main.ts", - "polyfills": "apps/22-guards/src/polyfills.ts", + "browser": "apps/22-guards/src/main.ts", + "polyfills": [ + "apps/22-guards/src/polyfills.ts" + ], "tsConfig": "apps/22-guards/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "22-guards:build:production" + "buildTarget": "22-guards:build:production" }, "development": { - "browserTarget": "22-guards:build:development" + "buildTarget": "22-guards:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "22-guards:build" + "buildTarget": "22-guards:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/22-guards" ], "options": { - "jestConfig": "apps/22-guards/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/22-guards/jest.config.ts" } } }, diff --git a/apps/22-guards/src/app/feature/home/home.component.html b/apps/22-guards/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/22-guards/src/app/feature/home/home.component.html +++ b/apps/22-guards/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/22-guards/src/app/feature/people/people.component.html b/apps/22-guards/src/app/feature/people/people.component.html index c25ac50e..5815ad34 100644 --- a/apps/22-guards/src/app/feature/people/people.component.html +++ b/apps/22-guards/src/app/feature/people/people.component.html @@ -1,25 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
- - +
-
+} diff --git a/apps/22-guards/src/app/feature/people/people.component.ts b/apps/22-guards/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/22-guards/src/app/feature/people/people.component.ts +++ b/apps/22-guards/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/22-guards/src/app/feature/update-person/update-person.component.html b/apps/22-guards/src/app/feature/update-person/update-person.component.html index 3e3d80fb..0ebdc4ff 100644 --- a/apps/22-guards/src/app/feature/update-person/update-person.component.html +++ b/apps/22-guards/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/22-guards/src/app/feature/update-person/update-person.component.ts b/apps/22-guards/src/app/feature/update-person/update-person.component.ts index ff1f7737..bb3e88e9 100644 --- a/apps/22-guards/src/app/feature/update-person/update-person.component.ts +++ b/apps/22-guards/src/app/feature/update-person/update-person.component.ts @@ -12,12 +12,16 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.paramMap.pipe( map(params => params.get('id')), - switchMap(id => this.peopleService.getPersonDetails(id)) + switchMap(id => this.peopleService.getPersonDetails(id)), ); } diff --git a/apps/22-guards/src/app/shared/components/form/form.component.html b/apps/22-guards/src/app/shared/components/form/form.component.html index 84e28bb3..1b107304 100644 --- a/apps/22-guards/src/app/shared/components/form/form.component.html +++ b/apps/22-guards/src/app/shared/components/form/form.component.html @@ -1,38 +1,49 @@ - +
- person-photo + person-photo
First name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Last name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Email - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } phone - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
diff --git a/apps/22-guards/src/app/shared/directives/badge.directive.ts b/apps/22-guards/src/app/shared/directives/badge.directive.ts index c7f8f4d4..24699532 100644 --- a/apps/22-guards/src/app/shared/directives/badge.directive.ts +++ b/apps/22-guards/src/app/shared/directives/badge.directive.ts @@ -6,7 +6,10 @@ import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core'; export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/23-resolver-solution/project.json b/apps/23-resolver-solution/project.json index d735d53a..28dd7e03 100644 --- a/apps/23-resolver-solution/project.json +++ b/apps/23-resolver-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/23-resolver-solution", "index": "apps/23-resolver-solution/src/index.html", - "main": "apps/23-resolver-solution/src/main.ts", - "polyfills": "apps/23-resolver-solution/src/polyfills.ts", + "browser": "apps/23-resolver-solution/src/main.ts", + "polyfills": [ + "apps/23-resolver-solution/src/polyfills.ts" + ], "tsConfig": "apps/23-resolver-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "23-resolver-solution:build:production" + "buildTarget": "23-resolver-solution:build:production" }, "development": { - "browserTarget": "23-resolver-solution:build:development" + "buildTarget": "23-resolver-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "23-resolver-solution:build" + "buildTarget": "23-resolver-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/23-resolver-solution" ], "options": { - "jestConfig": "apps/23-resolver-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/23-resolver-solution/jest.config.ts" } } }, diff --git a/apps/23-resolver-solution/src/app/feature/home/home.component.html b/apps/23-resolver-solution/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/23-resolver-solution/src/app/feature/home/home.component.html +++ b/apps/23-resolver-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/23-resolver-solution/src/app/feature/people/people.component.html b/apps/23-resolver-solution/src/app/feature/people/people.component.html index 013b3886..5815ad34 100644 --- a/apps/23-resolver-solution/src/app/feature/people/people.component.html +++ b/apps/23-resolver-solution/src/app/feature/people/people.component.html @@ -1,25 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
-
-
+} diff --git a/apps/23-resolver-solution/src/app/feature/people/people.component.ts b/apps/23-resolver-solution/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/23-resolver-solution/src/app/feature/people/people.component.ts +++ b/apps/23-resolver-solution/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/23-resolver-solution/src/app/feature/update-person/update-person.component.html b/apps/23-resolver-solution/src/app/feature/update-person/update-person.component.html index 3e3d80fb..0ebdc4ff 100644 --- a/apps/23-resolver-solution/src/app/feature/update-person/update-person.component.html +++ b/apps/23-resolver-solution/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/23-resolver-solution/src/app/feature/update-person/update-person.component.ts b/apps/23-resolver-solution/src/app/feature/update-person/update-person.component.ts index 7961080d..27f0fee0 100644 --- a/apps/23-resolver-solution/src/app/feature/update-person/update-person.component.ts +++ b/apps/23-resolver-solution/src/app/feature/update-person/update-person.component.ts @@ -12,7 +12,11 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.data.pipe(map(({ personDetails }) => personDetails)); diff --git a/apps/23-resolver-solution/src/app/shared/components/form/form.component.html b/apps/23-resolver-solution/src/app/shared/components/form/form.component.html index e9add69c..1b107304 100644 --- a/apps/23-resolver-solution/src/app/shared/components/form/form.component.html +++ b/apps/23-resolver-solution/src/app/shared/components/form/form.component.html @@ -1,41 +1,49 @@
- person-photo + person-photo
First name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Last name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Email - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com - + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } phone - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
@@ -43,4 +51,4 @@ - \ No newline at end of file + diff --git a/apps/23-resolver-solution/src/app/shared/directives/badge.directive.ts b/apps/23-resolver-solution/src/app/shared/directives/badge.directive.ts index c7f8f4d4..24699532 100644 --- a/apps/23-resolver-solution/src/app/shared/directives/badge.directive.ts +++ b/apps/23-resolver-solution/src/app/shared/directives/badge.directive.ts @@ -6,7 +6,10 @@ import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core'; export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/23-resolver/project.json b/apps/23-resolver/project.json index bcfa9478..551bf44e 100644 --- a/apps/23-resolver/project.json +++ b/apps/23-resolver/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/23-resolver", "index": "apps/23-resolver/src/index.html", - "main": "apps/23-resolver/src/main.ts", - "polyfills": "apps/23-resolver/src/polyfills.ts", + "browser": "apps/23-resolver/src/main.ts", + "polyfills": [ + "apps/23-resolver/src/polyfills.ts" + ], "tsConfig": "apps/23-resolver/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "23-resolver:build:production" + "buildTarget": "23-resolver:build:production" }, "development": { - "browserTarget": "23-resolver:build:development" + "buildTarget": "23-resolver:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "23-resolver:build" + "buildTarget": "23-resolver:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/23-resolver" ], "options": { - "jestConfig": "apps/23-resolver/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/23-resolver/jest.config.ts" } } }, diff --git a/apps/23-resolver/src/app/feature/home/home.component.html b/apps/23-resolver/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/23-resolver/src/app/feature/home/home.component.html +++ b/apps/23-resolver/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/23-resolver/src/app/feature/people/people.component.html b/apps/23-resolver/src/app/feature/people/people.component.html index 12e47084..5815ad34 100644 --- a/apps/23-resolver/src/app/feature/people/people.component.html +++ b/apps/23-resolver/src/app/feature/people/people.component.html @@ -1,25 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
- - +
-
+} diff --git a/apps/23-resolver/src/app/feature/people/people.component.ts b/apps/23-resolver/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/23-resolver/src/app/feature/people/people.component.ts +++ b/apps/23-resolver/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/23-resolver/src/app/feature/update-person/update-person.component.html b/apps/23-resolver/src/app/feature/update-person/update-person.component.html index 3e3d80fb..fbed357c 100644 --- a/apps/23-resolver/src/app/feature/update-person/update-person.component.html +++ b/apps/23-resolver/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/23-resolver/src/app/feature/update-person/update-person.component.ts b/apps/23-resolver/src/app/feature/update-person/update-person.component.ts index ff1f7737..bb3e88e9 100644 --- a/apps/23-resolver/src/app/feature/update-person/update-person.component.ts +++ b/apps/23-resolver/src/app/feature/update-person/update-person.component.ts @@ -12,12 +12,16 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.paramMap.pipe( map(params => params.get('id')), - switchMap(id => this.peopleService.getPersonDetails(id)) + switchMap(id => this.peopleService.getPersonDetails(id)), ); } diff --git a/apps/23-resolver/src/app/shared/components/form/form.component.html b/apps/23-resolver/src/app/shared/components/form/form.component.html index 95ad564c..1b107304 100644 --- a/apps/23-resolver/src/app/shared/components/form/form.component.html +++ b/apps/23-resolver/src/app/shared/components/form/form.component.html @@ -1,41 +1,49 @@ -
+
- person-photo + person-photo
First name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Last name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Email - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com - + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } phone - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
diff --git a/apps/23-resolver/src/app/shared/directives/badge.directive.ts b/apps/23-resolver/src/app/shared/directives/badge.directive.ts index c7f8f4d4..24699532 100644 --- a/apps/23-resolver/src/app/shared/directives/badge.directive.ts +++ b/apps/23-resolver/src/app/shared/directives/badge.directive.ts @@ -6,7 +6,10 @@ import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core'; export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/24-interceptor-solution/project.json b/apps/24-interceptor-solution/project.json index b49b7c04..48a72fd7 100644 --- a/apps/24-interceptor-solution/project.json +++ b/apps/24-interceptor-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/24-interceptor-solution", "index": "apps/24-interceptor-solution/src/index.html", - "main": "apps/24-interceptor-solution/src/main.ts", - "polyfills": "apps/24-interceptor-solution/src/polyfills.ts", + "browser": "apps/24-interceptor-solution/src/main.ts", + "polyfills": [ + "apps/24-interceptor-solution/src/polyfills.ts" + ], "tsConfig": "apps/24-interceptor-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "24-interceptor-solution:build:production" + "buildTarget": "24-interceptor-solution:build:production" }, "development": { - "browserTarget": "24-interceptor-solution:build:development" + "buildTarget": "24-interceptor-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "24-interceptor-solution:build" + "buildTarget": "24-interceptor-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/24-interceptor-solution" ], "options": { - "jestConfig": "apps/24-interceptor-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/24-interceptor-solution/jest.config.ts" } } }, diff --git a/apps/24-interceptor-solution/src/app/feature/home/home.component.html b/apps/24-interceptor-solution/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/24-interceptor-solution/src/app/feature/home/home.component.html +++ b/apps/24-interceptor-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/24-interceptor-solution/src/app/feature/people/people.component.html b/apps/24-interceptor-solution/src/app/feature/people/people.component.html index 013b3886..5815ad34 100644 --- a/apps/24-interceptor-solution/src/app/feature/people/people.component.html +++ b/apps/24-interceptor-solution/src/app/feature/people/people.component.html @@ -1,25 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
-
-
+} diff --git a/apps/24-interceptor-solution/src/app/feature/people/people.component.ts b/apps/24-interceptor-solution/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/24-interceptor-solution/src/app/feature/people/people.component.ts +++ b/apps/24-interceptor-solution/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/24-interceptor-solution/src/app/feature/update-person/update-person.component.html b/apps/24-interceptor-solution/src/app/feature/update-person/update-person.component.html index 3e3d80fb..fbed357c 100644 --- a/apps/24-interceptor-solution/src/app/feature/update-person/update-person.component.html +++ b/apps/24-interceptor-solution/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/24-interceptor-solution/src/app/feature/update-person/update-person.component.ts b/apps/24-interceptor-solution/src/app/feature/update-person/update-person.component.ts index 7961080d..27f0fee0 100644 --- a/apps/24-interceptor-solution/src/app/feature/update-person/update-person.component.ts +++ b/apps/24-interceptor-solution/src/app/feature/update-person/update-person.component.ts @@ -12,7 +12,11 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.data.pipe(map(({ personDetails }) => personDetails)); diff --git a/apps/24-interceptor-solution/src/app/shared/components/form/form.component.html b/apps/24-interceptor-solution/src/app/shared/components/form/form.component.html index e9add69c..1b107304 100644 --- a/apps/24-interceptor-solution/src/app/shared/components/form/form.component.html +++ b/apps/24-interceptor-solution/src/app/shared/components/form/form.component.html @@ -1,41 +1,49 @@
- person-photo + person-photo
First name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Last name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Email - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com - + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } phone - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
@@ -43,4 +51,4 @@ - \ No newline at end of file + diff --git a/apps/24-interceptor-solution/src/app/shared/directives/badge.directive.ts b/apps/24-interceptor-solution/src/app/shared/directives/badge.directive.ts index c7f8f4d4..24699532 100644 --- a/apps/24-interceptor-solution/src/app/shared/directives/badge.directive.ts +++ b/apps/24-interceptor-solution/src/app/shared/directives/badge.directive.ts @@ -6,7 +6,10 @@ import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core'; export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/24-interceptor/project.json b/apps/24-interceptor/project.json index 6f509f24..8d71a8a0 100644 --- a/apps/24-interceptor/project.json +++ b/apps/24-interceptor/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/24-interceptor", "index": "apps/24-interceptor/src/index.html", - "main": "apps/24-interceptor/src/main.ts", - "polyfills": "apps/24-interceptor/src/polyfills.ts", + "browser": "apps/24-interceptor/src/main.ts", + "polyfills": [ + "apps/24-interceptor/src/polyfills.ts" + ], "tsConfig": "apps/24-interceptor/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "24-interceptor:build:production" + "buildTarget": "24-interceptor:build:production" }, "development": { - "browserTarget": "24-interceptor:build:development" + "buildTarget": "24-interceptor:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "24-interceptor:build" + "buildTarget": "24-interceptor:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/24-interceptor" ], "options": { - "jestConfig": "apps/24-interceptor/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/24-interceptor/jest.config.ts" } } }, diff --git a/apps/24-interceptor/src/app/feature/home/home.component.html b/apps/24-interceptor/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/24-interceptor/src/app/feature/home/home.component.html +++ b/apps/24-interceptor/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/24-interceptor/src/app/feature/people/people.component.html b/apps/24-interceptor/src/app/feature/people/people.component.html index e7d9c27d..5815ad34 100644 --- a/apps/24-interceptor/src/app/feature/people/people.component.html +++ b/apps/24-interceptor/src/app/feature/people/people.component.html @@ -1,25 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
- - +
-
\ No newline at end of file +} diff --git a/apps/24-interceptor/src/app/feature/people/people.component.ts b/apps/24-interceptor/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/24-interceptor/src/app/feature/people/people.component.ts +++ b/apps/24-interceptor/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/24-interceptor/src/app/feature/update-person/update-person.component.html b/apps/24-interceptor/src/app/feature/update-person/update-person.component.html index 3e3d80fb..0ebdc4ff 100644 --- a/apps/24-interceptor/src/app/feature/update-person/update-person.component.html +++ b/apps/24-interceptor/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/24-interceptor/src/app/feature/update-person/update-person.component.ts b/apps/24-interceptor/src/app/feature/update-person/update-person.component.ts index 7961080d..27f0fee0 100644 --- a/apps/24-interceptor/src/app/feature/update-person/update-person.component.ts +++ b/apps/24-interceptor/src/app/feature/update-person/update-person.component.ts @@ -12,7 +12,11 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.data.pipe(map(({ personDetails }) => personDetails)); diff --git a/apps/24-interceptor/src/app/shared/components/form/form.component.html b/apps/24-interceptor/src/app/shared/components/form/form.component.html index b31cdc13..1b107304 100644 --- a/apps/24-interceptor/src/app/shared/components/form/form.component.html +++ b/apps/24-interceptor/src/app/shared/components/form/form.component.html @@ -1,4 +1,4 @@ -
+
person-photo @@ -8,31 +8,42 @@ First name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Last name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Email - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } phone - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
@@ -40,4 +51,4 @@ -
\ No newline at end of file + diff --git a/apps/24-interceptor/src/app/shared/directives/badge.directive.ts b/apps/24-interceptor/src/app/shared/directives/badge.directive.ts index c7f8f4d4..24699532 100644 --- a/apps/24-interceptor/src/app/shared/directives/badge.directive.ts +++ b/apps/24-interceptor/src/app/shared/directives/badge.directive.ts @@ -6,7 +6,10 @@ import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core'; export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/25-teleportation-solution/project.json b/apps/25-teleportation-solution/project.json index 4de0134d..5f338b24 100644 --- a/apps/25-teleportation-solution/project.json +++ b/apps/25-teleportation-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/25-teleportation-solution", "index": "apps/25-teleportation-solution/src/index.html", - "main": "apps/25-teleportation-solution/src/main.ts", - "polyfills": "apps/25-teleportation-solution/src/polyfills.ts", + "browser": "apps/25-teleportation-solution/src/main.ts", + "polyfills": [ + "apps/25-teleportation-solution/src/polyfills.ts" + ], "tsConfig": "apps/25-teleportation-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "25-teleportation-solution:build:production" + "buildTarget": "25-teleportation-solution:build:production" }, "development": { - "browserTarget": "25-teleportation-solution:build:development" + "buildTarget": "25-teleportation-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "25-teleportation-solution:build" + "buildTarget": "25-teleportation-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/25-teleportation-solution" ], "options": { - "jestConfig": "apps/25-teleportation-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/25-teleportation-solution/jest.config.ts" } } }, diff --git a/apps/25-teleportation-solution/src/app/core/components/header/header.component.spec.ts b/apps/25-teleportation-solution/src/app/core/components/header/header.component.spec.ts index 3b5a4fda..469487e1 100644 --- a/apps/25-teleportation-solution/src/app/core/components/header/header.component.spec.ts +++ b/apps/25-teleportation-solution/src/app/core/components/header/header.component.spec.ts @@ -5,7 +5,7 @@ import { HeaderComponent } from './header.component'; @Component({ template: ` Hello Sfeir - + `, }) export class ContainerHeaderComponent {} diff --git a/apps/25-teleportation-solution/src/app/feature/home/home.component.html b/apps/25-teleportation-solution/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/25-teleportation-solution/src/app/feature/home/home.component.html +++ b/apps/25-teleportation-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/25-teleportation-solution/src/app/feature/people/people.component.html b/apps/25-teleportation-solution/src/app/feature/people/people.component.html index 013b3886..5815ad34 100644 --- a/apps/25-teleportation-solution/src/app/feature/people/people.component.html +++ b/apps/25-teleportation-solution/src/app/feature/people/people.component.html @@ -1,25 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
-
-
+} diff --git a/apps/25-teleportation-solution/src/app/feature/people/people.component.ts b/apps/25-teleportation-solution/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/25-teleportation-solution/src/app/feature/people/people.component.ts +++ b/apps/25-teleportation-solution/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/25-teleportation-solution/src/app/feature/update-person/update-person.component.html b/apps/25-teleportation-solution/src/app/feature/update-person/update-person.component.html index 3e3d80fb..0ebdc4ff 100644 --- a/apps/25-teleportation-solution/src/app/feature/update-person/update-person.component.html +++ b/apps/25-teleportation-solution/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/25-teleportation-solution/src/app/feature/update-person/update-person.component.ts b/apps/25-teleportation-solution/src/app/feature/update-person/update-person.component.ts index 7961080d..27f0fee0 100644 --- a/apps/25-teleportation-solution/src/app/feature/update-person/update-person.component.ts +++ b/apps/25-teleportation-solution/src/app/feature/update-person/update-person.component.ts @@ -12,7 +12,11 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.data.pipe(map(({ personDetails }) => personDetails)); diff --git a/apps/25-teleportation-solution/src/app/shared/components/form/form.component.html b/apps/25-teleportation-solution/src/app/shared/components/form/form.component.html index e9add69c..1b107304 100644 --- a/apps/25-teleportation-solution/src/app/shared/components/form/form.component.html +++ b/apps/25-teleportation-solution/src/app/shared/components/form/form.component.html @@ -1,41 +1,49 @@
- person-photo + person-photo
First name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Last name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Email - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com - + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } phone - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
@@ -43,4 +51,4 @@ -
\ No newline at end of file + diff --git a/apps/25-teleportation-solution/src/app/shared/directives/badge.directive.ts b/apps/25-teleportation-solution/src/app/shared/directives/badge.directive.ts index c7f8f4d4..24699532 100644 --- a/apps/25-teleportation-solution/src/app/shared/directives/badge.directive.ts +++ b/apps/25-teleportation-solution/src/app/shared/directives/badge.directive.ts @@ -6,7 +6,10 @@ import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core'; export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/25-teleportation/project.json b/apps/25-teleportation/project.json index 17014787..9ba82b92 100644 --- a/apps/25-teleportation/project.json +++ b/apps/25-teleportation/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/25-teleportation", "index": "apps/25-teleportation/src/index.html", - "main": "apps/25-teleportation/src/main.ts", - "polyfills": "apps/25-teleportation/src/polyfills.ts", + "browser": "apps/25-teleportation/src/main.ts", + "polyfills": [ + "apps/25-teleportation/src/polyfills.ts" + ], "tsConfig": "apps/25-teleportation/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "25-teleportation:build:production" + "buildTarget": "25-teleportation:build:production" }, "development": { - "browserTarget": "25-teleportation:build:development" + "buildTarget": "25-teleportation:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "25-teleportation:build" + "buildTarget": "25-teleportation:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/25-teleportation" ], "options": { - "jestConfig": "apps/25-teleportation/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/25-teleportation/jest.config.ts" } } }, diff --git a/apps/25-teleportation/src/app/feature/home/home.component.html b/apps/25-teleportation/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/25-teleportation/src/app/feature/home/home.component.html +++ b/apps/25-teleportation/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/25-teleportation/src/app/feature/people/people.component.html b/apps/25-teleportation/src/app/feature/people/people.component.html index c25ac50e..5815ad34 100644 --- a/apps/25-teleportation/src/app/feature/people/people.component.html +++ b/apps/25-teleportation/src/app/feature/people/people.component.html @@ -1,25 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
- - +
-
+} diff --git a/apps/25-teleportation/src/app/feature/people/people.component.ts b/apps/25-teleportation/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/25-teleportation/src/app/feature/people/people.component.ts +++ b/apps/25-teleportation/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/25-teleportation/src/app/feature/update-person/update-person.component.html b/apps/25-teleportation/src/app/feature/update-person/update-person.component.html index 3e3d80fb..fbed357c 100644 --- a/apps/25-teleportation/src/app/feature/update-person/update-person.component.html +++ b/apps/25-teleportation/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/25-teleportation/src/app/feature/update-person/update-person.component.ts b/apps/25-teleportation/src/app/feature/update-person/update-person.component.ts index 7961080d..27f0fee0 100644 --- a/apps/25-teleportation/src/app/feature/update-person/update-person.component.ts +++ b/apps/25-teleportation/src/app/feature/update-person/update-person.component.ts @@ -12,7 +12,11 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.data.pipe(map(({ personDetails }) => personDetails)); diff --git a/apps/25-teleportation/src/app/shared/components/form/form.component.html b/apps/25-teleportation/src/app/shared/components/form/form.component.html index 95ad564c..1b107304 100644 --- a/apps/25-teleportation/src/app/shared/components/form/form.component.html +++ b/apps/25-teleportation/src/app/shared/components/form/form.component.html @@ -1,41 +1,49 @@ -
+
- person-photo + person-photo
First name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Last name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Email - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com - + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } phone - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
diff --git a/apps/25-teleportation/src/app/shared/directives/badge.directive.ts b/apps/25-teleportation/src/app/shared/directives/badge.directive.ts index c7f8f4d4..24699532 100644 --- a/apps/25-teleportation/src/app/shared/directives/badge.directive.ts +++ b/apps/25-teleportation/src/app/shared/directives/badge.directive.ts @@ -6,7 +6,10 @@ import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core'; export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/26-hostbinding-hostlistener-solution/project.json b/apps/26-hostbinding-hostlistener-solution/project.json index 1cba210e..c76b580b 100644 --- a/apps/26-hostbinding-hostlistener-solution/project.json +++ b/apps/26-hostbinding-hostlistener-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/26-hostbinding-hostlistener-solution", "index": "apps/26-hostbinding-hostlistener-solution/src/index.html", - "main": "apps/26-hostbinding-hostlistener-solution/src/main.ts", - "polyfills": "apps/26-hostbinding-hostlistener-solution/src/polyfills.ts", + "browser": "apps/26-hostbinding-hostlistener-solution/src/main.ts", + "polyfills": [ + "apps/26-hostbinding-hostlistener-solution/src/polyfills.ts" + ], "tsConfig": "apps/26-hostbinding-hostlistener-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "26-hostbinding-hostlistener-solution:build:production" + "buildTarget": "26-hostbinding-hostlistener-solution:build:production" }, "development": { - "browserTarget": "26-hostbinding-hostlistener-solution:build:development" + "buildTarget": "26-hostbinding-hostlistener-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "26-hostbinding-hostlistener-solution:build" + "buildTarget": "26-hostbinding-hostlistener-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/26-hostbinding-hostlistener-solution" ], "options": { - "jestConfig": "apps/26-hostbinding-hostlistener-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/26-hostbinding-hostlistener-solution/jest.config.ts" } } }, diff --git a/apps/26-hostbinding-hostlistener-solution/src/app/core/components/header/header.component.spec.ts b/apps/26-hostbinding-hostlistener-solution/src/app/core/components/header/header.component.spec.ts index 3b5a4fda..469487e1 100644 --- a/apps/26-hostbinding-hostlistener-solution/src/app/core/components/header/header.component.spec.ts +++ b/apps/26-hostbinding-hostlistener-solution/src/app/core/components/header/header.component.spec.ts @@ -5,7 +5,7 @@ import { HeaderComponent } from './header.component'; @Component({ template: ` Hello Sfeir - + `, }) export class ContainerHeaderComponent {} diff --git a/apps/26-hostbinding-hostlistener-solution/src/app/feature/home/home.component.html b/apps/26-hostbinding-hostlistener-solution/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/26-hostbinding-hostlistener-solution/src/app/feature/home/home.component.html +++ b/apps/26-hostbinding-hostlistener-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/26-hostbinding-hostlistener-solution/src/app/feature/people/people.component.html b/apps/26-hostbinding-hostlistener-solution/src/app/feature/people/people.component.html index 013b3886..5815ad34 100644 --- a/apps/26-hostbinding-hostlistener-solution/src/app/feature/people/people.component.html +++ b/apps/26-hostbinding-hostlistener-solution/src/app/feature/people/people.component.html @@ -1,25 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
-
-
+} diff --git a/apps/26-hostbinding-hostlistener-solution/src/app/feature/people/people.component.ts b/apps/26-hostbinding-hostlistener-solution/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/26-hostbinding-hostlistener-solution/src/app/feature/people/people.component.ts +++ b/apps/26-hostbinding-hostlistener-solution/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/26-hostbinding-hostlistener-solution/src/app/feature/update-person/update-person.component.html b/apps/26-hostbinding-hostlistener-solution/src/app/feature/update-person/update-person.component.html index 3e3d80fb..0ebdc4ff 100644 --- a/apps/26-hostbinding-hostlistener-solution/src/app/feature/update-person/update-person.component.html +++ b/apps/26-hostbinding-hostlistener-solution/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/26-hostbinding-hostlistener-solution/src/app/feature/update-person/update-person.component.ts b/apps/26-hostbinding-hostlistener-solution/src/app/feature/update-person/update-person.component.ts index 7961080d..27f0fee0 100644 --- a/apps/26-hostbinding-hostlistener-solution/src/app/feature/update-person/update-person.component.ts +++ b/apps/26-hostbinding-hostlistener-solution/src/app/feature/update-person/update-person.component.ts @@ -12,7 +12,11 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.data.pipe(map(({ personDetails }) => personDetails)); diff --git a/apps/26-hostbinding-hostlistener-solution/src/app/shared/components/form/form.component.html b/apps/26-hostbinding-hostlistener-solution/src/app/shared/components/form/form.component.html index e9add69c..1b107304 100644 --- a/apps/26-hostbinding-hostlistener-solution/src/app/shared/components/form/form.component.html +++ b/apps/26-hostbinding-hostlistener-solution/src/app/shared/components/form/form.component.html @@ -1,41 +1,49 @@
- person-photo + person-photo
First name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Last name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Email - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com - + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } phone - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
@@ -43,4 +51,4 @@ - \ No newline at end of file + diff --git a/apps/26-hostbinding-hostlistener-solution/src/app/shared/directives/badge.directive.ts b/apps/26-hostbinding-hostlistener-solution/src/app/shared/directives/badge.directive.ts index 2857a01c..9c2c29d1 100644 --- a/apps/26-hostbinding-hostlistener-solution/src/app/shared/directives/badge.directive.ts +++ b/apps/26-hostbinding-hostlistener-solution/src/app/shared/directives/badge.directive.ts @@ -7,7 +7,10 @@ export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; @HostBinding('style.color') private iconColor = 'black'; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/26-hostbinding-hostlistener/project.json b/apps/26-hostbinding-hostlistener/project.json index 9fff58f0..10da1be6 100644 --- a/apps/26-hostbinding-hostlistener/project.json +++ b/apps/26-hostbinding-hostlistener/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/26-hostbinding-hostlistener", "index": "apps/26-hostbinding-hostlistener/src/index.html", - "main": "apps/26-hostbinding-hostlistener/src/main.ts", - "polyfills": "apps/26-hostbinding-hostlistener/src/polyfills.ts", + "browser": "apps/26-hostbinding-hostlistener/src/main.ts", + "polyfills": [ + "apps/26-hostbinding-hostlistener/src/polyfills.ts" + ], "tsConfig": "apps/26-hostbinding-hostlistener/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "26-hostbinding-hostlistener:build:production" + "buildTarget": "26-hostbinding-hostlistener:build:production" }, "development": { - "browserTarget": "26-hostbinding-hostlistener:build:development" + "buildTarget": "26-hostbinding-hostlistener:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "26-hostbinding-hostlistener:build" + "buildTarget": "26-hostbinding-hostlistener:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/26-hostbinding-hostlistener" ], "options": { - "jestConfig": "apps/26-hostbinding-hostlistener/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/26-hostbinding-hostlistener/jest.config.ts" } } }, diff --git a/apps/26-hostbinding-hostlistener/src/app/core/components/header/header.component.spec.ts b/apps/26-hostbinding-hostlistener/src/app/core/components/header/header.component.spec.ts index 3b5a4fda..469487e1 100644 --- a/apps/26-hostbinding-hostlistener/src/app/core/components/header/header.component.spec.ts +++ b/apps/26-hostbinding-hostlistener/src/app/core/components/header/header.component.spec.ts @@ -5,7 +5,7 @@ import { HeaderComponent } from './header.component'; @Component({ template: ` Hello Sfeir - + `, }) export class ContainerHeaderComponent {} diff --git a/apps/26-hostbinding-hostlistener/src/app/feature/home/home.component.html b/apps/26-hostbinding-hostlistener/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/26-hostbinding-hostlistener/src/app/feature/home/home.component.html +++ b/apps/26-hostbinding-hostlistener/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/26-hostbinding-hostlistener/src/app/feature/people/people.component.html b/apps/26-hostbinding-hostlistener/src/app/feature/people/people.component.html index c25ac50e..5815ad34 100644 --- a/apps/26-hostbinding-hostlistener/src/app/feature/people/people.component.html +++ b/apps/26-hostbinding-hostlistener/src/app/feature/people/people.component.html @@ -1,25 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
- - +
-
+} diff --git a/apps/26-hostbinding-hostlistener/src/app/feature/people/people.component.ts b/apps/26-hostbinding-hostlistener/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/26-hostbinding-hostlistener/src/app/feature/people/people.component.ts +++ b/apps/26-hostbinding-hostlistener/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/26-hostbinding-hostlistener/src/app/feature/update-person/update-person.component.html b/apps/26-hostbinding-hostlistener/src/app/feature/update-person/update-person.component.html index 3e3d80fb..0ebdc4ff 100644 --- a/apps/26-hostbinding-hostlistener/src/app/feature/update-person/update-person.component.html +++ b/apps/26-hostbinding-hostlistener/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/26-hostbinding-hostlistener/src/app/feature/update-person/update-person.component.ts b/apps/26-hostbinding-hostlistener/src/app/feature/update-person/update-person.component.ts index 7961080d..27f0fee0 100644 --- a/apps/26-hostbinding-hostlistener/src/app/feature/update-person/update-person.component.ts +++ b/apps/26-hostbinding-hostlistener/src/app/feature/update-person/update-person.component.ts @@ -12,7 +12,11 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.data.pipe(map(({ personDetails }) => personDetails)); diff --git a/apps/26-hostbinding-hostlistener/src/app/shared/components/form/form.component.html b/apps/26-hostbinding-hostlistener/src/app/shared/components/form/form.component.html index 95ad564c..1b107304 100644 --- a/apps/26-hostbinding-hostlistener/src/app/shared/components/form/form.component.html +++ b/apps/26-hostbinding-hostlistener/src/app/shared/components/form/form.component.html @@ -1,41 +1,49 @@ -
+
- person-photo + person-photo
First name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Last name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Email - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com - + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } phone - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
diff --git a/apps/26-hostbinding-hostlistener/src/app/shared/directives/badge.directive.ts b/apps/26-hostbinding-hostlistener/src/app/shared/directives/badge.directive.ts index c7f8f4d4..24699532 100644 --- a/apps/26-hostbinding-hostlistener/src/app/shared/directives/badge.directive.ts +++ b/apps/26-hostbinding-hostlistener/src/app/shared/directives/badge.directive.ts @@ -6,7 +6,10 @@ import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core'; export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/27-structural-directive-solution/project.json b/apps/27-structural-directive-solution/project.json index 582a6174..0bdd65ea 100644 --- a/apps/27-structural-directive-solution/project.json +++ b/apps/27-structural-directive-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/27-structural-directive-solution", "index": "apps/27-structural-directive-solution/src/index.html", - "main": "apps/27-structural-directive-solution/src/main.ts", - "polyfills": "apps/27-structural-directive-solution/src/polyfills.ts", + "browser": "apps/27-structural-directive-solution/src/main.ts", + "polyfills": [ + "apps/27-structural-directive-solution/src/polyfills.ts" + ], "tsConfig": "apps/27-structural-directive-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "27-structural-directive-solution:build:production" + "buildTarget": "27-structural-directive-solution:build:production" }, "development": { - "browserTarget": "27-structural-directive-solution:build:development" + "buildTarget": "27-structural-directive-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "27-structural-directive-solution:build" + "buildTarget": "27-structural-directive-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/27-structural-directive-solution" ], "options": { - "jestConfig": "apps/27-structural-directive-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/27-structural-directive-solution/jest.config.ts" } } }, diff --git a/apps/27-structural-directive-solution/src/app/core/components/header/header.component.spec.ts b/apps/27-structural-directive-solution/src/app/core/components/header/header.component.spec.ts index 3b5a4fda..469487e1 100644 --- a/apps/27-structural-directive-solution/src/app/core/components/header/header.component.spec.ts +++ b/apps/27-structural-directive-solution/src/app/core/components/header/header.component.spec.ts @@ -5,7 +5,7 @@ import { HeaderComponent } from './header.component'; @Component({ template: ` Hello Sfeir - + `, }) export class ContainerHeaderComponent {} diff --git a/apps/27-structural-directive-solution/src/app/feature/home/home.component.html b/apps/27-structural-directive-solution/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/27-structural-directive-solution/src/app/feature/home/home.component.html +++ b/apps/27-structural-directive-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/27-structural-directive-solution/src/app/feature/people/people.component.html b/apps/27-structural-directive-solution/src/app/feature/people/people.component.html index 013b3886..5815ad34 100644 --- a/apps/27-structural-directive-solution/src/app/feature/people/people.component.html +++ b/apps/27-structural-directive-solution/src/app/feature/people/people.component.html @@ -1,25 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
-
-
+} diff --git a/apps/27-structural-directive-solution/src/app/feature/people/people.component.ts b/apps/27-structural-directive-solution/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/27-structural-directive-solution/src/app/feature/people/people.component.ts +++ b/apps/27-structural-directive-solution/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/27-structural-directive-solution/src/app/feature/update-person/update-person.component.html b/apps/27-structural-directive-solution/src/app/feature/update-person/update-person.component.html index 3e3d80fb..fbed357c 100644 --- a/apps/27-structural-directive-solution/src/app/feature/update-person/update-person.component.html +++ b/apps/27-structural-directive-solution/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/27-structural-directive-solution/src/app/feature/update-person/update-person.component.ts b/apps/27-structural-directive-solution/src/app/feature/update-person/update-person.component.ts index 7961080d..27f0fee0 100644 --- a/apps/27-structural-directive-solution/src/app/feature/update-person/update-person.component.ts +++ b/apps/27-structural-directive-solution/src/app/feature/update-person/update-person.component.ts @@ -12,7 +12,11 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.data.pipe(map(({ personDetails }) => personDetails)); diff --git a/apps/27-structural-directive-solution/src/app/shared/components/form/form.component.html b/apps/27-structural-directive-solution/src/app/shared/components/form/form.component.html index e9add69c..1b107304 100644 --- a/apps/27-structural-directive-solution/src/app/shared/components/form/form.component.html +++ b/apps/27-structural-directive-solution/src/app/shared/components/form/form.component.html @@ -1,41 +1,49 @@
- person-photo + person-photo
First name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Last name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Email - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com - + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } phone - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
@@ -43,4 +51,4 @@ - \ No newline at end of file + diff --git a/apps/27-structural-directive-solution/src/app/shared/directives/badge.directive.ts b/apps/27-structural-directive-solution/src/app/shared/directives/badge.directive.ts index 2857a01c..9c2c29d1 100644 --- a/apps/27-structural-directive-solution/src/app/shared/directives/badge.directive.ts +++ b/apps/27-structural-directive-solution/src/app/shared/directives/badge.directive.ts @@ -7,7 +7,10 @@ export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; @HostBinding('style.color') private iconColor = 'black'; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/27-structural-directive-solution/src/app/shared/directives/display.directive.ts b/apps/27-structural-directive-solution/src/app/shared/directives/display.directive.ts index 406b1e8e..58857cb8 100644 --- a/apps/27-structural-directive-solution/src/app/shared/directives/display.directive.ts +++ b/apps/27-structural-directive-solution/src/app/shared/directives/display.directive.ts @@ -8,5 +8,8 @@ export class DisplayDirective { @Input('sfeirDisplay') set condition(condition: boolean) { condition ? this.viewContainerRef.createEmbeddedView(this.templateRef) : this.viewContainerRef.clear(); } - constructor(private readonly templateRef: TemplateRef, private readonly viewContainerRef: ViewContainerRef) {} + constructor( + private readonly templateRef: TemplateRef, + private readonly viewContainerRef: ViewContainerRef, + ) {} } diff --git a/apps/27-structural-directive/project.json b/apps/27-structural-directive/project.json index dfa2092c..d35f9355 100644 --- a/apps/27-structural-directive/project.json +++ b/apps/27-structural-directive/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/27-structural-directive", "index": "apps/27-structural-directive/src/index.html", - "main": "apps/27-structural-directive/src/main.ts", - "polyfills": "apps/27-structural-directive/src/polyfills.ts", + "browser": "apps/27-structural-directive/src/main.ts", + "polyfills": [ + "apps/27-structural-directive/src/polyfills.ts" + ], "tsConfig": "apps/27-structural-directive/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "27-structural-directive:build:production" + "buildTarget": "27-structural-directive:build:production" }, "development": { - "browserTarget": "27-structural-directive:build:development" + "buildTarget": "27-structural-directive:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "27-structural-directive:build" + "buildTarget": "27-structural-directive:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/27-structural-directive" ], "options": { - "jestConfig": "apps/27-structural-directive/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/27-structural-directive/jest.config.ts" } } }, diff --git a/apps/27-structural-directive/src/app/core/components/header/header.component.spec.ts b/apps/27-structural-directive/src/app/core/components/header/header.component.spec.ts index 3b5a4fda..469487e1 100644 --- a/apps/27-structural-directive/src/app/core/components/header/header.component.spec.ts +++ b/apps/27-structural-directive/src/app/core/components/header/header.component.spec.ts @@ -5,7 +5,7 @@ import { HeaderComponent } from './header.component'; @Component({ template: ` Hello Sfeir - + `, }) export class ContainerHeaderComponent {} diff --git a/apps/27-structural-directive/src/app/feature/home/home.component.html b/apps/27-structural-directive/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/27-structural-directive/src/app/feature/home/home.component.html +++ b/apps/27-structural-directive/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/27-structural-directive/src/app/feature/people/people.component.html b/apps/27-structural-directive/src/app/feature/people/people.component.html index c25ac50e..5815ad34 100644 --- a/apps/27-structural-directive/src/app/feature/people/people.component.html +++ b/apps/27-structural-directive/src/app/feature/people/people.component.html @@ -1,25 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
- - +
-
+} diff --git a/apps/27-structural-directive/src/app/feature/people/people.component.ts b/apps/27-structural-directive/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/27-structural-directive/src/app/feature/people/people.component.ts +++ b/apps/27-structural-directive/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/27-structural-directive/src/app/feature/update-person/update-person.component.html b/apps/27-structural-directive/src/app/feature/update-person/update-person.component.html index 3e3d80fb..fbed357c 100644 --- a/apps/27-structural-directive/src/app/feature/update-person/update-person.component.html +++ b/apps/27-structural-directive/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/27-structural-directive/src/app/feature/update-person/update-person.component.ts b/apps/27-structural-directive/src/app/feature/update-person/update-person.component.ts index 7961080d..27f0fee0 100644 --- a/apps/27-structural-directive/src/app/feature/update-person/update-person.component.ts +++ b/apps/27-structural-directive/src/app/feature/update-person/update-person.component.ts @@ -12,7 +12,11 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.data.pipe(map(({ personDetails }) => personDetails)); diff --git a/apps/27-structural-directive/src/app/shared/components/form/form.component.html b/apps/27-structural-directive/src/app/shared/components/form/form.component.html index 95ad564c..1b107304 100644 --- a/apps/27-structural-directive/src/app/shared/components/form/form.component.html +++ b/apps/27-structural-directive/src/app/shared/components/form/form.component.html @@ -1,41 +1,49 @@ -
+
- person-photo + person-photo
First name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Last name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Email - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com - + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } phone - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
diff --git a/apps/27-structural-directive/src/app/shared/directives/badge.directive.ts b/apps/27-structural-directive/src/app/shared/directives/badge.directive.ts index 2857a01c..9c2c29d1 100644 --- a/apps/27-structural-directive/src/app/shared/directives/badge.directive.ts +++ b/apps/27-structural-directive/src/app/shared/directives/badge.directive.ts @@ -7,7 +7,10 @@ export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; @HostBinding('style.color') private iconColor = 'black'; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/28-custom-control-solution/project.json b/apps/28-custom-control-solution/project.json index 469d7196..cbff09ad 100644 --- a/apps/28-custom-control-solution/project.json +++ b/apps/28-custom-control-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/28-custom-control-solution", "index": "apps/28-custom-control-solution/src/index.html", - "main": "apps/28-custom-control-solution/src/main.ts", - "polyfills": "apps/28-custom-control-solution/src/polyfills.ts", + "browser": "apps/28-custom-control-solution/src/main.ts", + "polyfills": [ + "apps/28-custom-control-solution/src/polyfills.ts" + ], "tsConfig": "apps/28-custom-control-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "28-custom-control-solution:build:production" + "buildTarget": "28-custom-control-solution:build:production" }, "development": { - "browserTarget": "28-custom-control-solution:build:development" + "buildTarget": "28-custom-control-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "28-custom-control-solution:build" + "buildTarget": "28-custom-control-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/28-custom-control-solution" ], "options": { - "jestConfig": "apps/28-custom-control-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/28-custom-control-solution/jest.config.ts" } } }, diff --git a/apps/28-custom-control-solution/src/app/core/components/header/header.component.spec.ts b/apps/28-custom-control-solution/src/app/core/components/header/header.component.spec.ts index 3b5a4fda..469487e1 100644 --- a/apps/28-custom-control-solution/src/app/core/components/header/header.component.spec.ts +++ b/apps/28-custom-control-solution/src/app/core/components/header/header.component.spec.ts @@ -5,7 +5,7 @@ import { HeaderComponent } from './header.component'; @Component({ template: ` Hello Sfeir - + `, }) export class ContainerHeaderComponent {} diff --git a/apps/28-custom-control-solution/src/app/feature/home/home.component.html b/apps/28-custom-control-solution/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/28-custom-control-solution/src/app/feature/home/home.component.html +++ b/apps/28-custom-control-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/28-custom-control-solution/src/app/feature/people/people.component.html b/apps/28-custom-control-solution/src/app/feature/people/people.component.html index 013b3886..5815ad34 100644 --- a/apps/28-custom-control-solution/src/app/feature/people/people.component.html +++ b/apps/28-custom-control-solution/src/app/feature/people/people.component.html @@ -1,25 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
-
-
+} diff --git a/apps/28-custom-control-solution/src/app/feature/people/people.component.ts b/apps/28-custom-control-solution/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/28-custom-control-solution/src/app/feature/people/people.component.ts +++ b/apps/28-custom-control-solution/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/28-custom-control-solution/src/app/feature/update-person/update-person.component.html b/apps/28-custom-control-solution/src/app/feature/update-person/update-person.component.html index 3e3d80fb..fbed357c 100644 --- a/apps/28-custom-control-solution/src/app/feature/update-person/update-person.component.html +++ b/apps/28-custom-control-solution/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/28-custom-control-solution/src/app/feature/update-person/update-person.component.ts b/apps/28-custom-control-solution/src/app/feature/update-person/update-person.component.ts index 7961080d..27f0fee0 100644 --- a/apps/28-custom-control-solution/src/app/feature/update-person/update-person.component.ts +++ b/apps/28-custom-control-solution/src/app/feature/update-person/update-person.component.ts @@ -12,7 +12,11 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.data.pipe(map(({ personDetails }) => personDetails)); diff --git a/apps/28-custom-control-solution/src/app/shared/components/custom-input/custom-input.component.html b/apps/28-custom-control-solution/src/app/shared/components/custom-input/custom-input.component.html index 1b04a5e2..deb4046f 100644 --- a/apps/28-custom-control-solution/src/app/shared/components/custom-input/custom-input.component.html +++ b/apps/28-custom-control-solution/src/app/shared/components/custom-input/custom-input.component.html @@ -2,6 +2,8 @@ {{ placeholder }} - + @if (userLoseFocus$ |async) { + + } diff --git a/apps/28-custom-control-solution/src/app/shared/components/custom-input/custom-input.component.ts b/apps/28-custom-control-solution/src/app/shared/components/custom-input/custom-input.component.ts index 3b4964cf..7fe1397a 100644 --- a/apps/28-custom-control-solution/src/app/shared/components/custom-input/custom-input.component.ts +++ b/apps/28-custom-control-solution/src/app/shared/components/custom-input/custom-input.component.ts @@ -24,14 +24,14 @@ export class CustomInputComponent implements OnInit, OnDestroy, ControlValueAcce tap(() => { this._onChange(this.inputElement.nativeElement.value); this._onTouched(); - }) + }), ); const blurListener$ = fromEvent(this.inputElement.nativeElement, 'blur').pipe( tap(() => { this._onTouched(); this.userLoseFocus$.next(true); - }) + }), ); merge(inputListener$, blurListener$).pipe(takeUntil(this.unsubscribe$)).subscribe(); diff --git a/apps/28-custom-control-solution/src/app/shared/components/form/form.component.html b/apps/28-custom-control-solution/src/app/shared/components/form/form.component.html index 2785eb0e..96799d1a 100644 --- a/apps/28-custom-control-solution/src/app/shared/components/form/form.component.html +++ b/apps/28-custom-control-solution/src/app/shared/components/form/form.component.html @@ -1,30 +1,41 @@
- + person-photo
- Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
diff --git a/apps/28-custom-control-solution/src/app/shared/directives/badge.directive.ts b/apps/28-custom-control-solution/src/app/shared/directives/badge.directive.ts index 2857a01c..9c2c29d1 100644 --- a/apps/28-custom-control-solution/src/app/shared/directives/badge.directive.ts +++ b/apps/28-custom-control-solution/src/app/shared/directives/badge.directive.ts @@ -7,7 +7,10 @@ export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; @HostBinding('style.color') private iconColor = 'black'; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/28-custom-control-solution/src/app/shared/directives/display.directive.ts b/apps/28-custom-control-solution/src/app/shared/directives/display.directive.ts index 406b1e8e..58857cb8 100644 --- a/apps/28-custom-control-solution/src/app/shared/directives/display.directive.ts +++ b/apps/28-custom-control-solution/src/app/shared/directives/display.directive.ts @@ -8,5 +8,8 @@ export class DisplayDirective { @Input('sfeirDisplay') set condition(condition: boolean) { condition ? this.viewContainerRef.createEmbeddedView(this.templateRef) : this.viewContainerRef.clear(); } - constructor(private readonly templateRef: TemplateRef, private readonly viewContainerRef: ViewContainerRef) {} + constructor( + private readonly templateRef: TemplateRef, + private readonly viewContainerRef: ViewContainerRef, + ) {} } diff --git a/apps/28-custom-control/project.json b/apps/28-custom-control/project.json index f6f8092c..6b9fbc3c 100644 --- a/apps/28-custom-control/project.json +++ b/apps/28-custom-control/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/28-custom-control", "index": "apps/28-custom-control/src/index.html", - "main": "apps/28-custom-control/src/main.ts", - "polyfills": "apps/28-custom-control/src/polyfills.ts", + "browser": "apps/28-custom-control/src/main.ts", + "polyfills": [ + "apps/28-custom-control/src/polyfills.ts" + ], "tsConfig": "apps/28-custom-control/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "28-custom-control:build:production" + "buildTarget": "28-custom-control:build:production" }, "development": { - "browserTarget": "28-custom-control:build:development" + "buildTarget": "28-custom-control:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "28-custom-control:build" + "buildTarget": "28-custom-control:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/28-custom-control" ], "options": { - "jestConfig": "apps/28-custom-control/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/28-custom-control/jest.config.ts" } } }, diff --git a/apps/28-custom-control/src/app/core/components/header/header.component.spec.ts b/apps/28-custom-control/src/app/core/components/header/header.component.spec.ts index 3b5a4fda..469487e1 100644 --- a/apps/28-custom-control/src/app/core/components/header/header.component.spec.ts +++ b/apps/28-custom-control/src/app/core/components/header/header.component.spec.ts @@ -5,7 +5,7 @@ import { HeaderComponent } from './header.component'; @Component({ template: ` Hello Sfeir - + `, }) export class ContainerHeaderComponent {} diff --git a/apps/28-custom-control/src/app/feature/home/home.component.html b/apps/28-custom-control/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/28-custom-control/src/app/feature/home/home.component.html +++ b/apps/28-custom-control/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/28-custom-control/src/app/feature/people/people.component.html b/apps/28-custom-control/src/app/feature/people/people.component.html index c25ac50e..5815ad34 100644 --- a/apps/28-custom-control/src/app/feature/people/people.component.html +++ b/apps/28-custom-control/src/app/feature/people/people.component.html @@ -1,25 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
- - +
-
+} diff --git a/apps/28-custom-control/src/app/feature/people/people.component.ts b/apps/28-custom-control/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/28-custom-control/src/app/feature/people/people.component.ts +++ b/apps/28-custom-control/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/28-custom-control/src/app/feature/update-person/update-person.component.html b/apps/28-custom-control/src/app/feature/update-person/update-person.component.html index 3e3d80fb..0ebdc4ff 100644 --- a/apps/28-custom-control/src/app/feature/update-person/update-person.component.html +++ b/apps/28-custom-control/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/28-custom-control/src/app/feature/update-person/update-person.component.ts b/apps/28-custom-control/src/app/feature/update-person/update-person.component.ts index 7961080d..27f0fee0 100644 --- a/apps/28-custom-control/src/app/feature/update-person/update-person.component.ts +++ b/apps/28-custom-control/src/app/feature/update-person/update-person.component.ts @@ -12,7 +12,11 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.data.pipe(map(({ personDetails }) => personDetails)); diff --git a/apps/28-custom-control/src/app/shared/components/form/form.component.html b/apps/28-custom-control/src/app/shared/components/form/form.component.html index d18c5fb1..1b107304 100644 --- a/apps/28-custom-control/src/app/shared/components/form/form.component.html +++ b/apps/28-custom-control/src/app/shared/components/form/form.component.html @@ -1,38 +1,49 @@ - +
- person-photo + person-photo
-
+
First name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Last name - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } Email - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } phone - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
diff --git a/apps/28-custom-control/src/app/shared/directives/badge.directive.ts b/apps/28-custom-control/src/app/shared/directives/badge.directive.ts index 2857a01c..9c2c29d1 100644 --- a/apps/28-custom-control/src/app/shared/directives/badge.directive.ts +++ b/apps/28-custom-control/src/app/shared/directives/badge.directive.ts @@ -7,7 +7,10 @@ export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; @HostBinding('style.color') private iconColor = 'black'; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/28-custom-control/src/app/shared/directives/display.directive.ts b/apps/28-custom-control/src/app/shared/directives/display.directive.ts index 406b1e8e..58857cb8 100644 --- a/apps/28-custom-control/src/app/shared/directives/display.directive.ts +++ b/apps/28-custom-control/src/app/shared/directives/display.directive.ts @@ -8,5 +8,8 @@ export class DisplayDirective { @Input('sfeirDisplay') set condition(condition: boolean) { condition ? this.viewContainerRef.createEmbeddedView(this.templateRef) : this.viewContainerRef.clear(); } - constructor(private readonly templateRef: TemplateRef, private readonly viewContainerRef: ViewContainerRef) {} + constructor( + private readonly templateRef: TemplateRef, + private readonly viewContainerRef: ViewContainerRef, + ) {} } diff --git a/apps/29-elf-store-solution/project.json b/apps/29-elf-store-solution/project.json index 7ab8ad21..aadcc732 100644 --- a/apps/29-elf-store-solution/project.json +++ b/apps/29-elf-store-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/29-elf-store-solution", "index": "apps/29-elf-store-solution/src/index.html", - "main": "apps/29-elf-store-solution/src/main.ts", - "polyfills": "apps/29-elf-store-solution/src/polyfills.ts", + "browser": "apps/29-elf-store-solution/src/main.ts", + "polyfills": [ + "apps/29-elf-store-solution/src/polyfills.ts" + ], "tsConfig": "apps/29-elf-store-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "29-elf-store-solution:build:production" + "buildTarget": "29-elf-store-solution:build:production" }, "development": { - "browserTarget": "29-elf-store-solution:build:development" + "buildTarget": "29-elf-store-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "29-elf-store-solution:build" + "buildTarget": "29-elf-store-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/29-elf-store-solution" ], "options": { - "jestConfig": "apps/29-elf-store-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/29-elf-store-solution/jest.config.ts" } } }, diff --git a/apps/29-elf-store-solution/src/app/core/components/header/header.component.spec.ts b/apps/29-elf-store-solution/src/app/core/components/header/header.component.spec.ts index 3b5a4fda..469487e1 100644 --- a/apps/29-elf-store-solution/src/app/core/components/header/header.component.spec.ts +++ b/apps/29-elf-store-solution/src/app/core/components/header/header.component.spec.ts @@ -5,7 +5,7 @@ import { HeaderComponent } from './header.component'; @Component({ template: ` Hello Sfeir - + `, }) export class ContainerHeaderComponent {} diff --git a/apps/29-elf-store-solution/src/app/core/providers/people.service.ts b/apps/29-elf-store-solution/src/app/core/providers/people.service.ts index 3b65dec3..0df2338f 100644 --- a/apps/29-elf-store-solution/src/app/core/providers/people.service.ts +++ b/apps/29-elf-store-solution/src/app/core/providers/people.service.ts @@ -7,7 +7,10 @@ import { AppStoreService } from '../store/app.store'; @Injectable({ providedIn: 'root' }) export class PeopleService { - constructor(private readonly httpClient: HttpClient, private readonly appStoreService: AppStoreService) {} + constructor( + private readonly httpClient: HttpClient, + private readonly appStoreService: AppStoreService, + ) {} getPeople(): Observable> { return this.httpClient diff --git a/apps/29-elf-store-solution/src/app/core/store/app.store.ts b/apps/29-elf-store-solution/src/app/core/store/app.store.ts index 5c54298e..f1c057de 100644 --- a/apps/29-elf-store-solution/src/app/core/store/app.store.ts +++ b/apps/29-elf-store-solution/src/app/core/store/app.store.ts @@ -16,7 +16,7 @@ export class AppStoreService { private APP_STORE = createStore( { name: 'APP_STORE' }, withProps({ search: '' }), - withEntities({ initialValue: [], idKey: 'id' }) + withEntities({ initialValue: [], idKey: 'id' }), ); setSearch(search: string): void { diff --git a/apps/29-elf-store-solution/src/app/feature/home/home.component.html b/apps/29-elf-store-solution/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/29-elf-store-solution/src/app/feature/home/home.component.html +++ b/apps/29-elf-store-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/29-elf-store-solution/src/app/feature/people/people.component.html b/apps/29-elf-store-solution/src/app/feature/people/people.component.html index 1709f4e8..2d930a27 100644 --- a/apps/29-elf-store-solution/src/app/feature/people/people.component.html +++ b/apps/29-elf-store-solution/src/app/feature/people/people.component.html @@ -1,28 +1,36 @@ - - -
- - -
-
- -
- person-image -
-

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
-
+@if (view$ | async;as currentView) { + + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
-
-
+} diff --git a/apps/29-elf-store-solution/src/app/feature/people/people.component.ts b/apps/29-elf-store-solution/src/app/feature/people/people.component.ts index 70f31d57..edbbe04e 100644 --- a/apps/29-elf-store-solution/src/app/feature/people/people.component.ts +++ b/apps/29-elf-store-solution/src/app/feature/people/people.component.ts @@ -19,7 +19,7 @@ export class PeopleComponent implements OnInit { constructor( private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog, - private readonly appStoreService: AppStoreService + private readonly appStoreService: AppStoreService, ) {} ngOnInit(): void { @@ -44,7 +44,7 @@ export class PeopleComponent implements OnInit { .pipe( filter(personForm => !!personForm), switchMap(personForm => this.peopleService.addNewPerson(personForm)), - switchMap(() => this.peopleService.getPeople()) + switchMap(() => this.peopleService.getPeople()), ) .subscribe(); } diff --git a/apps/29-elf-store-solution/src/app/feature/update-person/update-person.component.html b/apps/29-elf-store-solution/src/app/feature/update-person/update-person.component.html index 3e3d80fb..0ebdc4ff 100644 --- a/apps/29-elf-store-solution/src/app/feature/update-person/update-person.component.html +++ b/apps/29-elf-store-solution/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/29-elf-store-solution/src/app/feature/update-person/update-person.component.ts b/apps/29-elf-store-solution/src/app/feature/update-person/update-person.component.ts index 7961080d..27f0fee0 100644 --- a/apps/29-elf-store-solution/src/app/feature/update-person/update-person.component.ts +++ b/apps/29-elf-store-solution/src/app/feature/update-person/update-person.component.ts @@ -12,7 +12,11 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.data.pipe(map(({ personDetails }) => personDetails)); diff --git a/apps/29-elf-store-solution/src/app/shared/components/custom-input/custom-input.component.html b/apps/29-elf-store-solution/src/app/shared/components/custom-input/custom-input.component.html index 1b04a5e2..deb4046f 100644 --- a/apps/29-elf-store-solution/src/app/shared/components/custom-input/custom-input.component.html +++ b/apps/29-elf-store-solution/src/app/shared/components/custom-input/custom-input.component.html @@ -2,6 +2,8 @@ {{ placeholder }} - + @if (userLoseFocus$ |async) { + + } diff --git a/apps/29-elf-store-solution/src/app/shared/components/custom-input/custom-input.component.ts b/apps/29-elf-store-solution/src/app/shared/components/custom-input/custom-input.component.ts index 3b4964cf..7fe1397a 100644 --- a/apps/29-elf-store-solution/src/app/shared/components/custom-input/custom-input.component.ts +++ b/apps/29-elf-store-solution/src/app/shared/components/custom-input/custom-input.component.ts @@ -24,14 +24,14 @@ export class CustomInputComponent implements OnInit, OnDestroy, ControlValueAcce tap(() => { this._onChange(this.inputElement.nativeElement.value); this._onTouched(); - }) + }), ); const blurListener$ = fromEvent(this.inputElement.nativeElement, 'blur').pipe( tap(() => { this._onTouched(); this.userLoseFocus$.next(true); - }) + }), ); merge(inputListener$, blurListener$).pipe(takeUntil(this.unsubscribe$)).subscribe(); diff --git a/apps/29-elf-store-solution/src/app/shared/components/form/form.component.html b/apps/29-elf-store-solution/src/app/shared/components/form/form.component.html index 3e71c9fe..419249aa 100644 --- a/apps/29-elf-store-solution/src/app/shared/components/form/form.component.html +++ b/apps/29-elf-store-solution/src/app/shared/components/form/form.component.html @@ -6,28 +6,36 @@
- Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.firstname.errors?.['required']) { + Ce chmaps est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.lastname.errors?.['required']) { + Ce chmaps est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com - + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
diff --git a/apps/29-elf-store-solution/src/app/shared/directives/badge.directive.ts b/apps/29-elf-store-solution/src/app/shared/directives/badge.directive.ts index 2857a01c..9c2c29d1 100644 --- a/apps/29-elf-store-solution/src/app/shared/directives/badge.directive.ts +++ b/apps/29-elf-store-solution/src/app/shared/directives/badge.directive.ts @@ -7,7 +7,10 @@ export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; @HostBinding('style.color') private iconColor = 'black'; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/29-elf-store-solution/src/app/shared/directives/display.directive.ts b/apps/29-elf-store-solution/src/app/shared/directives/display.directive.ts index 406b1e8e..58857cb8 100644 --- a/apps/29-elf-store-solution/src/app/shared/directives/display.directive.ts +++ b/apps/29-elf-store-solution/src/app/shared/directives/display.directive.ts @@ -8,5 +8,8 @@ export class DisplayDirective { @Input('sfeirDisplay') set condition(condition: boolean) { condition ? this.viewContainerRef.createEmbeddedView(this.templateRef) : this.viewContainerRef.clear(); } - constructor(private readonly templateRef: TemplateRef, private readonly viewContainerRef: ViewContainerRef) {} + constructor( + private readonly templateRef: TemplateRef, + private readonly viewContainerRef: ViewContainerRef, + ) {} } diff --git a/apps/29-elf-store/project.json b/apps/29-elf-store/project.json index 7a88f70d..1f9e4363 100644 --- a/apps/29-elf-store/project.json +++ b/apps/29-elf-store/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/29-elf-store", "index": "apps/29-elf-store/src/index.html", - "main": "apps/29-elf-store/src/main.ts", - "polyfills": "apps/29-elf-store/src/polyfills.ts", + "browser": "apps/29-elf-store/src/main.ts", + "polyfills": [ + "apps/29-elf-store/src/polyfills.ts" + ], "tsConfig": "apps/29-elf-store/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "29-elf-store:build:production" + "buildTarget": "29-elf-store:build:production" }, "development": { - "browserTarget": "29-elf-store:build:development" + "buildTarget": "29-elf-store:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "29-elf-store:build" + "buildTarget": "29-elf-store:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/29-elf-store" ], "options": { - "jestConfig": "apps/29-elf-store/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/29-elf-store/jest.config.ts" } } }, diff --git a/apps/29-elf-store/src/app/feature/home/home.component.html b/apps/29-elf-store/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/29-elf-store/src/app/feature/home/home.component.html +++ b/apps/29-elf-store/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/29-elf-store/src/app/feature/people/people.component.html b/apps/29-elf-store/src/app/feature/people/people.component.html index e010df53..51534bf9 100644 --- a/apps/29-elf-store/src/app/feature/people/people.component.html +++ b/apps/29-elf-store/src/app/feature/people/people.component.html @@ -1,28 +1,36 @@ - - -
- - -
-
- -
- person-image -
-

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
-
+@if (view$ | async;as currentView) { + + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
- - +
-
+} diff --git a/apps/29-elf-store/src/app/feature/people/people.component.ts b/apps/29-elf-store/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/29-elf-store/src/app/feature/people/people.component.ts +++ b/apps/29-elf-store/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/29-elf-store/src/app/feature/update-person/update-person.component.html b/apps/29-elf-store/src/app/feature/update-person/update-person.component.html index 3e3d80fb..0ebdc4ff 100644 --- a/apps/29-elf-store/src/app/feature/update-person/update-person.component.html +++ b/apps/29-elf-store/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/29-elf-store/src/app/feature/update-person/update-person.component.ts b/apps/29-elf-store/src/app/feature/update-person/update-person.component.ts index 7961080d..27f0fee0 100644 --- a/apps/29-elf-store/src/app/feature/update-person/update-person.component.ts +++ b/apps/29-elf-store/src/app/feature/update-person/update-person.component.ts @@ -12,7 +12,11 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.data.pipe(map(({ personDetails }) => personDetails)); diff --git a/apps/29-elf-store/src/app/shared/components/custom-input/custom-input.component.html b/apps/29-elf-store/src/app/shared/components/custom-input/custom-input.component.html index 1b04a5e2..deb4046f 100644 --- a/apps/29-elf-store/src/app/shared/components/custom-input/custom-input.component.html +++ b/apps/29-elf-store/src/app/shared/components/custom-input/custom-input.component.html @@ -2,6 +2,8 @@ {{ placeholder }} - + @if (userLoseFocus$ |async) { + + } diff --git a/apps/29-elf-store/src/app/shared/components/custom-input/custom-input.component.ts b/apps/29-elf-store/src/app/shared/components/custom-input/custom-input.component.ts index 45e82d40..dcb6c9a4 100644 --- a/apps/29-elf-store/src/app/shared/components/custom-input/custom-input.component.ts +++ b/apps/29-elf-store/src/app/shared/components/custom-input/custom-input.component.ts @@ -27,14 +27,14 @@ export class CustomInputComponent implements OnInit, OnDestroy, ControlValueAcce tap(() => { this._onChange(this.inputElement.nativeElement.value); this._onTouched(); - }) + }), ); const blurListener$ = fromEvent(this.inputElement.nativeElement, 'blur').pipe( tap(() => { this._onTouched(); this.userLoseFocus$.next(true); - }) + }), ); merge(inputListener$, blurListener$).pipe(takeUntil(this.unsubscribe$)).subscribe(); diff --git a/apps/29-elf-store/src/app/shared/components/form/form.component.html b/apps/29-elf-store/src/app/shared/components/form/form.component.html index 7cc9f589..96799d1a 100644 --- a/apps/29-elf-store/src/app/shared/components/form/form.component.html +++ b/apps/29-elf-store/src/app/shared/components/form/form.component.html @@ -6,28 +6,36 @@
- Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com - + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
diff --git a/apps/29-elf-store/src/app/shared/directives/badge.directive.ts b/apps/29-elf-store/src/app/shared/directives/badge.directive.ts index 2857a01c..9c2c29d1 100644 --- a/apps/29-elf-store/src/app/shared/directives/badge.directive.ts +++ b/apps/29-elf-store/src/app/shared/directives/badge.directive.ts @@ -7,7 +7,10 @@ export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; @HostBinding('style.color') private iconColor = 'black'; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/29-elf-store/src/app/shared/directives/display.directive.ts b/apps/29-elf-store/src/app/shared/directives/display.directive.ts index 406b1e8e..58857cb8 100644 --- a/apps/29-elf-store/src/app/shared/directives/display.directive.ts +++ b/apps/29-elf-store/src/app/shared/directives/display.directive.ts @@ -8,5 +8,8 @@ export class DisplayDirective { @Input('sfeirDisplay') set condition(condition: boolean) { condition ? this.viewContainerRef.createEmbeddedView(this.templateRef) : this.viewContainerRef.clear(); } - constructor(private readonly templateRef: TemplateRef, private readonly viewContainerRef: ViewContainerRef) {} + constructor( + private readonly templateRef: TemplateRef, + private readonly viewContainerRef: ViewContainerRef, + ) {} } diff --git a/apps/30-ngxs-store-solution/project.json b/apps/30-ngxs-store-solution/project.json index 26874137..1ae57577 100644 --- a/apps/30-ngxs-store-solution/project.json +++ b/apps/30-ngxs-store-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/30-ngxs-store-solution", "index": "apps/30-ngxs-store-solution/src/index.html", - "main": "apps/30-ngxs-store-solution/src/main.ts", - "polyfills": "apps/30-ngxs-store-solution/src/polyfills.ts", + "browser": "apps/30-ngxs-store-solution/src/main.ts", + "polyfills": [ + "apps/30-ngxs-store-solution/src/polyfills.ts" + ], "tsConfig": "apps/30-ngxs-store-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "30-ngxs-store-solution:build:production" + "buildTarget": "30-ngxs-store-solution:build:production" }, "development": { - "browserTarget": "30-ngxs-store-solution:build:development" + "buildTarget": "30-ngxs-store-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "30-ngxs-store-solution:build" + "buildTarget": "30-ngxs-store-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/30-ngxs-store-solution" ], "options": { - "jestConfig": "apps/30-ngxs-store-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/30-ngxs-store-solution/jest.config.ts" } } }, diff --git a/apps/30-ngxs-store-solution/src/app/core/components/header/header.component.spec.ts b/apps/30-ngxs-store-solution/src/app/core/components/header/header.component.spec.ts index 3b5a4fda..469487e1 100644 --- a/apps/30-ngxs-store-solution/src/app/core/components/header/header.component.spec.ts +++ b/apps/30-ngxs-store-solution/src/app/core/components/header/header.component.spec.ts @@ -5,7 +5,7 @@ import { HeaderComponent } from './header.component'; @Component({ template: ` Hello Sfeir - + `, }) export class ContainerHeaderComponent {} diff --git a/apps/30-ngxs-store-solution/src/app/core/providers/people.service.ts b/apps/30-ngxs-store-solution/src/app/core/providers/people.service.ts index adf43f14..8d3d9eda 100644 --- a/apps/30-ngxs-store-solution/src/app/core/providers/people.service.ts +++ b/apps/30-ngxs-store-solution/src/app/core/providers/people.service.ts @@ -8,7 +8,10 @@ import { SetPeople } from '../store/app.store'; @Injectable({ providedIn: 'root' }) export class PeopleService { - constructor(private readonly httpClient: HttpClient, private readonly store: Store) {} + constructor( + private readonly httpClient: HttpClient, + private readonly store: Store, + ) {} getPeople(): Observable> { return this.httpClient diff --git a/apps/30-ngxs-store-solution/src/app/feature/home/home.component.html b/apps/30-ngxs-store-solution/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/30-ngxs-store-solution/src/app/feature/home/home.component.html +++ b/apps/30-ngxs-store-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/30-ngxs-store-solution/src/app/feature/people/people.component.html b/apps/30-ngxs-store-solution/src/app/feature/people/people.component.html index ea983683..2d930a27 100644 --- a/apps/30-ngxs-store-solution/src/app/feature/people/people.component.html +++ b/apps/30-ngxs-store-solution/src/app/feature/people/people.component.html @@ -1,29 +1,36 @@ - - -
- - -
-
- -
- person-image -
-

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
-
+@if (view$ | async;as currentView) { + + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
- - +
-
+} diff --git a/apps/30-ngxs-store-solution/src/app/feature/people/people.component.ts b/apps/30-ngxs-store-solution/src/app/feature/people/people.component.ts index 21578c6e..25f8336d 100644 --- a/apps/30-ngxs-store-solution/src/app/feature/people/people.component.ts +++ b/apps/30-ngxs-store-solution/src/app/feature/people/people.component.ts @@ -17,7 +17,11 @@ export class PeopleComponent implements OnInit { search$: Observable = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog, private readonly store: Store) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + private readonly store: Store, + ) {} ngOnInit(): void { this.search$ = this.store.select(AppStore.search); @@ -40,7 +44,7 @@ export class PeopleComponent implements OnInit { .pipe( filter(personForm => !!personForm), switchMap(personForm => this.peopleService.addNewPerson(personForm)), - switchMap(() => this.peopleService.getPeople()) + switchMap(() => this.peopleService.getPeople()), ) .subscribe(); } diff --git a/apps/30-ngxs-store-solution/src/app/feature/update-person/update-person.component.html b/apps/30-ngxs-store-solution/src/app/feature/update-person/update-person.component.html index 3e3d80fb..0ebdc4ff 100644 --- a/apps/30-ngxs-store-solution/src/app/feature/update-person/update-person.component.html +++ b/apps/30-ngxs-store-solution/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/30-ngxs-store-solution/src/app/feature/update-person/update-person.component.ts b/apps/30-ngxs-store-solution/src/app/feature/update-person/update-person.component.ts index 7961080d..27f0fee0 100644 --- a/apps/30-ngxs-store-solution/src/app/feature/update-person/update-person.component.ts +++ b/apps/30-ngxs-store-solution/src/app/feature/update-person/update-person.component.ts @@ -12,7 +12,11 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.data.pipe(map(({ personDetails }) => personDetails)); diff --git a/apps/30-ngxs-store-solution/src/app/shared/components/custom-input/custom-input.component.html b/apps/30-ngxs-store-solution/src/app/shared/components/custom-input/custom-input.component.html index 1b04a5e2..deb4046f 100644 --- a/apps/30-ngxs-store-solution/src/app/shared/components/custom-input/custom-input.component.html +++ b/apps/30-ngxs-store-solution/src/app/shared/components/custom-input/custom-input.component.html @@ -2,6 +2,8 @@ {{ placeholder }} - + @if (userLoseFocus$ |async) { + + } diff --git a/apps/30-ngxs-store-solution/src/app/shared/components/custom-input/custom-input.component.ts b/apps/30-ngxs-store-solution/src/app/shared/components/custom-input/custom-input.component.ts index 3b4964cf..7fe1397a 100644 --- a/apps/30-ngxs-store-solution/src/app/shared/components/custom-input/custom-input.component.ts +++ b/apps/30-ngxs-store-solution/src/app/shared/components/custom-input/custom-input.component.ts @@ -24,14 +24,14 @@ export class CustomInputComponent implements OnInit, OnDestroy, ControlValueAcce tap(() => { this._onChange(this.inputElement.nativeElement.value); this._onTouched(); - }) + }), ); const blurListener$ = fromEvent(this.inputElement.nativeElement, 'blur').pipe( tap(() => { this._onTouched(); this.userLoseFocus$.next(true); - }) + }), ); merge(inputListener$, blurListener$).pipe(takeUntil(this.unsubscribe$)).subscribe(); diff --git a/apps/30-ngxs-store-solution/src/app/shared/components/form/form.component.html b/apps/30-ngxs-store-solution/src/app/shared/components/form/form.component.html index 2128c9a3..96799d1a 100644 --- a/apps/30-ngxs-store-solution/src/app/shared/components/form/form.component.html +++ b/apps/30-ngxs-store-solution/src/app/shared/components/form/form.component.html @@ -1,30 +1,41 @@ - +
- person-photo + person-photo
- Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
diff --git a/apps/30-ngxs-store-solution/src/app/shared/directives/badge.directive.ts b/apps/30-ngxs-store-solution/src/app/shared/directives/badge.directive.ts index 2857a01c..9c2c29d1 100644 --- a/apps/30-ngxs-store-solution/src/app/shared/directives/badge.directive.ts +++ b/apps/30-ngxs-store-solution/src/app/shared/directives/badge.directive.ts @@ -7,7 +7,10 @@ export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; @HostBinding('style.color') private iconColor = 'black'; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/30-ngxs-store-solution/src/app/shared/directives/display.directive.ts b/apps/30-ngxs-store-solution/src/app/shared/directives/display.directive.ts index 406b1e8e..58857cb8 100644 --- a/apps/30-ngxs-store-solution/src/app/shared/directives/display.directive.ts +++ b/apps/30-ngxs-store-solution/src/app/shared/directives/display.directive.ts @@ -8,5 +8,8 @@ export class DisplayDirective { @Input('sfeirDisplay') set condition(condition: boolean) { condition ? this.viewContainerRef.createEmbeddedView(this.templateRef) : this.viewContainerRef.clear(); } - constructor(private readonly templateRef: TemplateRef, private readonly viewContainerRef: ViewContainerRef) {} + constructor( + private readonly templateRef: TemplateRef, + private readonly viewContainerRef: ViewContainerRef, + ) {} } diff --git a/apps/30-ngxs-store/project.json b/apps/30-ngxs-store/project.json index d2fc8cb4..5e68b83f 100644 --- a/apps/30-ngxs-store/project.json +++ b/apps/30-ngxs-store/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/30-ngxs-store", "index": "apps/30-ngxs-store/src/index.html", - "main": "apps/30-ngxs-store/src/main.ts", - "polyfills": "apps/30-ngxs-store/src/polyfills.ts", + "browser": "apps/30-ngxs-store/src/main.ts", + "polyfills": [ + "apps/30-ngxs-store/src/polyfills.ts" + ], "tsConfig": "apps/30-ngxs-store/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "30-ngxs-store:build:production" + "buildTarget": "30-ngxs-store:build:production" }, "development": { - "browserTarget": "30-ngxs-store:build:development" + "buildTarget": "30-ngxs-store:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "30-ngxs-store:build" + "buildTarget": "30-ngxs-store:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/30-ngxs-store" ], "options": { - "jestConfig": "apps/30-ngxs-store/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/30-ngxs-store/jest.config.ts" } } }, diff --git a/apps/30-ngxs-store/src/app/feature/home/home.component.html b/apps/30-ngxs-store/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/30-ngxs-store/src/app/feature/home/home.component.html +++ b/apps/30-ngxs-store/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/30-ngxs-store/src/app/feature/people/people.component.html b/apps/30-ngxs-store/src/app/feature/people/people.component.html index 066fa2cd..51534bf9 100644 --- a/apps/30-ngxs-store/src/app/feature/people/people.component.html +++ b/apps/30-ngxs-store/src/app/feature/people/people.component.html @@ -1,28 +1,36 @@ - - -
- - -
-
- -
- person-image -
-

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
-
+@if (view$ | async;as currentView) { + + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
- - +
-
+} diff --git a/apps/30-ngxs-store/src/app/feature/people/people.component.ts b/apps/30-ngxs-store/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/30-ngxs-store/src/app/feature/people/people.component.ts +++ b/apps/30-ngxs-store/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/30-ngxs-store/src/app/feature/update-person/update-person.component.html b/apps/30-ngxs-store/src/app/feature/update-person/update-person.component.html index 3e3d80fb..0ebdc4ff 100644 --- a/apps/30-ngxs-store/src/app/feature/update-person/update-person.component.html +++ b/apps/30-ngxs-store/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/30-ngxs-store/src/app/feature/update-person/update-person.component.ts b/apps/30-ngxs-store/src/app/feature/update-person/update-person.component.ts index 7961080d..27f0fee0 100644 --- a/apps/30-ngxs-store/src/app/feature/update-person/update-person.component.ts +++ b/apps/30-ngxs-store/src/app/feature/update-person/update-person.component.ts @@ -12,7 +12,11 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.data.pipe(map(({ personDetails }) => personDetails)); diff --git a/apps/30-ngxs-store/src/app/shared/components/custom-input/custom-input.component.html b/apps/30-ngxs-store/src/app/shared/components/custom-input/custom-input.component.html index 1b04a5e2..723bdc3b 100644 --- a/apps/30-ngxs-store/src/app/shared/components/custom-input/custom-input.component.html +++ b/apps/30-ngxs-store/src/app/shared/components/custom-input/custom-input.component.html @@ -2,6 +2,9 @@ {{ placeholder }} - + @if (userLoseFocus$ |async) { + + } + diff --git a/apps/30-ngxs-store/src/app/shared/components/custom-input/custom-input.component.ts b/apps/30-ngxs-store/src/app/shared/components/custom-input/custom-input.component.ts index 45e82d40..dcb6c9a4 100644 --- a/apps/30-ngxs-store/src/app/shared/components/custom-input/custom-input.component.ts +++ b/apps/30-ngxs-store/src/app/shared/components/custom-input/custom-input.component.ts @@ -27,14 +27,14 @@ export class CustomInputComponent implements OnInit, OnDestroy, ControlValueAcce tap(() => { this._onChange(this.inputElement.nativeElement.value); this._onTouched(); - }) + }), ); const blurListener$ = fromEvent(this.inputElement.nativeElement, 'blur').pipe( tap(() => { this._onTouched(); this.userLoseFocus$.next(true); - }) + }), ); merge(inputListener$, blurListener$).pipe(takeUntil(this.unsubscribe$)).subscribe(); diff --git a/apps/30-ngxs-store/src/app/shared/components/form/form.component.html b/apps/30-ngxs-store/src/app/shared/components/form/form.component.html index 2785eb0e..96799d1a 100644 --- a/apps/30-ngxs-store/src/app/shared/components/form/form.component.html +++ b/apps/30-ngxs-store/src/app/shared/components/form/form.component.html @@ -1,30 +1,41 @@
- + person-photo
- Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
diff --git a/apps/30-ngxs-store/src/app/shared/directives/badge.directive.ts b/apps/30-ngxs-store/src/app/shared/directives/badge.directive.ts index 2857a01c..9c2c29d1 100644 --- a/apps/30-ngxs-store/src/app/shared/directives/badge.directive.ts +++ b/apps/30-ngxs-store/src/app/shared/directives/badge.directive.ts @@ -7,7 +7,10 @@ export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; @HostBinding('style.color') private iconColor = 'black'; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/30-ngxs-store/src/app/shared/directives/display.directive.ts b/apps/30-ngxs-store/src/app/shared/directives/display.directive.ts index 406b1e8e..58857cb8 100644 --- a/apps/30-ngxs-store/src/app/shared/directives/display.directive.ts +++ b/apps/30-ngxs-store/src/app/shared/directives/display.directive.ts @@ -8,5 +8,8 @@ export class DisplayDirective { @Input('sfeirDisplay') set condition(condition: boolean) { condition ? this.viewContainerRef.createEmbeddedView(this.templateRef) : this.viewContainerRef.clear(); } - constructor(private readonly templateRef: TemplateRef, private readonly viewContainerRef: ViewContainerRef) {} + constructor( + private readonly templateRef: TemplateRef, + private readonly viewContainerRef: ViewContainerRef, + ) {} } diff --git a/apps/30-ngxs-store/src/app/shared/shared.module.ts b/apps/30-ngxs-store/src/app/shared/shared.module.ts index ca6c6a5c..5660cc1a 100644 --- a/apps/30-ngxs-store/src/app/shared/shared.module.ts +++ b/apps/30-ngxs-store/src/app/shared/shared.module.ts @@ -1,4 +1,4 @@ -import { CommonModule } from '@angular/common'; +import { CommonModule, NgOptimizedImage } from '@angular/common'; import { NgModule } from '@angular/core'; import { ReactiveFormsModule } from '@angular/forms'; import { RouterModule } from '@angular/router'; @@ -11,7 +11,7 @@ import { MaterialDesignModule } from './material-design.module'; import { NaPipe } from './pipes/na.pipe'; @NgModule({ - imports: [MaterialDesignModule, CommonModule, ReactiveFormsModule, RouterModule], + imports: [MaterialDesignModule, CommonModule, ReactiveFormsModule, RouterModule, NgOptimizedImage], exports: [MaterialDesignModule, CardComponent, BadgeDirective, FormComponent, CommonModule, ReactiveFormsModule], declarations: [CardComponent, NaPipe, BadgeDirective, FormComponent, DisplayDirective, CustomInputComponent], }) diff --git a/apps/31-ngrx-store-solution/project.json b/apps/31-ngrx-store-solution/project.json index d69247ff..5fc49886 100644 --- a/apps/31-ngrx-store-solution/project.json +++ b/apps/31-ngrx-store-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/31-ngrx-store-solution", "index": "apps/31-ngrx-store-solution/src/index.html", - "main": "apps/31-ngrx-store-solution/src/main.ts", - "polyfills": "apps/31-ngrx-store-solution/src/polyfills.ts", + "browser": "apps/31-ngrx-store-solution/src/main.ts", + "polyfills": [ + "apps/31-ngrx-store-solution/src/polyfills.ts" + ], "tsConfig": "apps/31-ngrx-store-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "31-ngrx-store-solution:build:production" + "buildTarget": "31-ngrx-store-solution:build:production" }, "development": { - "browserTarget": "31-ngrx-store-solution:build:development" + "buildTarget": "31-ngrx-store-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "31-ngrx-store-solution:build" + "buildTarget": "31-ngrx-store-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/31-ngrx-store-solution" ], "options": { - "jestConfig": "apps/31-ngrx-store-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/31-ngrx-store-solution/jest.config.ts" } } }, diff --git a/apps/31-ngrx-store-solution/src/app/core/components/header/header.component.spec.ts b/apps/31-ngrx-store-solution/src/app/core/components/header/header.component.spec.ts index 3b5a4fda..469487e1 100644 --- a/apps/31-ngrx-store-solution/src/app/core/components/header/header.component.spec.ts +++ b/apps/31-ngrx-store-solution/src/app/core/components/header/header.component.spec.ts @@ -5,7 +5,7 @@ import { HeaderComponent } from './header.component'; @Component({ template: ` Hello Sfeir - + `, }) export class ContainerHeaderComponent {} diff --git a/apps/31-ngrx-store-solution/src/app/core/providers/people.service.ts b/apps/31-ngrx-store-solution/src/app/core/providers/people.service.ts index 50fd6f57..080e9201 100644 --- a/apps/31-ngrx-store-solution/src/app/core/providers/people.service.ts +++ b/apps/31-ngrx-store-solution/src/app/core/providers/people.service.ts @@ -9,7 +9,10 @@ import { AppStore } from '../store/state'; @Injectable({ providedIn: 'root' }) export class PeopleService { - constructor(private readonly httpClient: HttpClient, private readonly store: Store) {} + constructor( + private readonly httpClient: HttpClient, + private readonly store: Store, + ) {} getPeople(): Observable> { return this.httpClient diff --git a/apps/31-ngrx-store-solution/src/app/core/store/reducer.ts b/apps/31-ngrx-store-solution/src/app/core/store/reducer.ts index e678c32f..2354246e 100644 --- a/apps/31-ngrx-store-solution/src/app/core/store/reducer.ts +++ b/apps/31-ngrx-store-solution/src/app/core/store/reducer.ts @@ -5,7 +5,7 @@ import { INITIAL_STATE } from './state'; const APP_REDUCER = createReducer( INITIAL_STATE, on(setSearch, (state, { search }) => ({ ...state, search })), - on(setPeople, (state, { people }) => ({ ...state, people })) + on(setPeople, (state, { people }) => ({ ...state, people })), ); export function appReducer(state, action) { diff --git a/apps/31-ngrx-store-solution/src/app/feature/home/home.component.html b/apps/31-ngrx-store-solution/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/31-ngrx-store-solution/src/app/feature/home/home.component.html +++ b/apps/31-ngrx-store-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/31-ngrx-store-solution/src/app/feature/people/people.component.html b/apps/31-ngrx-store-solution/src/app/feature/people/people.component.html index 17adbbd4..2d930a27 100644 --- a/apps/31-ngrx-store-solution/src/app/feature/people/people.component.html +++ b/apps/31-ngrx-store-solution/src/app/feature/people/people.component.html @@ -1,28 +1,36 @@ - - -
- - -
-
- -
- person-image -
-

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
-
+@if (view$ | async;as currentView) { + + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
-
-
+} diff --git a/apps/31-ngrx-store-solution/src/app/feature/people/people.component.ts b/apps/31-ngrx-store-solution/src/app/feature/people/people.component.ts index 39a8ed62..aec8a7c8 100644 --- a/apps/31-ngrx-store-solution/src/app/feature/people/people.component.ts +++ b/apps/31-ngrx-store-solution/src/app/feature/people/people.component.ts @@ -19,7 +19,11 @@ export class PeopleComponent implements OnInit { search$: Observable = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog, private readonly store: Store) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + private readonly store: Store, + ) {} ngOnInit(): void { this.search$ = this.store.select(selectSearch); @@ -42,7 +46,7 @@ export class PeopleComponent implements OnInit { .pipe( filter(personForm => !!personForm), switchMap(personForm => this.peopleService.addNewPerson(personForm)), - switchMap(() => this.peopleService.getPeople()) + switchMap(() => this.peopleService.getPeople()), ) .subscribe(); } diff --git a/apps/31-ngrx-store-solution/src/app/feature/update-person/update-person.component.html b/apps/31-ngrx-store-solution/src/app/feature/update-person/update-person.component.html index 3e3d80fb..fbed357c 100644 --- a/apps/31-ngrx-store-solution/src/app/feature/update-person/update-person.component.html +++ b/apps/31-ngrx-store-solution/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/31-ngrx-store-solution/src/app/feature/update-person/update-person.component.ts b/apps/31-ngrx-store-solution/src/app/feature/update-person/update-person.component.ts index 7961080d..27f0fee0 100644 --- a/apps/31-ngrx-store-solution/src/app/feature/update-person/update-person.component.ts +++ b/apps/31-ngrx-store-solution/src/app/feature/update-person/update-person.component.ts @@ -12,7 +12,11 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.data.pipe(map(({ personDetails }) => personDetails)); diff --git a/apps/31-ngrx-store-solution/src/app/shared/components/custom-input/custom-input.component.html b/apps/31-ngrx-store-solution/src/app/shared/components/custom-input/custom-input.component.html index 1b04a5e2..deb4046f 100644 --- a/apps/31-ngrx-store-solution/src/app/shared/components/custom-input/custom-input.component.html +++ b/apps/31-ngrx-store-solution/src/app/shared/components/custom-input/custom-input.component.html @@ -2,6 +2,8 @@ {{ placeholder }} - + @if (userLoseFocus$ |async) { + + } diff --git a/apps/31-ngrx-store-solution/src/app/shared/components/custom-input/custom-input.component.ts b/apps/31-ngrx-store-solution/src/app/shared/components/custom-input/custom-input.component.ts index 3b4964cf..7fe1397a 100644 --- a/apps/31-ngrx-store-solution/src/app/shared/components/custom-input/custom-input.component.ts +++ b/apps/31-ngrx-store-solution/src/app/shared/components/custom-input/custom-input.component.ts @@ -24,14 +24,14 @@ export class CustomInputComponent implements OnInit, OnDestroy, ControlValueAcce tap(() => { this._onChange(this.inputElement.nativeElement.value); this._onTouched(); - }) + }), ); const blurListener$ = fromEvent(this.inputElement.nativeElement, 'blur').pipe( tap(() => { this._onTouched(); this.userLoseFocus$.next(true); - }) + }), ); merge(inputListener$, blurListener$).pipe(takeUntil(this.unsubscribe$)).subscribe(); diff --git a/apps/31-ngrx-store-solution/src/app/shared/components/form/form.component.html b/apps/31-ngrx-store-solution/src/app/shared/components/form/form.component.html index 7cc9f589..96799d1a 100644 --- a/apps/31-ngrx-store-solution/src/app/shared/components/form/form.component.html +++ b/apps/31-ngrx-store-solution/src/app/shared/components/form/form.component.html @@ -6,28 +6,36 @@
- Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com - + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
diff --git a/apps/31-ngrx-store-solution/src/app/shared/directives/badge.directive.ts b/apps/31-ngrx-store-solution/src/app/shared/directives/badge.directive.ts index 2857a01c..9c2c29d1 100644 --- a/apps/31-ngrx-store-solution/src/app/shared/directives/badge.directive.ts +++ b/apps/31-ngrx-store-solution/src/app/shared/directives/badge.directive.ts @@ -7,7 +7,10 @@ export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; @HostBinding('style.color') private iconColor = 'black'; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/31-ngrx-store-solution/src/app/shared/directives/display.directive.ts b/apps/31-ngrx-store-solution/src/app/shared/directives/display.directive.ts index 406b1e8e..58857cb8 100644 --- a/apps/31-ngrx-store-solution/src/app/shared/directives/display.directive.ts +++ b/apps/31-ngrx-store-solution/src/app/shared/directives/display.directive.ts @@ -8,5 +8,8 @@ export class DisplayDirective { @Input('sfeirDisplay') set condition(condition: boolean) { condition ? this.viewContainerRef.createEmbeddedView(this.templateRef) : this.viewContainerRef.clear(); } - constructor(private readonly templateRef: TemplateRef, private readonly viewContainerRef: ViewContainerRef) {} + constructor( + private readonly templateRef: TemplateRef, + private readonly viewContainerRef: ViewContainerRef, + ) {} } diff --git a/apps/31-ngrx-store/project.json b/apps/31-ngrx-store/project.json index 14211c20..aab117d7 100644 --- a/apps/31-ngrx-store/project.json +++ b/apps/31-ngrx-store/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/31-ngrx-store", "index": "apps/31-ngrx-store/src/index.html", - "main": "apps/31-ngrx-store/src/main.ts", - "polyfills": "apps/31-ngrx-store/src/polyfills.ts", + "browser": "apps/31-ngrx-store/src/main.ts", + "polyfills": [ + "apps/31-ngrx-store/src/polyfills.ts" + ], "tsConfig": "apps/31-ngrx-store/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "31-ngrx-store:build:production" + "buildTarget": "31-ngrx-store:build:production" }, "development": { - "browserTarget": "31-ngrx-store:build:development" + "buildTarget": "31-ngrx-store:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "31-ngrx-store:build" + "buildTarget": "31-ngrx-store:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/31-ngrx-store" ], "options": { - "jestConfig": "apps/31-ngrx-store/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/31-ngrx-store/jest.config.ts" } } }, diff --git a/apps/31-ngrx-store/src/app/feature/home/home.component.html b/apps/31-ngrx-store/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/31-ngrx-store/src/app/feature/home/home.component.html +++ b/apps/31-ngrx-store/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/31-ngrx-store/src/app/feature/people/people.component.html b/apps/31-ngrx-store/src/app/feature/people/people.component.html index ae206c71..51534bf9 100644 --- a/apps/31-ngrx-store/src/app/feature/people/people.component.html +++ b/apps/31-ngrx-store/src/app/feature/people/people.component.html @@ -1,28 +1,36 @@ - - -
- - -
-
- -
- person-image -
-

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
-
+@if (view$ | async;as currentView) { + + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
- - +
-
+} diff --git a/apps/31-ngrx-store/src/app/feature/people/people.component.ts b/apps/31-ngrx-store/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/31-ngrx-store/src/app/feature/people/people.component.ts +++ b/apps/31-ngrx-store/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/31-ngrx-store/src/app/feature/update-person/update-person.component.html b/apps/31-ngrx-store/src/app/feature/update-person/update-person.component.html index 3e3d80fb..fbed357c 100644 --- a/apps/31-ngrx-store/src/app/feature/update-person/update-person.component.html +++ b/apps/31-ngrx-store/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/31-ngrx-store/src/app/feature/update-person/update-person.component.ts b/apps/31-ngrx-store/src/app/feature/update-person/update-person.component.ts index 7961080d..27f0fee0 100644 --- a/apps/31-ngrx-store/src/app/feature/update-person/update-person.component.ts +++ b/apps/31-ngrx-store/src/app/feature/update-person/update-person.component.ts @@ -12,7 +12,11 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.data.pipe(map(({ personDetails }) => personDetails)); diff --git a/apps/31-ngrx-store/src/app/shared/components/custom-input/custom-input.component.html b/apps/31-ngrx-store/src/app/shared/components/custom-input/custom-input.component.html index 1b04a5e2..deb4046f 100644 --- a/apps/31-ngrx-store/src/app/shared/components/custom-input/custom-input.component.html +++ b/apps/31-ngrx-store/src/app/shared/components/custom-input/custom-input.component.html @@ -2,6 +2,8 @@ {{ placeholder }} - + @if (userLoseFocus$ |async) { + + } diff --git a/apps/31-ngrx-store/src/app/shared/components/custom-input/custom-input.component.ts b/apps/31-ngrx-store/src/app/shared/components/custom-input/custom-input.component.ts index 45e82d40..dcb6c9a4 100644 --- a/apps/31-ngrx-store/src/app/shared/components/custom-input/custom-input.component.ts +++ b/apps/31-ngrx-store/src/app/shared/components/custom-input/custom-input.component.ts @@ -27,14 +27,14 @@ export class CustomInputComponent implements OnInit, OnDestroy, ControlValueAcce tap(() => { this._onChange(this.inputElement.nativeElement.value); this._onTouched(); - }) + }), ); const blurListener$ = fromEvent(this.inputElement.nativeElement, 'blur').pipe( tap(() => { this._onTouched(); this.userLoseFocus$.next(true); - }) + }), ); merge(inputListener$, blurListener$).pipe(takeUntil(this.unsubscribe$)).subscribe(); diff --git a/apps/31-ngrx-store/src/app/shared/components/form/form.component.html b/apps/31-ngrx-store/src/app/shared/components/form/form.component.html index 7cc9f589..96799d1a 100644 --- a/apps/31-ngrx-store/src/app/shared/components/form/form.component.html +++ b/apps/31-ngrx-store/src/app/shared/components/form/form.component.html @@ -6,28 +6,36 @@
- Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com - + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
diff --git a/apps/31-ngrx-store/src/app/shared/directives/badge.directive.ts b/apps/31-ngrx-store/src/app/shared/directives/badge.directive.ts index 2857a01c..9c2c29d1 100644 --- a/apps/31-ngrx-store/src/app/shared/directives/badge.directive.ts +++ b/apps/31-ngrx-store/src/app/shared/directives/badge.directive.ts @@ -7,7 +7,10 @@ export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; @HostBinding('style.color') private iconColor = 'black'; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/31-ngrx-store/src/app/shared/directives/display.directive.ts b/apps/31-ngrx-store/src/app/shared/directives/display.directive.ts index 406b1e8e..58857cb8 100644 --- a/apps/31-ngrx-store/src/app/shared/directives/display.directive.ts +++ b/apps/31-ngrx-store/src/app/shared/directives/display.directive.ts @@ -8,5 +8,8 @@ export class DisplayDirective { @Input('sfeirDisplay') set condition(condition: boolean) { condition ? this.viewContainerRef.createEmbeddedView(this.templateRef) : this.viewContainerRef.clear(); } - constructor(private readonly templateRef: TemplateRef, private readonly viewContainerRef: ViewContainerRef) {} + constructor( + private readonly templateRef: TemplateRef, + private readonly viewContainerRef: ViewContainerRef, + ) {} } diff --git a/apps/32-unit-tests-solution/project.json b/apps/32-unit-tests-solution/project.json index 16e4c5ed..f4b02a18 100644 --- a/apps/32-unit-tests-solution/project.json +++ b/apps/32-unit-tests-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/32-unit-tests-solution", "index": "apps/32-unit-tests-solution/src/index.html", - "main": "apps/32-unit-tests-solution/src/main.ts", - "polyfills": "apps/32-unit-tests-solution/src/polyfills.ts", + "browser": "apps/32-unit-tests-solution/src/main.ts", + "polyfills": [ + "apps/32-unit-tests-solution/src/polyfills.ts" + ], "tsConfig": "apps/32-unit-tests-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "32-unit-tests-solution:build:production" + "buildTarget": "32-unit-tests-solution:build:production" }, "development": { - "browserTarget": "32-unit-tests-solution:build:development" + "buildTarget": "32-unit-tests-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "32-unit-tests-solution:build" + "buildTarget": "32-unit-tests-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/32-unit-tests-solution" ], "options": { - "jestConfig": "apps/32-unit-tests-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/32-unit-tests-solution/jest.config.ts" } } }, diff --git a/apps/32-unit-tests-solution/src/app/core/components/header/header.component.spec.ts b/apps/32-unit-tests-solution/src/app/core/components/header/header.component.spec.ts index 3b5a4fda..469487e1 100644 --- a/apps/32-unit-tests-solution/src/app/core/components/header/header.component.spec.ts +++ b/apps/32-unit-tests-solution/src/app/core/components/header/header.component.spec.ts @@ -5,7 +5,7 @@ import { HeaderComponent } from './header.component'; @Component({ template: ` Hello Sfeir - + `, }) export class ContainerHeaderComponent {} diff --git a/apps/32-unit-tests-solution/src/app/feature/home/home.component.html b/apps/32-unit-tests-solution/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/32-unit-tests-solution/src/app/feature/home/home.component.html +++ b/apps/32-unit-tests-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/32-unit-tests-solution/src/app/feature/people/people.component.html b/apps/32-unit-tests-solution/src/app/feature/people/people.component.html index 013b3886..5815ad34 100644 --- a/apps/32-unit-tests-solution/src/app/feature/people/people.component.html +++ b/apps/32-unit-tests-solution/src/app/feature/people/people.component.html @@ -1,25 +1,35 @@ - -
- - -
-
- - - person-image -

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
-
-
+} diff --git a/apps/32-unit-tests-solution/src/app/feature/people/people.component.ts b/apps/32-unit-tests-solution/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/32-unit-tests-solution/src/app/feature/people/people.component.ts +++ b/apps/32-unit-tests-solution/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/32-unit-tests-solution/src/app/feature/update-person/update-person.component.html b/apps/32-unit-tests-solution/src/app/feature/update-person/update-person.component.html index 3e3d80fb..fbed357c 100644 --- a/apps/32-unit-tests-solution/src/app/feature/update-person/update-person.component.html +++ b/apps/32-unit-tests-solution/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/32-unit-tests-solution/src/app/feature/update-person/update-person.component.ts b/apps/32-unit-tests-solution/src/app/feature/update-person/update-person.component.ts index 7961080d..27f0fee0 100644 --- a/apps/32-unit-tests-solution/src/app/feature/update-person/update-person.component.ts +++ b/apps/32-unit-tests-solution/src/app/feature/update-person/update-person.component.ts @@ -12,7 +12,11 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.data.pipe(map(({ personDetails }) => personDetails)); diff --git a/apps/32-unit-tests-solution/src/app/shared/components/custom-input/custom-input.component.html b/apps/32-unit-tests-solution/src/app/shared/components/custom-input/custom-input.component.html index 1b04a5e2..deb4046f 100644 --- a/apps/32-unit-tests-solution/src/app/shared/components/custom-input/custom-input.component.html +++ b/apps/32-unit-tests-solution/src/app/shared/components/custom-input/custom-input.component.html @@ -2,6 +2,8 @@ {{ placeholder }} - + @if (userLoseFocus$ |async) { + + } diff --git a/apps/32-unit-tests-solution/src/app/shared/components/custom-input/custom-input.component.ts b/apps/32-unit-tests-solution/src/app/shared/components/custom-input/custom-input.component.ts index 3b4964cf..7fe1397a 100644 --- a/apps/32-unit-tests-solution/src/app/shared/components/custom-input/custom-input.component.ts +++ b/apps/32-unit-tests-solution/src/app/shared/components/custom-input/custom-input.component.ts @@ -24,14 +24,14 @@ export class CustomInputComponent implements OnInit, OnDestroy, ControlValueAcce tap(() => { this._onChange(this.inputElement.nativeElement.value); this._onTouched(); - }) + }), ); const blurListener$ = fromEvent(this.inputElement.nativeElement, 'blur').pipe( tap(() => { this._onTouched(); this.userLoseFocus$.next(true); - }) + }), ); merge(inputListener$, blurListener$).pipe(takeUntil(this.unsubscribe$)).subscribe(); diff --git a/apps/32-unit-tests-solution/src/app/shared/components/form/form.component.html b/apps/32-unit-tests-solution/src/app/shared/components/form/form.component.html index 2785eb0e..96799d1a 100644 --- a/apps/32-unit-tests-solution/src/app/shared/components/form/form.component.html +++ b/apps/32-unit-tests-solution/src/app/shared/components/form/form.component.html @@ -1,30 +1,41 @@
- + person-photo
- Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
diff --git a/apps/32-unit-tests-solution/src/app/shared/directives/badge.directive.ts b/apps/32-unit-tests-solution/src/app/shared/directives/badge.directive.ts index 2857a01c..9c2c29d1 100644 --- a/apps/32-unit-tests-solution/src/app/shared/directives/badge.directive.ts +++ b/apps/32-unit-tests-solution/src/app/shared/directives/badge.directive.ts @@ -7,7 +7,10 @@ export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; @HostBinding('style.color') private iconColor = 'black'; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/32-unit-tests-solution/src/app/shared/directives/display.directive.ts b/apps/32-unit-tests-solution/src/app/shared/directives/display.directive.ts index 406b1e8e..58857cb8 100644 --- a/apps/32-unit-tests-solution/src/app/shared/directives/display.directive.ts +++ b/apps/32-unit-tests-solution/src/app/shared/directives/display.directive.ts @@ -8,5 +8,8 @@ export class DisplayDirective { @Input('sfeirDisplay') set condition(condition: boolean) { condition ? this.viewContainerRef.createEmbeddedView(this.templateRef) : this.viewContainerRef.clear(); } - constructor(private readonly templateRef: TemplateRef, private readonly viewContainerRef: ViewContainerRef) {} + constructor( + private readonly templateRef: TemplateRef, + private readonly viewContainerRef: ViewContainerRef, + ) {} } diff --git a/apps/32-unit-tests/project.json b/apps/32-unit-tests/project.json index 94968f16..60850bbb 100644 --- a/apps/32-unit-tests/project.json +++ b/apps/32-unit-tests/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/32-unit-tests", "index": "apps/32-unit-tests/src/index.html", - "main": "apps/32-unit-tests/src/main.ts", - "polyfills": "apps/32-unit-tests/src/polyfills.ts", + "browser": "apps/32-unit-tests/src/main.ts", + "polyfills": [ + "apps/32-unit-tests/src/polyfills.ts" + ], "tsConfig": "apps/32-unit-tests/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "32-unit-tests:build:production" + "buildTarget": "32-unit-tests:build:production" }, "development": { - "browserTarget": "32-unit-tests:build:development" + "buildTarget": "32-unit-tests:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "32-unit-tests:build" + "buildTarget": "32-unit-tests:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/32-unit-tests" ], "options": { - "jestConfig": "apps/32-unit-tests/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/32-unit-tests/jest.config.ts" } } }, diff --git a/apps/32-unit-tests/src/app/feature/home/home.component.html b/apps/32-unit-tests/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/32-unit-tests/src/app/feature/home/home.component.html +++ b/apps/32-unit-tests/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/32-unit-tests/src/app/feature/people/people.component.html b/apps/32-unit-tests/src/app/feature/people/people.component.html index ed67811e..5815ad34 100644 --- a/apps/32-unit-tests/src/app/feature/people/people.component.html +++ b/apps/32-unit-tests/src/app/feature/people/people.component.html @@ -1,27 +1,35 @@ - -
- - -
-
- -
- person-image -
-

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
-
+@if (view$ | async;as currentView) { + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
- - +
-
+} diff --git a/apps/32-unit-tests/src/app/feature/people/people.component.ts b/apps/32-unit-tests/src/app/feature/people/people.component.ts index 57d508eb..5f545475 100644 --- a/apps/32-unit-tests/src/app/feature/people/people.component.ts +++ b/apps/32-unit-tests/src/app/feature/people/people.component.ts @@ -14,7 +14,10 @@ export class PeopleComponent implements OnInit { people$: Observable> = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + ) {} ngOnInit(): void { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); @@ -38,7 +41,7 @@ export class PeopleComponent implements OnInit { switchMap(() => { this.people$ = this.peopleService.getPeople().pipe(shareReplay(1)); return this.people$; - }) + }), ) .subscribe(); } diff --git a/apps/32-unit-tests/src/app/feature/update-person/update-person.component.html b/apps/32-unit-tests/src/app/feature/update-person/update-person.component.html index 3e3d80fb..fbed357c 100644 --- a/apps/32-unit-tests/src/app/feature/update-person/update-person.component.html +++ b/apps/32-unit-tests/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/32-unit-tests/src/app/feature/update-person/update-person.component.ts b/apps/32-unit-tests/src/app/feature/update-person/update-person.component.ts index 7961080d..27f0fee0 100644 --- a/apps/32-unit-tests/src/app/feature/update-person/update-person.component.ts +++ b/apps/32-unit-tests/src/app/feature/update-person/update-person.component.ts @@ -12,7 +12,11 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.data.pipe(map(({ personDetails }) => personDetails)); diff --git a/apps/32-unit-tests/src/app/shared/components/custom-input/custom-input.component.html b/apps/32-unit-tests/src/app/shared/components/custom-input/custom-input.component.html index 1b04a5e2..deb4046f 100644 --- a/apps/32-unit-tests/src/app/shared/components/custom-input/custom-input.component.html +++ b/apps/32-unit-tests/src/app/shared/components/custom-input/custom-input.component.html @@ -2,6 +2,8 @@ {{ placeholder }} - + @if (userLoseFocus$ |async) { + + } diff --git a/apps/32-unit-tests/src/app/shared/components/custom-input/custom-input.component.ts b/apps/32-unit-tests/src/app/shared/components/custom-input/custom-input.component.ts index 45e82d40..dcb6c9a4 100644 --- a/apps/32-unit-tests/src/app/shared/components/custom-input/custom-input.component.ts +++ b/apps/32-unit-tests/src/app/shared/components/custom-input/custom-input.component.ts @@ -27,14 +27,14 @@ export class CustomInputComponent implements OnInit, OnDestroy, ControlValueAcce tap(() => { this._onChange(this.inputElement.nativeElement.value); this._onTouched(); - }) + }), ); const blurListener$ = fromEvent(this.inputElement.nativeElement, 'blur').pipe( tap(() => { this._onTouched(); this.userLoseFocus$.next(true); - }) + }), ); merge(inputListener$, blurListener$).pipe(takeUntil(this.unsubscribe$)).subscribe(); diff --git a/apps/32-unit-tests/src/app/shared/components/form/form.component.html b/apps/32-unit-tests/src/app/shared/components/form/form.component.html index 1ed8216f..96799d1a 100644 --- a/apps/32-unit-tests/src/app/shared/components/form/form.component.html +++ b/apps/32-unit-tests/src/app/shared/components/form/form.component.html @@ -1,33 +1,41 @@
- person-photo + person-photo
- Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com - + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
diff --git a/apps/32-unit-tests/src/app/shared/directives/badge.directive.ts b/apps/32-unit-tests/src/app/shared/directives/badge.directive.ts index 2857a01c..9c2c29d1 100644 --- a/apps/32-unit-tests/src/app/shared/directives/badge.directive.ts +++ b/apps/32-unit-tests/src/app/shared/directives/badge.directive.ts @@ -7,7 +7,10 @@ export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; @HostBinding('style.color') private iconColor = 'black'; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/32-unit-tests/src/app/shared/directives/display.directive.ts b/apps/32-unit-tests/src/app/shared/directives/display.directive.ts index 406b1e8e..58857cb8 100644 --- a/apps/32-unit-tests/src/app/shared/directives/display.directive.ts +++ b/apps/32-unit-tests/src/app/shared/directives/display.directive.ts @@ -8,5 +8,8 @@ export class DisplayDirective { @Input('sfeirDisplay') set condition(condition: boolean) { condition ? this.viewContainerRef.createEmbeddedView(this.templateRef) : this.viewContainerRef.clear(); } - constructor(private readonly templateRef: TemplateRef, private readonly viewContainerRef: ViewContainerRef) {} + constructor( + private readonly templateRef: TemplateRef, + private readonly viewContainerRef: ViewContainerRef, + ) {} } diff --git a/apps/33-standalone-component-solution/project.json b/apps/33-standalone-component-solution/project.json index 6577df98..18528a31 100644 --- a/apps/33-standalone-component-solution/project.json +++ b/apps/33-standalone-component-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/33-standalone-component-solution", "index": "apps/33-standalone-component-solution/src/index.html", - "main": "apps/33-standalone-component-solution/src/main.ts", - "polyfills": "apps/33-standalone-component-solution/src/polyfills.ts", + "browser": "apps/33-standalone-component-solution/src/main.ts", + "polyfills": [ + "apps/33-standalone-component-solution/src/polyfills.ts" + ], "tsConfig": "apps/33-standalone-component-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "33-standalone-component-solution:build:production" + "buildTarget": "33-standalone-component-solution:build:production" }, "development": { - "browserTarget": "33-standalone-component-solution:build:development" + "buildTarget": "33-standalone-component-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "33-standalone-component-solution:build" + "buildTarget": "33-standalone-component-solution:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/33-standalone-component-solution" ], "options": { - "jestConfig": "apps/33-standalone-component-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/33-standalone-component-solution/jest.config.ts" } } }, diff --git a/apps/33-standalone-component-solution/src/app/core/components/header/header.component.spec.ts b/apps/33-standalone-component-solution/src/app/core/components/header/header.component.spec.ts index cc4be0eb..cb0b04d2 100644 --- a/apps/33-standalone-component-solution/src/app/core/components/header/header.component.spec.ts +++ b/apps/33-standalone-component-solution/src/app/core/components/header/header.component.spec.ts @@ -7,7 +7,7 @@ import { HeaderComponent } from './header.component'; imports: [HeaderComponent], template: ` Hello Sfeir - + `, }) export class ContainerHeaderComponent {} diff --git a/apps/33-standalone-component-solution/src/app/core/interceptors/authorization.interceptor.ts b/apps/33-standalone-component-solution/src/app/core/interceptors/authorization.interceptor.ts index 88b333d6..f7eb32a6 100644 --- a/apps/33-standalone-component-solution/src/app/core/interceptors/authorization.interceptor.ts +++ b/apps/33-standalone-component-solution/src/app/core/interceptors/authorization.interceptor.ts @@ -4,7 +4,7 @@ import { People } from '../../shared/models/people.model'; export function AuthorizationInterceptor( request: HttpRequest>, - next: HttpHandlerFn + next: HttpHandlerFn, ): Observable>> { const clonedRequest = request.clone({ setHeaders: { Authorization: 'Sfeir' } }); return next(clonedRequest) as Observable>>; diff --git a/apps/33-standalone-component-solution/src/app/core/store/reducer.ts b/apps/33-standalone-component-solution/src/app/core/store/reducer.ts index e678c32f..2354246e 100644 --- a/apps/33-standalone-component-solution/src/app/core/store/reducer.ts +++ b/apps/33-standalone-component-solution/src/app/core/store/reducer.ts @@ -5,7 +5,7 @@ import { INITIAL_STATE } from './state'; const APP_REDUCER = createReducer( INITIAL_STATE, on(setSearch, (state, { search }) => ({ ...state, search })), - on(setPeople, (state, { people }) => ({ ...state, people })) + on(setPeople, (state, { people }) => ({ ...state, people })), ); export function appReducer(state, action) { diff --git a/apps/33-standalone-component-solution/src/app/feature/home/home.component.html b/apps/33-standalone-component-solution/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/33-standalone-component-solution/src/app/feature/home/home.component.html +++ b/apps/33-standalone-component-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/33-standalone-component-solution/src/app/feature/home/home.component.ts b/apps/33-standalone-component-solution/src/app/feature/home/home.component.ts index 1ca0ff2a..f1ef9d2c 100644 --- a/apps/33-standalone-component-solution/src/app/feature/home/home.component.ts +++ b/apps/33-standalone-component-solution/src/app/feature/home/home.component.ts @@ -1,7 +1,7 @@ -import { AsyncPipe, NgIf } from '@angular/common'; +import { AsyncPipe } from '@angular/common'; import { Component, inject } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; -import { Observable, map } from 'rxjs'; +import { map, Observable } from 'rxjs'; import { PeopleService } from '../../core/providers/people.service'; import { CardComponent } from '../../shared/components/card/card.component'; import { People } from '../../shared/models/people.model'; @@ -11,7 +11,7 @@ import { People } from '../../shared/models/people.model'; templateUrl: './home.component.html', styleUrls: ['./home.component.scss'], standalone: true, - imports: [NgIf, CardComponent, MatButtonModule, AsyncPipe], + imports: [CardComponent, MatButtonModule, AsyncPipe], }) export class HomeComponent { readonly #peopleService: PeopleService = inject(PeopleService); diff --git a/apps/33-standalone-component-solution/src/app/feature/people/people.component.html b/apps/33-standalone-component-solution/src/app/feature/people/people.component.html index 17adbbd4..2d930a27 100644 --- a/apps/33-standalone-component-solution/src/app/feature/people/people.component.html +++ b/apps/33-standalone-component-solution/src/app/feature/people/people.component.html @@ -1,28 +1,36 @@ - - -
- - -
-
- -
- person-image -
-

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
-
+@if (view$ | async;as currentView) { + + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
-
-
+} diff --git a/apps/33-standalone-component-solution/src/app/feature/people/people.component.ts b/apps/33-standalone-component-solution/src/app/feature/people/people.component.ts index 5b10824b..ee5c69a4 100644 --- a/apps/33-standalone-component-solution/src/app/feature/people/people.component.ts +++ b/apps/33-standalone-component-solution/src/app/feature/people/people.component.ts @@ -1,4 +1,4 @@ -import { CommonModule, NgOptimizedImage } from '@angular/common'; +import { AsyncPipe, NgOptimizedImage } from '@angular/common'; import { Component, inject, OnInit } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; import { MatDialog } from '@angular/material/dialog'; @@ -20,7 +20,7 @@ import { SearchComponent } from './components/search/search.component'; templateUrl: './people.component.html', styleUrls: ['./people.component.scss'], standalone: true, - imports: [CommonModule, NgOptimizedImage, MatListModule, MatButtonModule, AddPersonDialogComponent, SearchComponent, CardComponent, BadgeDirective], + imports: [AsyncPipe, NgOptimizedImage, MatListModule, MatButtonModule, AddPersonDialogComponent, SearchComponent, CardComponent, BadgeDirective], }) export class PeopleComponent implements OnInit { readonly #peopleService = inject(PeopleService); @@ -50,7 +50,7 @@ export class PeopleComponent implements OnInit { .pipe( filter(personForm => !!personForm), switchMap(personForm => this.#peopleService.addNewPerson(personForm)), - switchMap(() => this.#peopleService.getPeople()) + switchMap(() => this.#peopleService.getPeople()), ) .subscribe(); } diff --git a/apps/33-standalone-component-solution/src/app/feature/update-person/update-person.component.html b/apps/33-standalone-component-solution/src/app/feature/update-person/update-person.component.html index 3de795e1..2a210c8f 100644 --- a/apps/33-standalone-component-solution/src/app/feature/update-person/update-person.component.html +++ b/apps/33-standalone-component-solution/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (personDetails) { + + }
diff --git a/apps/33-standalone-component-solution/src/app/feature/update-person/update-person.component.ts b/apps/33-standalone-component-solution/src/app/feature/update-person/update-person.component.ts index a3f31613..cb2831b3 100644 --- a/apps/33-standalone-component-solution/src/app/feature/update-person/update-person.component.ts +++ b/apps/33-standalone-component-solution/src/app/feature/update-person/update-person.component.ts @@ -1,5 +1,5 @@ -import { AsyncPipe, Location, NgIf } from '@angular/common'; -import { Component, Input as RouterInput, inject } from '@angular/core'; +import { AsyncPipe, Location } from '@angular/common'; +import { Component, inject, Input as RouterInput } from '@angular/core'; import { PeopleService } from '../../core/providers/people.service'; import { FormComponent } from '../../shared/components/form/form.component'; import { People, PeopleForm } from '../../shared/models/people.model'; @@ -9,7 +9,7 @@ import { People, PeopleForm } from '../../shared/models/people.model'; templateUrl: './update-person.component.html', styleUrls: ['./update-person.component.scss'], standalone: true, - imports: [NgIf, AsyncPipe, FormComponent], + imports: [AsyncPipe, FormComponent], }) export class UpdatePersonComponent { @RouterInput({ required: true }) personDetails: People; diff --git a/apps/33-standalone-component-solution/src/app/shared/components/custom-input/custom-input.component.html b/apps/33-standalone-component-solution/src/app/shared/components/custom-input/custom-input.component.html index 1b04a5e2..deb4046f 100644 --- a/apps/33-standalone-component-solution/src/app/shared/components/custom-input/custom-input.component.html +++ b/apps/33-standalone-component-solution/src/app/shared/components/custom-input/custom-input.component.html @@ -2,6 +2,8 @@ {{ placeholder }} - + @if (userLoseFocus$ |async) { + + } diff --git a/apps/33-standalone-component-solution/src/app/shared/components/custom-input/custom-input.component.ts b/apps/33-standalone-component-solution/src/app/shared/components/custom-input/custom-input.component.ts index f33c3b92..16794cb2 100644 --- a/apps/33-standalone-component-solution/src/app/shared/components/custom-input/custom-input.component.ts +++ b/apps/33-standalone-component-solution/src/app/shared/components/custom-input/custom-input.component.ts @@ -3,11 +3,11 @@ import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; import { BehaviorSubject, fromEvent, merge, Subject, takeUntil, tap } from 'rxjs'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatInputModule } from '@angular/material/input'; -import { AsyncPipe, NgIf } from '@angular/common'; +import { AsyncPipe } from '@angular/common'; @Component({ standalone: true, - imports: [NgIf, AsyncPipe, MatFormFieldModule, MatInputModule], + imports: [AsyncPipe, MatFormFieldModule, MatInputModule], selector: 'sfeir-custom-input', templateUrl: './custom-input.component.html', styleUrls: ['./custom-input.component.scss'], @@ -29,14 +29,14 @@ export class CustomInputComponent implements OnInit, OnDestroy, ControlValueAcce tap(() => { this._onChange(this.inputElement.nativeElement.value); this._onTouched(); - }) + }), ); const blurListener$ = fromEvent(this.inputElement.nativeElement, 'blur').pipe( tap(() => { this._onTouched(); this.userLoseFocus$.next(true); - }) + }), ); merge(inputListener$, blurListener$).pipe(takeUntil(this.unsubscribe$)).subscribe(); diff --git a/apps/33-standalone-component-solution/src/app/shared/components/form/form.component.html b/apps/33-standalone-component-solution/src/app/shared/components/form/form.component.html index 7cc9f589..96799d1a 100644 --- a/apps/33-standalone-component-solution/src/app/shared/components/form/form.component.html +++ b/apps/33-standalone-component-solution/src/app/shared/components/form/form.component.html @@ -6,28 +6,36 @@
- Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com - + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
diff --git a/apps/33-standalone-component-solution/src/app/shared/components/form/form.component.ts b/apps/33-standalone-component-solution/src/app/shared/components/form/form.component.ts index cb8948d7..48addebd 100644 --- a/apps/33-standalone-component-solution/src/app/shared/components/form/form.component.ts +++ b/apps/33-standalone-component-solution/src/app/shared/components/form/form.component.ts @@ -4,12 +4,12 @@ import { PersonForm } from './form'; import { ReactiveFormsModule } from '@angular/forms'; import { CustomInputComponent } from '../custom-input/custom-input.component'; import { MatFormFieldModule } from '@angular/material/form-field'; -import { NgIf, NgOptimizedImage } from '@angular/common'; +import { NgOptimizedImage } from '@angular/common'; import { MatButtonModule } from '@angular/material/button'; @Component({ standalone: true, - imports: [ReactiveFormsModule, CustomInputComponent, MatFormFieldModule, NgIf, MatButtonModule, NgOptimizedImage], + imports: [ReactiveFormsModule, CustomInputComponent, MatFormFieldModule, MatButtonModule, NgOptimizedImage], selector: 'sfeir-form', templateUrl: './form.component.html', styleUrls: ['./form.component.scss'], diff --git a/apps/33-standalone-component-solution/src/app/shared/directives/badge.directive.ts b/apps/33-standalone-component-solution/src/app/shared/directives/badge.directive.ts index 17ee7cd7..d0b7513e 100644 --- a/apps/33-standalone-component-solution/src/app/shared/directives/badge.directive.ts +++ b/apps/33-standalone-component-solution/src/app/shared/directives/badge.directive.ts @@ -8,7 +8,10 @@ export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; @HostBinding('style.color') private iconColor = 'black'; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/33-standalone-component-solution/src/app/shared/directives/display.directive.ts b/apps/33-standalone-component-solution/src/app/shared/directives/display.directive.ts index 61d139a2..031de74d 100644 --- a/apps/33-standalone-component-solution/src/app/shared/directives/display.directive.ts +++ b/apps/33-standalone-component-solution/src/app/shared/directives/display.directive.ts @@ -9,5 +9,8 @@ export class DisplayDirective { @Input('sfeirDisplay') set condition(condition: boolean) { condition ? this.viewContainerRef.createEmbeddedView(this.templateRef) : this.viewContainerRef.clear(); } - constructor(private readonly templateRef: TemplateRef, private readonly viewContainerRef: ViewContainerRef) {} + constructor( + private readonly templateRef: TemplateRef, + private readonly viewContainerRef: ViewContainerRef, + ) {} } diff --git a/apps/33-standalone-component/project.json b/apps/33-standalone-component/project.json index 23eb1d10..a78ed03c 100644 --- a/apps/33-standalone-component/project.json +++ b/apps/33-standalone-component/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/33-standalone-component", "index": "apps/33-standalone-component/src/index.html", - "main": "apps/33-standalone-component/src/main.ts", - "polyfills": "apps/33-standalone-component/src/polyfills.ts", + "browser": "apps/33-standalone-component/src/main.ts", + "polyfills": [ + "apps/33-standalone-component/src/polyfills.ts" + ], "tsConfig": "apps/33-standalone-component/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "33-standalone-component:build:production" + "buildTarget": "33-standalone-component:build:production" }, "development": { - "browserTarget": "33-standalone-component:build:development" + "buildTarget": "33-standalone-component:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "33-standalone-component:build" + "buildTarget": "33-standalone-component:build" } }, "lint": { @@ -93,8 +93,7 @@ "{workspaceRoot}/coverage/apps/33-standalone-component" ], "options": { - "jestConfig": "apps/33-standalone-component/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/33-standalone-component/jest.config.ts" } } }, diff --git a/apps/33-standalone-component/src/app/core/providers/people.service.ts b/apps/33-standalone-component/src/app/core/providers/people.service.ts index 50fd6f57..080e9201 100644 --- a/apps/33-standalone-component/src/app/core/providers/people.service.ts +++ b/apps/33-standalone-component/src/app/core/providers/people.service.ts @@ -9,7 +9,10 @@ import { AppStore } from '../store/state'; @Injectable({ providedIn: 'root' }) export class PeopleService { - constructor(private readonly httpClient: HttpClient, private readonly store: Store) {} + constructor( + private readonly httpClient: HttpClient, + private readonly store: Store, + ) {} getPeople(): Observable> { return this.httpClient diff --git a/apps/33-standalone-component/src/app/core/store/reducer.ts b/apps/33-standalone-component/src/app/core/store/reducer.ts index e678c32f..2354246e 100644 --- a/apps/33-standalone-component/src/app/core/store/reducer.ts +++ b/apps/33-standalone-component/src/app/core/store/reducer.ts @@ -5,7 +5,7 @@ import { INITIAL_STATE } from './state'; const APP_REDUCER = createReducer( INITIAL_STATE, on(setSearch, (state, { search }) => ({ ...state, search })), - on(setPeople, (state, { people }) => ({ ...state, people })) + on(setPeople, (state, { people }) => ({ ...state, people })), ); export function appReducer(state, action) { diff --git a/apps/33-standalone-component/src/app/feature/home/home.component.html b/apps/33-standalone-component/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/33-standalone-component/src/app/feature/home/home.component.html +++ b/apps/33-standalone-component/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/33-standalone-component/src/app/feature/people/people.component.html b/apps/33-standalone-component/src/app/feature/people/people.component.html index 9cfcc03d..2d930a27 100644 --- a/apps/33-standalone-component/src/app/feature/people/people.component.html +++ b/apps/33-standalone-component/src/app/feature/people/people.component.html @@ -1,28 +1,36 @@ - - -
- - -
-
- -
- person-image -
-

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
-
+@if (view$ | async;as currentView) { + + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
- - +
-
+} diff --git a/apps/33-standalone-component/src/app/feature/people/people.component.ts b/apps/33-standalone-component/src/app/feature/people/people.component.ts index 39a8ed62..aec8a7c8 100644 --- a/apps/33-standalone-component/src/app/feature/people/people.component.ts +++ b/apps/33-standalone-component/src/app/feature/people/people.component.ts @@ -19,7 +19,11 @@ export class PeopleComponent implements OnInit { search$: Observable = EMPTY; view$: BehaviorSubject<'card' | 'list'> = new BehaviorSubject('card'); - constructor(private readonly peopleService: PeopleService, private readonly matDialogService: MatDialog, private readonly store: Store) {} + constructor( + private readonly peopleService: PeopleService, + private readonly matDialogService: MatDialog, + private readonly store: Store, + ) {} ngOnInit(): void { this.search$ = this.store.select(selectSearch); @@ -42,7 +46,7 @@ export class PeopleComponent implements OnInit { .pipe( filter(personForm => !!personForm), switchMap(personForm => this.peopleService.addNewPerson(personForm)), - switchMap(() => this.peopleService.getPeople()) + switchMap(() => this.peopleService.getPeople()), ) .subscribe(); } diff --git a/apps/33-standalone-component/src/app/feature/update-person/update-person.component.html b/apps/33-standalone-component/src/app/feature/update-person/update-person.component.html index 3e3d80fb..fbed357c 100644 --- a/apps/33-standalone-component/src/app/feature/update-person/update-person.component.html +++ b/apps/33-standalone-component/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (person$ |async;as person) { + + }
diff --git a/apps/33-standalone-component/src/app/feature/update-person/update-person.component.ts b/apps/33-standalone-component/src/app/feature/update-person/update-person.component.ts index 7961080d..27f0fee0 100644 --- a/apps/33-standalone-component/src/app/feature/update-person/update-person.component.ts +++ b/apps/33-standalone-component/src/app/feature/update-person/update-person.component.ts @@ -12,7 +12,11 @@ import { People, PeopleForm } from '../../shared/models/people.model'; }) export class UpdatePersonComponent implements OnInit { person$: Observable = EMPTY; - constructor(private readonly route: ActivatedRoute, private readonly location: Location, private readonly peopleService: PeopleService) {} + constructor( + private readonly route: ActivatedRoute, + private readonly location: Location, + private readonly peopleService: PeopleService, + ) {} ngOnInit(): void { this.person$ = this.route.data.pipe(map(({ personDetails }) => personDetails)); diff --git a/apps/33-standalone-component/src/app/shared/components/custom-input/custom-input.component.html b/apps/33-standalone-component/src/app/shared/components/custom-input/custom-input.component.html index 1b04a5e2..deb4046f 100644 --- a/apps/33-standalone-component/src/app/shared/components/custom-input/custom-input.component.html +++ b/apps/33-standalone-component/src/app/shared/components/custom-input/custom-input.component.html @@ -2,6 +2,8 @@ {{ placeholder }} - + @if (userLoseFocus$ |async) { + + } diff --git a/apps/33-standalone-component/src/app/shared/components/custom-input/custom-input.component.ts b/apps/33-standalone-component/src/app/shared/components/custom-input/custom-input.component.ts index 45e82d40..dcb6c9a4 100644 --- a/apps/33-standalone-component/src/app/shared/components/custom-input/custom-input.component.ts +++ b/apps/33-standalone-component/src/app/shared/components/custom-input/custom-input.component.ts @@ -27,14 +27,14 @@ export class CustomInputComponent implements OnInit, OnDestroy, ControlValueAcce tap(() => { this._onChange(this.inputElement.nativeElement.value); this._onTouched(); - }) + }), ); const blurListener$ = fromEvent(this.inputElement.nativeElement, 'blur').pipe( tap(() => { this._onTouched(); this.userLoseFocus$.next(true); - }) + }), ); merge(inputListener$, blurListener$).pipe(takeUntil(this.unsubscribe$)).subscribe(); diff --git a/apps/33-standalone-component/src/app/shared/components/form/form.component.html b/apps/33-standalone-component/src/app/shared/components/form/form.component.html index 9b097f05..96799d1a 100644 --- a/apps/33-standalone-component/src/app/shared/components/form/form.component.html +++ b/apps/33-standalone-component/src/app/shared/components/form/form.component.html @@ -1,33 +1,41 @@
- person-photo + person-photo
- Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com - + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
diff --git a/apps/33-standalone-component/src/app/shared/directives/badge.directive.ts b/apps/33-standalone-component/src/app/shared/directives/badge.directive.ts index 2857a01c..9c2c29d1 100644 --- a/apps/33-standalone-component/src/app/shared/directives/badge.directive.ts +++ b/apps/33-standalone-component/src/app/shared/directives/badge.directive.ts @@ -7,7 +7,10 @@ export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; @HostBinding('style.color') private iconColor = 'black'; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/33-standalone-component/src/app/shared/directives/display.directive.ts b/apps/33-standalone-component/src/app/shared/directives/display.directive.ts index 406b1e8e..58857cb8 100644 --- a/apps/33-standalone-component/src/app/shared/directives/display.directive.ts +++ b/apps/33-standalone-component/src/app/shared/directives/display.directive.ts @@ -8,5 +8,8 @@ export class DisplayDirective { @Input('sfeirDisplay') set condition(condition: boolean) { condition ? this.viewContainerRef.createEmbeddedView(this.templateRef) : this.viewContainerRef.clear(); } - constructor(private readonly templateRef: TemplateRef, private readonly viewContainerRef: ViewContainerRef) {} + constructor( + private readonly templateRef: TemplateRef, + private readonly viewContainerRef: ViewContainerRef, + ) {} } diff --git a/apps/34-signal-solution/.eslintrc.json b/apps/34-signal-solution/.eslintrc.json index 9ef93436..1e3bb0b4 100644 --- a/apps/34-signal-solution/.eslintrc.json +++ b/apps/34-signal-solution/.eslintrc.json @@ -1,10 +1,19 @@ { - "extends": ["../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], + "extends": [ + "../../.eslintrc.json" + ], + "ignorePatterns": [ + "!**/*" + ], "overrides": [ { - "files": ["*.ts"], - "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"], + "files": [ + "*.ts" + ], + "extends": [ + "plugin:@nx/angular", + "plugin:@angular-eslint/template/process-inline-templates" + ], "rules": { "@angular-eslint/directive-selector": [ "error", @@ -21,12 +30,17 @@ "prefix": "sfeir", "style": "kebab-case" } - ] + ], + "@angular-eslint/no-input-rename": "off" } }, { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], + "files": [ + "*.html" + ], + "extends": [ + "plugin:@nx/angular-template" + ], "rules": {} } ] diff --git a/apps/34-signal-solution/project.json b/apps/34-signal-solution/project.json index 0aa9ba4f..32550652 100644 --- a/apps/34-signal-solution/project.json +++ b/apps/34-signal-solution/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/34-signal-solution", "index": "apps/34-signal-solution/src/index.html", - "main": "apps/34-signal-solution/src/main.ts", - "polyfills": "apps/34-signal-solution/src/polyfills.ts", + "browser": "apps/34-signal-solution/src/main.ts", + "polyfills": [ + "apps/34-signal-solution/src/polyfills.ts" + ], "tsConfig": "apps/34-signal-solution/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "34-signal-solution:build:production" + "buildTarget": "34-signal-solution:build:production" }, "development": { - "browserTarget": "34-signal-solution:build:development" + "buildTarget": "34-signal-solution:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "34-signal-solution:build" + "buildTarget": "34-signal-solution:build" } }, "lint": { @@ -93,10 +93,9 @@ "{workspaceRoot}/coverage/apps/34-signal-solution" ], "options": { - "jestConfig": "apps/34-signal-solution/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/34-signal-solution/jest.config.ts" } } }, "tags": [] -} \ No newline at end of file +} diff --git a/apps/34-signal-solution/src/app/core/components/header/header.component.spec.ts b/apps/34-signal-solution/src/app/core/components/header/header.component.spec.ts index cc4be0eb..cb0b04d2 100644 --- a/apps/34-signal-solution/src/app/core/components/header/header.component.spec.ts +++ b/apps/34-signal-solution/src/app/core/components/header/header.component.spec.ts @@ -7,7 +7,7 @@ import { HeaderComponent } from './header.component'; imports: [HeaderComponent], template: ` Hello Sfeir - + `, }) export class ContainerHeaderComponent {} diff --git a/apps/34-signal-solution/src/app/core/interceptors/authorization.interceptor.ts b/apps/34-signal-solution/src/app/core/interceptors/authorization.interceptor.ts index 88b333d6..f7eb32a6 100644 --- a/apps/34-signal-solution/src/app/core/interceptors/authorization.interceptor.ts +++ b/apps/34-signal-solution/src/app/core/interceptors/authorization.interceptor.ts @@ -4,7 +4,7 @@ import { People } from '../../shared/models/people.model'; export function AuthorizationInterceptor( request: HttpRequest>, - next: HttpHandlerFn + next: HttpHandlerFn, ): Observable>> { const clonedRequest = request.clone({ setHeaders: { Authorization: 'Sfeir' } }); return next(clonedRequest) as Observable>>; diff --git a/apps/34-signal-solution/src/app/feature/home/home.component.html b/apps/34-signal-solution/src/app/feature/home/home.component.html index 07b65183..2d8956cb 100644 --- a/apps/34-signal-solution/src/app/feature/home/home.component.html +++ b/apps/34-signal-solution/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person()) { + + }
diff --git a/apps/34-signal-solution/src/app/feature/home/home.component.ts b/apps/34-signal-solution/src/app/feature/home/home.component.ts index 3272f63d..0e743a75 100644 --- a/apps/34-signal-solution/src/app/feature/home/home.component.ts +++ b/apps/34-signal-solution/src/app/feature/home/home.component.ts @@ -1,4 +1,3 @@ -import { AsyncPipe, NgIf } from '@angular/common'; import { Component, inject } from '@angular/core'; import { toSignal } from '@angular/core/rxjs-interop'; import { MatButtonModule } from '@angular/material/button'; @@ -11,7 +10,7 @@ import { CardComponent } from '../../shared/components/card/card.component'; templateUrl: './home.component.html', styleUrls: ['./home.component.scss'], standalone: true, - imports: [NgIf, CardComponent, MatButtonModule, AsyncPipe], + imports: [CardComponent, MatButtonModule], }) export class HomeComponent { readonly #peopleService: PeopleService = inject(PeopleService); diff --git a/apps/34-signal-solution/src/app/feature/people/people.component.html b/apps/34-signal-solution/src/app/feature/people/people.component.html index b05d0935..43314264 100644 --- a/apps/34-signal-solution/src/app/feature/people/people.component.html +++ b/apps/34-signal-solution/src/app/feature/people/people.component.html @@ -1,28 +1,35 @@ - - -
- - -
-
- -
- person-image -
-

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
-
-
- - -
-
+ +@switch (view()) { + @case ('card') { +
+ @for (person of peopleFiltered();track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of peopleFiltered();track person.id) { +
+ person-image +
+

{{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+
+ } +
+
+ } +} +
+ + +
diff --git a/apps/34-signal-solution/src/app/feature/people/people.component.ts b/apps/34-signal-solution/src/app/feature/people/people.component.ts index 1ff8dc1d..3453a4a8 100644 --- a/apps/34-signal-solution/src/app/feature/people/people.component.ts +++ b/apps/34-signal-solution/src/app/feature/people/people.component.ts @@ -1,4 +1,4 @@ -import { CommonModule, NgOptimizedImage } from '@angular/common'; +import { NgOptimizedImage } from '@angular/common'; import { Component, inject, OnInit, signal } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; import { MatDialog } from '@angular/material/dialog'; @@ -16,7 +16,7 @@ import { PEOPLE_STORE } from '../../core/store/signal.store'; templateUrl: './people.component.html', styleUrls: ['./people.component.scss'], standalone: true, - imports: [CommonModule, NgOptimizedImage, MatListModule, MatButtonModule, AddPersonDialogComponent, SearchComponent, CardComponent, BadgeDirective], + imports: [NgOptimizedImage, MatListModule, MatButtonModule, AddPersonDialogComponent, SearchComponent, CardComponent, BadgeDirective], }) export class PeopleComponent implements OnInit { readonly #matDialogService = inject(MatDialog); @@ -45,7 +45,7 @@ export class PeopleComponent implements OnInit { .pipe( filter(personForm => !!personForm), switchMap(personForm => this.#peopleStore.addNewPerson(personForm)), - switchMap(() => this.#peopleStore.getPeople()) + switchMap(() => this.#peopleStore.getPeople()), ) .subscribe(); } diff --git a/apps/34-signal-solution/src/app/feature/update-person/update-person.component.html b/apps/34-signal-solution/src/app/feature/update-person/update-person.component.html index 3de795e1..f0e72c51 100644 --- a/apps/34-signal-solution/src/app/feature/update-person/update-person.component.html +++ b/apps/34-signal-solution/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,5 @@
- - + @if (personDetails()) { + + }
diff --git a/apps/34-signal-solution/src/app/feature/update-person/update-person.component.spec.ts b/apps/34-signal-solution/src/app/feature/update-person/update-person.component.spec.ts index b07ce721..84fe6ab5 100644 --- a/apps/34-signal-solution/src/app/feature/update-person/update-person.component.spec.ts +++ b/apps/34-signal-solution/src/app/feature/update-person/update-person.component.spec.ts @@ -34,7 +34,7 @@ describe('UpdatePersonComponent', () => { const { fixture, container: hostContainer } = await render(UpdatePersonComponent, { componentImports: [CommonModule, MockFormComponent], componentProperties: { - personDetails: PERSON, + _personDetails: PERSON, }, providers: [ { provide: Location, useValue: LOCATION }, diff --git a/apps/34-signal-solution/src/app/feature/update-person/update-person.component.ts b/apps/34-signal-solution/src/app/feature/update-person/update-person.component.ts index a3f31613..e5083b49 100644 --- a/apps/34-signal-solution/src/app/feature/update-person/update-person.component.ts +++ b/apps/34-signal-solution/src/app/feature/update-person/update-person.component.ts @@ -1,5 +1,5 @@ import { AsyncPipe, Location, NgIf } from '@angular/common'; -import { Component, Input as RouterInput, inject } from '@angular/core'; +import { Component, inject, Input as RouterInput, signal } from '@angular/core'; import { PeopleService } from '../../core/providers/people.service'; import { FormComponent } from '../../shared/components/form/form.component'; import { People, PeopleForm } from '../../shared/models/people.model'; @@ -12,11 +12,15 @@ import { People, PeopleForm } from '../../shared/models/people.model'; imports: [NgIf, AsyncPipe, FormComponent], }) export class UpdatePersonComponent { - @RouterInput({ required: true }) personDetails: People; + @RouterInput({ required: true, alias: 'personDetails' }) set _personDetails(person: People | undefined) { + person && this.personDetails.set(person); + } readonly #location = inject(Location); readonly #peopleService = inject(PeopleService); + personDetails = signal(null); + updatePerson(person: PeopleForm): void { this.#peopleService.updatePerson(person).subscribe(() => this.goBack()); } diff --git a/apps/34-signal-solution/src/app/shared/components/card/card.component.html b/apps/34-signal-solution/src/app/shared/components/card/card.component.html index f41a8ce1..4fc562ae 100644 --- a/apps/34-signal-solution/src/app/shared/components/card/card.component.html +++ b/apps/34-signal-solution/src/app/shared/components/card/card.component.html @@ -1,33 +1,33 @@ - person-photo + person-photo - {{ person.firstname + ' ' + person.lastname}} + {{ person().firstname + ' ' + person().lastname }} - {{ person.entity }} + {{ person().entity }} email - {{person.email}} + {{ person().email }} phone - {{person.phone}} + {{ person().phone }} - +
LocationSFEIR
-
birthDate{{ person.birthDate |date:'dd/MM/yyyy'}} +
map - - + + create - + delete diff --git a/apps/34-signal-solution/src/app/shared/components/card/card.component.spec.ts b/apps/34-signal-solution/src/app/shared/components/card/card.component.spec.ts index ec5467ab..96743654 100644 --- a/apps/34-signal-solution/src/app/shared/components/card/card.component.spec.ts +++ b/apps/34-signal-solution/src/app/shared/components/card/card.component.spec.ts @@ -33,7 +33,7 @@ describe('CardComponent', () => { imports: [MatButtonModule], componentImports: [NaPipe, MatCardModule, MatIconModule, MatButtonModule, CommonModule, DisplayDirective], schemas: [NO_ERRORS_SCHEMA], - componentProperties: { person: PEOPLE, personDelete: { emit: PERSON_DELETE } as any }, + componentProperties: { _person: PEOPLE, personDelete: { emit: PERSON_DELETE } as any }, }); component = fixture.componentInstance; debugElement = fixture.debugElement; @@ -45,7 +45,7 @@ describe('CardComponent', () => { }); test('should the input person set to PEOPLE', () => { - expect(component.person).toEqual(PEOPLE); + expect(component.person()).toEqual(PEOPLE); }); test('should create a card', () => { @@ -96,7 +96,7 @@ describe('CardComponent', () => { }); test('should display another person', async () => { const newPerson = { ...PEOPLE, firstname: 'Jane', lastname: 'Doe', photo: 'jane-doe.jpg' }; - await rerender({ componentProperties: { person: newPerson } }); + await rerender({ componentProperties: { _person: newPerson } }); const image: HTMLImageElement = screen.getByAltText('person-photo'); expect((image as any).ngSrc).toEqual(newPerson.photo); }); @@ -111,7 +111,7 @@ describe('CardComponent', () => { expect(PERSON_DELETE).toHaveBeenCalledWith(PEOPLE); }); test('should not display the button edit and delete if the person is a manager', async () => { - await rerender({ componentProperties: { person: { ...PEOPLE, isManager: true } } }); + await rerender({ componentProperties: { _person: { ...PEOPLE, isManager: true } } }); const editButton = screen.queryByTitle('Edit'); const deleteButton = screen.queryByTitle('Delete'); expect(editButton).toBeFalsy(); diff --git a/apps/34-signal-solution/src/app/shared/components/card/card.component.ts b/apps/34-signal-solution/src/app/shared/components/card/card.component.ts index 6cacd3e0..57cf847a 100644 --- a/apps/34-signal-solution/src/app/shared/components/card/card.component.ts +++ b/apps/34-signal-solution/src/app/shared/components/card/card.component.ts @@ -1,4 +1,4 @@ -import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { Component, EventEmitter, Input, Output, signal } from '@angular/core'; import { People } from '../../models/people.model'; import { MatCardModule } from '@angular/material/card'; import { MatIconModule } from '@angular/material/icon'; @@ -16,9 +16,14 @@ import { DatePipe, NgOptimizedImage } from '@angular/common'; imports: [MatCardModule, MatIconModule, MatButtonModule, DisplayDirective, NaPipe, RouterLink, NgOptimizedImage, DatePipe], }) export class CardComponent { - @Input() person!: People; + @Input({ alias: 'person' }) set _person(person: People | undefined) { + person && this.person.set(person); + } + @Output() personDelete: EventEmitter = new EventEmitter(); + person = signal({} as People); + deletePerson(person: People): void { this.personDelete.emit(person); } diff --git a/apps/34-signal-solution/src/app/shared/components/custom-input/custom-input.component.html b/apps/34-signal-solution/src/app/shared/components/custom-input/custom-input.component.html index 1b04a5e2..29b82bdb 100644 --- a/apps/34-signal-solution/src/app/shared/components/custom-input/custom-input.component.html +++ b/apps/34-signal-solution/src/app/shared/components/custom-input/custom-input.component.html @@ -2,6 +2,8 @@ {{ placeholder }} - + @if (userLoseFocus$()) { + + }
diff --git a/apps/34-signal-solution/src/app/shared/components/custom-input/custom-input.component.ts b/apps/34-signal-solution/src/app/shared/components/custom-input/custom-input.component.ts index f33c3b92..1bdb3f40 100644 --- a/apps/34-signal-solution/src/app/shared/components/custom-input/custom-input.component.ts +++ b/apps/34-signal-solution/src/app/shared/components/custom-input/custom-input.component.ts @@ -1,13 +1,12 @@ -import { Component, ElementRef, forwardRef, Input, OnDestroy, OnInit, Renderer2, ViewChild } from '@angular/core'; +import { Component, ElementRef, forwardRef, Input, OnDestroy, OnInit, Renderer2, signal, ViewChild } from '@angular/core'; import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; -import { BehaviorSubject, fromEvent, merge, Subject, takeUntil, tap } from 'rxjs'; +import { fromEvent, merge, Subject, takeUntil, tap } from 'rxjs'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatInputModule } from '@angular/material/input'; -import { AsyncPipe, NgIf } from '@angular/common'; @Component({ standalone: true, - imports: [NgIf, AsyncPipe, MatFormFieldModule, MatInputModule], + imports: [MatFormFieldModule, MatInputModule], selector: 'sfeir-custom-input', templateUrl: './custom-input.component.html', styleUrls: ['./custom-input.component.scss'], @@ -17,7 +16,7 @@ export class CustomInputComponent implements OnInit, OnDestroy, ControlValueAcce @Input() placeholder = ''; @Input() inputType = 'text'; @ViewChild('InputElement', { static: true }) inputElement: ElementRef; - userLoseFocus$: BehaviorSubject = new BehaviorSubject(false); + userLoseFocus$ = signal(false); private _onChange: (x: string | number) => void; private _onTouched: () => void; private unsubscribe$: Subject = new Subject(); @@ -29,14 +28,14 @@ export class CustomInputComponent implements OnInit, OnDestroy, ControlValueAcce tap(() => { this._onChange(this.inputElement.nativeElement.value); this._onTouched(); - }) + }), ); const blurListener$ = fromEvent(this.inputElement.nativeElement, 'blur').pipe( tap(() => { this._onTouched(); - this.userLoseFocus$.next(true); - }) + this.userLoseFocus$.set(true); + }), ); merge(inputListener$, blurListener$).pipe(takeUntil(this.unsubscribe$)).subscribe(); diff --git a/apps/34-signal-solution/src/app/shared/components/form/form.component.html b/apps/34-signal-solution/src/app/shared/components/form/form.component.html index 7cc9f589..96799d1a 100644 --- a/apps/34-signal-solution/src/app/shared/components/form/form.component.html +++ b/apps/34-signal-solution/src/app/shared/components/form/form.component.html @@ -6,28 +6,36 @@
- Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com - + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
diff --git a/apps/34-signal-solution/src/app/shared/components/form/form.component.ts b/apps/34-signal-solution/src/app/shared/components/form/form.component.ts index cb8948d7..48addebd 100644 --- a/apps/34-signal-solution/src/app/shared/components/form/form.component.ts +++ b/apps/34-signal-solution/src/app/shared/components/form/form.component.ts @@ -4,12 +4,12 @@ import { PersonForm } from './form'; import { ReactiveFormsModule } from '@angular/forms'; import { CustomInputComponent } from '../custom-input/custom-input.component'; import { MatFormFieldModule } from '@angular/material/form-field'; -import { NgIf, NgOptimizedImage } from '@angular/common'; +import { NgOptimizedImage } from '@angular/common'; import { MatButtonModule } from '@angular/material/button'; @Component({ standalone: true, - imports: [ReactiveFormsModule, CustomInputComponent, MatFormFieldModule, NgIf, MatButtonModule, NgOptimizedImage], + imports: [ReactiveFormsModule, CustomInputComponent, MatFormFieldModule, MatButtonModule, NgOptimizedImage], selector: 'sfeir-form', templateUrl: './form.component.html', styleUrls: ['./form.component.scss'], diff --git a/apps/34-signal-solution/src/app/shared/directives/badge.directive.ts b/apps/34-signal-solution/src/app/shared/directives/badge.directive.ts index 17ee7cd7..d0b7513e 100644 --- a/apps/34-signal-solution/src/app/shared/directives/badge.directive.ts +++ b/apps/34-signal-solution/src/app/shared/directives/badge.directive.ts @@ -8,7 +8,10 @@ export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; @HostBinding('style.color') private iconColor = 'black'; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/34-signal-solution/src/app/shared/directives/display.directive.ts b/apps/34-signal-solution/src/app/shared/directives/display.directive.ts index 61d139a2..031de74d 100644 --- a/apps/34-signal-solution/src/app/shared/directives/display.directive.ts +++ b/apps/34-signal-solution/src/app/shared/directives/display.directive.ts @@ -9,5 +9,8 @@ export class DisplayDirective { @Input('sfeirDisplay') set condition(condition: boolean) { condition ? this.viewContainerRef.createEmbeddedView(this.templateRef) : this.viewContainerRef.clear(); } - constructor(private readonly templateRef: TemplateRef, private readonly viewContainerRef: ViewContainerRef) {} + constructor( + private readonly templateRef: TemplateRef, + private readonly viewContainerRef: ViewContainerRef, + ) {} } diff --git a/apps/34-signal/project.json b/apps/34-signal/project.json index a2214080..44784507 100644 --- a/apps/34-signal/project.json +++ b/apps/34-signal/project.json @@ -6,15 +6,17 @@ "prefix": "sfeir", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser-esbuild", + "executor": "@angular-devkit/build-angular:application", "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "dist/apps/34-signal", "index": "apps/34-signal/src/index.html", - "main": "apps/34-signal/src/main.ts", - "polyfills": "apps/34-signal/src/polyfills.ts", + "browser": "apps/34-signal/src/main.ts", + "polyfills": [ + "apps/34-signal/src/polyfills.ts" + ], "tsConfig": "apps/34-signal/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -50,9 +52,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true @@ -64,10 +64,10 @@ "executor": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "34-signal:build:production" + "buildTarget": "34-signal:build:production" }, "development": { - "browserTarget": "34-signal:build:development" + "buildTarget": "34-signal:build:development" } }, "defaultConfiguration": "development" @@ -75,7 +75,7 @@ "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "34-signal:build" + "buildTarget": "34-signal:build" } }, "lint": { @@ -93,10 +93,9 @@ "{workspaceRoot}/coverage/apps/34-signal" ], "options": { - "jestConfig": "apps/34-signal/jest.config.ts", - "passWithNoTests": true + "jestConfig": "apps/34-signal/jest.config.ts" } } }, "tags": [] -} \ No newline at end of file +} diff --git a/apps/34-signal/src/app/core/components/header/header.component.spec.ts b/apps/34-signal/src/app/core/components/header/header.component.spec.ts index cc4be0eb..cb0b04d2 100644 --- a/apps/34-signal/src/app/core/components/header/header.component.spec.ts +++ b/apps/34-signal/src/app/core/components/header/header.component.spec.ts @@ -7,7 +7,7 @@ import { HeaderComponent } from './header.component'; imports: [HeaderComponent], template: ` Hello Sfeir - + `, }) export class ContainerHeaderComponent {} diff --git a/apps/34-signal/src/app/core/interceptors/authorization.interceptor.ts b/apps/34-signal/src/app/core/interceptors/authorization.interceptor.ts index 88b333d6..f7eb32a6 100644 --- a/apps/34-signal/src/app/core/interceptors/authorization.interceptor.ts +++ b/apps/34-signal/src/app/core/interceptors/authorization.interceptor.ts @@ -4,7 +4,7 @@ import { People } from '../../shared/models/people.model'; export function AuthorizationInterceptor( request: HttpRequest>, - next: HttpHandlerFn + next: HttpHandlerFn, ): Observable>> { const clonedRequest = request.clone({ setHeaders: { Authorization: 'Sfeir' } }); return next(clonedRequest) as Observable>>; diff --git a/apps/34-signal/src/app/core/store/reducer.ts b/apps/34-signal/src/app/core/store/reducer.ts index e678c32f..2354246e 100644 --- a/apps/34-signal/src/app/core/store/reducer.ts +++ b/apps/34-signal/src/app/core/store/reducer.ts @@ -5,7 +5,7 @@ import { INITIAL_STATE } from './state'; const APP_REDUCER = createReducer( INITIAL_STATE, on(setSearch, (state, { search }) => ({ ...state, search })), - on(setPeople, (state, { people }) => ({ ...state, people })) + on(setPeople, (state, { people }) => ({ ...state, people })), ); export function appReducer(state, action) { diff --git a/apps/34-signal/src/app/feature/home/home.component.html b/apps/34-signal/src/app/feature/home/home.component.html index ab23356a..e9286522 100644 --- a/apps/34-signal/src/app/feature/home/home.component.html +++ b/apps/34-signal/src/app/feature/home/home.component.html @@ -1,4 +1,6 @@
- + @if (person$ |async;as person) { + + }
diff --git a/apps/34-signal/src/app/feature/home/home.component.ts b/apps/34-signal/src/app/feature/home/home.component.ts index 1ca0ff2a..f1ef9d2c 100644 --- a/apps/34-signal/src/app/feature/home/home.component.ts +++ b/apps/34-signal/src/app/feature/home/home.component.ts @@ -1,7 +1,7 @@ -import { AsyncPipe, NgIf } from '@angular/common'; +import { AsyncPipe } from '@angular/common'; import { Component, inject } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; -import { Observable, map } from 'rxjs'; +import { map, Observable } from 'rxjs'; import { PeopleService } from '../../core/providers/people.service'; import { CardComponent } from '../../shared/components/card/card.component'; import { People } from '../../shared/models/people.model'; @@ -11,7 +11,7 @@ import { People } from '../../shared/models/people.model'; templateUrl: './home.component.html', styleUrls: ['./home.component.scss'], standalone: true, - imports: [NgIf, CardComponent, MatButtonModule, AsyncPipe], + imports: [CardComponent, MatButtonModule, AsyncPipe], }) export class HomeComponent { readonly #peopleService: PeopleService = inject(PeopleService); diff --git a/apps/34-signal/src/app/feature/people/people.component.html b/apps/34-signal/src/app/feature/people/people.component.html index 17adbbd4..2d930a27 100644 --- a/apps/34-signal/src/app/feature/people/people.component.html +++ b/apps/34-signal/src/app/feature/people/people.component.html @@ -1,28 +1,36 @@ - - -
- - -
-
- -
- person-image -
-

{{ person.firstname }} {{ person.lastname }} - -

-

- {{ person.entity }} — {{ person.email }} -

-
-
-
-
+@if (view$ | async;as currentView) { + + @switch (currentView) { + @case ('card') { +
+ @for (person of people$ | async;track person.id) { + + } +
+ } + @case ('list') { +
+ + @for (person of people$ | async;track person.id) { + + photo-people +

+ {{ person.firstname }} {{ person.lastname }} + +

+

+ {{ person.entity }} — {{ person.email }} +

+
+ } +
+
+ } + }
-
-
+} diff --git a/apps/34-signal/src/app/feature/people/people.component.ts b/apps/34-signal/src/app/feature/people/people.component.ts index 5b10824b..e8befc55 100644 --- a/apps/34-signal/src/app/feature/people/people.component.ts +++ b/apps/34-signal/src/app/feature/people/people.component.ts @@ -1,4 +1,4 @@ -import { CommonModule, NgOptimizedImage } from '@angular/common'; +import { AsyncPipe, NgOptimizedImage } from '@angular/common'; import { Component, inject, OnInit } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; import { MatDialog } from '@angular/material/dialog'; @@ -9,18 +9,29 @@ import { PeopleService } from '../../core/providers/people.service'; import { setSearch } from '../../core/store/action'; import { selectPeople, selectSearch } from '../../core/store/selector'; import { AppStore } from '../../core/store/state'; -import { CardComponent } from '../../shared/components/card/card.component'; import { BadgeDirective } from '../../shared/directives/badge.directive'; import { People } from '../../shared/models/people.model'; import { AddPersonDialogComponent } from './components/add-person-dialog/add-person-dialog.component'; import { SearchComponent } from './components/search/search.component'; +import { CardComponent } from '../../shared/components/card/card.component'; @Component({ selector: 'sfeir-people', templateUrl: './people.component.html', styleUrls: ['./people.component.scss'], standalone: true, - imports: [CommonModule, NgOptimizedImage, MatListModule, MatButtonModule, AddPersonDialogComponent, SearchComponent, CardComponent, BadgeDirective], + imports: [ + AsyncPipe, + NgOptimizedImage, + MatListModule, + MatButtonModule, + AddPersonDialogComponent, + SearchComponent, + CardComponent, + BadgeDirective, + CardComponent, + SearchComponent, + ], }) export class PeopleComponent implements OnInit { readonly #peopleService = inject(PeopleService); @@ -50,7 +61,7 @@ export class PeopleComponent implements OnInit { .pipe( filter(personForm => !!personForm), switchMap(personForm => this.#peopleService.addNewPerson(personForm)), - switchMap(() => this.#peopleService.getPeople()) + switchMap(() => this.#peopleService.getPeople()), ) .subscribe(); } diff --git a/apps/34-signal/src/app/feature/update-person/update-person.component.html b/apps/34-signal/src/app/feature/update-person/update-person.component.html index 3de795e1..c0641b7e 100644 --- a/apps/34-signal/src/app/feature/update-person/update-person.component.html +++ b/apps/34-signal/src/app/feature/update-person/update-person.component.html @@ -1,4 +1,6 @@
- - + @if (personDetails) { + + } +
diff --git a/apps/34-signal/src/app/feature/update-person/update-person.component.ts b/apps/34-signal/src/app/feature/update-person/update-person.component.ts index a3f31613..cb2831b3 100644 --- a/apps/34-signal/src/app/feature/update-person/update-person.component.ts +++ b/apps/34-signal/src/app/feature/update-person/update-person.component.ts @@ -1,5 +1,5 @@ -import { AsyncPipe, Location, NgIf } from '@angular/common'; -import { Component, Input as RouterInput, inject } from '@angular/core'; +import { AsyncPipe, Location } from '@angular/common'; +import { Component, inject, Input as RouterInput } from '@angular/core'; import { PeopleService } from '../../core/providers/people.service'; import { FormComponent } from '../../shared/components/form/form.component'; import { People, PeopleForm } from '../../shared/models/people.model'; @@ -9,7 +9,7 @@ import { People, PeopleForm } from '../../shared/models/people.model'; templateUrl: './update-person.component.html', styleUrls: ['./update-person.component.scss'], standalone: true, - imports: [NgIf, AsyncPipe, FormComponent], + imports: [AsyncPipe, FormComponent], }) export class UpdatePersonComponent { @RouterInput({ required: true }) personDetails: People; diff --git a/apps/34-signal/src/app/shared/components/custom-input/custom-input.component.html b/apps/34-signal/src/app/shared/components/custom-input/custom-input.component.html index 1b04a5e2..deb4046f 100644 --- a/apps/34-signal/src/app/shared/components/custom-input/custom-input.component.html +++ b/apps/34-signal/src/app/shared/components/custom-input/custom-input.component.html @@ -2,6 +2,8 @@ {{ placeholder }} - + @if (userLoseFocus$ |async) { + + }
diff --git a/apps/34-signal/src/app/shared/components/custom-input/custom-input.component.ts b/apps/34-signal/src/app/shared/components/custom-input/custom-input.component.ts index f33c3b92..400c0180 100644 --- a/apps/34-signal/src/app/shared/components/custom-input/custom-input.component.ts +++ b/apps/34-signal/src/app/shared/components/custom-input/custom-input.component.ts @@ -29,14 +29,14 @@ export class CustomInputComponent implements OnInit, OnDestroy, ControlValueAcce tap(() => { this._onChange(this.inputElement.nativeElement.value); this._onTouched(); - }) + }), ); const blurListener$ = fromEvent(this.inputElement.nativeElement, 'blur').pipe( tap(() => { this._onTouched(); this.userLoseFocus$.next(true); - }) + }), ); merge(inputListener$, blurListener$).pipe(takeUntil(this.unsubscribe$)).subscribe(); diff --git a/apps/34-signal/src/app/shared/components/form/form.component.html b/apps/34-signal/src/app/shared/components/form/form.component.html index 7cc9f589..96799d1a 100644 --- a/apps/34-signal/src/app/shared/components/form/form.component.html +++ b/apps/34-signal/src/app/shared/components/form/form.component.html @@ -6,28 +6,36 @@
- Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.firstname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.firstname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Ce champs doit posséder minimum 2 - caractères - + @if (personForm.controls.lastname.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.lastname.errors?.['minlength']) { + Ce champs doit posséder minimum 2 caractères + } - Ce champs est requis - Format non valid, format attendu: - frizzarin.n@sfeir.com - + @if (personForm.controls.email.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.email.errors?.['sfeirEmail']) { + Format non valid, format attendu: frizzarin.n@sfeir.com + } - Ce champs est requis - Ce champs doit respecter le pattern suivant - (10 caractères) - + @if (personForm.controls.phone.errors?.['required']) { + Ce champs est requis + } + @if (personForm.controls.phone.errors?.['pattern']) { + Ce champs doit respecter le pattern suivant (10 caractères) + }
diff --git a/apps/34-signal/src/app/shared/components/form/form.component.ts b/apps/34-signal/src/app/shared/components/form/form.component.ts index cb8948d7..21437192 100644 --- a/apps/34-signal/src/app/shared/components/form/form.component.ts +++ b/apps/34-signal/src/app/shared/components/form/form.component.ts @@ -2,14 +2,14 @@ import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from import { People, PeopleForm } from '../../models/people.model'; import { PersonForm } from './form'; import { ReactiveFormsModule } from '@angular/forms'; -import { CustomInputComponent } from '../custom-input/custom-input.component'; import { MatFormFieldModule } from '@angular/material/form-field'; -import { NgIf, NgOptimizedImage } from '@angular/common'; +import { NgOptimizedImage } from '@angular/common'; import { MatButtonModule } from '@angular/material/button'; +import { CustomInputComponent } from '../custom-input/custom-input.component'; @Component({ standalone: true, - imports: [ReactiveFormsModule, CustomInputComponent, MatFormFieldModule, NgIf, MatButtonModule, NgOptimizedImage], + imports: [ReactiveFormsModule, CustomInputComponent, MatFormFieldModule, MatButtonModule, NgOptimizedImage], selector: 'sfeir-form', templateUrl: './form.component.html', styleUrls: ['./form.component.scss'], diff --git a/apps/34-signal/src/app/shared/directives/badge.directive.ts b/apps/34-signal/src/app/shared/directives/badge.directive.ts index 17ee7cd7..d0b7513e 100644 --- a/apps/34-signal/src/app/shared/directives/badge.directive.ts +++ b/apps/34-signal/src/app/shared/directives/badge.directive.ts @@ -8,7 +8,10 @@ export class BadgeDirective implements OnInit { @Input('sfeirBadge') isManager: boolean; @HostBinding('style.color') private iconColor = 'black'; - constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {} + constructor( + private readonly element: ElementRef, + private readonly renderer: Renderer2, + ) {} ngOnInit(): void { if (this.isManager) { diff --git a/apps/34-signal/src/app/shared/directives/display.directive.ts b/apps/34-signal/src/app/shared/directives/display.directive.ts index 61d139a2..031de74d 100644 --- a/apps/34-signal/src/app/shared/directives/display.directive.ts +++ b/apps/34-signal/src/app/shared/directives/display.directive.ts @@ -9,5 +9,8 @@ export class DisplayDirective { @Input('sfeirDisplay') set condition(condition: boolean) { condition ? this.viewContainerRef.createEmbeddedView(this.templateRef) : this.viewContainerRef.clear(); } - constructor(private readonly templateRef: TemplateRef, private readonly viewContainerRef: ViewContainerRef) {} + constructor( + private readonly templateRef: TemplateRef, + private readonly viewContainerRef: ViewContainerRef, + ) {} } diff --git a/nx.json b/nx.json index 7be36b30..6bc39d28 100644 --- a/nx.json +++ b/nx.json @@ -7,7 +7,14 @@ }, "tasksRunnerOptions": { "default": { + "runner": "nx/tasks-runners/default", "options": { + "cacheableOperations": [ + "build", + "lint", + "test", + "e2e" + ], "accessToken": "ZWM3ODdmNmEtZGMzMS00YzJhLWFmNWQtYjg1YTZjNjFkYTM0fHJlYWQtd3JpdGU=" } } @@ -31,24 +38,52 @@ "$schema": "./node_modules/nx/schemas/nx-schema.json", "targetDefaults": { "build": { - "dependsOn": ["^build"], - "inputs": ["production", "^production"], + "dependsOn": [ + "^build" + ], + "inputs": [ + "production", + "^production" + ], "cache": true }, "lint": { - "inputs": ["default", "{workspaceRoot}/.eslintrc.json"], + "inputs": [ + "default", + "{workspaceRoot}/.eslintrc.json" + ], "cache": true }, "test": { "cache": true }, - "e2e": { - "cache": true + "@nx/jest:jest": { + "cache": true, + "inputs": [ + "default", + "^production", + "{workspaceRoot}/jest.preset.js" + ], + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "codeCoverage": true + } + } } }, "namedInputs": { - "default": ["{projectRoot}/**/*", "sharedGlobals"], + "default": [ + "{projectRoot}/**/*", + "sharedGlobals" + ], "sharedGlobals": [], - "production": ["default", "!{projectRoot}/src/test-setup.[jt]s"] + "production": [ + "default", + "!{projectRoot}/src/test-setup.[jt]s" + ] } } diff --git a/package-lock.json b/package-lock.json index c380830d..0909a2fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,79 +1,79 @@ { "name": "sfeir-school-angular", - "version": "13.2.0", + "version": "17.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "sfeir-school-angular", - "version": "13.2.0", + "version": "17.0.0", "license": "MIT", "dependencies": { - "@angular/animations": "16.2.5", - "@angular/cdk": "16.2.4", - "@angular/common": "16.2.5", - "@angular/compiler": "16.2.5", - "@angular/core": "16.2.5", - "@angular/forms": "16.2.5", - "@angular/material": "16.2.4", - "@angular/platform-browser": "16.2.5", - "@angular/platform-browser-dynamic": "16.2.5", - "@angular/router": "16.2.5", + "@angular/animations": "17.0.4", + "@angular/cdk": "17.0.1", + "@angular/common": "17.0.4", + "@angular/compiler": "17.0.4", + "@angular/core": "17.0.4", + "@angular/forms": "17.0.4", + "@angular/material": "17.0.1", + "@angular/platform-browser": "17.0.4", + "@angular/platform-browser-dynamic": "17.0.4", + "@angular/router": "17.0.4", "@ngneat/elf": "^2.3.0", "@ngneat/elf-entities": "^4.4.2", - "@ngrx/store": "16.0.1", - "@ngxs/store": "3.8.0-dev.master-9a3af36", - "@nx/angular": "17.0.2", + "@ngrx/store": "17.0.0", + "@ngxs/store": "3.8.1-dev.master-783234c", + "@nx/angular": "17.1.3", "cors": "^2.8.5", "express": "4.18.2", "rxjs": "7.8.0", "sfeir-school-theme": "^3.0.0-rc-2", "tslib": "^2.0.0", "underscore": "^1.13.2", - "zone.js": "0.13.0" + "zone.js": "0.14.2" }, "devDependencies": { - "@angular-devkit/build-angular": "16.2.2", - "@angular-eslint/eslint-plugin": "16.0.1", - "@angular-eslint/eslint-plugin-template": "16.0.1", - "@angular-eslint/template-parser": "16.0.1", - "@angular/cli": "~16.2.0", - "@angular/compiler-cli": "16.2.5", - "@angular/language-service": "16.2.5", - "@ngrx/store-devtools": "16.0.1", - "@nx/cypress": "17.0.2", - "@nx/eslint": "17.0.2", - "@nx/eslint-plugin": "17.0.2", - "@nx/express": "17.0.2", - "@nx/jest": "17.0.2", - "@nx/node": "17.0.2", - "@nx/workspace": "17.0.2", + "@angular-devkit/build-angular": "17.0.3", + "@angular-eslint/eslint-plugin": "17.0.1", + "@angular-eslint/eslint-plugin-template": "17.0.1", + "@angular-eslint/template-parser": "17.0.1", + "@angular/cli": "~17.0.0", + "@angular/compiler-cli": "17.0.4", + "@angular/language-service": "17.0.4", + "@ngrx/store-devtools": "17.0.0", + "@nx/cypress": "17.1.3", + "@nx/eslint": "17.1.3", + "@nx/eslint-plugin": "17.1.3", + "@nx/express": "17.1.3", + "@nx/jest": "17.1.3", + "@nx/node": "17.1.3", + "@nx/workspace": "17.1.3", "@testing-library/angular": "^14.1.0", "@types/express": "4.17.13", "@types/jest": "29.4.4", "@types/node": "18.7.1", - "@typescript-eslint/eslint-plugin": "5.62.0", - "@typescript-eslint/parser": "5.62.0", + "@typescript-eslint/eslint-plugin": "6.12.0", + "@typescript-eslint/parser": "6.12.0", "chokidar-cli": "^3.0.0", "cpx": "^1.5.0", "cypress": "^9.1.0", "eslint": "8.46.0", "eslint-config-prettier": "9.0.0", "eslint-plugin-cypress": "2.14.0", - "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-prettier": "^5.0.1", "husky": "^8.0.3", "jest": "29.5.0", "jest-environment-jsdom": "29.5.0", - "jest-preset-angular": "13.1.1", + "jest-preset-angular": "13.1.4", "live-server": "^1.2.1", - "nx": "17.0.2", + "nx": "17.1.3", "nx-cloud": "16.5.2", "parallelshell": "3.0.1", - "prettier": "2.6.2", + "prettier": "3.1.0", "sass": "^1.19.0", "shelljs": "^0.8.5", "ts-jest": "29.1.0", - "typescript": "5.1.6" + "typescript": "5.2.2" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -102,45 +102,19 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1602.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.2.tgz", - "integrity": "sha512-JFIeKKW7V2+/C8+pTReM6gfQkVU9l1IR1OCb9vvHWTRvuTr7E5h2L1rUInnmLiRWkEvkYfG29B+UPpYlkVl9oQ==", + "version": "0.1700.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1700.3.tgz", + "integrity": "sha512-HUjx7vD16paWXHKHYc2LsSn/kaYbFr2YNnlzuSr9C0kauKS1e7sRpRvtGwQzXfohzgyKi81AAU5uA2KLRGq83w==", "dependencies": { - "@angular-devkit/core": "16.2.2", + "@angular-devkit/core": "17.0.3", "rxjs": "7.8.1" }, "engines": { - "node": "^16.14.0 || >=18.10.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, - "node_modules/@angular-devkit/architect/node_modules/@angular-devkit/core": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.2.tgz", - "integrity": "sha512-6H4FsvP3rLJaGiWpIhCFPS7ZeNoM4sSrnFtRhhecu6s7MidzE4aqzuGdzJpzLammw1KL+DuTlN0gpLtM1Bvcwg==", - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "picomatch": "2.3.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, "node_modules/@angular-devkit/architect/node_modules/rxjs": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", @@ -150,95 +124,96 @@ } }, "node_modules/@angular-devkit/build-angular": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.2.2.tgz", - "integrity": "sha512-j2lni4mN6NaMLT85sJUPSz/pNuaTCAYG3EYUeuMRNkC5keH/f4W0Tiuq6DxY4OLEF1JnEnfkp+k0Z84mEti/xA==", + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.0.3.tgz", + "integrity": "sha512-1lx0mERC1eTHX4vf8q7kUHZNHS0jwZxbwYHAISOplwHjkzRociX0W6rx04yMXn2NCSNhK+w3xbWyAIgyYbP9nA==", "dependencies": { "@ampproject/remapping": "2.2.1", - "@angular-devkit/architect": "0.1602.2", - "@angular-devkit/build-webpack": "0.1602.2", - "@angular-devkit/core": "16.2.2", - "@babel/core": "7.22.9", - "@babel/generator": "7.22.9", + "@angular-devkit/architect": "0.1700.3", + "@angular-devkit/build-webpack": "0.1700.3", + "@angular-devkit/core": "17.0.3", + "@babel/core": "7.23.2", + "@babel/generator": "7.23.0", "@babel/helper-annotate-as-pure": "7.22.5", "@babel/helper-split-export-declaration": "7.22.6", - "@babel/plugin-proposal-async-generator-functions": "7.20.7", + "@babel/plugin-transform-async-generator-functions": "7.23.2", "@babel/plugin-transform-async-to-generator": "7.22.5", - "@babel/plugin-transform-runtime": "7.22.9", - "@babel/preset-env": "7.22.9", - "@babel/runtime": "7.22.6", - "@babel/template": "7.22.5", + "@babel/plugin-transform-runtime": "7.23.2", + "@babel/preset-env": "7.23.2", + "@babel/runtime": "7.23.2", "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "16.2.2", + "@ngtools/webpack": "17.0.3", "@vitejs/plugin-basic-ssl": "1.0.1", "ansi-colors": "4.1.3", - "autoprefixer": "10.4.14", + "autoprefixer": "10.4.16", "babel-loader": "9.1.3", "babel-plugin-istanbul": "6.1.1", + "browser-sync": "2.29.3", "browserslist": "^4.21.5", "chokidar": "3.5.3", "copy-webpack-plugin": "11.0.0", "critters": "0.0.20", "css-loader": "6.8.1", - "esbuild-wasm": "0.18.17", + "esbuild-wasm": "0.19.5", "fast-glob": "3.3.1", - "guess-parser": "0.4.22", - "https-proxy-agent": "5.0.1", - "inquirer": "8.2.4", + "http-proxy-middleware": "2.0.6", + "https-proxy-agent": "7.0.2", + "inquirer": "9.2.11", "jsonc-parser": "3.2.0", "karma-source-map-support": "1.4.0", - "less": "4.1.3", + "less": "4.2.0", "less-loader": "11.1.0", "license-webpack-plugin": "4.0.2", "loader-utils": "3.2.1", - "magic-string": "0.30.1", + "magic-string": "0.30.5", "mini-css-extract-plugin": "2.7.6", "mrmime": "1.0.1", "open": "8.4.2", "ora": "5.4.1", "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "2.3.1", - "piscina": "4.0.0", - "postcss": "8.4.27", + "picomatch": "3.0.1", + "piscina": "4.1.0", + "postcss": "8.4.31", "postcss-loader": "7.3.3", "resolve-url-loader": "5.0.0", "rxjs": "7.8.1", - "sass": "1.64.1", + "sass": "1.69.5", "sass-loader": "13.3.2", "semver": "7.5.4", "source-map-loader": "4.0.1", "source-map-support": "0.5.21", - "terser": "5.19.2", + "terser": "5.24.0", "text-table": "0.2.0", "tree-kill": "1.2.2", - "tslib": "2.6.1", - "vite": "4.4.7", - "webpack": "5.88.2", + "tslib": "2.6.2", + "undici": "5.27.2", + "vite": "4.5.0", + "webpack": "5.89.0", "webpack-dev-middleware": "6.1.1", "webpack-dev-server": "4.15.1", - "webpack-merge": "5.9.0", + "webpack-merge": "5.10.0", "webpack-subresource-integrity": "5.1.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "optionalDependencies": { - "esbuild": "0.18.17" + "esbuild": "0.19.5" }, "peerDependencies": { - "@angular/compiler-cli": "^16.0.0", - "@angular/localize": "^16.0.0", - "@angular/platform-server": "^16.0.0", - "@angular/service-worker": "^16.0.0", + "@angular/compiler-cli": "^17.0.0", + "@angular/localize": "^17.0.0", + "@angular/platform-server": "^17.0.0", + "@angular/service-worker": "^17.0.0", "jest": "^29.5.0", "jest-environment-jsdom": "^29.5.0", "karma": "^6.3.0", - "ng-packagr": "^16.0.0", + "ng-packagr": "^17.0.0", "protractor": "^7.0.0", "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=4.9.3 <5.2" + "typescript": ">=5.2 <5.3" }, "peerDependenciesMeta": { "@angular/localize": { @@ -270,399 +245,6 @@ } } }, - "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/core": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.2.tgz", - "integrity": "sha512-6H4FsvP3rLJaGiWpIhCFPS7ZeNoM4sSrnFtRhhecu6s7MidzE4aqzuGdzJpzLammw1KL+DuTlN0gpLtM1Bvcwg==", - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "picomatch": "2.3.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/android-arm": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.17.tgz", - "integrity": "sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/android-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.17.tgz", - "integrity": "sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/android-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.17.tgz", - "integrity": "sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/darwin-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.17.tgz", - "integrity": "sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/darwin-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.17.tgz", - "integrity": "sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.17.tgz", - "integrity": "sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/freebsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.17.tgz", - "integrity": "sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-arm": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.17.tgz", - "integrity": "sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.17.tgz", - "integrity": "sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-ia32": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.17.tgz", - "integrity": "sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-loong64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.17.tgz", - "integrity": "sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-mips64el": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.17.tgz", - "integrity": "sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-ppc64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.17.tgz", - "integrity": "sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-riscv64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.17.tgz", - "integrity": "sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-s390x": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.17.tgz", - "integrity": "sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.17.tgz", - "integrity": "sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/netbsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.17.tgz", - "integrity": "sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/openbsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.17.tgz", - "integrity": "sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/sunos-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.17.tgz", - "integrity": "sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/win32-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.17.tgz", - "integrity": "sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/win32-ia32": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.17.tgz", - "integrity": "sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/win32-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.17.tgz", - "integrity": "sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/esbuild": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.17.tgz", - "integrity": "sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==", - "hasInstallScript": true, - "optional": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.17", - "@esbuild/android-arm64": "0.18.17", - "@esbuild/android-x64": "0.18.17", - "@esbuild/darwin-arm64": "0.18.17", - "@esbuild/darwin-x64": "0.18.17", - "@esbuild/freebsd-arm64": "0.18.17", - "@esbuild/freebsd-x64": "0.18.17", - "@esbuild/linux-arm": "0.18.17", - "@esbuild/linux-arm64": "0.18.17", - "@esbuild/linux-ia32": "0.18.17", - "@esbuild/linux-loong64": "0.18.17", - "@esbuild/linux-mips64el": "0.18.17", - "@esbuild/linux-ppc64": "0.18.17", - "@esbuild/linux-riscv64": "0.18.17", - "@esbuild/linux-s390x": "0.18.17", - "@esbuild/linux-x64": "0.18.17", - "@esbuild/netbsd-x64": "0.18.17", - "@esbuild/openbsd-x64": "0.18.17", - "@esbuild/sunos-x64": "0.18.17", - "@esbuild/win32-arm64": "0.18.17", - "@esbuild/win32-ia32": "0.18.17", - "@esbuild/win32-x64": "0.18.17" - } - }, "node_modules/@angular-devkit/build-angular/node_modules/rxjs": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", @@ -671,37 +253,16 @@ "tslib": "^2.1.0" } }, - "node_modules/@angular-devkit/build-angular/node_modules/sass": { - "version": "1.64.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.64.1.tgz", - "integrity": "sha512-16rRACSOFEE8VN7SCgBu1MpYCyN7urj9At898tyzdXFhC+a+yOX5dXwAR7L8/IdPJ1NB8OYoXmD55DM30B2kEQ==", - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==" - }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1602.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1602.2.tgz", - "integrity": "sha512-V9+tsBgNrXJPeabq9vJzN3Cfz9joaNOxs6l6M4XItcMGmAtzvxxGZ7qS5uRH1RE+SOMpYyh9uPY4QMHRNRD/gA==", + "version": "0.1700.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1700.3.tgz", + "integrity": "sha512-r8nVakAnwV5Yy2AjWDpdcGUjHRQBcPljZDhX5tX2H7M3bxD6zG5owXDy8XmG64A7U1jd6D7dQv7zoW/tZwpYvw==", "dependencies": { - "@angular-devkit/architect": "0.1602.2", + "@angular-devkit/architect": "0.1700.3", "rxjs": "7.8.1" }, "engines": { - "node": "^16.14.0 || >=18.10.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, @@ -719,19 +280,19 @@ } }, "node_modules/@angular-devkit/core": { - "version": "16.2.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.8.tgz", - "integrity": "sha512-PTGozYvh1Bin5lB15PwcXa26Ayd17bWGLS3H8Rs0s+04mUDvfNofmweaX1LgumWWy3nCUTDuwHxX10M3G0wE2g==", + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.0.3.tgz", + "integrity": "sha512-SOngD3rKnwZWhhUV68AYlH8M3LRGvF69jnDrYKwtRy1ESqSH7tt+1vexGC290gKvqH7bNMgYv8f5BS1AASRfzw==", "dependencies": { "ajv": "8.12.0", "ajv-formats": "2.1.1", "jsonc-parser": "3.2.0", - "picomatch": "2.3.1", + "picomatch": "3.0.1", "rxjs": "7.8.1", "source-map": "0.7.4" }, "engines": { - "node": "^16.14.0 || >=18.10.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, @@ -753,18 +314,18 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "16.2.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.2.8.tgz", - "integrity": "sha512-MBiKZOlR9/YMdflALr7/7w/BGAfo/BGTrlkqsIB6rDWV1dYiCgxI+033HsiNssLS6RQyCFx/e7JA2aBBzu9zEg==", + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.0.3.tgz", + "integrity": "sha512-gNocyYuNJRd24+JSM5kpO7g9Vg4THcoH5It8nJmS3muelLHDzegvDzXB7iPBjVR8Lxts6sbifYdIkKencUc4vg==", "dependencies": { - "@angular-devkit/core": "16.2.8", + "@angular-devkit/core": "17.0.3", "jsonc-parser": "3.2.0", - "magic-string": "0.30.1", + "magic-string": "0.30.5", "ora": "5.4.1", "rxjs": "7.8.1" }, "engines": { - "node": "^16.14.0 || >=18.10.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } @@ -778,19 +339,19 @@ } }, "node_modules/@angular-eslint/bundled-angular-compiler": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-16.0.1.tgz", - "integrity": "sha512-amvTgKHtZoygivW3LAYZ9qjLWsXM7/7eaRvaHdmAEdjyFnYQZ7UbWMPSQNz1mlW/AzTFvk9lGGQORglNOSDnww==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-17.0.1.tgz", + "integrity": "sha512-E3YK9/uIBsuKC76i6uvPdtq8bwA63WDKDYpsPSTLF2XmL3a5LGev0+NmJCD2zR/0uMenHYB27BwjZotpk1rycg==", "dev": true }, "node_modules/@angular-eslint/eslint-plugin": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-16.0.1.tgz", - "integrity": "sha512-CM9keS9cH1QAfSVfsvhw/oGCZcP/D8gfekWwVNjN/uEMEAak0czn1KOG7JQkE36NXOGtwCpTspMi1aa9CVKo9g==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-17.0.1.tgz", + "integrity": "sha512-HNXzjvqTCfaxENnfjVHJXcWrfzv/3LDH6aEHF7P8B363JSgx0g4SZtGKBrdbXcJPmf5arVfVgRUvKMJ7Es9aiQ==", "dev": true, "dependencies": { - "@angular-eslint/utils": "16.0.1", - "@typescript-eslint/utils": "5.59.2" + "@angular-eslint/utils": "17.0.1", + "@typescript-eslint/utils": "6.10.0" }, "peerDependencies": { "eslint": "^7.20.0 || ^8.0.0", @@ -798,17 +359,17 @@ } }, "node_modules/@angular-eslint/eslint-plugin-template": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-16.0.1.tgz", - "integrity": "sha512-1hyfs+Iq7K2x3mDDE4985d8vDcMyknbE9HKHKUtRLfLKC9gnV3N5d4+UeySQ7Rrjvgzkc1g9qHADyuhwRWpDSA==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-17.0.1.tgz", + "integrity": "sha512-7aQYUUCrdOvAKesUNsWSNUnPjzb9WI69Mlr/VhKSb4SNWwMr6SmYOsNqSqydIrtpHo4sIgyStGGfzELZ4Kub9Q==", "dev": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "16.0.1", - "@angular-eslint/utils": "16.0.1", - "@typescript-eslint/type-utils": "5.59.2", - "@typescript-eslint/utils": "5.59.2", - "aria-query": "5.1.3", - "axobject-query": "3.1.1" + "@angular-eslint/bundled-angular-compiler": "17.0.1", + "@angular-eslint/utils": "17.0.1", + "@typescript-eslint/type-utils": "6.10.0", + "@typescript-eslint/utils": "6.10.0", + "aria-query": "5.3.0", + "axobject-query": "4.0.0" }, "peerDependencies": { "eslint": "^7.20.0 || ^8.0.0", @@ -816,12 +377,12 @@ } }, "node_modules/@angular-eslint/template-parser": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-16.0.1.tgz", - "integrity": "sha512-x0+SwSeqa3TiVZan6fE5grHsCkjGqU+zAS2DB6wAw5pyvgNAIjrI4cZEQ8pkgHfXe5tuumTKztlkpisah5s/hg==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-17.0.1.tgz", + "integrity": "sha512-EBN5c0/HuaikvPMqQJ6z2U2qSHof6xgwzNH48F4+Mnn2oMzz0eqtvjNrbTCka/vSCjELczao9px879ywDjVB5g==", "dev": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "16.0.1", + "@angular-eslint/bundled-angular-compiler": "17.0.1", "eslint-scope": "^7.0.0" }, "peerDependencies": { @@ -830,13 +391,13 @@ } }, "node_modules/@angular-eslint/utils": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-16.0.1.tgz", - "integrity": "sha512-2xnJuhIrMZEYK6UyBym6FaFXZgopIIbqfQ4sAtMWY6zYkCEsVUvx5qKIrsnXAwvpDQrv0WiMXteqi/5ICpVMZQ==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-17.0.1.tgz", + "integrity": "sha512-yao+cuWmtDKwe/zW/4+e53pgwlk/rz7fjZFYvaYIuoIpqUQhqYYcBW8NeUoo8BscM57IfPqn0l6UkcXJhS1bRA==", "dev": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "16.0.1", - "@typescript-eslint/utils": "5.59.2" + "@angular-eslint/bundled-angular-compiler": "17.0.1", + "@typescript-eslint/utils": "6.10.0" }, "peerDependencies": { "eslint": "^7.20.0 || ^8.0.0", @@ -844,23 +405,23 @@ } }, "node_modules/@angular/animations": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.2.5.tgz", - "integrity": "sha512-2reD50S9zWvhewRvwl320iuRICN9s0fI+3nKULlwcyJ0praLRhJ1SnaAK3NEEu7MWo3n9sb3iVTzA6S9qZRJ4g==", + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.0.4.tgz", + "integrity": "sha512-XHkTBZAoYf1t4Hb06RkYa6cgtjEA5JGq1ArXu/DckOS6G/ZuY+dwWULEmaf9ejJem8O78ol223ZQ5d7sXqpixQ==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/core": "16.2.5" + "@angular/core": "17.0.4" } }, "node_modules/@angular/cdk": { - "version": "16.2.4", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-16.2.4.tgz", - "integrity": "sha512-Hnh7Gs+gAkBnRYIMkDXRElEPAmBFas37isIfOtiqEmkgmSPFxsPpDOXK1soXeDk8U+yNmDWnO0fcHPp/pobHCw==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-17.0.1.tgz", + "integrity": "sha512-0hrXm2D0s0/vUtDoLFRWTs75k5WY/hQmfnsaJXHeqinbE3eKOxmQxL1i7ymnMSQthEWzgRAhzS3Nfs7Alw3dQA==", "dependencies": { "tslib": "^2.3.0" }, @@ -868,32 +429,32 @@ "parse5": "^7.1.2" }, "peerDependencies": { - "@angular/common": "^16.0.0 || ^17.0.0", - "@angular/core": "^16.0.0 || ^17.0.0", + "@angular/common": "^17.0.0 || ^18.0.0", + "@angular/core": "^17.0.0 || ^18.0.0", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/cli": { - "version": "16.2.8", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.2.8.tgz", - "integrity": "sha512-iPrDv+SemRb6ZhayxwLsEdykHpV2TYSgH5Smg8GqSaIR/KUiemuzBrIKEUEaIG4n2dVEOtcsuh2JRHQndF7wmw==", + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.0.3.tgz", + "integrity": "sha512-pRGXms87aEqmB4yPdcPI/VM7JegjDcBIeLadms0wrBkoyQiv+jL5LesxODhid6ujXZOj1xqMCYbCnX7HY+mLcQ==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1602.8", - "@angular-devkit/core": "16.2.8", - "@angular-devkit/schematics": "16.2.8", - "@schematics/angular": "16.2.8", + "@angular-devkit/architect": "0.1700.3", + "@angular-devkit/core": "17.0.3", + "@angular-devkit/schematics": "17.0.3", + "@schematics/angular": "17.0.3", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.3", "ini": "4.1.1", - "inquirer": "8.2.4", + "inquirer": "9.2.11", "jsonc-parser": "3.2.0", - "npm-package-arg": "10.1.0", - "npm-pick-manifest": "8.0.1", + "npm-package-arg": "11.0.1", + "npm-pick-manifest": "9.0.0", "open": "8.4.2", "ora": "5.4.1", - "pacote": "15.2.0", - "resolve": "1.22.2", + "pacote": "17.0.4", + "resolve": "1.22.8", "semver": "7.5.4", "symbol-observable": "4.0.0", "yargs": "17.7.2" @@ -902,62 +463,38 @@ "ng": "bin/ng.js" }, "engines": { - "node": "^16.14.0 || >=18.10.0", + "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.1602.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.8.tgz", - "integrity": "sha512-bNdu2tF29Y/jOxMXlu9pmNbIlyZs9hRjLmi/tcfcMFay+3AhpNO59DWlUmI4gpvWu8CEXdQHSMuJTDHaNR+Ctg==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "16.2.8", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/@angular/common": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.2.5.tgz", - "integrity": "sha512-MCPSZfPXTEqdkswPczivwjqV117YeVjObtyxZsDAwrTZHzYBtfQreQG1XJ1IRRgDncznP6ke0mdH9LyD2LgZKQ==", + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-17.0.4.tgz", + "integrity": "sha512-/y38PbuiaWOuOmP5ZELTlJSjZGijc6Nq2XQloT5pKsaH935prxPjyWazwlY6cUnJMQgSRU644/ULosDJec7Zxw==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/core": "16.2.5", + "@angular/core": "17.0.4", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.2.5.tgz", - "integrity": "sha512-DpLfWWZFk4lbr81W7sLRt15+/nbyyqTvz+UmGcrSfKBTSbV0VSoUjC3XZeIdPWoIgQXiKUCpaC0YXw0BjaOl0g==", + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.0.4.tgz", + "integrity": "sha512-OweJui9EWCa1ZcZjkJHS5z1gqICqyryR1Gdmyr8vIa6HD8wU/5BaeBJPCDgYgt+qJkvcT/sPxgZQsc2pVeUwbQ==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/core": "16.2.5" + "@angular/core": "17.0.4" }, "peerDependenciesMeta": { "@angular/core": { @@ -966,11 +503,11 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.2.5.tgz", - "integrity": "sha512-6TtyFxro4iukVXhLlzxz7sVCMfAlNQhSYnizIJRSW31uQ0Uku8rjlUmX1tCAmhW6CacLumiz2tcy04Xn/QFWyw==", + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.0.4.tgz", + "integrity": "sha512-ywj8XNI+hvHHYGcNWvXaVHSRtcd3S7MqJNgXWfnb0JjAb282oGSvjEc7wnH4ERqkvnSrpk1kQ2Fj3uJ2P5zfmQ==", "dependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.23.2", "@jridgewell/sourcemap-codec": "^1.4.14", "chokidar": "^3.0.0", "convert-source-map": "^1.5.1", @@ -985,169 +522,132 @@ "ngcc": "bundles/ngcc/index.js" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/compiler": "16.2.5", - "typescript": ">=4.9.3 <5.2" - } - }, - "node_modules/@angular/compiler-cli/node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" + "@angular/compiler": "17.0.4", + "typescript": ">=5.2 <5.3" } }, "node_modules/@angular/core": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.2.5.tgz", - "integrity": "sha512-Po2LMUnPg23D2qI7EYaoA4x3lRswx9nxfpwROzfFPbMNJ3JVbTK0HkTD2dFPGxRua2UjfJTb1um23tEGO4OGMQ==", + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-17.0.4.tgz", + "integrity": "sha512-zk+z5sYPZd87pLxECx27quB5FvSmoi9PjJlcSlaBwwqaGnh/tPJI14u3q1dRY/CoZgP9egEiwc428+DzvOzJew==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.13.0" + "zone.js": "~0.14.0" } }, "node_modules/@angular/forms": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.2.5.tgz", - "integrity": "sha512-iYJImRji1OiYIcC2mDBcXhtvPfAoEGT+HqZpivu+/ZPLuf+QegC9+ktJw90SQXR+xccmpkUb9MsJ52SN2MgkPA==", + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.0.4.tgz", + "integrity": "sha512-R5J87dfJNWwi5SESD7tRkZnqG4u8KNAT4vImX4oG70/6vWioKUSWpLoSp1gpzy9UW51E85AKb8DNvIex7LclSg==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/common": "16.2.5", - "@angular/core": "16.2.5", - "@angular/platform-browser": "16.2.5", + "@angular/common": "17.0.4", + "@angular/core": "17.0.4", + "@angular/platform-browser": "17.0.4", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/language-service": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-16.2.5.tgz", - "integrity": "sha512-lYNRN4+iavDuAs86lRHuiTUxtVtsarCZPeoG6K1TEvrXrvmIbTtAbvONNMMnteO9ltCTduyREF9/sefE2Qw/Rg==", + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-17.0.4.tgz", + "integrity": "sha512-foS5HLIj6rZ/WMg1Zo1BPCaFP93GdJ6vG3f7ieHodiSeOexxzi2WqB7uh0yDYMqoemu/+YNYbOgrxBTkOpsoLg==", "dev": true, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^18.13.0 || >=20.9.0" } }, "node_modules/@angular/material": { - "version": "16.2.4", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-16.2.4.tgz", - "integrity": "sha512-TIZ/0MKObn5YU9n/VReghJJKqgkqyzrWVNEJ8UgOP6MV5o+kAbqLSmlDJEyjLIwJF0vPnJ3UP6qbEOfEi1OLaA==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/auto-init": "15.0.0-canary.bc9ae6c9c.0", - "@material/banner": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/button": "15.0.0-canary.bc9ae6c9c.0", - "@material/card": "15.0.0-canary.bc9ae6c9c.0", - "@material/checkbox": "15.0.0-canary.bc9ae6c9c.0", - "@material/chips": "15.0.0-canary.bc9ae6c9c.0", - "@material/circular-progress": "15.0.0-canary.bc9ae6c9c.0", - "@material/data-table": "15.0.0-canary.bc9ae6c9c.0", - "@material/density": "15.0.0-canary.bc9ae6c9c.0", - "@material/dialog": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/drawer": "15.0.0-canary.bc9ae6c9c.0", - "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", - "@material/fab": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/floating-label": "15.0.0-canary.bc9ae6c9c.0", - "@material/form-field": "15.0.0-canary.bc9ae6c9c.0", - "@material/icon-button": "15.0.0-canary.bc9ae6c9c.0", - "@material/image-list": "15.0.0-canary.bc9ae6c9c.0", - "@material/layout-grid": "15.0.0-canary.bc9ae6c9c.0", - "@material/line-ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/linear-progress": "15.0.0-canary.bc9ae6c9c.0", - "@material/list": "15.0.0-canary.bc9ae6c9c.0", - "@material/menu": "15.0.0-canary.bc9ae6c9c.0", - "@material/menu-surface": "15.0.0-canary.bc9ae6c9c.0", - "@material/notched-outline": "15.0.0-canary.bc9ae6c9c.0", - "@material/radio": "15.0.0-canary.bc9ae6c9c.0", - "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/segmented-button": "15.0.0-canary.bc9ae6c9c.0", - "@material/select": "15.0.0-canary.bc9ae6c9c.0", - "@material/shape": "15.0.0-canary.bc9ae6c9c.0", - "@material/slider": "15.0.0-canary.bc9ae6c9c.0", - "@material/snackbar": "15.0.0-canary.bc9ae6c9c.0", - "@material/switch": "15.0.0-canary.bc9ae6c9c.0", - "@material/tab": "15.0.0-canary.bc9ae6c9c.0", - "@material/tab-bar": "15.0.0-canary.bc9ae6c9c.0", - "@material/tab-indicator": "15.0.0-canary.bc9ae6c9c.0", - "@material/tab-scroller": "15.0.0-canary.bc9ae6c9c.0", - "@material/textfield": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/tooltip": "15.0.0-canary.bc9ae6c9c.0", - "@material/top-app-bar": "15.0.0-canary.bc9ae6c9c.0", - "@material/touch-target": "15.0.0-canary.bc9ae6c9c.0", - "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-17.0.1.tgz", + "integrity": "sha512-avicxHCJAeg26Tg8z6+g54tMTQZPP5kaaRmkd97QGtJn3wKiAen6WOgmEhlrA4jPJ71CsdyxcUruEX+BHB6X4Q==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/auto-init": "15.0.0-canary.a246a4439.0", + "@material/banner": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/button": "15.0.0-canary.a246a4439.0", + "@material/card": "15.0.0-canary.a246a4439.0", + "@material/checkbox": "15.0.0-canary.a246a4439.0", + "@material/chips": "15.0.0-canary.a246a4439.0", + "@material/circular-progress": "15.0.0-canary.a246a4439.0", + "@material/data-table": "15.0.0-canary.a246a4439.0", + "@material/density": "15.0.0-canary.a246a4439.0", + "@material/dialog": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/drawer": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/fab": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/floating-label": "15.0.0-canary.a246a4439.0", + "@material/form-field": "15.0.0-canary.a246a4439.0", + "@material/icon-button": "15.0.0-canary.a246a4439.0", + "@material/image-list": "15.0.0-canary.a246a4439.0", + "@material/layout-grid": "15.0.0-canary.a246a4439.0", + "@material/line-ripple": "15.0.0-canary.a246a4439.0", + "@material/linear-progress": "15.0.0-canary.a246a4439.0", + "@material/list": "15.0.0-canary.a246a4439.0", + "@material/menu": "15.0.0-canary.a246a4439.0", + "@material/menu-surface": "15.0.0-canary.a246a4439.0", + "@material/notched-outline": "15.0.0-canary.a246a4439.0", + "@material/radio": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/segmented-button": "15.0.0-canary.a246a4439.0", + "@material/select": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/slider": "15.0.0-canary.a246a4439.0", + "@material/snackbar": "15.0.0-canary.a246a4439.0", + "@material/switch": "15.0.0-canary.a246a4439.0", + "@material/tab": "15.0.0-canary.a246a4439.0", + "@material/tab-bar": "15.0.0-canary.a246a4439.0", + "@material/tab-indicator": "15.0.0-canary.a246a4439.0", + "@material/tab-scroller": "15.0.0-canary.a246a4439.0", + "@material/textfield": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tooltip": "15.0.0-canary.a246a4439.0", + "@material/top-app-bar": "15.0.0-canary.a246a4439.0", + "@material/touch-target": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/animations": "^16.0.0 || ^17.0.0", - "@angular/cdk": "16.2.4", - "@angular/common": "^16.0.0 || ^17.0.0", - "@angular/core": "^16.0.0 || ^17.0.0", - "@angular/forms": "^16.0.0 || ^17.0.0", - "@angular/platform-browser": "^16.0.0 || ^17.0.0", + "@angular/animations": "^17.0.0 || ^18.0.0", + "@angular/cdk": "17.0.1", + "@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", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/platform-browser": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.2.5.tgz", - "integrity": "sha512-p+1GH/M4Vwoyp7brKkNBcMTxscoZxA1zehetFlNr8kArXWiISgPolyqOVzvT6cycYKu5uSRLnvHOTDss6xrAuA==", + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.0.4.tgz", + "integrity": "sha512-lApUzVPfCEz/4aot77qzWUNg7yQgT0JSzy3BrBm95+2TbgH894J9Fswhig0sEN9jxGSkc3A5Yp5fs1HJcPqUiw==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/animations": "16.2.5", - "@angular/common": "16.2.5", - "@angular/core": "16.2.5" + "@angular/animations": "17.0.4", + "@angular/common": "17.0.4", + "@angular/core": "17.0.4" }, "peerDependenciesMeta": { "@angular/animations": { @@ -1156,36 +656,36 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.2.5.tgz", - "integrity": "sha512-kzC4z/KmLss8Du9uM1Q16r+3EqDExKKHnrb3G3tuEQ1jTvYCysdWoooVSBmtIlQUw13znpBm1B7XLoyviFvnwA==", + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.0.4.tgz", + "integrity": "sha512-mZZNH+iFzFug0z7rBQKdFz375sR6Y4iBbHu2aJD2BpgA2/SJaZ0WHGlF4bHbtpCYkZi3f4wKF2+Cwe4G5ebPOQ==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/common": "16.2.5", - "@angular/compiler": "16.2.5", - "@angular/core": "16.2.5", - "@angular/platform-browser": "16.2.5" + "@angular/common": "17.0.4", + "@angular/compiler": "17.0.4", + "@angular/core": "17.0.4", + "@angular/platform-browser": "17.0.4" } }, "node_modules/@angular/router": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.2.5.tgz", - "integrity": "sha512-5IXhe6G7zYFUwHSfUgPw+I/q6M1AcfSyaOVcjMFQ94bVSWEMq5KrGCDc8HQtkdw7GqJ4txwbyQKSKp7khpqShQ==", + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-17.0.4.tgz", + "integrity": "sha512-hQ+T+h6YE9NqyOmjqAIHe/k8xtW+yh0Mp8FCcl8REBezNyLXmOdsScCIOOc7GeFtbjRnQyJrBo4QxZ81acHP7Q==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/common": "16.2.5", - "@angular/core": "16.2.5", - "@angular/platform-browser": "16.2.5", + "@angular/common": "17.0.4", + "@angular/core": "17.0.4", + "@angular/platform-browser": "17.0.4", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -1195,11 +695,11 @@ "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==" }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.4.tgz", + "integrity": "sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA==", "dependencies": { - "@babel/highlight": "^7.22.13", + "@babel/highlight": "^7.23.4", "chalk": "^2.4.2" }, "engines": { @@ -1207,32 +707,32 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", - "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz", + "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", - "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", + "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.0", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", + "json5": "^2.2.3", "semver": "^6.3.1" }, "engines": { @@ -1243,6 +743,11 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -1252,11 +757,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dependencies": { - "@babel/types": "^7.22.5", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -1399,19 +904,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-function-name/node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-hoist-variables": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", @@ -1446,9 +938,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", - "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.22.15", @@ -1548,9 +1040,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", "engines": { "node": ">=6.9.0" } @@ -1584,49 +1076,23 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-wrap-function/node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helpers": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", - "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.4.tgz", + "integrity": "sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw==", "dependencies": { "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers/node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.23.4", + "@babel/types": "^7.23.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", @@ -1637,9 +1103,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.4.tgz", + "integrity": "sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1648,9 +1114,9 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", - "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", + "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1662,13 +1128,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", - "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", + "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.15" + "@babel/plugin-transform-optional-chaining": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -1677,34 +1143,16 @@ "@babel/core": "^7.13.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.2.tgz", - "integrity": "sha512-eR0gJQc830fJVGz37oKLvt9W9uUIQSAovUl0e9sJ3YeO09dlcoBVYD3CLrjCj4qHdXmfiyTyFt8yeQYSN5fxLg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.3.tgz", + "integrity": "sha512-u8SwzOcP0DYSsa++nHd/9exlHb0NAlHCb890qtZZbSwPX2bFv8LBEztxwN7Xg/dS8oAFFidhrI9PBcLBJSkGRQ==", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/plugin-syntax-decorators": "^7.22.10" + "@babel/plugin-syntax-decorators": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -1724,22 +1172,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead.", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", @@ -1788,9 +1220,9 @@ } }, "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.10.tgz", - "integrity": "sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz", + "integrity": "sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1824,9 +1256,9 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", + "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1838,9 +1270,9 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", + "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1874,9 +1306,9 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1982,9 +1414,9 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2011,9 +1443,9 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", + "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2058,9 +1490,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", + "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2072,9 +1504,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz", - "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2086,11 +1518,11 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", + "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -2101,11 +1533,11 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", - "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", + "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, @@ -2117,17 +1549,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", - "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz", + "integrity": "sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, @@ -2139,12 +1571,12 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", + "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" + "@babel/template": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -2154,9 +1586,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz", - "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", + "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2168,11 +1600,11 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", + "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -2183,9 +1615,9 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", + "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2197,9 +1629,9 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", - "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", + "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3" @@ -2212,11 +1644,11 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", + "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -2227,9 +1659,9 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", - "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", + "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" @@ -2242,9 +1674,9 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", - "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz", + "integrity": "sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2256,12 +1688,12 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", + "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -2272,9 +1704,9 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", - "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", + "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-json-strings": "^7.8.3" @@ -2287,9 +1719,9 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", + "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2301,9 +1733,9 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", - "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", + "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" @@ -2316,9 +1748,9 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", + "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2330,11 +1762,11 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz", - "integrity": "sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", + "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", "dependencies": { - "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -2345,11 +1777,11 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz", - "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", "dependencies": { - "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" }, @@ -2361,12 +1793,12 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz", - "integrity": "sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", + "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20" }, @@ -2378,11 +1810,11 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", + "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -2408,9 +1840,9 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", + "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2422,9 +1854,9 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", - "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", + "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -2437,9 +1869,9 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", - "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", + "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -2452,15 +1884,15 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", - "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", + "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", "dependencies": { - "@babel/compat-data": "^7.22.9", + "@babel/compat-data": "^7.23.3", "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.15" + "@babel/plugin-transform-parameters": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -2470,12 +1902,12 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", + "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" + "@babel/helper-replace-supers": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -2485,9 +1917,9 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", - "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", + "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" @@ -2500,9 +1932,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz", - "integrity": "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", + "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", @@ -2516,9 +1948,9 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", - "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", + "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2530,11 +1962,11 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", + "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -2545,12 +1977,12 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", - "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", + "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, @@ -2562,9 +1994,9 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", + "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2576,9 +2008,9 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", - "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", + "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "regenerator-transform": "^0.15.2" @@ -2591,9 +2023,9 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", + "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2605,15 +2037,15 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.9.tgz", - "integrity": "sha512-9KjBH61AGJetCPYp/IEyLEp47SyybZb0nDRpBvmtEkm+rUIwxdlKpyNHI1TmsGkeuLclJdleQHRZ8XLBnnh8CQ==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.2.tgz", + "integrity": "sha512-XOntj6icgzMS58jPVtQpiuF6ZFWxQiJavISGx5KGjRj+3gqZr8+N6Kx+N9BApWzgS+DOjIZfXXj0ZesenOWDyA==", "dependencies": { - "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.4", - "babel-plugin-polyfill-corejs3": "^0.8.2", - "babel-plugin-polyfill-regenerator": "^0.5.1", + "babel-plugin-polyfill-corejs2": "^0.4.6", + "babel-plugin-polyfill-corejs3": "^0.8.5", + "babel-plugin-polyfill-regenerator": "^0.5.3", "semver": "^6.3.1" }, "engines": { @@ -2632,9 +2064,9 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", + "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2646,9 +2078,9 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", + "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" @@ -2661,9 +2093,9 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", + "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2675,9 +2107,9 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", + "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2689,9 +2121,9 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", + "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2703,14 +2135,14 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.15.tgz", - "integrity": "sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.4.tgz", + "integrity": "sha512-39hCCOl+YUAyMOu6B9SmUTiHUU0t/CxJNUmY3qRdJujbqi+lrQcL11ysYUsAvFWPBdhihrv1z0oRG84Yr3dODQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.22.5" + "@babel/plugin-syntax-typescript": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -2720,9 +2152,9 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", - "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", + "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2734,11 +2166,11 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", + "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -2749,11 +2181,11 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", + "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -2764,11 +2196,11 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", + "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -2779,16 +2211,16 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.9.tgz", - "integrity": "sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.2.tgz", + "integrity": "sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==", "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", + "@babel/compat-data": "^7.23.2", + "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", "@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", @@ -2809,58 +2241,58 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.7", + "@babel/plugin-transform-async-generator-functions": "^7.23.2", "@babel/plugin-transform-async-to-generator": "^7.22.5", "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.23.0", "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.6", + "@babel/plugin-transform-class-static-block": "^7.22.11", + "@babel/plugin-transform-classes": "^7.22.15", "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.23.0", "@babel/plugin-transform-dotall-regex": "^7.22.5", "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.11", "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", + "@babel/plugin-transform-for-of": "^7.22.15", "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.11", "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.23.0", + "@babel/plugin-transform-modules-commonjs": "^7.23.0", + "@babel/plugin-transform-modules-systemjs": "^7.23.0", "@babel/plugin-transform-modules-umd": "^7.22.5", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", + "@babel/plugin-transform-numeric-separator": "^7.22.11", + "@babel/plugin-transform-object-rest-spread": "^7.22.15", "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.6", - "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.11", + "@babel/plugin-transform-optional-chaining": "^7.23.0", + "@babel/plugin-transform-parameters": "^7.22.15", "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.10", "@babel/plugin-transform-reserved-words": "^7.22.5", "@babel/plugin-transform-shorthand-properties": "^7.22.5", "@babel/plugin-transform-spread": "^7.22.5", "@babel/plugin-transform-sticky-regex": "^7.22.5", "@babel/plugin-transform-template-literals": "^7.22.5", "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.10", "@babel/plugin-transform-unicode-property-regex": "^7.22.5", "@babel/plugin-transform-unicode-regex": "^7.22.5", "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.4", - "babel-plugin-polyfill-corejs3": "^0.8.2", - "babel-plugin-polyfill-regenerator": "^0.5.1", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "@babel/types": "^7.23.0", + "babel-plugin-polyfill-corejs2": "^0.4.6", + "babel-plugin-polyfill-corejs3": "^0.8.5", + "babel-plugin-polyfill-regenerator": "^0.5.3", "core-js-compat": "^3.31.0", "semver": "^6.3.1" }, @@ -2880,13 +2312,11 @@ } }, "node_modules/@babel/preset-modules": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", - "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, @@ -2895,15 +2325,15 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.2.tgz", - "integrity": "sha512-u4UJc1XsS1GhIGteM8rnGiIvf9rJpiVgMEeCnwlLA7WJPC+jcXWJAGxYmeqs5hOZD8BbAfnV5ezBOxQbb4OUxA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz", + "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.23.0", - "@babel/plugin-transform-typescript": "^7.22.15" + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-typescript": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -2918,42 +2348,42 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", + "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", "dependencies": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.4.tgz", + "integrity": "sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg==", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", + "@babel/code-frame": "^7.23.4", + "@babel/generator": "^7.23.4", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", + "@babel/parser": "^7.23.4", + "@babel/types": "^7.23.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2962,11 +2392,11 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.4.tgz", + "integrity": "sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ==", "dependencies": { - "@babel/types": "^7.23.0", + "@babel/types": "^7.23.4", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -2976,11 +2406,11 @@ } }, "node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.4.tgz", + "integrity": "sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ==", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, @@ -3454,9 +2884,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz", + "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -3548,13 +2978,21 @@ } }, "node_modules/@eslint/js": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz", - "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz", + "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@fastify/busboy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", + "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==", + "engines": { + "node": ">=14" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.13", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", @@ -4389,755 +3827,766 @@ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, + "node_modules/@ljharb/through": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.11.tgz", + "integrity": "sha512-ccfcIDlogiXNq5KcbAwbaO7lMh3Tm1i3khMPYpxlK8hH/W53zN81KM9coerRLOnTGu3nfXIniAmQbRI9OxbC0w==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/@material/animation": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/animation/-/animation-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-leRf+BcZTfC/iSigLXnYgcHAGvFVQveoJT5+2PIRdyPI/bIG7hhciRgacHRsCKC0sGya81dDblLgdkjSUemYLw==", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/animation/-/animation-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-0eV06UGYeuFwC/4t+yjg3LCRGRLq72ybBtJYzcBDpP4ASTjie0WmpAOFJYXRq2U5X/yxLviDMhpRemoSUjgZ0Q==", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/@material/auto-init": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/auto-init/-/auto-init-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-uxzDq7q3c0Bu1pAsMugc1Ik9ftQYQqZY+5e2ybNplT8gTImJhNt4M2mMiMHbMANk2l3UgICmUyRSomgPBWCPIA==", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/auto-init/-/auto-init-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-0QfmjT5elQ10hCxToVgq/WaC3301tVH1sJaO3O2yocVzr7s6iWm8/zch16V5hcHzQHbtcT3Rf4y1ZzmdNys2Iw==", "dependencies": { - "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/banner": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/banner/-/banner-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-SHeVoidCUFVhXANN6MNWxK9SZoTSgpIP8GZB7kAl52BywLxtV+FirTtLXkg/8RUkxZRyRWl7HvQ0ZFZa7QQAyA==", - "dependencies": { - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/button": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/shape": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", - "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/banner/-/banner-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-PBLgH7JEbEpTkLy33oyWXUhIFmSsdOrR6Gn6qIgQRo1qrnk5RSBGW2gEq4Z6793vjxM107gKudDb23E4Fcu4vg==", + "dependencies": { + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/button": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/base": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/base/-/base-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-Fc3vGuOf+duGo22HTRP6dHdc+MUe0VqQfWOuKrn/wXKD62m0QQR2TqJd3rRhCumH557T5QUyheW943M3E+IGfg==", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/base/-/base-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-/ob3v3IFU8q2gGdVNWw5kNPjW2mRTeBIz1YdhGWUmRxKn2Kl8bdLOvrAmZtQMmPn/4cGXvinxpec/zVBWQKDkA==", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/@material/button": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/button/-/button-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-3AQgwrPZCTWHDJvwgKq7Cj+BurQ4wTjDdGL+FEnIGUAjJDskwi1yzx5tW2Wf/NxIi7IoPFyOY3UB41jwMiOrnw==", - "dependencies": { - "@material/density": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/focus-ring": "15.0.0-canary.bc9ae6c9c.0", - "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/shape": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", - "@material/touch-target": "15.0.0-canary.bc9ae6c9c.0", - "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/button/-/button-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-rGpVRde0Aqhv2t9QvT8Zl3HvG89BeUNPOpgfpaLBZ4SGGAO4rIrckl/eCENibKgmmdCKcYZlG9gc5abQVPfUvw==", + "dependencies": { + "@material/density": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/focus-ring": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/touch-target": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/card": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/card/-/card-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-nPlhiWvbLmooTnBmV5gmzB0eLWSgLKsSRBYAbIBmO76Okgz1y+fQNLag+lpm/TDaHVsn5fmQJH8e0zIg0rYsQA==", - "dependencies": { - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/shape": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/card/-/card-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-+rYUnBPgv5QVF6BeUs3toIRdSwFVohGmjk2ptTXMZkKxqAJt7Nr9Znbm3Ym2hD8GUHJeh3pyGFvEs6rG6JMYAw==", + "dependencies": { + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/checkbox": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/checkbox/-/checkbox-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-4tpNnO1L0IppoMF3oeQn8F17t2n0WHB0D7mdJK9rhrujen/fLbekkIC82APB3fdGtLGg3qeNqDqPsJm1YnmrwA==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/density": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/focus-ring": "15.0.0-canary.bc9ae6c9c.0", - "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/touch-target": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/checkbox/-/checkbox-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-sQwHzm1TSxHUoPrqplWTk/BhyzdDhzcwlbucwJK9W0o9WXMDk+d9PvcCxpP/9sAnVqZk42BfE89Y0T1DHglZ9A==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/density": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/focus-ring": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/touch-target": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/chips": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/chips/-/chips-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-fqHKvE5bSWK0bXVkf57MWxZtytGqYBZvvHIOs4JI9HPHEhaJy4CpSw562BEtbm3yFxxALoQknvPW2KYzvADnmA==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/checkbox": "15.0.0-canary.bc9ae6c9c.0", - "@material/density": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/focus-ring": "15.0.0-canary.bc9ae6c9c.0", - "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/shape": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", - "@material/touch-target": "15.0.0-canary.bc9ae6c9c.0", - "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/chips/-/chips-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-TiV9WJ5taEHPGWPhXbxJvUJhLzThg+VpK7aAlvL4RurtmJ7pURuEdRS4Z6o0OEqi3wKQ4z/+K44kZUn/+9HALg==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/checkbox": "15.0.0-canary.a246a4439.0", + "@material/density": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/focus-ring": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/touch-target": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", "safevalues": "^0.3.4", "tslib": "^2.1.0" } }, "node_modules/@material/circular-progress": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/circular-progress/-/circular-progress-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-Lxe8BGAxQwCQqrLhrYrIP0Uok10h7aYS3RBXP41ph+5GmwJd5zdyE2t93qm2dyThvU6qKuXw9726Dtq/N+wvZQ==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/progress-indicator": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/circular-progress/-/circular-progress-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-+QTfyExPWzgm2tqMInd32qQOftsC1b8MUhAhZSfuecYBfqAc7KZkQEKa2nm4y8EHKMFWe8/DcxLV6IxMBLgHwA==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/progress-indicator": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/data-table": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/data-table/-/data-table-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-j/7qplT9+sUpfe4pyWhPbl01qJA+OoNAG3VMJruBBR461ZBKyTi7ssKH9yksFGZ8eCEPkOsk/+kDxsiZvRWkeQ==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/checkbox": "15.0.0-canary.bc9ae6c9c.0", - "@material/density": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/icon-button": "15.0.0-canary.bc9ae6c9c.0", - "@material/linear-progress": "15.0.0-canary.bc9ae6c9c.0", - "@material/list": "15.0.0-canary.bc9ae6c9c.0", - "@material/menu": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/select": "15.0.0-canary.bc9ae6c9c.0", - "@material/shape": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", - "@material/touch-target": "15.0.0-canary.bc9ae6c9c.0", - "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/data-table/-/data-table-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-89qVOjR7gqby6fsmh7tKj29SjQ2sGLXu2IzCeX3Vni4mz+xxo5dv11jxYNADvdgJDfhyDJFPh1FlqAH7O09nFA==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/checkbox": "15.0.0-canary.a246a4439.0", + "@material/density": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/icon-button": "15.0.0-canary.a246a4439.0", + "@material/linear-progress": "15.0.0-canary.a246a4439.0", + "@material/list": "15.0.0-canary.a246a4439.0", + "@material/menu": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/select": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/touch-target": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/density": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/density/-/density-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-Zt3u07fXrBWLW06Tl5fgvjicxNQMkFdawLyNTzZ5TvbXfVkErILLePwwGaw8LNcvzqJP6ABLA8jiR+sKNoJQCg==", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/density/-/density-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-h8BJVCWkPR97WeWCN6/atVbSOP8J4+ZbbssidcwsnX7b3+3IaWdtBxGii25dsILX8pUVwwqxVis24y211b+8rg==", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/@material/dialog": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/dialog/-/dialog-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-o+9a/fmwJ9+gY3Z/uhj/PMVJDq7it1NTWKJn2GwAKdB+fDkT4hb9qEdcxMPyvJJ5ups+XiKZo03+tZrD+38c1w==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/button": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/icon-button": "15.0.0-canary.bc9ae6c9c.0", - "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/shape": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", - "@material/touch-target": "15.0.0-canary.bc9ae6c9c.0", - "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/dialog/-/dialog-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-4lyxd+5ccOEMUGKzZcssaYyzkCsYTpYCSQSANR0toQPLv3voDwKMfA709uZI6+nL7Re6Xdf7jx8qe+QpTTjVcw==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/button": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/icon-button": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/touch-target": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/dom": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/dom/-/dom-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-ly78R7aoCJtundSUu0UROU+5pQD5Piae0Y1MkN6bs0724azeazX1KeXFeaf06JOXnlr5/41ol+fSUPowjoqnOg==", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/dom/-/dom-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-AftSOGQoQg/Ys2kOVjZzvqWmsnhg3Kam/2UC4Gj0DMMCu36J4MAoD+3PpnOd1aG3wiJKtUXR2vPIwE8I/PM9yg==", "dependencies": { - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/drawer": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/drawer/-/drawer-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-PFL4cEFnt7VTxDsuspFVNhsFDYyumjU0VWfj3PWB7XudsEfQ3lo85D3HCEtTTbRsCainGN8bgYNDNafLBqiigw==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/list": "15.0.0-canary.bc9ae6c9c.0", - "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/shape": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/drawer/-/drawer-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-/JUmbzRBaikdbZ250yA9ZTPqp2W5nGvvuHYoNVAAmtOmxuwGvvNNpWiVZy2lIYeYcf1hA7hJ5mEQxs0aSD7iWQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/list": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/elevation": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-Ro+Pk8jFuap+T0B0shA3xI1hs2b89dNQ2EIPCNjNMp87emHKAzJfhKb7EZGIwv3+gFLlVaLyIVkb94I89KLsyg==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-lwPIOb8fHyOljIWYcVLPT73dPIEOKat/CXu6gqYIVMQgZQIksQNUA7z1O3l7apkRSuYUOYSXqrgU7AnWP4KcJg==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/fab": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/fab/-/fab-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-dvU0KWMRglwJEQwmQtFAmJcAjzg9VFF6Aqj78bJYu/DAIGFJ1VTTTSgoXM/XCm1YyQEZ7kZRvxBO37CH54rSDg==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/focus-ring": "15.0.0-canary.bc9ae6c9c.0", - "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/shape": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", - "@material/touch-target": "15.0.0-canary.bc9ae6c9c.0", - "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/fab/-/fab-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-XUex3FNqxPD1i/4jITucB/RWTNkkdv52mbNmwrvbuThZlhuhyH9GzOQYTDop/b2783TPcv++xr8UUbuh8GWYzA==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/focus-ring": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/touch-target": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/feature-targeting": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-wkDjVcoVEYYaJvun28IXdln/foLgPD7n9ZC9TY76GErGCwTq+HWpU6wBAAk+ePmpRFDayw4vI4wBlaWGxLtysQ==", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-/SU9X5y8CRp6RS9qnjnM/N5qfsJ8bYILpR841eZmN6DLqMupaM9Yy7Mx8+v/QvpBLLhk+jmu79nFzwkwW54d6Q==", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/@material/floating-label": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/floating-label/-/floating-label-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-bUWPtXzZITOD/2mkvLkEPO1ngDWmb74y0Kgbz6llHLOQBtycyJIpuoQJ1q2Ez0NM/tFLwPphhAgRqmL3YQ/Kzw==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/floating-label/-/floating-label-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-832qZ/qxKx0KUatoeVY3Q2NmboVgiWBG0/1VsbJyodHrgQWfnBOHgLE+M322o6uM3OhvO+kWm4iYbvwhmLZGsw==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/focus-ring": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/focus-ring/-/focus-ring-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-cZHThVose3GvAlJzpJoBI1iqL6d1/Jj9hXrR+r8Mwtb1hBIUEG3hxfsRd4vGREuzROPlf0OgNf/V+YHoSwgR5w==", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/focus-ring/-/focus-ring-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-ar0BtACFS3K14k/enAg0ePeEA/f/RJY4Ji4L/00Dw/B3XVpNRbqLH49jkcbtcQjdTS0FEyk2sWSNMZl6wVi0/A==", "dependencies": { - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0" + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0" } }, "node_modules/@material/form-field": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/form-field/-/form-field-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-+JFXy5X44Gue1CbZZAQ6YejnI203lebYwL0i6k0ylDpWHEOdD5xkF2PyHR28r9/65Ebcbwbff6q7kI1SGoT7MA==", - "dependencies": { - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/form-field/-/form-field-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-Q/+ErgtAUFUPPUmWA1m5IP5voiN8XjPRwyoAlFxSTa/4t+EA5B18Z8Bsn9b6I0AC8RHke06H7UWrKz8XUDIFpw==", + "dependencies": { + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/icon-button": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/icon-button/-/icon-button-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-1a0MHgyIwOs4RzxrVljsqSizGYFlM1zY2AZaLDsgT4G3kzsplTx8HZQ022GpUCjAygW+WLvg4z1qAhQHvsbqlw==", - "dependencies": { - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/density": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/focus-ring": "15.0.0-canary.bc9ae6c9c.0", - "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/touch-target": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/icon-button/-/icon-button-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-Igyo94rkIlqC91BR1Tv+WLTz1ZWcZZjl1xU7Vsx8mbWA1PnaRDUTNVV5LFi4e0ORp6GSblFTImpHngEy4agMEg==", + "dependencies": { + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/density": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/focus-ring": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/touch-target": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/image-list": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/image-list/-/image-list-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-WKWmiYap2iu4QdqmeUSliLlN4O2Ueqa0OuVAYHn/TCzmQ2xmnhZ1pvDLbs6TplpOmlki7vFfe+aSt5SU9gwfOQ==", - "dependencies": { - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/shape": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/image-list/-/image-list-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-Rcj3q7Tp7Nwbe5ht6ptTc3zqK8TSDJHaPDBf+kzi0kkh6MAB4qoHPgn+HnA+zIZ79CScU56bN7zjA6XYaZvsLw==", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/layout-grid": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/layout-grid/-/layout-grid-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-5GqmT6oTZhUGWIb+CLD0ZNyDyTiJsr/rm9oRIi3+vCujACwxFkON9tzBlZohdtFS16nuzUusthN6Jt9UrJcN6Q==", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/layout-grid/-/layout-grid-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-bkfxZuVzgtjEJgR3n8pvDQbe88ffULDJ5d2DF34IR8SOiRmQcj7UzqAt95XwIUcWlfisLCoIryP4U8XSpFb1EQ==", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/@material/line-ripple": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/line-ripple/-/line-ripple-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-8S30WXEuUdgDdBulzUDlPXD6qMzwCX9SxYb5mGDYLwl199cpSGdXHtGgEcCjokvnpLhdZhcT1Dsxeo1g2Evh5Q==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/line-ripple/-/line-ripple-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-20WmwRrejmtOdI37+959UqEVIjbMtAXlkDOkfCIA3OUhp+oZSjVkCqKxI16jxxVlnzJ353fy8xeSKzOHe4sExQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/linear-progress": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/linear-progress/-/linear-progress-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-6EJpjrz6aoH2/gXLg9iMe0yF2C42hpQyZoHpmcgTLKeci85ktDvJIjwup8tnk8ULQyFiGiIrhXw2v2RSsiFjvQ==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/progress-indicator": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/linear-progress/-/linear-progress-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-IcCd4476pXHloTYadHDJ+2c2lntoVigeNnQEiD/ASQTKqKrJqkIdvvczFm9Ryu+V2+TKhp7vvQGFLUMaLPcmhw==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/progress-indicator": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/list": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/list/-/list-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-TQ1ppqiCMQj/P7bGD4edbIIv4goczZUoiUAaPq/feb1dflvrFMzYqJ7tQRRCyBL8nRhJoI2x99tk8Q2RXvlGUQ==", - "dependencies": { - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/density": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/shape": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", - "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/list/-/list-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-4H5dKIjCUGIPmKjfcegV0SBybD5NNdHp26OU6sovvWIvxSGQtDJr6z9I7i+0vF/HIS5ScbHD2+9/txtL80iqCA==", + "dependencies": { + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/density": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/menu": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/menu/-/menu-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-IlAh61xzrzxXs38QZlt74UYt8J431zGznSzDtB1Fqs6YFNd11QPKoiRXn1J2Qu/lUxbFV7i8NBKMCKtia0n6/Q==", - "dependencies": { - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/list": "15.0.0-canary.bc9ae6c9c.0", - "@material/menu-surface": "15.0.0-canary.bc9ae6c9c.0", - "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/shape": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/menu/-/menu-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-2HOHQAIdWQtXjSvEIrW3lnbcIwFf5XaQhFzCEZ04FcSGApc4iLwsmRFVW3PzWx+mVrUrEfO/K42DVULIX9J1Pg==", + "dependencies": { + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/list": "15.0.0-canary.a246a4439.0", + "@material/menu-surface": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/menu-surface": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/menu-surface/-/menu-surface-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-dMtSPN+olTWE+08M5qe4ea1IZOhVryYqzK0Gyb2u1G75rSArUxCOB5rr6OC/ST3Mq3RS6zGuYo7srZt4534K9Q==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/shape": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/menu-surface/-/menu-surface-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-4h4wZ0Rs7qBg1Otldw8ljp+LCULNL42pqbqcTXhKAkJM7pHcSw4k7IfoThSRLU3+V8T3/+qiAXyeQix2OGHzwg==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/notched-outline": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/notched-outline/-/notched-outline-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-WuurMg44xexkvLTBTnsO0A+qnzFjpcPdvgWBGstBepYozsvSF9zJGdb1x7Zv1MmqbpYh/Ohnuxtb/Y3jOh6irg==", - "dependencies": { - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/floating-label": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/shape": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/notched-outline/-/notched-outline-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-zmRZHJ+5cOWsBatRyK50wuht78olXySyKOJIIEmy8lxSMZefI1764u0mr8tS1KYF8vSAl5cUlwCC3/2Njz1FPg==", + "dependencies": { + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/floating-label": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/progress-indicator": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/progress-indicator/-/progress-indicator-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-uOnsvqw5F2fkeTnTl4MrYzjI7KCLmmLyZaM0cgLNuLsWVlddQE+SGMl28tENx7DUK3HebWq0FxCP8f25LuDD+w==", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/progress-indicator/-/progress-indicator-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-92HM5niUnqG5Y3M/xkscBD+2lkaWPDcIRPo0RHPYcyldL+EhWRv/sdQpfdiXw/h3uvKSowKxBMCHm8krAyf+sQ==", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/@material/radio": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/radio/-/radio-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-ehzOK+U1IxQN+OQjgD2lsnf1t7t7RAwQzeO6Czkiuid29ookYbQynWuLWk7NW8H8ohl7lnmfqTP1xSNkkL/F0g==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/density": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/focus-ring": "15.0.0-canary.bc9ae6c9c.0", - "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/touch-target": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/radio/-/radio-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-on8EVztWXc/ajcaowFZ31ClGADYxQrhj4ulMne0NxdHHWQ44ttf5aXOVqtv5mxeOzrRACOkQyTUXBG07yTWCEQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/density": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/focus-ring": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/touch-target": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/ripple": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-JfLW+g3GMVDv4cruQ19+HUxpKVdWCldFlIPw1UYezz2h3WTNDy05S3uP2zUdXzZ01C3dkBFviv4nqZ0GCT16MA==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-Vl615/PIBpBD+IOI9Xypz0SV3RsmYJYSNx890Rih7irhUOaPsOUBmTYOWF5AsGBynqLcXoTNVhK92drYLKtJwQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/rtl": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/rtl/-/rtl-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-SkKLNLFp5QtG7/JEFg9R92qq4MzTcZ5As6sWbH7rRg6ahTHoJEuqE+pOb9Vrtbj84k5gtX+vCYPvCILtSlr2uw==", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/rtl/-/rtl-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-pgJFw8ZRpWGpwv7ZuBTJ+WdNmFBKoLVoMbbxKQWTHXVwhAqn3aoIq95o62T5QeEG/+sguNShdquG45CpAMmSRw==", "dependencies": { - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/segmented-button": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/segmented-button/-/segmented-button-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-YDwkCWP9l5mIZJ7pZJZ2hMDxfBlIGVJ+deNzr8O+Z7/xC5LGXbl4R5aPtUVHygvXAXxpf5096ZD+dSXzYzvWlw==", - "dependencies": { - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/touch-target": "15.0.0-canary.bc9ae6c9c.0", - "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/segmented-button/-/segmented-button-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-oqGHs2C7C+yJW/xZf/wP8jBGLs6HcerhM3CsorLAEMH3MGuIlVC17WcisBewEWucsILYEWbySXy/7T4h6/psZA==", + "dependencies": { + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/touch-target": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/select": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/select/-/select-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-unfOWVf7T0sixVG+3k3RTuATfzqvCF6QAzA6J9rlCh/Tq4HuIBNDdV4z19IVu4zwmgWYxY0iSvqWUvdJJYwakQ==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/density": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/floating-label": "15.0.0-canary.bc9ae6c9c.0", - "@material/line-ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/list": "15.0.0-canary.bc9ae6c9c.0", - "@material/menu": "15.0.0-canary.bc9ae6c9c.0", - "@material/menu-surface": "15.0.0-canary.bc9ae6c9c.0", - "@material/notched-outline": "15.0.0-canary.bc9ae6c9c.0", - "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/shape": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", - "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/select/-/select-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-odoNLiVOgdwbEeePkjHtlr43pjskDwyO8hi4z3jcud1Rg1czk5zoJ2mUI0+olOJjBQ26PGocwrSLqf3qaThbIA==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/density": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/floating-label": "15.0.0-canary.a246a4439.0", + "@material/line-ripple": "15.0.0-canary.a246a4439.0", + "@material/list": "15.0.0-canary.a246a4439.0", + "@material/menu": "15.0.0-canary.a246a4439.0", + "@material/menu-surface": "15.0.0-canary.a246a4439.0", + "@material/notched-outline": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/shape": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/shape/-/shape-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-Dsvr771ZKC46ODzoixLdGwlLEQLfxfLrtnRojXABoZf5G3o9KtJU+J+5Ld5aa960OAsCzzANuaub4iR88b1guA==", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/shape/-/shape-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-rcWPlCoHyP79ozeEKk73KWt9WTWdh6R68+n75l08TSTvnWZB5RRTmsI9BMkz55O9OJD/8H8ZsOxBe4x2QXUT7w==", "dependencies": { - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/slider": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/slider/-/slider-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-3AEu+7PwW4DSNLndue47dh2u7ga4hDJRYmuu7wnJCIWJBnLCkp6C92kNc4Rj5iQY2ftJio5aj1gqryluh5tlYg==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", - "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/slider/-/slider-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-is1BSBpxaXBBv+wSVpe9WGWmWl59yJEeDNubTES2UFD0er3BmA+PdKkL09vvytDnBcbKf77TbxaRiUSGVaKUQA==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/snackbar": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/snackbar/-/snackbar-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-TwwQSYxfGK6mc03/rdDamycND6o+1p61WNd7ElZv1F1CLxB4ihRjbCoH7Qo+oVDaP8CTpjeclka+24RLhQq0mA==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/button": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/icon-button": "15.0.0-canary.bc9ae6c9c.0", - "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/shape": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", - "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/snackbar/-/snackbar-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-2NAtC1qozR/uajszZnPy08Ej8HNnpgvCjNCBerDN4SLH2Q0/aWrVrUjqRCp2ayAvsX+szoroGbCboMhaWRzDuQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/button": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/icon-button": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/switch": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/switch/-/switch-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-OjUjtT0kRz1ASAsOS+dNzwMwvsjmqy5edK57692qmrP6bL4GblFfBDoiNJ6t0AN4OaKcmL5Hy/xNrTdOZW7Qqw==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/density": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/focus-ring": "15.0.0-canary.bc9ae6c9c.0", - "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/shape": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/switch/-/switch-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-o0wcbYgm2yRs4een5uxT4RJnJ003DxXe33rk8vTBG2o7cdiSR3X7GJQxeIK3D9wPgWCAwBLhNYSzXrlTL5pkMw==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/density": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/focus-ring": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", "safevalues": "^0.3.4", "tslib": "^2.1.0" } }, "node_modules/@material/tab": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/tab/-/tab-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-s/L9otAwn/pZwVQZBRQJmPqYeNbjoEbzbjMpDQf/VBG/6dJ+aP03ilIBEkqo8NVnCoChqcdtVCoDNRtbU+yp6w==", - "dependencies": { - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/focus-ring": "15.0.0-canary.bc9ae6c9c.0", - "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/tab-indicator": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", - "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/tab/-/tab-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-HGLK774uMeLnhbjDJBOjft7S6SurZnKb+6Und88OMDUVUEG6MkFBAKQQr09iBIeLE2sUAiGQhBVQtb7LJKwolQ==", + "dependencies": { + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/focus-ring": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/tab-indicator": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/tab-bar": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/tab-bar/-/tab-bar-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-Xmtq0wJGfu5k+zQeFeNsr4bUKv7L+feCmUp/gsapJ655LQKMXOUQZtSv9ZqWOfrCMy55hoF1CzGFV+oN3tyWWQ==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/density": "15.0.0-canary.bc9ae6c9c.0", - "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/tab": "15.0.0-canary.bc9ae6c9c.0", - "@material/tab-indicator": "15.0.0-canary.bc9ae6c9c.0", - "@material/tab-scroller": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", - "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/tab-bar/-/tab-bar-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-dMQb1vXsBchQXcjbwgJZIGqTZHngm+3QGSOSb4LWjqHIgC5+w2RRrHsIAjNTyRhKssJ9nKKrbpM/Yz5vTPWH6w==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/density": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/tab": "15.0.0-canary.a246a4439.0", + "@material/tab-indicator": "15.0.0-canary.a246a4439.0", + "@material/tab-scroller": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/tab-indicator": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/tab-indicator/-/tab-indicator-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-despCJYi1GrDDq7F2hvLQkObHnSLZPPDxnOzU16zJ6FNYvIdszgfzn2HgAZ6pl5hLOexQ8cla6cAqjTDuaJBhQ==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/tab-indicator/-/tab-indicator-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-gG2BgHT+ggKnUOaT8LjmH/+9nknRLh8v9qemrhUkDuCtZ8inlaC33OVbbxfrpQW3J+UzBh5YCUSC+2KrN39uUA==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/tab-scroller": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/tab-scroller/-/tab-scroller-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-QWHG/EWxirj4V9u2IHz+OSY9XCWrnNrPnNgEufxAJVUKV/A8ma1DYeFSQqxhX709R8wKGdycJksg0Flkl7Gq7w==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/tab": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/tab-scroller/-/tab-scroller-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-6KvBpalc4SwLbHFm0rnuIE64VffUj7AKhnPc+mqM6VmxOvDzQ/ZSYga0rWlUfM4mCDFX3ZkSxim+iNzVF+Ejaw==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/tab": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/textfield": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/textfield/-/textfield-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-R3qRex9kCaZIAK8DuxPnVC42R0OaW7AB7fsFknDKeTeVQvRcbnV8E+iWSdqTiGdsi6QQHifX8idUrXw+O45zPw==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/density": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/floating-label": "15.0.0-canary.bc9ae6c9c.0", - "@material/line-ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/notched-outline": "15.0.0-canary.bc9ae6c9c.0", - "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/shape": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", - "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/textfield/-/textfield-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-4BW5bUERPlIeiPnLSby21h1/xDmySuAG9Ucn1LM801a0+5mK3IwWb8031AP3filKZZqTx5JJvOJYZd6/OWBJVA==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/density": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/floating-label": "15.0.0-canary.a246a4439.0", + "@material/line-ripple": "15.0.0-canary.a246a4439.0", + "@material/notched-outline": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/theme": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/theme/-/theme-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-CpUwXGE0dbhxQ45Hu9r9wbJtO/MAlv5ER4tBHA9tp/K+SU+lDgurBE2touFMg5INmdfVNtdumxb0nPPLaNQcUg==", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/theme/-/theme-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-HWxC5Nhz8JZKTLTVmAsNxIGB3Kzr53+YFMg327S8/XuEDmI0RFHFvtwM9rADmyrHFBmUaVhV4iELyxFdi67c9w==", "dependencies": { - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/tokens": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/tokens/-/tokens-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-nbEuGj05txWz6ZMUanpM47SaAD7soyjKILR+XwDell9Zg3bGhsnexCNXPEz2fD+YgomS+jM5XmIcaJJHg/H93Q==", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/tokens/-/tokens-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-+5iGfQ51YSb0Qau8uC6/jHXCSC3enKaQKDf/iPHfuXAe04UznW3tmm1/Ju227aZXNISTJcnQYa2rpm1M14MeUg==", "dependencies": { - "@material/elevation": "15.0.0-canary.bc9ae6c9c.0" + "@material/elevation": "15.0.0-canary.a246a4439.0" } }, "node_modules/@material/tooltip": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/tooltip/-/tooltip-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-UzuXp0b9NuWuYLYpPguxrjbJnCmT/Cco8CkjI/6JajxaeA3o2XEBbQfRMTq8PTafuBjCHTc0b0mQY7rtxUp1Gg==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/button": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/shape": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", - "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/tooltip/-/tooltip-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-Ja2Z4aZQkYWD6InXA+MG4M9zdKR6dYsXXlYzQppYpfcQzXylZqh5Y7WBLulG5fA2o83pHVwILfwFZM7j7ht08Q==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/button": "15.0.0-canary.a246a4439.0", + "@material/dom": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/tokens": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", "safevalues": "^0.3.4", "tslib": "^2.1.0" } }, "node_modules/@material/top-app-bar": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/top-app-bar/-/top-app-bar-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-vJWjsvqtdSD5+yQ/9vgoBtBSCvPJ5uF/DVssv8Hdhgs1PYaAcODUi77kdi0+sy/TaWyOsTkQixqmwnFS16zesA==", - "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", - "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/shape": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/top-app-bar/-/top-app-bar-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-twQchmCa1In/FFrALPYojgeM8vmV7KH96wRY9NmPSJ046ANgPCicLBgLuSzrLETCFqAwbztqzxSG4xMBL81rYg==", + "dependencies": { + "@material/animation": "15.0.0-canary.a246a4439.0", + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/elevation": "15.0.0-canary.a246a4439.0", + "@material/ripple": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/shape": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", + "@material/typography": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/touch-target": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/touch-target/-/touch-target-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-AqYh9fjt+tv4ZE0C6MeYHblS2H+XwLbDl2mtyrK0DOEnCVQk5/l5ImKDfhrUdFWHvS4a5nBM4AA+sa7KaroLoA==", - "dependencies": { - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/touch-target/-/touch-target-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-ubyD1TUjZnRPEdDnk6Lrcm2ZsjnU7CV5y7IX8pj9IPawiM6bx4FkjZBxUvclbv3WiTGk5UOnwPOySYAJYAMQ1w==", + "dependencies": { + "@material/base": "15.0.0-canary.a246a4439.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/rtl": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, "node_modules/@material/typography": { - "version": "15.0.0-canary.bc9ae6c9c.0", - "resolved": "https://registry.npmjs.org/@material/typography/-/typography-15.0.0-canary.bc9ae6c9c.0.tgz", - "integrity": "sha512-CKsG1zyv34AKPNyZC8olER2OdPII64iR2SzQjpqh1UUvmIFiMPk23LvQ1OnC5aCB14pOXzmVgvJt31r9eNdZ6Q==", + "version": "15.0.0-canary.a246a4439.0", + "resolved": "https://registry.npmjs.org/@material/typography/-/typography-15.0.0-canary.a246a4439.0.tgz", + "integrity": "sha512-eXzBl9ROzWZ+41nan5pCrn1C/Zq3o/VsrLFaGv8fdRmhRR6/wHMeuvCCwGf5VtEmWdAE9FpJzRU/4ZPiJCJUyg==", "dependencies": { - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.a246a4439.0", + "@material/theme": "15.0.0-canary.a246a4439.0", "tslib": "^2.1.0" } }, @@ -5150,63 +4599,63 @@ } }, "node_modules/@ngneat/elf-entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@ngneat/elf-entities/-/elf-entities-4.5.0.tgz", - "integrity": "sha512-G07vPNeZoe16GMPOPDMKaFQXN16aRG+EqQy7MNMHewoXGq1cHRpwKENEcKrF0lhjSX6EafdNWhTDQSCyWZyr6A==" + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@ngneat/elf-entities/-/elf-entities-4.6.0.tgz", + "integrity": "sha512-J8tkdyiGKatNZ8KewgIiaZqh2ypgPM9OM8ZufT/jyClIqv6OJj0ajmoHSOJ4r4JFk+nwXAih74oe/D5ifZD9/w==" }, "node_modules/@ngrx/store": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-16.0.1.tgz", - "integrity": "sha512-KkYzF3j29qKOzHcmiArRJgT+ABLqbddj1DuxerNq3A8zWnTDdC4YgNpDOKru8hQWb3pQ77ZbglLati5K9F8HnQ==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-17.0.0.tgz", + "integrity": "sha512-jIK4r3IUKPjHmhfgnUYrN7eie+NdFfPNArUQiL+NeiEeuomsYWaUF6PwiRSnRCqbZhRMvqPWiIWcd0/ql5YJlg==", "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { - "@angular/core": "^16.0.0", + "@angular/core": "^17.0.0", "rxjs": "^6.5.3 || ^7.5.0" } }, "node_modules/@ngrx/store-devtools": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-16.0.1.tgz", - "integrity": "sha512-fOk/etV2ldgPgy3BD7v0yK4ocsxNUx7iktjMOVSvfPY/eg6KsfUy0ObQ2/kJasan32wN9rADCVRD6PzLg1Zo8g==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-17.0.0.tgz", + "integrity": "sha512-DAi0ABROSUks+T3vhbuzHKmACG5NbbcepfibOsgw6R6btbITW4fT3fXepXOmsymXJRO5dmYv6sSM3PDjV8WF0A==", "dev": true, "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { - "@ngrx/store": "16.0.1", + "@ngrx/store": "17.0.0", "rxjs": "^6.5.3 || ^7.5.0" } }, "node_modules/@ngtools/webpack": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.2.tgz", - "integrity": "sha512-BDZ2yyXdzVE8kILOM0lhRpmKlvfLMluuZvqVa1r5dHkjCLbyOo1jXoYTCXvrQ2JU5GXc/MBBLXwmIHgtPWk8/A==", + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.0.3.tgz", + "integrity": "sha512-H39WQ/tM6kOErfiyU6QkPasMtuOZHbm6INkirSR3ol4e93o6gLJ0ptwg3IQlyGtZK2QexWagPC6jzsdGIaN3iw==", "engines": { - "node": "^16.14.0 || >=18.10.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "peerDependencies": { - "@angular/compiler-cli": "^16.0.0", - "typescript": ">=4.9.3 <5.2", + "@angular/compiler-cli": "^17.0.0", + "typescript": ">=5.2 <5.3", "webpack": "^5.54.0" } }, "node_modules/@ngxs/store": { - "version": "3.8.0-dev.master-9a3af36", - "resolved": "https://registry.npmjs.org/@ngxs/store/-/store-3.8.0-dev.master-9a3af36.tgz", - "integrity": "sha512-RisDzHZuQcn/ETY8t6ofAFW+O6m1vrrRIoXIJrHJPU8a4o4AAAqct94o3kBCS4T3m+cmDP8UjhH7BjwRweY2Gw==", + "version": "3.8.1-dev.master-783234c", + "resolved": "https://registry.npmjs.org/@ngxs/store/-/store-3.8.1-dev.master-783234c.tgz", + "integrity": "sha512-s/doRYwxv+Nu4erEMgoVWn2j5FNCY+QTKmwYMKTYJSEHxwVJTRvCOewrpO5Sqe1WmkTHw3eIn9CVWD+PkG/emw==", "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.3.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/ngxs" }, "peerDependencies": { - "@angular/core": ">=12.0.0 <17.0.0", + "@angular/core": ">=12.0.0 <18.0.0", "rxjs": ">=6.5.5" } }, @@ -5242,6 +4691,44 @@ "node": ">= 8" } }, + "node_modules/@npmcli/agent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.0.tgz", + "integrity": "sha512-2yThA1Es98orMkpSLVqlDZAMPK3jHJhifP2gnNUdk1754uZ8yI5c+ulCoVG+WlntQA6MzhrURMXjSd9Z7dJ2/Q==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/agent/node_modules/http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, "node_modules/@npmcli/fs": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", @@ -5255,46 +4742,55 @@ } }, "node_modules/@npmcli/git": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", - "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.3.tgz", + "integrity": "sha512-UZp9NwK+AynTrKvHn5k3KviW/hA5eENmFsu3iAPe7sWRt0lFUdsY/wXIYjpDFe7cdSNwOIzbObfwgt6eL5/2zw==", "dev": true, "dependencies": { - "@npmcli/promise-spawn": "^6.0.0", - "lru-cache": "^7.4.4", - "npm-pick-manifest": "^8.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", "proc-log": "^3.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", - "which": "^3.0.0" + "which": "^4.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" } }, "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", "dev": true, "engines": { - "node": ">=12" + "node": "14 || >=16.14" } }, "node_modules/@npmcli/git/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, "dependencies": { - "isexe": "^2.0.0" + "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/installed-package-contents": { @@ -5323,129 +4819,147 @@ } }, "node_modules/@npmcli/promise-spawn": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", - "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.0.tgz", + "integrity": "sha512-wBqcGsMELZna0jDblGd7UXgOby45TQaMWmbFwWX+SEotk4HV6zG2t6rT9siyLhPk4P6YYqgfL1UO8nMWDBVJXQ==", "dev": true, "dependencies": { - "which": "^3.0.0" + "which": "^4.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" } }, "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, "dependencies": { - "isexe": "^2.0.0" + "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/run-script": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", - "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.2.tgz", + "integrity": "sha512-Omu0rpA8WXvcGeY6DDzyRoY1i5DkCBkzyJ+m2u7PD6quzb0TvSqdIPOkTn8ZBOj7LbbcbMfZ3c5skwSu6m8y2w==", "dev": true, "dependencies": { "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^6.0.0", - "node-gyp": "^9.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "node-gyp": "^10.0.0", "read-package-json-fast": "^3.0.0", - "which": "^3.0.0" + "which": "^4.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" } }, "node_modules/@npmcli/run-script/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, "dependencies": { - "isexe": "^2.0.0" + "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.13.0 || >=18.0.0" } }, "node_modules/@nrwl/angular": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nrwl/angular/-/angular-17.0.2.tgz", - "integrity": "sha512-GheVvG6IiOWfJySLvJY8JMf+O9vaM5KDn4eWaFvT5Vx41UCk1/h36ePlWiOA5Is9wboKCBbijzc9TgW/F3QkiA==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nrwl/angular/-/angular-17.1.3.tgz", + "integrity": "sha512-XiX9elBPupdJ4nDIOzgUYowfoHU1uBkzfzeCZazEkZiN6lGEhKTfQE4bw9YZDCnVJr0wKz7i0vPMownVmU6SgA==", "dependencies": { - "@nx/angular": "17.0.2", + "@nx/angular": "17.1.3", "tslib": "^2.3.0" } }, "node_modules/@nrwl/cypress": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nrwl/cypress/-/cypress-17.0.2.tgz", - "integrity": "sha512-lV3JCBtB7QZXIp3BDmnDbtUDTYt9LHgUePoEG1ohO7D+J71hsx4s8iRo6lOr+HxemlxdBmhSLJlqMTKZv4B1iQ==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nrwl/cypress/-/cypress-17.1.3.tgz", + "integrity": "sha512-USG3Z6Yi6oD+F77irKBGXaRLo6ZtNPs6jRdIRSgUzh1lJVocpFaC7bmnfygV3PSk+jOOlqEG6Lc9Y7yG21ZdGA==", "dependencies": { - "@nx/cypress": "17.0.2" + "@nx/cypress": "17.1.3" } }, "node_modules/@nrwl/devkit": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-17.0.2.tgz", - "integrity": "sha512-zgqTFYmvs80D3T/TwmR/EBdV1OU2c96YYHngAe3DX8kXhjlV3dq+VPZVBROM0AzYLGaSckW3mHBhgL+JrDp5Pg==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-17.1.3.tgz", + "integrity": "sha512-8HfIY7P3yIYfQ/XKuHoq0GGLA9GpwWtBlI9kPQ0ygjuJ9BkpiGMtQvO6003zs7c6vpc2vNeG+Jmi72+EKvoN5A==", "dependencies": { - "@nx/devkit": "17.0.2" + "@nx/devkit": "17.1.3" } }, "node_modules/@nrwl/eslint-plugin-nx": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-17.0.2.tgz", - "integrity": "sha512-kVsyHqaFgWPgCk7C+aimctq1MNnmqQEqCwmB/EC7kPYWPLvF5l7JqlTrDZAmIaCDBKIUUqJsZLO9d46vT5Z9xw==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-17.1.3.tgz", + "integrity": "sha512-UGtktnM3tfc9F+NROQi0NkowASu2QuiOE67H1B8DjOxkvNZRbFzbS6D+YyBvVGXBbcMWXlqM54Zv6/1dabqgbg==", "dev": true, "dependencies": { - "@nx/eslint-plugin": "17.0.2" + "@nx/eslint-plugin": "17.1.3" } }, "node_modules/@nrwl/express": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nrwl/express/-/express-17.0.2.tgz", - "integrity": "sha512-IDWsU4M4H9qe8a69+tepbpyIcYDMQ8y6JAx+0KkWXpSkrBa/dKJaA/Yr4AoMmYumTWyQNrUr0W5BbpifOhqwoA==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nrwl/express/-/express-17.1.3.tgz", + "integrity": "sha512-EjMIfSAe/QIQYD6is5KSx3m+IEOdOTaw3kV4YIamtn8NOmwe/eQ/oNV0tVWfpaGdGluedQ+NMSr4tnG2mVNhSA==", "dev": true, "dependencies": { - "@nx/express": "17.0.2" + "@nx/express": "17.1.3" } }, "node_modules/@nrwl/jest": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nrwl/jest/-/jest-17.0.2.tgz", - "integrity": "sha512-917A/kc3OvwZxi6f5LByp5/j1cByARc7t1yQx+qHW4vl4wtMPcK1Pcl619tLb+DURI/z5Zz9MQvSsdzr4F6ZWg==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nrwl/jest/-/jest-17.1.3.tgz", + "integrity": "sha512-q5nbEbhvjOuNSEQMSpoUSBwR9Q3EFR92mNT2T0wbHcWVyfp1wPtJ8NAY/d2jJF+Ekm2hu3fJCfslFE3L3riZfg==", "dependencies": { - "@nx/jest": "17.0.2" + "@nx/jest": "17.1.3" } }, "node_modules/@nrwl/js": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nrwl/js/-/js-17.0.2.tgz", - "integrity": "sha512-qHqZ6V6IP3piyzb9s7HUlcV3X2O/BDmqikg0yoZGitRpyugY5K1BNZITGRmFEzLklfHxVUqI1qsURnClgax+pA==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nrwl/js/-/js-17.1.3.tgz", + "integrity": "sha512-aUE6lK8+D37xNlRz7ZpFbUOwIU6Vb1aNVjXxaouFQ2kcirv2NdJVmUIpbK7zDE/pzC3YmdZADqG2UjpvSUAErw==", "dependencies": { - "@nx/js": "17.0.2" + "@nx/js": "17.1.3" } }, "node_modules/@nrwl/node": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nrwl/node/-/node-17.0.2.tgz", - "integrity": "sha512-G7nOcwnSV+fP/WahBo6Rl9q6uelFeCSHP5sm9UcPhMFb0TC8UeFMK4XkrqW4HA+tyHMeHzNZ92De31wHMfVfgg==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nrwl/node/-/node-17.1.3.tgz", + "integrity": "sha512-J/iIDuuLwM6NR0TIWEHXQmre9SdlkHbFtstae9nuTqATcZEBShBLYdR8I9piQT+QGMvwKIoWej5a3g21JBQhlg==", "dev": true, "dependencies": { - "@nx/node": "17.0.2" + "@nx/node": "17.1.3" } }, "node_modules/@nrwl/nx-cloud": { @@ -5458,11 +4972,11 @@ } }, "node_modules/@nrwl/tao": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-17.0.2.tgz", - "integrity": "sha512-H+htIRzQR6Ibael34rhQkpNkpFFFmaSTsIzdqkBqL4j5+FzSpZh67NJnWSY8vsYQGQL8Ncc+MHvpQC+7pyfgGw==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-17.1.3.tgz", + "integrity": "sha512-9YpfEkUpVqOweqgQvMDcWApNx4jhCqBNH5IByZj302Enp3TLnQSvhuX5Dfr8hNQRQokIpEn6tW8SGTctTM5LXw==", "dependencies": { - "nx": "17.0.2", + "nx": "17.1.3", "tslib": "^2.3.0" }, "bin": { @@ -5470,47 +4984,46 @@ } }, "node_modules/@nrwl/web": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nrwl/web/-/web-17.0.2.tgz", - "integrity": "sha512-+kSGZ0DOEl6MoWmfCtxcDlmZV/+mqY+pGS+qSB3kZGwfRkpwbv1spAPcYyfUB2wNed9js/lSRGt9sBcwWcIY0Q==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nrwl/web/-/web-17.1.3.tgz", + "integrity": "sha512-vhteqBanX/3JdwrT9F3+iMfRJ7xqcSgzWZcAOfL8DyL8UFQfN6mdAPW7S/HvwqLIsoa5vjRGq4uBo9TEqrDS/g==", "dependencies": { - "@nx/web": "17.0.2" + "@nx/web": "17.1.3" } }, "node_modules/@nrwl/webpack": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nrwl/webpack/-/webpack-17.0.2.tgz", - "integrity": "sha512-5Kx9drlEGchWDlE8x7uxRIqZEzm8TZll07NUTm++wKWukHhCZZksqojRQkRLq28iO2BFQm12boa78Ku0u3Ob4g==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nrwl/webpack/-/webpack-17.1.3.tgz", + "integrity": "sha512-8iDLTIEbqJ8hxNPRadqBmH4+GatFC1dwd8QscKMQqmeNKn2toYzX4I0EGJ289gY4fdhF45wkVhWEyTfvAwI80Q==", "dependencies": { - "@nx/webpack": "17.0.2" + "@nx/webpack": "17.1.3" } }, "node_modules/@nrwl/workspace": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nrwl/workspace/-/workspace-17.0.2.tgz", - "integrity": "sha512-ntX+cE6Gs1MOdG027MHkueyEze4yNbRy54uXhWhOCUy5gcP4eNmsrxOOccajP7tVrvAW83wrp9PXJ1wQhNWOYA==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nrwl/workspace/-/workspace-17.1.3.tgz", + "integrity": "sha512-V5nLZ58DIZLlJQASYHKo9mUcdm2FbzjJeoKwi0X3VXUvU1ftforFxNIQ7BqS0qjZJKKHjpgZ+cAH0xeVysS5kA==", "dependencies": { - "@nx/workspace": "17.0.2" + "@nx/workspace": "17.1.3" } }, "node_modules/@nx/angular": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nx/angular/-/angular-17.0.2.tgz", - "integrity": "sha512-I3C9ImpFYChIVWrXLI2cZy1uiJ6zzoHTDd+y1tuhWF+OWMoeCi/iVKyk4DWucdU2AUlpgfJWRVWqCQcMR32U1Q==", - "dependencies": { - "@nrwl/angular": "17.0.2", - "@nx/cypress": "17.0.2", - "@nx/devkit": "17.0.2", - "@nx/eslint": "17.0.2", - "@nx/jest": "17.0.2", - "@nx/js": "17.0.2", - "@nx/web": "17.0.2", - "@nx/webpack": "17.0.2", - "@nx/workspace": "17.0.2", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/angular/-/angular-17.1.3.tgz", + "integrity": "sha512-90Jtqf9vClTJ532GjFx9OeHrG7lD8lS31LcCnSWwNKW40cmcZ+W0Cbct9jf4G+vFqoKB2PY/mK5mxLgsZNmqKQ==", + "dependencies": { + "@nrwl/angular": "17.1.3", + "@nx/cypress": "17.1.3", + "@nx/devkit": "17.1.3", + "@nx/eslint": "17.1.3", + "@nx/jest": "17.1.3", + "@nx/js": "17.1.3", + "@nx/web": "17.1.3", + "@nx/webpack": "17.1.3", + "@nx/workspace": "17.1.3", "@phenomnomnominal/tsquery": "~5.0.1", - "@typescript-eslint/type-utils": "^5.36.1", + "@typescript-eslint/type-utils": "^6.9.1", "chalk": "^4.1.0", - "enquirer": "^2.3.6", "find-cache-dir": "^3.3.2", "ignore": "^5.0.4", "magic-string": "~0.30.2", @@ -5521,18 +5034,14 @@ "webpack-merge": "^5.8.0" }, "peerDependencies": { - "@angular-devkit/build-angular": ">= 14.0.0 < 17.0.0", - "@angular-devkit/core": ">= 14.0.0 < 17.0.0", - "@angular-devkit/schematics": ">= 14.0.0 < 17.0.0", - "@nguniversal/builders": ">= 14.0.0 < 17.0.0", - "@schematics/angular": ">= 14.0.0 < 17.0.0", + "@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", "rxjs": "^6.5.3 || ^7.5.0" }, "peerDependenciesMeta": { - "@nguniversal/builders": { - "optional": true - }, "esbuild": { "optional": true } @@ -5602,17 +5111,6 @@ "node": ">=10" } }, - "node_modules/@nx/angular/node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/@nx/angular/node_modules/semver": { "version": "7.5.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", @@ -5644,14 +5142,14 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/@nx/cypress": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nx/cypress/-/cypress-17.0.2.tgz", - "integrity": "sha512-lkdhz6CHaLA/ZhNnqwXBp4Mlg1eTtCO09pYYHMx43D7EPObO1XbYtm6rivWg6kDzEmz84+Jwo0RucK7loMlHqA==", - "dependencies": { - "@nrwl/cypress": "17.0.2", - "@nx/devkit": "17.0.2", - "@nx/eslint": "17.0.2", - "@nx/js": "17.0.2", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/cypress/-/cypress-17.1.3.tgz", + "integrity": "sha512-fAu92nsl0Zo8G8RwIklVYjQkr0NiQxaCDdIys2j5g7nmJIOG6kuRnxSkG7ECJCB3N0RhqZ6jpTqV/SiilPu1yw==", + "dependencies": { + "@nrwl/cypress": "17.1.3", + "@nx/devkit": "17.1.3", + "@nx/eslint": "17.1.3", + "@nx/js": "17.1.3", "@phenomnomnominal/tsquery": "~5.0.1", "detect-port": "^1.5.1", "semver": "7.5.3", @@ -5697,11 +5195,11 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/@nx/devkit": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-17.0.2.tgz", - "integrity": "sha512-gtJNrFtGZa96qAM4ijAvoCLj/LuUr+Jq91QITsYE4cvYL0qan4zGcAOBMclzpaXVN9pwpko+veDwHwnmp/SXTg==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-17.1.3.tgz", + "integrity": "sha512-1Is7ooovg3kdGJ5VdkePulRUDaMYLLULr+LwXgx7oHSW7AY2iCmhkoOE/vSR7DJ6rkey2gYx7eT1IoRoORiIaQ==", "dependencies": { - "@nrwl/devkit": "17.0.2", + "@nrwl/devkit": "17.1.3", "ejs": "^3.1.7", "enquirer": "~2.3.6", "ignore": "^5.0.4", @@ -5713,17 +5211,6 @@ "nx": ">= 16 <= 18" } }, - "node_modules/@nx/devkit/node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/@nx/devkit/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -5755,15 +5242,15 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/@nx/eslint": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-17.0.2.tgz", - "integrity": "sha512-mZXavg/m+A0GqmWORq5jNRt7ku0q9OoX2212ldivvLYI1zHHr2VFYoRxhS+NzaZBK5/EiKs/5P8dHhYb4/v7Bw==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-17.1.3.tgz", + "integrity": "sha512-AQZ67Q3JzLZxguCat7mhBfvxr4ztc97ogDj6jD40Sql8cb/eVYTf/0mszIxxPFsTNG3YBqP5Eb2saAKKxUrfMw==", "dependencies": { - "@nx/devkit": "17.0.2", - "@nx/js": "17.0.2", - "@nx/linter": "17.0.2", + "@nx/devkit": "17.1.3", + "@nx/js": "17.1.3", + "@nx/linter": "17.1.3", "tslib": "^2.3.0", - "typescript": "~5.1.3" + "typescript": "~5.2.2" }, "peerDependencies": { "eslint": "^8.0.0" @@ -5775,16 +5262,16 @@ } }, "node_modules/@nx/eslint-plugin": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nx/eslint-plugin/-/eslint-plugin-17.0.2.tgz", - "integrity": "sha512-ZI/vthG7wYG9+xA3inYnJ+XP8itMlZpIYT63SZm4h05MRYQG4MkShkrOkSWYBtT2j5b1AgSzSemkpCGuG798pQ==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/eslint-plugin/-/eslint-plugin-17.1.3.tgz", + "integrity": "sha512-SGBXiKiXifK/KZqoEvNAqIbKMYMN9f6HIZXX23dwaimGrOct+8vtQc3nJIB5QuPtBypfsVCxfoVcJVi0QaN1uw==", "dev": true, "dependencies": { - "@nrwl/eslint-plugin-nx": "17.0.2", - "@nx/devkit": "17.0.2", - "@nx/js": "17.0.2", - "@typescript-eslint/type-utils": "^5.60.1", - "@typescript-eslint/utils": "^5.60.1", + "@nrwl/eslint-plugin-nx": "17.1.3", + "@nx/devkit": "17.1.3", + "@nx/js": "17.1.3", + "@typescript-eslint/type-utils": "^6.9.1", + "@typescript-eslint/utils": "^6.9.1", "chalk": "^4.1.0", "confusing-browser-globals": "^1.0.9", "jsonc-eslint-parser": "^2.1.0", @@ -5792,7 +5279,7 @@ "tslib": "^2.3.0" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.60.1", + "@typescript-eslint/parser": "^6.9.1", "eslint-config-prettier": "^9.0.0" }, "peerDependenciesMeta": { @@ -5801,59 +5288,6 @@ } } }, - "node_modules/@nx/eslint-plugin/node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@nx/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, "node_modules/@nx/eslint-plugin/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -5903,28 +5337,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/@nx/eslint-plugin/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@nx/eslint-plugin/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/@nx/eslint-plugin/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -5980,14 +5392,14 @@ "dev": true }, "node_modules/@nx/express": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nx/express/-/express-17.0.2.tgz", - "integrity": "sha512-tmUc2rxDIkWV/vmCrFEGBzvqqO5cF/ICrpdS1PFmyusHF5WJP7tpGDGP8OeilyLWK9iqx4O/65kf35lC62LAuw==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/express/-/express-17.1.3.tgz", + "integrity": "sha512-za6UtxYcs7fCAGym1f82HggMz5AMwZR/lpIHpUS6we/YcjRl6hcXZA/CRmq1xh37dFlnKOgDsNaJ8YmP3HbIXw==", "dev": true, "dependencies": { - "@nrwl/express": "17.0.2", - "@nx/devkit": "17.0.2", - "@nx/node": "17.0.2", + "@nrwl/express": "17.1.3", + "@nx/devkit": "17.1.3", + "@nx/node": "17.1.3", "tslib": "^2.3.0" }, "peerDependencies": { @@ -6000,15 +5412,15 @@ } }, "node_modules/@nx/jest": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nx/jest/-/jest-17.0.2.tgz", - "integrity": "sha512-kpkziUOZpKsVvi5iicirX4EVwfKXaGuiv5bgzj1uiexD83tlds5ne8J2qN/K1ea5jIC+bxHzqJF5s7rF52T0cg==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/jest/-/jest-17.1.3.tgz", + "integrity": "sha512-08amXLb5GHIIE8XzJRT/RhIzJzKp8mSjzT0ymciK6lDRYbzSBoHFS8KN9xqqmtWNYVZWPMq6ySoDYGi1abIR4Q==", "dependencies": { "@jest/reporters": "^29.4.1", "@jest/test-result": "^29.4.1", - "@nrwl/jest": "17.0.2", - "@nx/devkit": "17.0.2", - "@nx/js": "17.0.2", + "@nrwl/jest": "17.1.3", + "@nx/devkit": "17.1.3", + "@nx/js": "17.1.3", "@phenomnomnominal/tsquery": "~5.0.1", "chalk": "^4.1.0", "identity-obj-proxy": "3.0.0", @@ -6084,19 +5496,20 @@ } }, "node_modules/@nx/js": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nx/js/-/js-17.0.2.tgz", - "integrity": "sha512-dYvWDd0jwNF4h4V8yjd1ZMSJ38GcpvwrDUVYGYNkZmDqYzkBvqykpY00hRLUYZspiR+iG7uWmyxItZYpCk0WyA==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/js/-/js-17.1.3.tgz", + "integrity": "sha512-FCvIjTtuVYctRJw4S+Sp0ZCPeiwNxOR++CsLciWAogO81k3k6ajMIfjn0Xmwuq/FKWK8thtjkk9MfKjTDuxFkg==", "dependencies": { "@babel/core": "^7.22.9", "@babel/plugin-proposal-decorators": "^7.22.7", + "@babel/plugin-transform-class-properties": "^7.22.5", "@babel/plugin-transform-runtime": "^7.22.9", "@babel/preset-env": "^7.22.9", "@babel/preset-typescript": "^7.22.5", "@babel/runtime": "^7.22.6", - "@nrwl/js": "17.0.2", - "@nx/devkit": "17.0.2", - "@nx/workspace": "17.0.2", + "@nrwl/js": "17.1.3", + "@nx/devkit": "17.1.3", + "@nx/workspace": "17.1.3", "@phenomnomnominal/tsquery": "~5.0.1", "babel-plugin-const-enum": "^1.0.1", "babel-plugin-macros": "^2.8.0", @@ -6195,37 +5608,15 @@ "node": ">=8" } }, - "node_modules/@nx/js/node_modules/hosted-git-info": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", - "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, "node_modules/@nx/js/node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/@nx/js/node_modules/npm-package-arg": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", - "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=10" } }, "node_modules/@nx/js/node_modules/ora": { @@ -6263,17 +5654,6 @@ "node": ">=10" } }, - "node_modules/@nx/js/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@nx/js/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -6308,31 +5688,31 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/@nx/linter": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nx/linter/-/linter-17.0.2.tgz", - "integrity": "sha512-cXCrx/qcZc53GKqOLRIPTqACdby9/plOpfQlo0BlHMOrwvkkKjzXsnoJgR6XRWdegDKVkqUWHWDAjDI3/aMshA==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/linter/-/linter-17.1.3.tgz", + "integrity": "sha512-KAeZ+kMxahQ67B2DFlikOPKILErdxRtpC3RbcHd9Oi+x0M7pGlmbBdnyP23CQplMsvYqzhTziF/W8CllYAKmCg==", "dependencies": { - "@nx/eslint": "17.0.2" + "@nx/eslint": "17.1.3" } }, "node_modules/@nx/node": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nx/node/-/node-17.0.2.tgz", - "integrity": "sha512-//FC3FuSFcMg9j6r3EucCLxJCoLUK56xfLGy6iDilW7LsEX54SB8lau0kq2ymDbBRRT/piI1s7RH+Lk777yBIw==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/node/-/node-17.1.3.tgz", + "integrity": "sha512-3L937cSGuo92oCfgV+NcYpz53nTcFpqcHnt0UXO1x1VbFst5l0qM689xwPbHWoM2VCUkcCGMIwBvWOiZ+EJdLA==", "dev": true, "dependencies": { - "@nrwl/node": "17.0.2", - "@nx/devkit": "17.0.2", - "@nx/eslint": "17.0.2", - "@nx/jest": "17.0.2", - "@nx/js": "17.0.2", + "@nrwl/node": "17.1.3", + "@nx/devkit": "17.1.3", + "@nx/eslint": "17.1.3", + "@nx/jest": "17.1.3", + "@nx/js": "17.1.3", "tslib": "^2.3.0" } }, "node_modules/@nx/nx-darwin-arm64": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-17.0.2.tgz", - "integrity": "sha512-OSZLRfV8VplYPEqMcIg3mbAsJXlXEHKrdlJ0KUTk8Hih2+wl7cxuSEwG7X7qfBUOz+ognxaqicL+hueNrgwjlQ==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-17.1.3.tgz", + "integrity": "sha512-f4qLa0y3C4uuhYKgq+MU892WaQvtvmHqrEhHINUOxYXNiLy2sgyJPW0mOZvzXtC4dPaUmiVaFP5RMVzc8Lxhtg==", "cpu": [ "arm64" ], @@ -6345,9 +5725,9 @@ } }, "node_modules/@nx/nx-darwin-x64": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-17.0.2.tgz", - "integrity": "sha512-olGt5R2dWYwdl1+I2RfJ8LdZO1elqhr9yDPnMIx//ZuN6T6wJA+Wdp2P3qpM1bY0F1lI/6AgjqzRyrTLUZ9cDA==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-17.1.3.tgz", + "integrity": "sha512-kh76ZjqkLeQUIAfTa9G/DFFf+e1sZ5ipDzk7zFGhZ2k68PoQoFdsFOO3C513JmuEdavspts6Hkifsqh61TaE+A==", "cpu": [ "x64" ], @@ -6360,9 +5740,9 @@ } }, "node_modules/@nx/nx-freebsd-x64": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-17.0.2.tgz", - "integrity": "sha512-+mta0J2G2byd+rfZ275oZs0aYXC/s92nI9ySBFQFQZnKJ6bsAagdZHe+uETsnE4xdhFXD8kvNMJU1WTGlyFyjg==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-17.1.3.tgz", + "integrity": "sha512-CRuVL5ZSLb+Gc8vwMUUe9Pl/1Z26YtXMKTahBMQh2dac63vzLgzqIV4c66aduUl1x2M0kGYBSIIRG9z0/BgWeg==", "cpu": [ "x64" ], @@ -6375,9 +5755,9 @@ } }, "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-17.0.2.tgz", - "integrity": "sha512-m80CmxHHyNAJ8j/0rkjc0hg/eGQlf6V2sLsV+gEJkz2sTEEdgSOK4DvnWcZRWO/SWBnqigxoHX4Kf5TH1nmoHA==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-17.1.3.tgz", + "integrity": "sha512-KDBmd5tSrg93g/oij/eGW4yeVNVK3DBIM4VYAS2vtkIgVOGoqcQ+SEIeMK3nMUJP9jGyblt3QNj5ZsJBtScwQw==", "cpu": [ "arm" ], @@ -6390,9 +5770,9 @@ } }, "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-17.0.2.tgz", - "integrity": "sha512-AsD1H6wt68MK1u6vkmtNaFaxDMcyuk6dpo5kq1YT9cfUd614ys3qMUjVp3P2CXxzXh+0UDZeGrc6qotNKOkpJw==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-17.1.3.tgz", + "integrity": "sha512-W2tNL/7sIwoQKLmuy68Usd6TZzIZvxZt4UE30kDwGc2RSap6RCHAvDbzSxtW+L4+deC9UxX0Tty0VuW+J8FjSg==", "cpu": [ "arm64" ], @@ -6405,9 +5785,9 @@ } }, "node_modules/@nx/nx-linux-arm64-musl": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-17.0.2.tgz", - "integrity": "sha512-f8pUFoZHBFQtHnopHgTEuwIiu0Rzem0dD7iK8SyyBy/lRAADtHCAHxaPAG+iatHAJ9h4DFIB50k9ybYxDtH2mg==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-17.1.3.tgz", + "integrity": "sha512-Oto3gkLd7yweuVUCsSHwm4JkAIbcxpPJP0ycRHI/PRHPMIOPiMX8r651QM1amMyKAbJtAe047nyb9Sh1X0FA4A==", "cpu": [ "arm64" ], @@ -6420,9 +5800,9 @@ } }, "node_modules/@nx/nx-linux-x64-gnu": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-17.0.2.tgz", - "integrity": "sha512-PISrHjLTxv5w8bz50vPZH6puYos88xu28o4IbVyYWrUrhoFsAx9Zbn1D6gWDPMSaKJU32v1l+5bTciQjQJU8fQ==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-17.1.3.tgz", + "integrity": "sha512-pJS994sa5PBPFak93RydTB9KdEmiVb3rgiSB7PDBegphERbzHEB77B7G8M5TZ62dGlMdplIEKmdhY5XNqeAf9A==", "cpu": [ "x64" ], @@ -6435,9 +5815,9 @@ } }, "node_modules/@nx/nx-linux-x64-musl": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-17.0.2.tgz", - "integrity": "sha512-2wsqyBRjsxmAjxW+0lnGFtJLTk+AxgW7gjMv8NgLK8P1bc/sJYQB+g0o5op2z+szXRG3Noi0RZ9C0fG39EPFZw==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-17.1.3.tgz", + "integrity": "sha512-4Hcx5Fg/88jV+bcTr6P0dM4unXNvKgrGJe3oK9/sgEhiW6pD2UAFjv16CCSRcWhDUAzUDqcwnD2fgg+vnAJG6g==", "cpu": [ "x64" ], @@ -6450,9 +5830,9 @@ } }, "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-17.0.2.tgz", - "integrity": "sha512-Sc3sQUcS5xdk05PABe/knG6orG5rmHZdSUj6SMRpvYfN2tM3ziNn6/wCF/LJoW6n70OxrOEXXwLSRK/5WigXbA==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-17.1.3.tgz", + "integrity": "sha512-dUasEuskmDxUL36XA0GZqSb9233suE4wKhxrMobyFBzHUZ2tq/unzOpPjYfqDBie4QIvF8tEpAjQsLds8LWgbw==", "cpu": [ "arm64" ], @@ -6465,9 +5845,9 @@ } }, "node_modules/@nx/nx-win32-x64-msvc": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-17.0.2.tgz", - "integrity": "sha512-XhET0BDk6fbvTBCs7m5gZii8+2WhLpiC1sZchJw4LAJN2VJBiy3I3xnvpQYGFOAWaCb/iUGpuN/qP/NlQ+LNgA==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-17.1.3.tgz", + "integrity": "sha512-eTuTpBHFvA5NFJh/iosmqCL4JOAjDrwXLSMgfKrZKjiApHMG1T/5Hb+PrsNpt+WnGp94ur7c4Dtx4xD5vlpAEw==", "cpu": [ "x64" ], @@ -6480,13 +5860,13 @@ } }, "node_modules/@nx/web": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nx/web/-/web-17.0.2.tgz", - "integrity": "sha512-M8bausXzgkeFlNn43uO3pxtn/1EDoIs/7xgWPoGAdqV4l4RKG0JHqeLi68tP6YVA30RSAZ7UmvKQlKo14uDp0w==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/web/-/web-17.1.3.tgz", + "integrity": "sha512-l8gXxRZKGsYJEIwYITgLjBdjlliETLK5hvs0hyHY26tuVY6mDy8zdGPfhJae1CpO4NL/hpqmGc99HLRQ1WCrAA==", "dependencies": { - "@nrwl/web": "17.0.2", - "@nx/devkit": "17.0.2", - "@nx/js": "17.0.2", + "@nrwl/web": "17.1.3", + "@nx/devkit": "17.1.3", + "@nx/js": "17.1.3", "chalk": "^4.1.0", "detect-port": "^1.5.1", "http-server": "^14.1.0", @@ -6558,14 +5938,14 @@ } }, "node_modules/@nx/webpack": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nx/webpack/-/webpack-17.0.2.tgz", - "integrity": "sha512-TnC+Cpg7MPc6vl1Vu2sVzav/F+6mhmev3tH3nCUFywTwHXrK+i/NQhuvXWEixVt+l77V4Di6VhMKfHaGryfU6Q==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/webpack/-/webpack-17.1.3.tgz", + "integrity": "sha512-dbDG+tPflrW5M2WS+SuAzHX2lSrxyQGPPCIXWXexBrlXzU/Yyy3fvJqQKeRiRV+EILjNiQXKI2A1pzGUcnuW7g==", "dependencies": { "@babel/core": "^7.22.9", - "@nrwl/webpack": "17.0.2", - "@nx/devkit": "17.0.2", - "@nx/js": "17.0.2", + "@nrwl/webpack": "17.1.3", + "@nx/devkit": "17.1.3", + "@nx/js": "17.1.3", "autoprefixer": "^10.4.9", "babel-loader": "^9.1.2", "browserslist": "^4.21.4", @@ -6743,6 +6123,31 @@ "node": ">=0.10.0" } }, + "node_modules/@nx/webpack/node_modules/less": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", + "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, "node_modules/@nx/webpack/node_modules/loader-utils": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", @@ -6756,6 +6161,28 @@ "node": ">=8.9.0" } }, + "node_modules/@nx/webpack/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@nx/webpack/node_modules/make-dir/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, "node_modules/@nx/webpack/node_modules/mini-css-extract-plugin": { "version": "2.4.7", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.4.7.tgz", @@ -6779,6 +6206,15 @@ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" }, + "node_modules/@nx/webpack/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "optional": true, + "engines": { + "node": ">=6" + } + }, "node_modules/@nx/webpack/node_modules/postcss-loader": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", @@ -6848,6 +6284,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@nx/webpack/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@nx/webpack/node_modules/source-map-loader": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", @@ -6880,15 +6325,15 @@ } }, "node_modules/@nx/workspace": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-17.0.2.tgz", - "integrity": "sha512-z2xit36dxdJuQmBDadNbbaYCKUYNk6mUWG/GEeBdgGXvFixqAUZ4lbWARlauCQS/+rEjXGOxtvn+u2d8u9mTSA==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-17.1.3.tgz", + "integrity": "sha512-Je9nml9NJZJ0Ga70njK4N8KNSP7MnlxiVlosMzBAWDGrgnW+A403nae9pstEC2uGKpce2T7jBqFewAy+3U6JbA==", "dependencies": { - "@nrwl/workspace": "17.0.2", - "@nx/devkit": "17.0.2", + "@nrwl/workspace": "17.1.3", + "@nx/devkit": "17.1.3", "chalk": "^4.1.0", "enquirer": "~2.3.6", - "nx": "17.0.2", + "nx": "17.1.3", "tslib": "^2.3.0", "yargs-parser": "21.1.1" } @@ -6938,17 +6383,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/@nx/workspace/node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/@nx/workspace/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -6989,31 +6423,81 @@ "node": ">=14" } }, + "node_modules/@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@pkgr/utils/node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pkgr/utils/node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@schematics/angular": { - "version": "16.2.8", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.8.tgz", - "integrity": "sha512-yxfxJ2IMRIt+dQcqyJR30qd/osb5NwRsi9US3gFIHP1jfjOAs1Nk8ENNd5ycYV+yykCa78KWhmbOw4G1zpR56Q==", + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.0.3.tgz", + "integrity": "sha512-pFHAqHMNm2WLoquJD4osSA/OAgH+wsFayPuqQnKjDEzeVW/YfJSbUksJ2iFt+uSfrhc/VxPf6pmGBMzi+9d0ng==", "dependencies": { - "@angular-devkit/core": "16.2.8", - "@angular-devkit/schematics": "16.2.8", + "@angular-devkit/core": "17.0.3", + "@angular-devkit/schematics": "17.0.3", "jsonc-parser": "3.2.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@sigstore/bundle": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", - "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.1.0.tgz", + "integrity": "sha512-89uOo6yh/oxaU8AeOUnVrTdVMcGk9Q1hJa7Hkvalc6G3Z3CupWk4Xe9djSgJm9fMkH69s0P0cVHUoKSOemLdng==", "dev": true, "dependencies": { - "@sigstore/protobuf-specs": "^0.2.0" + "@sigstore/protobuf-specs": "^0.2.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/@sigstore/protobuf-specs": { @@ -7026,30 +6510,30 @@ } }, "node_modules/@sigstore/sign": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz", - "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.2.0.tgz", + "integrity": "sha512-AAbmnEHDQv6CSfrWA5wXslGtzLPtAtHZleKOgxdQYvx/s76Fk6T6ZVt7w2IGV9j1UrFeBocTTQxaXG2oRrDhYA==", "dev": true, "dependencies": { - "@sigstore/bundle": "^1.1.0", - "@sigstore/protobuf-specs": "^0.2.0", - "make-fetch-happen": "^11.0.1" + "@sigstore/bundle": "^2.1.0", + "@sigstore/protobuf-specs": "^0.2.1", + "make-fetch-happen": "^13.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/@sigstore/tuf": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", - "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.2.0.tgz", + "integrity": "sha512-KKATZ5orWfqd9ZG6MN8PtCIx4eevWSuGRKQvofnWXRpyMyUEpmrzg5M5BrCpjM+NfZ0RbNGOh5tCz/P2uoRqOA==", "dev": true, "dependencies": { - "@sigstore/protobuf-specs": "^0.2.0", - "tuf-js": "^1.1.7" + "@sigstore/protobuf-specs": "^0.2.1", + "tuf-js": "^2.1.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/@sinclair/typebox": { @@ -7073,20 +6557,25 @@ "@sinonjs/commons": "^3.0.0" } }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" + }, "node_modules/@testing-library/angular": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@testing-library/angular/-/angular-14.3.0.tgz", - "integrity": "sha512-HniH9B4+u9unr3xIo0gPrFjC0MFeN83xx1JajdL6Xgalc7pebRowCVMPQHXjry1f/1hb8Eyl8uMdCy4toG+f9A==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/angular/-/angular-14.5.0.tgz", + "integrity": "sha512-aNKEdKtDrj42AaxlzT/dILLLwm8IcUu94K2uYBTpqUnVvZpowks85rPhgk3RTF7NTcnZlDeBxuoRayjy88zSkA==", "dev": true, "dependencies": { "@testing-library/dom": "^9.0.0", "tslib": "^2.3.1" }, "peerDependencies": { - "@angular/common": ">= 15.1.0 || >= 16.0.0", - "@angular/core": ">= 15.1.0 || >= 16.0.0", - "@angular/platform-browser": ">= 15.1.0 || >= 16.0.0", - "@angular/router": ">= 15.1.0 || >= 16.0.0" + "@angular/common": ">= 15.1.0 || >= 16.0.0 || >= 17.0.0", + "@angular/core": ">= 15.1.0 || >= 16.0.0 || >= 17.0.0", + "@angular/platform-browser": ">= 15.1.0 || >= 16.0.0 || >= 17.0.0", + "@angular/router": ">= 15.1.0 || >= 16.0.0 || >= 17.0.0" } }, "node_modules/@testing-library/dom": { @@ -7123,6 +6612,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/@testing-library/dom/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, "node_modules/@testing-library/dom/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -7179,11 +6677,12 @@ } }, "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "devOptional": true, "engines": { - "node": ">= 6" + "node": ">= 10" } }, "node_modules/@trysound/sax": { @@ -7215,25 +6714,25 @@ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" }, "node_modules/@tufjs/canonical-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", - "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", "dev": true, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/@tufjs/models": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", - "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.0.tgz", + "integrity": "sha512-c8nj8BaOExmZKO2DXhDfegyhSGcG9E/mPN3U13L+/PsoWm1uaGiHHjxqSHQiasDBQwDA3aHuw9+9spYAP1qvvg==", "dev": true, "dependencies": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.3" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/@tufjs/models/node_modules/brace-expansion": { @@ -7261,15 +6760,15 @@ } }, "node_modules/@types/aria-query": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.3.tgz", - "integrity": "sha512-0Z6Tr7wjKJIk4OUEjVUQMtyunLDy339vcMaj38Kpj6jM2OE1p3S4kXExKZ7a3uXQAPCoy3sbrP1wibDKaf39oA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true }, "node_modules/@types/babel__core": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.3.tgz", - "integrity": "sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -7279,86 +6778,99 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.6", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.6.tgz", - "integrity": "sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w==", + "version": "7.6.7", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", + "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.3.tgz", - "integrity": "sha512-ciwyCLeuRfxboZ4isgdNZi/tkt06m8Tw6uGbBSBgWrnnZGNXiEyM27xc/PjXGQLqlZ6ylbgHMnm7ccF9tCkOeQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.3.tgz", - "integrity": "sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw==", + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", + "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", "dependencies": { "@babel/types": "^7.20.7" } }, "node_modules/@types/body-parser": { - "version": "1.19.4", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.4.tgz", - "integrity": "sha512-N7UDG0/xiPQa2D/XrVJXjkWbpqHCd2sBaB32ggRF2l83RhPfamgKGF8gwwqyksS95qUS5ZYF9aF+lLPRlwI2UA==", + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dependencies": { "@types/connect": "*", "@types/node": "*" } }, "node_modules/@types/bonjour": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.12.tgz", - "integrity": "sha512-ky0kWSqXVxSqgqJvPIkgFkcn4C8MnRog308Ou8xBBIVo39OmUFy+jqNe0nPwLCDFxUpmT9EvT91YzOJgkDRcFg==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect": { - "version": "3.4.37", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.37.tgz", - "integrity": "sha512-zBUSRqkfZ59OcwXon4HVxhx5oWCJmc0OtBTK05M+p0dYjgN6iTwIL2T/WbsQZrEsdnwaF9cWQ+azOnpPvIqY3Q==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.2.tgz", - "integrity": "sha512-gX2j9x+NzSh4zOhnRPSdPPmTepS4DfxES0AvIFv3jGv5QyeAJf6u6dY5/BAoAJU9Qq1uTvwOku8SSC2GnCRl6Q==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" } }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/eslint": { - "version": "8.44.6", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.6.tgz", - "integrity": "sha512-P6bY56TVmX8y9J87jHNgQh43h6VVU+6H7oN7hgvivV81K2XY8qJZ5vqPy/HdUoVIelii2kChYVzQanlswPWVFw==", + "version": "8.44.7", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.7.tgz", + "integrity": "sha512-f5ORu2hcBbKei97U73mf+l9t4zTGl74IqZ0GQk4oVea/VS8tQZYkUveSYojk+frraAVYId0V2WC9O4PTNru2FQ==", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "node_modules/@types/eslint-scope": { - "version": "3.7.6", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.6.tgz", - "integrity": "sha512-zfM4ipmxVKWdxtDaJ3MP3pBurDXOCoyjvlpE3u6Qzrmw4BPbfm4/ambIeTk/r/J0iq/+2/xp0Fmt+gFvXJY2PQ==", + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, "node_modules/@types/estree": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.3.tgz", - "integrity": "sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" }, "node_modules/@types/express": { "version": "4.17.13", @@ -7372,9 +6884,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.39", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz", - "integrity": "sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ==", + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -7383,43 +6895,43 @@ } }, "node_modules/@types/graceful-fs": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.8.tgz", - "integrity": "sha512-NhRH7YzWq8WiNKVavKPBmtLYZHxNY19Hh+az28O/phfp68CF45pMFud+ZzJ8ewnxnC5smIdF3dqFeiSUQ5I+pw==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/http-errors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.3.tgz", - "integrity": "sha512-pP0P/9BnCj1OVvQR2lF41EkDG/lWWnDyA203b/4Fmi2eTyORnBtcDoKDwjWQthELrBvWkMOrvSOnZ8OVlW6tXA==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" }, "node_modules/@types/http-proxy": { - "version": "1.17.13", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.13.tgz", - "integrity": "sha512-GkhdWcMNiR5QSQRYnJ+/oXzu0+7JJEPC8vkWXK351BkhjraZF+1W13CUYARUvX9+NqIU2n6YHA4iwywsc/M6Sw==", + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-zONci81DZYCZjiLe0r6equvZut0b+dBRPBN5kBDjsONnutYNtJMoWQ9uR2RkL1gLG9NMTzvf+29e5RFfPbeKhQ==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==" }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.2.tgz", - "integrity": "sha512-8toY6FgdltSdONav1XtUHl4LN1yTmLza+EuDazb/fEmRNCwjyqNVIQWs2IfC74IqjHkREs/nQ2FWq5kZU9IC0w==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.3.tgz", - "integrity": "sha512-1nESsePMBlf0RPRffLZi5ujYh7IH1BWL4y9pr+Bn3cJBdxz+RTP8bUFljLz9HvzhhOSWKdyBZ4DIivdL6rvgZg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dependencies": { "@types/istanbul-lib-report": "*" } @@ -7478,14 +6990,14 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", - "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==" + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "node_modules/@types/mime": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.4.tgz", - "integrity": "sha512-1Gjee59G25MrQGk8bsNvC6fxNiRgUlGn2wlhGf95a59DrprnnHk80FIMMFG9XHMdrfsuA119ht06QPDXA1Z7tw==" + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" }, "node_modules/@types/node": { "version": "18.7.1", @@ -7493,27 +7005,27 @@ "integrity": "sha512-GKX1Qnqxo4S+Z/+Z8KKPLpH282LD7jLHWJcVryOflnsnH+BtSDfieR6ObwBMwpnNws0bUK8GI7z0unQf9bARNQ==" }, "node_modules/@types/node-forge": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.8.tgz", - "integrity": "sha512-vGXshY9vim9CJjrpcS5raqSjEfKlJcWy2HNdgUasR66fAnVEYarrf1ULV4nfvpC1nZq/moA9qyqBcu83x+Jlrg==", + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.10.tgz", + "integrity": "sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/parse-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.1.tgz", - "integrity": "sha512-3YmXzzPAdOTVljVMkTMBdBEvlOLg2cDQaDhnnhT3nT9uDbnJzjWhKlzb+desT12Y7tGqaN6d+AbozcKzyL36Ng==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" }, "node_modules/@types/qs": { - "version": "6.9.9", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.9.tgz", - "integrity": "sha512-wYLxw35euwqGvTDx6zfY1vokBFnsK0HNrzc6xNHchxfO2hpuRg74GbkEW7e3sSmPvj0TjCDT1VCa6OtHXnubsg==" + "version": "6.9.10", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz", + "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==" }, "node_modules/@types/range-parser": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.6.tgz", - "integrity": "sha512-+0autS93xyXizIYiyL02FCY8N+KkKPhILhcUSA276HxzreZ16kl+cmwvV2qAM/PuCCwPXzOXOWhiPcw20uSFcA==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" }, "node_modules/@types/retry": { "version": "0.12.0", @@ -7521,31 +7033,31 @@ "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, "node_modules/@types/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==" + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==" }, "node_modules/@types/send": { - "version": "0.17.3", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.3.tgz", - "integrity": "sha512-/7fKxvKUoETxjFUsuFlPB9YndePpxxRAOfGC/yJdc9kTjTeP5kRCTzfnE8kPUKCeyiyIZu0YQ76s50hCedI1ug==", + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dependencies": { "@types/mime": "^1", "@types/node": "*" } }, "node_modules/@types/serve-index": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.3.tgz", - "integrity": "sha512-4KG+yMEuvDPRrYq5fyVm/I2uqAJSAwZK9VSa+Zf+zUq9/oxSSvy3kkIqyL+jjStv6UCVi8/Aho0NHtB1Fwosrg==", + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "dependencies": { "@types/express": "*" } }, "node_modules/@types/serve-static": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.4.tgz", - "integrity": "sha512-aqqNfs1XTF0HDrFdlY//+SGUxmdSUbjeRXb5iaZc3x0/vMbYmdw9qvOgHWOyyLFxSSRnUuP5+724zBgfw8/WAw==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", "dependencies": { "@types/http-errors": "*", "@types/mime": "*", @@ -7559,55 +7071,55 @@ "devOptional": true }, "node_modules/@types/sizzle": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.5.tgz", - "integrity": "sha512-tAe4Q+OLFOA/AMD+0lq8ovp8t3ysxAOeaScnfNdZpUxaGl51ZMDEITxkvFl1STudQ58mz6gzVGl9VhMKhwRnZQ==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz", + "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==", "devOptional": true }, "node_modules/@types/sockjs": { - "version": "0.3.35", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.35.tgz", - "integrity": "sha512-tIF57KB+ZvOBpAQwSaACfEu7htponHXaFzP7RfKYgsOS0NoYnn+9+jzp7bbq4fWerizI3dTB4NfAZoyeQKWJLw==", + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/stack-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.2.tgz", - "integrity": "sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==" }, "node_modules/@types/tough-cookie": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.4.tgz", - "integrity": "sha512-95Sfz4nvMAb0Nl9DTxN3j64adfwfbBPEYq14VN7zT5J5O2M9V6iZMIIQU1U+pJyl9agHYHNCqhCXgyEtIRRa5A==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", "devOptional": true }, "node_modules/@types/ws": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.8.tgz", - "integrity": "sha512-flUksGIQCnJd6sZ1l5dqCEG/ksaoAg/eUwiLAGTJQcfgvZJKF++Ta4bJA6A5aPSJmsr+xlseHn4KLgVlNnvPTg==", + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { - "version": "17.0.29", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.29.tgz", - "integrity": "sha512-nacjqA3ee9zRF/++a3FUY1suHTFKZeHba2n8WeDw9cCVdmzmHpIxyzOJBcpHvvEmS8E9KqWlSnWHUkOrkhWcvA==", + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.2.tgz", - "integrity": "sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw==" + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" }, "node_modules/@types/yauzl": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.2.tgz", - "integrity": "sha512-Km7XAtUIduROw7QPgvcft0lIupeG8a8rdKL8RiSyKvlE7dYY31fEn41HVuQsRFDuROA8tA4K2UVL+WdfFmErBA==", + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, "optional": true, "dependencies": { @@ -7615,32 +7127,33 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.12.0.tgz", + "integrity": "sha512-XOpZ3IyJUIV1b15M7HVOpgQxPPF7lGXgsfcEIu3yDxFPaf/xZKt7s9QO/pbk7vpWQyVulpJbu4E5LwpZiQo4kA==", "dev": true, "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.12.0", + "@typescript-eslint/type-utils": "6.12.0", + "@typescript-eslint/utils": "6.12.0", + "@typescript-eslint/visitor-keys": "6.12.0", "debug": "^4.3.4", "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -7649,25 +7162,25 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.12.0.tgz", + "integrity": "sha512-WWmRXxhm1X8Wlquj+MhsAG4dU/Blvf1xDgGaYCzfvStP2NwPQh6KBvCDbiOEvaE0filhranjIlK/2fSTVwtBng==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@typescript-eslint/typescript-estree": "6.12.0", + "@typescript-eslint/utils": "6.12.0", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -7676,73 +7189,51 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.12.0.tgz", + "integrity": "sha512-LywPm8h3tGEbgfyjYnu3dauZ0U7R60m+miXgKcZS8c7QALO9uWJdvNoP+duKTk2XMWc7/Q3d/QiCuLN9X6SWyQ==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.12.0", + "@typescript-eslint/types": "6.12.0", + "@typescript-eslint/typescript-estree": "6.12.0", + "semver": "^7.5.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" + "eslint": "^7.0.0 || ^8.0.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.12.0.tgz", + "integrity": "sha512-s8/jNFPKPNRmXEnNXfuo1gemBdVmpQsK1pcu+QIvuNJuhFzGrpD7WjOcvDc/+uEdfzSYpNu7U/+MmbScjoQ6vg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/scope-manager": "6.12.0", + "@typescript-eslint/types": "6.12.0", + "@typescript-eslint/typescript-estree": "6.12.0", + "@typescript-eslint/visitor-keys": "6.12.0", "debug": "^4.3.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -7751,16 +7242,16 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.12.0.tgz", + "integrity": "sha512-5gUvjg+XdSj8pcetdL9eXJzQNTl3RD7LgUiYTl8Aabdi8hFkaGSYnaS6BLc0BGNaDH+tVzVwmKtWvu0jLgWVbw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@typescript-eslint/types": "6.12.0", + "@typescript-eslint/visitor-keys": "6.12.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -7768,24 +7259,24 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.2.tgz", - "integrity": "sha512-b1LS2phBOsEy/T381bxkkywfQXkV1dWda/z0PhnIy3bC5+rQWQDS7fk9CSpcXBccPY27Z6vBEuaPBCKCgYezyQ==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.10.0.tgz", + "integrity": "sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg==", "dependencies": { - "@typescript-eslint/typescript-estree": "5.59.2", - "@typescript-eslint/utils": "5.59.2", + "@typescript-eslint/typescript-estree": "6.10.0", + "@typescript-eslint/utils": "6.10.0", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -7794,11 +7285,11 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "5.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.2.tgz", - "integrity": "sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.10.0.tgz", + "integrity": "sha512-36Fq1PWh9dusgo3vH7qmQAj5/AZqARky1Wi6WpINxB6SkQdY5vQoT2/7rW7uBIsPDcvvGCLi4r10p0OJ7ITAeg==", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -7806,20 +7297,20 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.2.tgz", - "integrity": "sha512-+j4SmbwVmZsQ9jEyBMgpuBD0rKwi9RxRpjX71Brr73RsYnEr3Lt5QZ624Bxphp8HUkSKfqGnPJp1kA5nl0Sh7Q==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.10.0.tgz", + "integrity": "sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg==", "dependencies": { - "@typescript-eslint/types": "5.59.2", - "@typescript-eslint/visitor-keys": "5.59.2", + "@typescript-eslint/types": "6.10.0", + "@typescript-eslint/visitor-keys": "6.10.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -7832,15 +7323,15 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.2.tgz", - "integrity": "sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.10.0.tgz", + "integrity": "sha512-xMGluxQIEtOM7bqFCo+rCMh5fqI+ZxV5RUUOa29iVPz1OgCZrtc7rFnz5cLUazlkPKYqX+75iuDq7m0HQ48nCg==", "dependencies": { - "@typescript-eslint/types": "5.59.2", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "6.10.0", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -7848,12 +7339,12 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.12.0.tgz", + "integrity": "sha512-MA16p/+WxM5JG/F3RTpRIcuOghWO30//VEOvzubM8zuOOBYXsP+IfjoCXXiIfy2Ta8FRh9+IO9QLlaFQUU+10Q==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -7861,21 +7352,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.12.0.tgz", + "integrity": "sha512-vw9E2P9+3UUWzhgjyyVczLWxZ3GuQNT7QpnIY3o5OMeLO/c8oHljGc8ZpryBMIyympiAAaKgw9e5Hl9dCWFOYw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", + "@typescript-eslint/types": "6.12.0", + "@typescript-eslint/visitor-keys": "6.12.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -7888,40 +7379,39 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.2.tgz", - "integrity": "sha512-kSuF6/77TZzyGPhGO4uVp+f0SBoYxCDf+lW3GKhtKru/L8k/Hd7NFQxyWUeY7Z/KGB2C6Fe3yf2vVi4V9TsCSQ==", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.59.2", - "@typescript-eslint/types": "5.59.2", - "@typescript-eslint/typescript-estree": "5.59.2", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.10.0.tgz", + "integrity": "sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.10.0", + "@typescript-eslint/types": "6.10.0", + "@typescript-eslint/typescript-estree": "6.10.0", + "semver": "^7.5.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0" } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "5.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.2.tgz", - "integrity": "sha512-dB1v7ROySwQWKqQ8rEWcdbTsFjh2G0vn8KUyvTXdPoyzSL6lLGkiXEV5CvpJsEe9xIdKV+8Zqb7wif2issoOFA==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.10.0.tgz", + "integrity": "sha512-TN/plV7dzqqC2iPNf1KrxozDgZs53Gfgg5ZHyw8erd6jd5Ta/JIEcdCheXFt9b1NYb93a1wmIIVW/2gLkombDg==", "dependencies": { - "@typescript-eslint/types": "5.59.2", - "@typescript-eslint/visitor-keys": "5.59.2" + "@typescript-eslint/types": "6.10.0", + "@typescript-eslint/visitor-keys": "6.10.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -7929,11 +7419,11 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "5.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.2.tgz", - "integrity": "sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.10.0.tgz", + "integrity": "sha512-36Fq1PWh9dusgo3vH7qmQAj5/AZqARky1Wi6WpINxB6SkQdY5vQoT2/7rW7uBIsPDcvvGCLi4r10p0OJ7ITAeg==", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -7941,20 +7431,20 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.2.tgz", - "integrity": "sha512-+j4SmbwVmZsQ9jEyBMgpuBD0rKwi9RxRpjX71Brr73RsYnEr3Lt5QZ624Bxphp8HUkSKfqGnPJp1kA5nl0Sh7Q==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.10.0.tgz", + "integrity": "sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg==", "dependencies": { - "@typescript-eslint/types": "5.59.2", - "@typescript-eslint/visitor-keys": "5.59.2", + "@typescript-eslint/types": "6.10.0", + "@typescript-eslint/visitor-keys": "6.10.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -7967,52 +7457,32 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.2.tgz", - "integrity": "sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.10.0.tgz", + "integrity": "sha512-xMGluxQIEtOM7bqFCo+rCMh5fqI+ZxV5RUUOa29iVPz1OgCZrtc7rFnz5cLUazlkPKYqX+75iuDq7m0HQ48nCg==", "dependencies": { - "@typescript-eslint/types": "5.59.2", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "6.10.0", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.12.0.tgz", + "integrity": "sha512-rg3BizTZHF1k3ipn8gfrzDXXSFKyOEB5zxYXInQ6z0hUvmQlhaZQzK+YmHmNViMA9HzW5Q9+bPPt90bU6GQwyw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "6.12.0", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -8161,92 +7631,6 @@ "@xtuc/long": "4.2.2" } }, - "node_modules/@wessberg/ts-evaluator": { - "version": "0.0.27", - "resolved": "https://registry.npmjs.org/@wessberg/ts-evaluator/-/ts-evaluator-0.0.27.tgz", - "integrity": "sha512-7gOpVm3yYojUp/Yn7F4ZybJRxyqfMNf0LXK5KJiawbPfL0XTsJV+0mgrEDjOIR6Bi0OYk2Cyg4tjFu1r8MCZaA==", - "deprecated": "this package has been renamed to ts-evaluator. Please install ts-evaluator instead", - "dependencies": { - "chalk": "^4.1.0", - "jsdom": "^16.4.0", - "object-path": "^0.11.5", - "tslib": "^2.0.3" - }, - "engines": { - "node": ">=10.1.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/wessberg/ts-evaluator?sponsor=1" - }, - "peerDependencies": { - "typescript": ">=3.2.x || >= 4.x" - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/@wessberg/ts-evaluator/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@wessberg/ts-evaluator/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -8296,10 +7680,13 @@ "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" }, "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/accepts": { "version": "1.3.8", @@ -8314,9 +7701,9 @@ } }, "node_modules/acorn": { - "version": "8.11.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.1.tgz", - "integrity": "sha512-IJTNCJMRHfRfb8un89z1QtS0x890C2QUrUxFMK8zy+RizcId6mfnqOf68Bu9YkDgpLYuvCm6aYbwDatXVZPjMQ==", + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", "bin": { "acorn": "bin/acorn" }, @@ -8325,23 +7712,13 @@ } }, "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "devOptional": true, "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" } }, "node_modules/acorn-import-assertions": { @@ -8361,9 +7738,9 @@ } }, "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", + "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", "engines": { "node": ">=0.4.0" } @@ -8402,26 +7779,14 @@ } }, "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", - "dev": true, + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dependencies": { - "humanize-ms": "^1.2.1" + "debug": "^4.3.4" }, "engines": { - "node": ">= 8.0.0" + "node": ">= 14" } }, "node_modules/aggregate-error": { @@ -8543,6 +7908,17 @@ "node": ">= 8" } }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/apache-crypt": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.6.tgz", @@ -8564,12 +7940,6 @@ "node": ">=8" } }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, "node_modules/arch": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", @@ -8590,19 +7960,6 @@ } ] }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -8617,12 +7974,12 @@ } }, "node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, "dependencies": { - "deep-equal": "^2.0.5" + "dequal": "^2.0.3" } }, "node_modules/arr-diff": { @@ -8727,9 +8084,9 @@ } }, "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" }, "node_modules/async-each": { "version": "1.0.6", @@ -8743,6 +8100,14 @@ } ] }, + "node_modules/async-each-series": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", + "integrity": "sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -8770,9 +8135,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", "funding": [ { "type": "opencollective", @@ -8781,12 +8146,16 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -8829,40 +8198,20 @@ "devOptional": true }, "node_modules/axios": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", - "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/axios/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" + "follow-redirects": "^1.14.0" } }, - "node_modules/axios/node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, "node_modules/axobject-query": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", - "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", + "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", "dev": true, "dependencies": { - "deep-equal": "^2.0.5" + "dequal": "^2.0.3" } }, "node_modules/babel-jest": { @@ -9285,42 +8634,17 @@ "node": ">=0.10.0" } }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", - "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", - "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/base64-js": { @@ -9342,6 +8666,14 @@ } ] }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, "node_modules/basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", @@ -9378,6 +8710,15 @@ "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", "dev": true }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -9426,101 +8767,345 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "devOptional": true }, - "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/body-parser/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/bonjour-service/node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-sync": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.29.3.tgz", + "integrity": "sha512-NiM38O6XU84+MN+gzspVmXV2fTOoe+jBqIBx3IBdhZrdeURr6ZgznJr/p+hQ+KzkKEiGH/GcC4SQFSL0jV49bg==", + "dependencies": { + "browser-sync-client": "^2.29.3", + "browser-sync-ui": "^2.29.3", + "bs-recipes": "1.3.4", + "chalk": "4.1.2", + "chokidar": "^3.5.1", + "connect": "3.6.6", + "connect-history-api-fallback": "^1", + "dev-ip": "^1.0.1", + "easy-extender": "^2.3.4", + "eazy-logger": "^4.0.1", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "fs-extra": "3.0.1", + "http-proxy": "^1.18.1", + "immutable": "^3", + "localtunnel": "^2.0.1", + "micromatch": "^4.0.2", + "opn": "5.3.0", + "portscanner": "2.2.0", + "raw-body": "^2.3.2", + "resp-modifier": "6.0.2", + "rx": "4.1.0", + "send": "0.16.2", + "serve-index": "1.9.1", + "serve-static": "1.13.2", + "server-destroy": "1.0.1", + "socket.io": "^4.4.1", + "ua-parser-js": "^1.0.33", + "yargs": "^17.3.1" + }, + "bin": { + "browser-sync": "dist/bin.js" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/browser-sync-client": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.29.3.tgz", + "integrity": "sha512-4tK5JKCl7v/3aLbmCBMzpufiYLsB1+UI+7tUXCCp5qF0AllHy/jAqYu6k7hUF3hYtlClKpxExWaR+rH+ny07wQ==", + "dependencies": { + "etag": "1.8.1", + "fresh": "0.5.2", + "mitt": "^1.1.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/browser-sync-ui": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.29.3.tgz", + "integrity": "sha512-kBYOIQjU/D/3kYtUIJtj82e797Egk1FB2broqItkr3i4eF1qiHbFCG6srksu9gWhfmuM/TNG76jMfzAdxEPakg==", + "dependencies": { + "async-each-series": "0.1.1", + "chalk": "4.1.2", + "connect-history-api-fallback": "^1", + "immutable": "^3", + "server-destroy": "1.0.1", + "socket.io-client": "^4.4.1", + "stream-throttle": "^0.1.3" + } + }, + "node_modules/browser-sync-ui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/browser-sync-ui/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/browser-sync-ui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/browser-sync-ui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/browser-sync-ui/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-sync-ui/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=8" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/browser-sync/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { - "ms": "2.0.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "node_modules/browser-sync/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "side-channel": "^1.0.4" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=0.6" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "node_modules/browser-sync/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/bonjour-service/node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + "node_modules/browser-sync/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/browser-sync/node_modules/fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/browser-sync/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-sync/node_modules/jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/browser-sync/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { - "fill-range": "^7.0.1" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + "node_modules/browser-sync/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } }, "node_modules/browserslist": { "version": "4.22.1", @@ -9565,6 +9150,11 @@ "node": ">= 6" } }, + "node_modules/bs-recipes": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", + "integrity": "sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==" + }, "node_modules/bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", @@ -9618,6 +9208,21 @@ "semver": "^7.0.0" } }, + "node_modules/bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "dev": true, + "dependencies": { + "run-applescript": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -9627,15 +9232,15 @@ } }, "node_modules/cacache": { - "version": "17.1.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", - "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.0.tgz", + "integrity": "sha512-I7mVOPl3PUCeRub1U8YoGz2Lqv9WOBpobZ8RyWFXmReuILz+3OAyTa5oH3QPdtKZD7N0Yk00aLfzn0qvp8dZ1w==", "dev": true, "dependencies": { "@npmcli/fs": "^3.1.0", "fs-minipass": "^3.0.0", "glob": "^10.2.2", - "lru-cache": "^7.7.1", + "lru-cache": "^10.0.1", "minipass": "^7.0.3", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", @@ -9646,7 +9251,7 @@ "unique-filename": "^3.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/cacache/node_modules/brace-expansion": { @@ -9681,12 +9286,12 @@ } }, "node_modules/cacache/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", "dev": true, "engines": { - "node": ">=12" + "node": "14 || >=16.14" } }, "node_modules/cacache/node_modules/minimatch": { @@ -9704,15 +9309,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cacache/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -9783,9 +9379,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001554", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001554.tgz", - "integrity": "sha512-A2E3U//MBwbJVzebddm1YfNp7Nud5Ip+IPn4BozBmn4KqVX7AvluoIDFWjsv5OkGnKUXQVmMSoMKLa3ScCblcQ==", + "version": "1.0.30001564", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001564.tgz", + "integrity": "sha512-DqAOf+rhof+6GVx1y+xzbFPeOumfQnhYzVnZD6LAXijR77yPtm9mfOcqOnT3mpnJiZVT+kwLAFnRlZcIz+c6bg==", "funding": [ { "type": "opencollective", @@ -10170,11 +9766,11 @@ } }, "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", "engines": { - "node": ">= 10" + "node": ">= 12" } }, "node_modules/cliui": { @@ -10190,6 +9786,52 @@ "node": ">=12" } }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "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/wrap-ansi?sponsor=1" + } + }, "node_modules/clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", @@ -10251,15 +9893,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", @@ -10331,10 +9964,13 @@ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" }, "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/compressible": { "version": "2.0.18", @@ -10402,14 +10038,13 @@ "dev": true }, "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ==", "dependencies": { "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", "utils-merge": "1.0.1" }, "engines": { @@ -10417,9 +10052,9 @@ } }, "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", "engines": { "node": ">=0.8" } @@ -10428,61 +10063,14 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "dependencies": { "ms": "2.0.0" } }, - "node_modules/connect/node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/connect/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/connect/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/connect/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/content-disposition": { "version": "0.5.4", @@ -10613,9 +10201,9 @@ "hasInstallScript": true }, "node_modules/core-js-compat": { - "version": "3.33.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.1.tgz", - "integrity": "sha512-6pYKNOgD/j/bkC5xS5IIg6bncid3rfrI42oBH1SQJbsmYPKF7rhzcFzYCcxYMmNQQ0rCEB8WqpW7QHndOggaeQ==", + "version": "3.33.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.3.tgz", + "integrity": "sha512-cNzGqFsh3Ot+529GIXacjTJ7kegdt5fPXxCBVS1G0iaZpuo/tBz399ymceLJveQhFFZ8qThHiP3fzuoQjKN2ow==", "dependencies": { "browserslist": "^4.22.1" }, @@ -10804,18 +10392,6 @@ "is-glob": "^2.0.0" } }, - "node_modules/cpx/node_modules/is-accessor-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", - "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/cpx/node_modules/is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", @@ -10828,39 +10404,17 @@ "node": ">=0.10.0" } }, - "node_modules/cpx/node_modules/is-data-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", - "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/cpx/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/is-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/cpx/node_modules/is-extendable": { @@ -11067,26 +10621,16 @@ } }, "node_modules/cpx/node_modules/readdirp/node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/readdirp/node_modules/expand-brackets/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/cpx/node_modules/readdirp/node_modules/extglob": { @@ -11120,54 +10664,6 @@ "node": ">=0.10.0" } }, - "node_modules/cpx/node_modules/readdirp/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/readdirp/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/readdirp/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/readdirp/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cpx/node_modules/readdirp/node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -11660,14 +11156,16 @@ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==" }, "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "devOptional": true }, "node_modules/cssstyle": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "devOptional": true, "dependencies": { "cssom": "~0.3.6" }, @@ -11678,7 +11176,8 @@ "node_modules/cssstyle/node_modules/cssom": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "devOptional": true }, "node_modules/cypress": { "version": "9.7.0", @@ -11852,107 +11351,268 @@ "assert-plus": "^1.0.0" }, "engines": { - "node": ">=0.10" + "node": ">=0.10" + } + }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "devOptional": true, + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==", + "devOptional": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "devOptional": true + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dev": true, + "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_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dev": true, + "dependencies": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dev": true, + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/default-browser/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/default-browser/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "node_modules/default-browser/node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" + "path-key": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dayjs": { - "version": "1.11.10", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", - "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==", - "devOptional": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/default-browser/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, "dependencies": { - "ms": "2.1.2" + "mimic-fn": "^4.0.0" }, "engines": { - "node": ">=6.0" + "node": ">=12" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "node_modules/default-browser/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "node_modules/default-browser/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, "engines": { - "node": ">=0.10" - } - }, - "node_modules/deep-equal": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", - "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.1", - "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.0", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "engines": { - "node": ">=0.10.0" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/default-gateway": { @@ -12076,12 +11736,6 @@ "node": ">=0.4.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -12090,6 +11744,15 @@ "node": ">= 0.8" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -12125,6 +11788,17 @@ "detect-port": "bin/detect-port.js" } }, + "node_modules/dev-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", + "integrity": "sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==", + "bin": { + "dev-ip": "lib/dev-ip.js" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -12210,22 +11884,15 @@ ] }, "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "devOptional": true, "dependencies": { - "webidl-conversions": "^5.0.0" + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "engines": { - "node": ">=8" + "node": ">=12" } }, "node_modules/domhandler": { @@ -12285,6 +11952,92 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, + "node_modules/easy-extender": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", + "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", + "dependencies": { + "lodash": "^4.17.10" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/eazy-logger": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.0.1.tgz", + "integrity": "sha512-2GSFtnnC6U4IEKhEI7+PvdxrmjJ04mdsj3wHZTFiw0tUtG4HCWzTr13ZYTk8XOGnA1xQMaDljoBOYlk3D/MMSw==", + "dependencies": { + "chalk": "4.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eazy-logger/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eazy-logger/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/eazy-logger/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eazy-logger/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/eazy-logger/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/eazy-logger/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -12315,9 +12068,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.567", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.567.tgz", - "integrity": "sha512-8KR114CAYQ4/r5EIEsOmOMqQ9j0MRbJZR3aXD/KFA8RuKzyoUB4XrUCg+l8RUGqTVQgKNIgTpjaG8YHRPAbX2w==" + "version": "1.4.593", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.593.tgz", + "integrity": "sha512-c7+Hhj87zWmdpmjDONbvNKNo24tvmD4mjal1+qqTYTrlF0/sNpAcDlU0Ki84ftA/5yj3BF2QhSGEC0Rky6larg==" }, "node_modules/emittery": { "version": "0.13.1", @@ -12382,6 +12135,94 @@ "once": "^1.4.0" } }, + "node_modules/engine.io": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz", + "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-client": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz", + "integrity": "sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0", + "xmlhttprequest-ssl": "~2.0.0" + } + }, + "node_modules/engine.io-client/node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", + "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/enhanced-resolve": { "version": "5.15.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", @@ -12395,12 +12236,11 @@ } }, "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" + "ansi-colors": "^4.1.1" }, "engines": { "node": ">=8.6" @@ -12473,9 +12313,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", - "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==" }, "node_modules/esbuild": { "version": "0.19.5", @@ -12515,9 +12355,9 @@ } }, "node_modules/esbuild-wasm": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.18.17.tgz", - "integrity": "sha512-9OHGcuRzy+I8ziF9FzjfKLWAPbvi0e/metACVg9k6bK+SI4FFxeV6PcZsz8RIVaMD4YNehw+qj6UMR3+qj/EuQ==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.19.5.tgz", + "integrity": "sha512-7zmLLn2QCj93XfMmHtzrDJ1UBuOHB2CZz1ghoCEZiRajxjUvHsF40PnbzFIY/pmesqPRaEtEWii0uzsTbnAgrA==", "bin": { "esbuild": "bin/esbuild" }, @@ -12550,6 +12390,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "devOptional": true, "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -12570,6 +12411,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "optional": true, "engines": { "node": ">=0.10.0" @@ -12680,21 +12522,29 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz", + "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==", "dev": true, "dependencies": { - "prettier-linter-helpers": "^1.0.0" + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" }, "engines": { - "node": ">=12.0.0" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/prettier" }, "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "prettier": ">=3.0.0" }, "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, "eslint-config-prettier": { "optional": true } @@ -13235,6 +13085,23 @@ "ms": "2.0.0" } }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -13254,6 +13121,48 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/express/node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/express/node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/express/node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -13498,16 +13407,16 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==", "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~1.0.1", "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", "unpipe": "~1.0.0" }, "engines": { @@ -13527,6 +13436,25 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", @@ -13570,16 +13498,16 @@ } }, "node_modules/flat-cache": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", - "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": ">=12.0.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { @@ -13933,15 +13861,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/fs-monkey": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", @@ -13982,25 +13901,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -14254,17 +14154,6 @@ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" }, - "node_modules/guess-parser": { - "version": "0.4.22", - "resolved": "https://registry.npmjs.org/guess-parser/-/guess-parser-0.4.22.tgz", - "integrity": "sha512-KcUWZ5ACGaBM69SbqwVIuWGoSAgD+9iJnchR9j/IarVI1jHVeXv+bUXBIMeqVMSKt3zrn0Dgf9UpcOEpPBLbSg==", - "dependencies": { - "@wessberg/ts-evaluator": "0.0.27" - }, - "peerDependencies": { - "typescript": ">=3.7.5" - } - }, "node_modules/handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", @@ -14340,12 +14229,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, "node_modules/has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -14444,24 +14327,22 @@ } }, "node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", - "dev": true, + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", "dependencies": { - "lru-cache": "^7.5.1" + "lru-cache": "^10.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", "engines": { - "node": ">=12" + "node": "14 || >=16.14" } }, "node_modules/hpack.js": { @@ -14626,11 +14507,12 @@ } }, "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "devOptional": true, "dependencies": { - "@tootallnate/once": "1", + "@tootallnate/once": "2", "agent-base": "6", "debug": "4" }, @@ -14638,6 +14520,18 @@ "node": ">= 6" } }, + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "devOptional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/http-proxy-middleware": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", @@ -14766,15 +14660,15 @@ } }, "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", "dependencies": { - "agent-base": "6", + "agent-base": "^7.0.2", "debug": "4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/human-signals": { @@ -14786,15 +14680,6 @@ "node": ">=8.12.0" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "dependencies": { - "ms": "^2.0.0" - } - }, "node_modules/husky": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", @@ -14863,9 +14748,9 @@ ] }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "engines": { "node": ">= 4" } @@ -14919,9 +14804,12 @@ } }, "node_modules/immutable": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", - "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==" + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/import-fresh": { "version": "3.3.0", @@ -15006,92 +14894,84 @@ } }, "node_modules/inquirer": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", - "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", + "version": "9.2.11", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.11.tgz", + "integrity": "sha512-B2LafrnnhbRzCWfAdOXisUzL89Kg8cVJlYmhqoi3flSiV/TveO+nsXwgKr9h9PIo+J1hz7nBSk6gegRIMBBf7g==", "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", + "@ljharb/through": "^2.3.9", + "ansi-escapes": "^4.3.2", + "chalk": "^5.3.0", "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", + "cli-width": "^4.1.0", + "external-editor": "^3.1.0", + "figures": "^5.0.0", "lodash": "^4.17.21", - "mute-stream": "0.0.8", + "mute-stream": "1.0.0", "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" + "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": ">=12.0.0" + "node": ">=14.18.0" } }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, + "node_modules/inquirer/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "engines": { - "node": ">=8" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "node_modules/inquirer/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/inquirer/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/inquirer/node_modules/figures": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", + "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", "dependencies": { - "color-name": "~1.1.4" + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/inquirer/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/inquirer/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/inquirer/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/inquirer/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "tslib": "^2.1.0" } }, "node_modules/internal-slot": { @@ -15132,27 +15012,15 @@ } }, "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", + "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "hasown": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, "node_modules/is-arguments": { @@ -15270,28 +15138,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/is-data-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "hasown": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/is-date-object": { @@ -15310,26 +15166,16 @@ } }, "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/is-docker": { @@ -15411,6 +15257,39 @@ "node": ">=0.10.0" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "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-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-installed-globally": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", @@ -15458,6 +15337,14 @@ "node": ">=0.12.0" } }, + "node_modules/is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dependencies": { + "lodash.isfinite": "^3.3.2" + } + }, "node_modules/is-number-object": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", @@ -15515,7 +15402,8 @@ "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "devOptional": true }, "node_modules/is-primitive": { "version": "2.0.0", @@ -15709,9 +15597,9 @@ "devOptional": true }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "engines": { "node": ">=8" } @@ -16534,368 +16422,138 @@ "node_modules/jest-each": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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-each/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-each/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-each/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "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-each/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.5.0.tgz", - "integrity": "sha512-/KG8yEK4aN8ak56yFVdqFDzKNHgF4BAymCx2LbPNPsUshUlfAl0eX402Xm1pt+eoG9SLZEUVifqXtX8SK74KCw==", - "devOptional": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/jsdom": "^20.0.0", - "@types/node": "*", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0", - "jsdom": "^20.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jest-environment-jsdom/node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "devOptional": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/jest-environment-jsdom/node_modules/acorn-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", - "devOptional": true, - "dependencies": { - "acorn": "^8.1.0", - "acorn-walk": "^8.0.2" - } - }, - "node_modules/jest-environment-jsdom/node_modules/acorn-walk": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", - "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", - "devOptional": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/jest-environment-jsdom/node_modules/cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "devOptional": true - }, - "node_modules/jest-environment-jsdom/node_modules/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", - "devOptional": true, - "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/jest-environment-jsdom/node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "devOptional": true, - "dependencies": { - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/jest-environment-jsdom/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "devOptional": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-environment-jsdom/node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "devOptional": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">= 6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-jsdom/node_modules/jsdom": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", - "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", - "devOptional": true, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { - "abab": "^2.0.6", - "acorn": "^8.8.1", - "acorn-globals": "^7.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.4.2", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.2", - "parse5": "^7.1.1", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.11.0", - "xml-name-validator": "^4.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=14" - }, - "peerDependencies": { - "canvas": "^2.5.0" + "node": ">=8" }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-environment-jsdom/node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", - "devOptional": true, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "xmlchars": "^2.2.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=v12.22.7" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-environment-jsdom/node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "devOptional": true, + "node_modules/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { - "punycode": "^2.1.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">=12" + "node": ">=7.0.0" } }, - "node_modules/jest-environment-jsdom/node_modules/w3c-xmlserializer": { + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-each/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", - "devOptional": true, - "dependencies": { - "xml-name-validator": "^4.0.0" - }, + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { - "node": ">=14" + "node": ">=8" } }, - "node_modules/jest-environment-jsdom/node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "devOptional": true, + "node_modules/jest-each/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, "engines": { - "node": ">=12" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-jsdom/node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", - "devOptional": true, + "node_modules/jest-each/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-environment-jsdom/node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "devOptional": true, + "node_modules/jest-each/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/jest-environment-jsdom/node_modules/ws": { - "version": "8.14.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", - "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "node_modules/jest-environment-jsdom": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.5.0.tgz", + "integrity": "sha512-/KG8yEK4aN8ak56yFVdqFDzKNHgF4BAymCx2LbPNPsUshUlfAl0eX402Xm1pt+eoG9SLZEUVifqXtX8SK74KCw==", "devOptional": true, + "dependencies": { + "@jest/environment": "^29.5.0", + "@jest/fake-timers": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.5.0", + "jest-util": "^29.5.0", + "jsdom": "^20.0.0" + }, "engines": { - "node": ">=10.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "canvas": "^2.5.0" }, "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { + "canvas": { "optional": true } } }, - "node_modules/jest-environment-jsdom/node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "devOptional": true, - "engines": { - "node": ">=12" - } - }, "node_modules/jest-environment-node": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", @@ -17234,9 +16892,9 @@ } }, "node_modules/jest-preset-angular": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-13.1.1.tgz", - "integrity": "sha512-X8i7icKt9U5uhj7YKqdEZm7ZZPvNFRxfBnU+9SALdIkHYJhwtlJ5/MUk9wo4f3lX2smOkIl9LPJUu1APO+11Jg==", + "version": "13.1.4", + "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-13.1.4.tgz", + "integrity": "sha512-XKeWa8Qt7p37SzlJ85qEXgig06SgkfrzV057X2GSMqfz/HLJmTUjMFkHJKe65ZaQumNQWCcXpxXREr6EfZ9bow==", "dev": true, "dependencies": { "bs-logger": "^0.2.6", @@ -17253,10 +16911,10 @@ "esbuild": ">=0.13.8" }, "peerDependencies": { - "@angular-devkit/build-angular": ">=13.0.0 <17.0.0", - "@angular/compiler-cli": ">=13.0.0 <17.0.0", - "@angular/core": ">=13.0.0 <17.0.0", - "@angular/platform-browser-dynamic": ">=13.0.0 <17.0.0", + "@angular-devkit/build-angular": ">=13.0.0 <18.0.0", + "@angular/compiler-cli": ">=13.0.0 <18.0.0", + "@angular/core": ">=13.0.0 <18.0.0", + "@angular/platform-browser-dynamic": ">=13.0.0 <18.0.0", "jest": "^29.0.0", "typescript": ">=4.4" } @@ -17805,6 +17463,17 @@ "node": ">=8" } }, + "node_modules/jest-util/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/jest-util/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -18055,9 +17724,9 @@ } }, "node_modules/jiti": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz", - "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", "bin": { "jiti": "bin/jiti.js" } @@ -18086,40 +17755,40 @@ "devOptional": true }, "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "devOptional": true, "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=14" }, "peerDependencies": { "canvas": "^2.5.0" @@ -18130,10 +17799,23 @@ } } }, + "node_modules/jsdom/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "devOptional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/jsdom/node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "devOptional": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -18143,28 +17825,17 @@ "node": ">= 6" } }, - "node_modules/jsdom/node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "node_modules/jsdom/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "devOptional": true, "dependencies": { - "whatwg-encoding": "^1.0.5" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=10" - } - }, - "node_modules/jsdom/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/jsdom/node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dependencies": { - "iconv-lite": "0.4.24" + "node": ">= 6" } }, "node_modules/jsesc": { @@ -18339,9 +18010,9 @@ } }, "node_modules/less": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", - "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", + "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", "dependencies": { "copy-anything": "^2.0.1", "parse-node-version": "^1.0.1", @@ -18466,10 +18137,15 @@ "node": ">=10" } }, + "node_modules/limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==" + }, "node_modules/lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", + "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } @@ -18501,6 +18177,56 @@ } } }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "devOptional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "devOptional": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/listr2/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "devOptional": true + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "devOptional": true, + "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/wrap-ansi?sponsor=1" + } + }, "node_modules/live-server": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/live-server/-/live-server-1.2.2.tgz", @@ -18673,75 +18399,17 @@ "node": ">=0.10.0" } }, - "node_modules/live-server/node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/live-server/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/live-server/node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/live-server/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/live-server/node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/live-server/node_modules/expand-brackets/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/live-server/node_modules/extglob": { @@ -18831,18 +18499,6 @@ "node": ">=0.10.0" } }, - "node_modules/live-server/node_modules/is-accessor-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", - "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/live-server/node_modules/is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", @@ -18855,30 +18511,17 @@ "node": ">=0.10.0" } }, - "node_modules/live-server/node_modules/is-data-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", - "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/live-server/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/live-server/node_modules/is-extendable": { @@ -19039,6 +18682,120 @@ "node": ">= 12.13.0" } }, + "node_modules/localtunnel": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz", + "integrity": "sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==", + "dependencies": { + "axios": "0.21.4", + "debug": "4.3.2", + "openurl": "1.1.1", + "yargs": "17.1.1" + }, + "bin": { + "lt": "bin/lt.js" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/localtunnel/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/localtunnel/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/localtunnel/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/localtunnel/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/localtunnel/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/localtunnel/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "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/wrap-ansi?sponsor=1" + } + }, + "node_modules/localtunnel/node_modules/yargs": { + "version": "17.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz", + "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/localtunnel/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -19060,6 +18817,11 @@ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, + "node_modules/lodash.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==" + }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -19234,20 +18996,6 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "devOptional": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -19266,9 +19014,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.1", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.1.tgz", - "integrity": "sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==", + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" }, @@ -19299,66 +19047,30 @@ } }, "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, - "node_modules/make-fetch-happen/node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "node_modules/make-fetch-happen": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", + "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", "dev": true, "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/makeerror": { @@ -19464,6 +19176,17 @@ "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -19545,12 +19268,12 @@ } }, "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/minipass-collect": { @@ -19600,15 +19323,6 @@ "encoding": "^0.1.13" } }, - "node_modules/minipass-fetch/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/minipass-flush": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", @@ -19758,6 +19472,11 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/mitt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", + "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==" + }, "node_modules/mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", @@ -19863,9 +19582,12 @@ } }, "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/nan": { "version": "2.18.0", @@ -19875,9 +19597,9 @@ "optional": true }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "funding": [ { "type": "github", @@ -19957,42 +19679,17 @@ "node": ">=0.10.0" } }, - "node_modules/nanomatch/node_modules/is-accessor-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", - "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/nanomatch/node_modules/is-data-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", - "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/nanomatch/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/nanomatch/node_modules/is-extendable": { @@ -20012,12 +19709,6 @@ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "node_modules/needle": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", @@ -20103,34 +19794,33 @@ } }, "node_modules/node-gyp": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", - "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.0.1.tgz", + "integrity": "sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg==", "dev": true, "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", + "glob": "^10.3.10", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", "semver": "^7.3.5", "tar": "^6.1.2", - "which": "^2.0.2" + "which": "^4.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": "^12.13 || ^14.13 || >=16" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/node-gyp-build": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", - "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.7.1.tgz", + "integrity": "sha512-wTSrZ+8lsRRa3I3H8Xr65dLWSgCvY2l4AOnaeKdPA9TB/WYMPaTcrzf3rXvFoVvjKNVnu0CcWSx54qq9GKRUYg==", "optional": true, "bin": { "node-gyp-build": "bin.js", @@ -20138,6 +19828,76 @@ "node-gyp-build-test": "build-test.js" } }, + "node_modules/node-gyp/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -20154,33 +19914,33 @@ "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" }, "node_modules/nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", + "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", "dev": true, "dependencies": { - "abbrev": "^1.0.0" + "abbrev": "^2.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/normalize-package-data": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", + "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", "dev": true, "dependencies": { - "hosted-git-info": "^6.0.0", + "hosted-git-info": "^7.0.0", "is-core-module": "^2.8.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/normalize-path": { @@ -20233,24 +19993,23 @@ } }, "node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", - "dev": true, + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", + "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", "dependencies": { - "hosted-git-info": "^6.0.0", + "hosted-git-info": "^7.0.0", "proc-log": "^3.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^5.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm-packlist": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", - "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.0.tgz", + "integrity": "sha512-ErAGFB5kJUciPy1mmx/C2YFbvxoJ0QJ9uwkCZOeR6CqLLISPZBOiFModAbSXnjjlwW5lOhuhXva+fURsSGJqyw==", "dev": true, "dependencies": { "ignore-walk": "^6.0.0" @@ -20260,36 +20019,36 @@ } }, "node_modules/npm-pick-manifest": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", - "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz", + "integrity": "sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg==", "dev": true, "dependencies": { "npm-install-checks": "^6.0.0", "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", + "npm-package-arg": "^11.0.0", "semver": "^7.3.5" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm-registry-fetch": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", - "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-16.1.0.tgz", + "integrity": "sha512-PQCELXKt8Azvxnt5Y85GseQDJJlglTFM9L9U9gkv2y4e9s0k3GVDdOx3YoB6gm2Do0hlkzC39iCGXby+Wve1Bw==", "dev": true, "dependencies": { - "make-fetch-happen": "^11.0.0", - "minipass": "^5.0.0", + "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": "^10.0.0", + "npm-package-arg": "^11.0.0", "proc-log": "^3.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm-run-path": { @@ -20303,21 +20062,6 @@ "node": ">=8" } }, - "node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -20332,15 +20076,16 @@ "node_modules/nwsapi": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "devOptional": true }, "node_modules/nx": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-17.0.2.tgz", - "integrity": "sha512-utk9ufxLlRd210nEV6cKjMLVK0gup2ZMlNT41lLgUX/gp3Q59G1NkyLo3o29DxBh3AhNJ9q5MKgybmzDNdpudA==", + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/nx/-/nx-17.1.3.tgz", + "integrity": "sha512-6LYoTt01nS1d/dvvYtRs+pEAMQmUVsd2fr/a8+X1cDjWrb8wsf1O3DwlBTqKOXOazpS3eOr0Ukc9N1svbu7uXA==", "hasInstallScript": true, "dependencies": { - "@nrwl/tao": "17.0.2", + "@nrwl/tao": "17.1.3", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "3.0.0-rc.46", "@zkochan/js-yaml": "0.0.6", @@ -20381,16 +20126,16 @@ "nx-cloud": "bin/nx-cloud.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "17.0.2", - "@nx/nx-darwin-x64": "17.0.2", - "@nx/nx-freebsd-x64": "17.0.2", - "@nx/nx-linux-arm-gnueabihf": "17.0.2", - "@nx/nx-linux-arm64-gnu": "17.0.2", - "@nx/nx-linux-arm64-musl": "17.0.2", - "@nx/nx-linux-x64-gnu": "17.0.2", - "@nx/nx-linux-x64-musl": "17.0.2", - "@nx/nx-win32-arm64-msvc": "17.0.2", - "@nx/nx-win32-x64-msvc": "17.0.2" + "@nx/nx-darwin-arm64": "17.1.3", + "@nx/nx-darwin-x64": "17.1.3", + "@nx/nx-freebsd-x64": "17.1.3", + "@nx/nx-linux-arm-gnueabihf": "17.1.3", + "@nx/nx-linux-arm64-gnu": "17.1.3", + "@nx/nx-linux-arm64-musl": "17.1.3", + "@nx/nx-linux-x64-gnu": "17.1.3", + "@nx/nx-linux-x64-musl": "17.1.3", + "@nx/nx-win32-arm64-msvc": "17.1.3", + "@nx/nx-win32-x64-msvc": "17.1.3" }, "peerDependencies": { "@swc-node/register": "^1.6.7", @@ -20555,6 +20300,16 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, + "node_modules/nx/node_modules/axios": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", + "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/nx/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -20586,15 +20341,17 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/nx/node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "node_modules/nx/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dependencies": { - "ansi-colors": "^4.1.1" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=8.6" + "node": ">= 6" } }, "node_modules/nx/node_modules/glob": { @@ -20643,6 +20400,11 @@ "node": ">=10" } }, + "node_modules/nx/node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/nx/node_modules/semver": { "version": "7.5.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", @@ -20740,14 +20502,6 @@ "node": ">= 0.4" } }, - "node_modules/object-path": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.8.tgz", - "integrity": "sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==", - "engines": { - "node": ">= 10.12.0" - } - }, "node_modules/object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -20873,24 +20627,26 @@ "opener": "bin/opener-bin.js" } }, + "node_modules/openurl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", + "integrity": "sha512-d/gTkTb1i1GKz5k3XE3XFV/PxQ1k45zDqGP2OA7YhgsaLoqm6qRvARAZOFer1fcXritWlGBRCu/UgeS4HAnXAA==" + }, "node_modules/opn": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-6.0.0.tgz", - "integrity": "sha512-I9PKfIZC+e4RXZ/qr1RhgyCnGgYX0UEIlXgWnCOVACIvFgaC9rz6Won7xbdhoHrd8IIhV7YEpHjreNUNkqCGkQ==", - "deprecated": "The package has been renamed to `open`", - "dev": true, + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", "dependencies": { "is-wsl": "^1.1.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/opn/node_modules/is-wsl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true, "engines": { "node": ">=4" } @@ -21094,27 +20850,27 @@ } }, "node_modules/pacote": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", - "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.4.tgz", + "integrity": "sha512-eGdLHrV/g5b5MtD5cTPyss+JxOlaOloSMG3UwPMAvL8ywaLJ6beONPF40K4KKl/UI6q5hTKCJq5rCu8tkF+7Dg==", "dev": true, "dependencies": { - "@npmcli/git": "^4.0.0", + "@npmcli/git": "^5.0.0", "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/run-script": "^6.0.0", - "cacache": "^17.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "@npmcli/run-script": "^7.0.0", + "cacache": "^18.0.0", "fs-minipass": "^3.0.0", - "minipass": "^5.0.0", - "npm-package-arg": "^10.0.0", - "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^8.0.0", - "npm-registry-fetch": "^14.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", "promise-retry": "^2.0.1", - "read-package-json": "^6.0.0", + "read-package-json": "^7.0.0", "read-package-json-fast": "^3.0.0", - "sigstore": "^1.3.0", + "sigstore": "^2.0.0", "ssri": "^10.0.0", "tar": "^6.1.11" }, @@ -21122,7 +20878,7 @@ "pacote": "lib/bin.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/pako": { @@ -21320,9 +21076,9 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", "dev": true, "engines": { "node": "14 || >=16.14" @@ -21368,11 +21124,11 @@ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", + "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", "engines": { - "node": ">=8.6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -21395,9 +21151,9 @@ } }, "node_modules/piscina": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.0.0.tgz", - "integrity": "sha512-641nAmJS4k4iqpNUqfggqUBUMmlw0ZoM5VZKdQkV2e970Inn3Tk9kroCc1wpsYLD07vCwpys5iY0d3xI/9WkTg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.1.0.tgz", + "integrity": "sha512-sjbLMi3sokkie+qmtZpkfMCUJTpbxJm/wvaPzU28vmYSsTSW8xk9JcFUsbqGJdtPpIQ9tuj+iDcTtgZjwnOSig==", "dependencies": { "eventemitter-asyncresource": "^1.0.0", "hdr-histogram-js": "^2.0.1", @@ -21447,6 +21203,27 @@ "ms": "^2.1.1" } }, + "node_modules/portscanner": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", + "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", + "dependencies": { + "async": "^2.6.0", + "is-number-like": "^1.0.3" + }, + "engines": { + "node": ">=0.4", + "npm": ">=1.0.0" + } + }, + "node_modules/portscanner/node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dependencies": { + "lodash": "^4.17.14" + } + }, "node_modules/posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -21457,9 +21234,9 @@ } }, "node_modules/postcss": { - "version": "8.4.27", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz", - "integrity": "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "funding": [ { "type": "opencollective", @@ -22031,15 +21808,15 @@ } }, "node_modules/prettier": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", - "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz", + "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==", "dev": true, "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" @@ -22175,7 +21952,8 @@ "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "devOptional": true }, "node_modules/pump": { "version": "3.0.0", @@ -22188,9 +21966,9 @@ } }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "engines": { "node": ">=6" } @@ -22227,7 +22005,8 @@ "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "devOptional": true }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -22288,9 +22067,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -22316,18 +22095,18 @@ } }, "node_modules/read-package-json": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", - "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-7.0.0.tgz", + "integrity": "sha512-uL4Z10OKV4p6vbdvIXB+OzhInYtIozl/VxUBPgNkBuUi2DeRonnuspmaVAMcrkmfjKGNmRndyQAbE7/AmzGwFg==", "dev": true, "dependencies": { "glob": "^10.2.2", "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", + "normalize-package-data": "^6.0.0", "npm-normalize-package-bin": "^3.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/read-package-json-fast": { @@ -22431,6 +22210,17 @@ "node": ">=8.10.0" } }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -22465,9 +22255,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, "node_modules/regenerator-transform": { "version": "0.15.2", @@ -22645,11 +22435,11 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dependencies": { - "is-core-module": "^2.11.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -22731,6 +22521,31 @@ "node": ">=10" } }, + "node_modules/resp-modifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", + "integrity": "sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==", + "dependencies": { + "debug": "^2.2.0", + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/resp-modifier/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/resp-modifier/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -22805,10 +22620,69 @@ "fsevents": "~2.3.2" } }, + "node_modules/run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/run-applescript/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", "engines": { "node": ">=0.12.0" } @@ -22835,6 +22709,11 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==" + }, "node_modules/rxjs": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", @@ -22933,6 +22812,11 @@ } } }, + "node_modules/sass/node_modules/immutable": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==" + }, "node_modules/sax": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", @@ -22940,14 +22824,15 @@ "optional": true }, "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "devOptional": true, "dependencies": { "xmlchars": "^2.2.0" }, "engines": { - "node": ">=10" + "node": ">=v12.22.7" } }, "node_modules/schema-utils": { @@ -23021,23 +22906,23 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "dependencies": { "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", + "depd": "~1.1.2", + "destroy": "~1.0.4", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" }, "engines": { "node": ">= 0.8.0" @@ -23051,15 +22936,74 @@ "ms": "2.0.0" } }, - "node_modules/send/node_modules/debug/node_modules/ms": { + "node_modules/send/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/send/node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==" + }, + "node_modules/send/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/send/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "node_modules/send/node_modules/mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "bin": { + "mime": "cli.js" + } + }, + "node_modules/send/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "node_modules/send/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/send/node_modules/statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "engines": { + "node": ">= 0.6" + } }, "node_modules/serialize-javascript": { "version": "6.0.1", @@ -23140,19 +23084,24 @@ } }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" + "parseurl": "~1.3.2", + "send": "0.16.2" }, "engines": { "node": ">= 0.8.0" } }, + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==" + }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -23286,22 +23235,18 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/sigstore": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.9.0.tgz", - "integrity": "sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.1.0.tgz", + "integrity": "sha512-kPIj+ZLkyI3QaM0qX8V/nSsweYND3W448pwkDgS6CQ74MfhEkIR8ToK5Iyx46KJYRjseVcD3Rp9zAmUAj6ZjPw==", "dev": true, "dependencies": { - "@sigstore/bundle": "^1.1.0", - "@sigstore/protobuf-specs": "^0.2.0", - "@sigstore/sign": "^1.0.0", - "@sigstore/tuf": "^1.0.3", - "make-fetch-happen": "^11.0.1" - }, - "bin": { - "sigstore": "bin/sigstore.js" + "@sigstore/bundle": "^2.1.0", + "@sigstore/protobuf-specs": "^0.2.1", + "@sigstore/sign": "^2.1.0", + "@sigstore/tuf": "^2.1.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/sisteransi": { @@ -23420,42 +23365,17 @@ "node": ">=0.10.0" } }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", - "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", - "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/snapdragon-util": { @@ -23491,19 +23411,90 @@ "ms": "2.0.0" } }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/socket.io": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.2.tgz", + "integrity": "sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "dependencies": { + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-adapter/node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/socket.io-client": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.2.tgz", + "integrity": "sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10.0.0" } }, "node_modules/sockjs": { @@ -23531,17 +23522,17 @@ } }, "node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", + "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", "dev": true, "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "socks": "^2.7.1" }, "engines": { - "node": ">= 10" + "node": ">= 14" } }, "node_modules/source-map": { @@ -23780,15 +23771,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/ssri/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -23850,6 +23832,26 @@ "duplexer": "~0.1.1" } }, + "node_modules/stream-throttle": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", + "integrity": "sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==", + "dependencies": { + "commander": "^2.2.0", + "limiter": "^1.0.5" + }, + "bin": { + "throttleproxy": "bin/throttleproxy.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/stream-throttle/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -24073,15 +24075,16 @@ } }, "node_modules/svgo": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz", - "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.4.tgz", + "integrity": "sha512-T+Xul3JwuJ6VGXKo/p2ndqx1ibxNKnLTvRc1ZTWKCfyKS/GgNjRZcYsK84fxTsy/izr91g/Rwx6fGnVgaFSI5g==", "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", "css-select": "^5.1.0", "css-tree": "^2.2.1", - "csso": "^5.0.5", + "css-what": "^6.1.0", + "csso": "5.0.5", "picocolors": "^1.0.0" }, "bin": { @@ -24115,7 +24118,24 @@ "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "devOptional": true + }, + "node_modules/synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dev": true, + "dependencies": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } }, "node_modules/tapable": { "version": "2.2.1", @@ -24200,9 +24220,9 @@ "dev": true }, "node_modules/terser": { - "version": "5.19.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", - "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", + "version": "5.24.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", + "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -24353,10 +24373,13 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "node_modules/throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", - "devOptional": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", + "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", + "devOptional": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/through": { "version": "2.3.8", @@ -24368,6 +24391,18 @@ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, + "node_modules/titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -24468,42 +24503,17 @@ "node": ">=0.10.0" } }, - "node_modules/to-regex/node_modules/is-accessor-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", - "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/to-regex/node_modules/is-data-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", - "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/to-regex/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/to-regex/node_modules/is-extendable": { @@ -24530,6 +24540,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "devOptional": true, "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -24544,19 +24555,21 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "devOptional": true, "engines": { "node": ">= 4.0.0" } }, "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "devOptional": true, "dependencies": { "punycode": "^2.1.1" }, "engines": { - "node": ">=8" + "node": ">=12" } }, "node_modules/tree-kill": { @@ -24567,6 +24580,17 @@ "tree-kill": "cli.js" } }, + "node_modules/ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/ts-jest": { "version": "29.1.0", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.0.tgz", @@ -24611,9 +24635,9 @@ } }, "node_modules/ts-loader": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.0.tgz", - "integrity": "sha512-LLlB/pkB4q9mW2yLdFMnK3dEHbrBjeZTYguaaIfusyojBgAGf5kF+O6KcWqiGzWqHk0LBsoolrp4VftEURhybg==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", "dependencies": { "chalk": "^4.1.0", "enhanced-resolve": "^5.0.0", @@ -24735,14 +24759,6 @@ } } }, - "node_modules/ts-node/node_modules/acorn-walk": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", - "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/tsconfig-paths": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", @@ -24846,37 +24862,18 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/tuf-js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", - "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.1.0.tgz", + "integrity": "sha512-eD7YPPjVlMzdggrOeE8zwoegUaG/rt6Bt3jwoQPunRiNVzgcCE009UDFJKJjG+Gk9wFu6W/Vi+P5d/5QpdD9jA==", "dev": true, "dependencies": { - "@tufjs/models": "1.0.4", + "@tufjs/models": "2.0.0", "debug": "^4.3.4", - "make-fetch-happen": "^11.1.1" + "make-fetch-happen": "^13.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/tunnel-agent": { @@ -24945,9 +24942,9 @@ "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==" }, "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -24956,11 +24953,44 @@ "node": ">=14.17" } }, + "node_modules/ua-parser-js": { + "version": "1.0.37", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", + "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "engines": { + "node": "*" + } + }, "node_modules/underscore": { "version": "1.13.6", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" }, + "node_modules/undici": { + "version": "5.27.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.27.2.tgz", + "integrity": "sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -25048,9 +25078,9 @@ } }, "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "engines": { "node": ">= 10.0.0" } @@ -25195,6 +25225,7 @@ "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "devOptional": true, "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -25241,9 +25272,9 @@ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" }, "node_modules/v8-to-istanbul": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", - "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -25302,13 +25333,13 @@ } }, "node_modules/vite": { - "version": "4.4.7", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.7.tgz", - "integrity": "sha512-6pYf9QJ1mHylfVh39HpuSfMPojPSKVxZvnclX1K1FyZ1PXDOcLBibdq5t1qxJSnL63ca8Wf4zts6mD8u8oc9Fw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", + "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", "dependencies": { "esbuild": "^0.18.10", - "postcss": "^8.4.26", - "rollup": "^3.25.2" + "postcss": "^8.4.27", + "rollup": "^3.27.1" }, "bin": { "vite": "bin/vite.js" @@ -25721,24 +25752,16 @@ "@esbuild/win32-x64": "0.18.20" } }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "devOptional": true, "dependencies": { - "xml-name-validator": "^3.0.0" + "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=14" } }, "node_modules/walker": { @@ -25778,17 +25801,18 @@ } }, "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "devOptional": true, "engines": { - "node": ">=10.4" + "node": ">=12" } }, "node_modules/webpack": { - "version": "5.88.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", - "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.0", @@ -25916,6 +25940,14 @@ } } }, + "node_modules/webpack-dev-server/node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/webpack-dev-server/node_modules/ipaddr.js": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", @@ -25946,32 +25978,13 @@ "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.14.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", - "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/webpack-merge": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "dependencies": { "clone-deep": "^4.0.1", + "flat": "^5.0.2", "wildcard": "^2.0.0" }, "engines": { @@ -26123,21 +26136,25 @@ } }, "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "devOptional": true, + "engines": { + "node": ">=12" + } }, "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "devOptional": true, "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/which": { @@ -26210,34 +26227,22 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "node_modules/wildcard": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" }, "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "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/wrap-ansi?sponsor=1" + "node": ">=8" } }, "node_modules/wrap-ansi-cjs": { @@ -26339,15 +26344,15 @@ } }, "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", "engines": { - "node": ">=8.3.0" + "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -26359,14 +26364,27 @@ } }, "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "devOptional": true, + "engines": { + "node": ">=12" + } }, "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "devOptional": true + }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "engines": { + "node": ">=0.4.0" + } }, "node_modules/y18n": { "version": "5.0.8", @@ -26444,9 +26462,9 @@ } }, "node_modules/zone.js": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.13.0.tgz", - "integrity": "sha512-7m3hNNyswsdoDobCkYNAy5WiUulkMd3+fWaGT9ij6iq3Zr/IwJo4RMCYPSDjT+r7tnPErmY9sZpKhWQ8S5k6XQ==", + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.2.tgz", + "integrity": "sha512-X4U7J1isDhoOmHmFWiLhloWc2lzMkdnumtfQ1LXzf/IOZp5NQYuMUTaviVzG/q1ugMBIXzin2AqeVJUoSEkNyQ==", "dependencies": { "tslib": "^2.3.0" } diff --git a/package.json b/package.json index cfdc0399..a01b2a56 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sfeir-school-angular", - "version": "13.2.0", + "version": "17.0.0", "license": "MIT", "scripts": { "ng": "nx", @@ -13,75 +13,75 @@ "lint:ci": "nx affected --exclude=docs --target=lint --base=remotes/origin/main --head=HEAD --parallel=5", "build:ci": "nx affected --exclude=docs --target=build --base=remotes/origin/main --head=HEAD --parallel=5", "lint:all": "nx run-many --target=lint --exclude=docs --all --parallel=5 --fix", + "test:all": "nx run-many --target=test --exclude=docs --all --parallel=5", "migrate-nx": "nx migrate latest", "run-migration": "nx migrate --run-migrations=migrations.json" }, "private": true, "dependencies": { - "@angular/animations": "16.2.5", - "@angular/cdk": "16.2.4", - "@angular/common": "16.2.5", - "@angular/compiler": "16.2.5", - "@angular/core": "16.2.5", - "@angular/forms": "16.2.5", - "@angular/material": "16.2.4", - "@angular/platform-browser": "16.2.5", - "@angular/platform-browser-dynamic": "16.2.5", - "@angular/router": "16.2.5", + "@angular/animations": "17.0.4", + "@angular/cdk": "17.0.1", + "@angular/common": "17.0.4", + "@angular/compiler": "17.0.4", + "@angular/core": "17.0.4", + "@angular/forms": "17.0.4", + "@angular/material": "17.0.1", + "@angular/platform-browser": "17.0.4", + "@angular/platform-browser-dynamic": "17.0.4", + "@angular/router": "17.0.4", "@ngneat/elf": "^2.3.0", "@ngneat/elf-entities": "^4.4.2", - "@ngrx/store": "16.0.1", - "@ngxs/store": "3.8.0-dev.master-9a3af36", - "@nx/angular": "17.0.2", + "@ngrx/store": "17.0.0", + "@ngxs/store": "3.8.1-dev.master-783234c", + "@nx/angular": "17.1.3", "cors": "^2.8.5", "express": "4.18.2", "rxjs": "7.8.0", "sfeir-school-theme": "^3.0.0-rc-2", "tslib": "^2.0.0", "underscore": "^1.13.2", - "zone.js": "0.13.0" + "zone.js": "0.14.2" }, "devDependencies": { - "@angular-devkit/build-angular": "16.2.2", - "@angular-eslint/eslint-plugin": "16.0.1", - "@angular-eslint/eslint-plugin-template": "16.0.1", - "@angular-eslint/template-parser": "16.0.1", - "@angular/cli": "~16.2.0", - "@angular/compiler-cli": "16.2.5", - "@angular/language-service": "16.2.5", - "@ngrx/store-devtools": "16.0.1", - "@nx/cypress": "17.0.2", - "@nx/eslint-plugin": "17.0.2", - "@nx/express": "17.0.2", - "@nx/jest": "17.0.2", - "@nx/node": "17.0.2", - "@nx/workspace": "17.0.2", + "@angular-devkit/build-angular": "17.0.3", + "@angular-eslint/eslint-plugin": "17.0.1", + "@angular-eslint/eslint-plugin-template": "17.0.1", + "@angular-eslint/template-parser": "17.0.1", + "@angular/cli": "~17.0.0", + "@angular/compiler-cli": "17.0.4", + "@angular/language-service": "17.0.4", + "@ngrx/store-devtools": "17.0.0", + "@nx/cypress": "17.1.3", + "@nx/eslint-plugin": "17.1.3", + "@nx/express": "17.1.3", + "@nx/jest": "17.1.3", + "@nx/node": "17.1.3", + "@nx/workspace": "17.1.3", "@testing-library/angular": "^14.1.0", "@types/express": "4.17.13", "@types/jest": "29.4.4", "@types/node": "18.7.1", - "@typescript-eslint/eslint-plugin": "5.62.0", - "@typescript-eslint/parser": "5.62.0", + "@typescript-eslint/eslint-plugin": "6.12.0", + "@typescript-eslint/parser": "6.12.0", "chokidar-cli": "^3.0.0", "cpx": "^1.5.0", - "cypress": "^9.1.0", "eslint": "8.46.0", "eslint-config-prettier": "9.0.0", "eslint-plugin-cypress": "2.14.0", - "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-prettier": "^5.0.1", "husky": "^8.0.3", "jest": "29.5.0", "jest-environment-jsdom": "29.5.0", - "jest-preset-angular": "13.1.1", + "jest-preset-angular": "13.1.4", "live-server": "^1.2.1", - "nx": "17.0.2", + "nx": "17.1.3", "nx-cloud": "16.5.2", "parallelshell": "3.0.1", - "prettier": "2.6.2", + "prettier": "3.1.0", "sass": "^1.19.0", "shelljs": "^0.8.5", "ts-jest": "29.1.0", - "typescript": "5.1.6", - "@nx/eslint": "17.0.2" + "typescript": "5.2.2", + "@nx/eslint": "17.1.3" } }