diff --git a/.github/workflows/automation-tests.yml b/.github/workflows/automation-tests.yml
index 0403e50b9..430c9c52b 100644
--- a/.github/workflows/automation-tests.yml
+++ b/.github/workflows/automation-tests.yml
@@ -19,7 +19,7 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
- dotnet-version: 6.0.x
+ dotnet-version: 8.0.x
- uses: actions/setup-node@v2
with:
node-version: '20'
@@ -34,14 +34,22 @@ jobs:
- name: Install Frontend Deps
run: yarn --cwd ./src/Ombi/ClientApp install
- - name: Build Frontend
- run: yarn --cwd ./src/Ombi/ClientApp build
+ - name: Install Test Dependencies
+ run: yarn --cwd ./tests install
- - name: Build Docker Image
- run: docker build -t ombi src/
+ - name: Start Frontend
+ run: |
+ nohup yarn --cwd ./src/Ombi/ClientApp start &
- - name: Run Docker Image
- run: nohup docker run --rm -p 5000:5000 ombi &
+ - name: Restore .NET Dependencies
+ run: dotnet restore ./src/Ombi/Ombi.csproj
+
+ - name: Build .NET Project
+ run: dotnet build ./src/Ombi/Ombi.csproj --no-restore
+
+ - name: Start Backend
+ run: |
+ nohup dotnet run --project ./src/Ombi -- --host http://*:3577 &
- name: Run Wiremock
run: nohup docker run --rm -p 32400:8080 --name wiremock wiremock/wiremock:2.35.0 &
@@ -49,17 +57,6 @@ jobs:
- name: Sleep for server to start
run: sleep 20
- # - name: Start Frontend
- # run: |
- # nohup yarn --cwd ./src/Ombi/ClientApp start &
-
- # - name: Install Automation Deps
- # run: yarn --cwd ./tests install
-
- # - name: Start Backend
- # run: |
- # nohup dotnet run --project ./src/Ombi -- --host http://*:3577 &
-
- name: Cypress Tests
uses: cypress-io/github-action@v4
with:
@@ -67,15 +64,15 @@ jobs:
browser: chrome
headless: true
working-directory: tests
- wait-on: http://localhost:5000/
+ wait-on: http://localhost:3577/
# 10 minutes
wait-on-timeout: 600
env:
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Stop Docker
+ - name: Stop Services
if: always()
run: |
- docker ps -q | xargs -I {} docker logs {}
- docker container kill $(docker ps -q)
\ No newline at end of file
+ pkill -f "dotnet.*Ombi" || true
+ docker container kill wiremock || true
\ No newline at end of file
diff --git a/src/Ombi/ClientApp/angular.json b/src/Ombi/ClientApp/angular.json
index b139c4bdb..2865231fc 100644
--- a/src/Ombi/ClientApp/angular.json
+++ b/src/Ombi/ClientApp/angular.json
@@ -25,6 +25,18 @@
"assets": [
"src/assets"
],
+ "optimization": true,
+ "buildOptimizer": true,
+ "aot": true,
+ "vendorChunk": true,
+ "extractLicenses": true,
+ "sourceMap": false,
+ "namedChunks": true,
+ "subresourceIntegrity": true,
+ "allowedCommonJsDependencies": [
+ "jquery",
+ "bootstrap"
+ ],
"styles": [
"node_modules/@angular/material/prebuilt-themes/indigo-pink.css",
"src/styles/_imports.scss",
@@ -42,11 +54,27 @@
]
},
"configurations": {
+ "development": {
+ "optimization": false,
+ "buildOptimizer": false,
+ "aot": false,
+ "vendorChunk": true,
+ "extractLicenses": false,
+ "sourceMap": true,
+ "namedChunks": true,
+ "subresourceIntegrity": false
+ },
"production": {
"budgets": [
+ {
+ "type": "initial",
+ "maximumWarning": "2mb",
+ "maximumError": "5mb"
+ },
{
"type": "anyComponentStyle",
- "maximumWarning": "6kb"
+ "maximumWarning": "6kb",
+ "maximumError": "10kb"
}
],
"fileReplacements": [
@@ -55,7 +83,15 @@
"with": "src/environments/environment.prod.ts"
}
],
- "outputHashing": "all"
+ "outputHashing": "all",
+ "optimization": true,
+ "buildOptimizer": true,
+ "aot": true,
+ "vendorChunk": true,
+ "extractLicenses": true,
+ "sourceMap": false,
+ "namedChunks": true,
+ "subresourceIntegrity": true
},
"hmr": {
"budgets": [
@@ -75,7 +111,8 @@
"vendorChunk": true,
"extractLicenses": false,
"sourceMap": true,
- "namedChunks": true
+ "namedChunks": true,
+ "aot": false
}
}
},
@@ -85,6 +122,9 @@
"buildTarget": "ombi:build"
},
"configurations": {
+ "development": {
+ "buildTarget": "ombi:build:development"
+ },
"production": {
"buildTarget": "ombi:build:production"
},
diff --git a/src/Ombi/ClientApp/package.json b/src/Ombi/ClientApp/package.json
index ce94858a7..478938809 100644
--- a/src/Ombi/ClientApp/package.json
+++ b/src/Ombi/ClientApp/package.json
@@ -3,8 +3,11 @@
"version": "4.0.0",
"scripts": {
"ng": "ng",
- "start": "ng serve --port 3578 --configuration hmr",
+ "start": "ng serve --port 3578 --configuration development",
+ "start:hmr": "ng serve --port 3578 --configuration hmr",
"build": "node --max_old_space_size=6144 node_modules/@angular/cli/bin/ng build -c production",
+ "build:dev": "node --max_old_space_size=6144 node_modules/@angular/cli/bin/ng build -c development",
+ "build:prod": "node --max_old_space_size=6144 node_modules/@angular/cli/bin/ng build -c production",
"lint": "ng lint",
"docs:json": "compodoc -p ./tsconfig.json -e json -d .",
"storybook": "start-storybook -p 6006",
diff --git a/src/Ombi/ClientApp/src/app/discover/components/carousel-list/carousel-list.component.html b/src/Ombi/ClientApp/src/app/discover/components/carousel-list/carousel-list.component.html
index f8dbaf257..a8e2b9c8d 100644
--- a/src/Ombi/ClientApp/src/app/discover/components/carousel-list/carousel-list.component.html
+++ b/src/Ombi/ClientApp/src/app/discover/components/carousel-list/carousel-list.component.html
@@ -1,21 +1,25 @@
-
-
- {{'Discovery.Combined' | translate}}
- {{'Discovery.Movies' | translate}}
- {{'Discovery.Tv' | translate}}
-
-
-@defer (when discoverResults.length > 0; prefetch on idle) {
-
-
-
-
-
+@if (discoverType() !== DiscoverType.Seasonal) {
+
+
+ {{'Discovery.Combined' | translate}}
+ {{'Discovery.Movies' | translate}}
+ {{'Discovery.Tv' | translate}}
+
+
}
-@placeholder(minimum 300) {
+
+@defer (when hasResults(); prefetch on idle) {
+
+
+
+
+
+} @placeholder(minimum 300) {
-
+ @for (item of [1,2,3,4,5,6,7,8,9,10]; track item) {
+
+ }
}
\ No newline at end of file
diff --git a/src/Ombi/ClientApp/src/app/discover/components/carousel-list/carousel-list.component.ts b/src/Ombi/ClientApp/src/app/discover/components/carousel-list/carousel-list.component.ts
index 12c81e894..f557f1969 100644
--- a/src/Ombi/ClientApp/src/app/discover/components/carousel-list/carousel-list.component.ts
+++ b/src/Ombi/ClientApp/src/app/discover/components/carousel-list/carousel-list.component.ts
@@ -1,4 +1,4 @@
-import { Component, OnInit, Input, ViewChild, Output, EventEmitter, Inject } from "@angular/core";
+import { Component, ViewChild, Inject, input, output, signal, computed, inject, ChangeDetectionStrategy } from "@angular/core";
import { DiscoverOption, IDiscoverCardResult } from "../../interfaces";
import { ISearchMovieResult, ISearchTvResult, RequestType } from "../../../interfaces";
import { SearchV2Service } from "../../../services";
@@ -17,46 +17,55 @@ export enum DiscoverType {
}
@Component({
- standalone: false,
+ standalone: false,
selector: "carousel-list",
templateUrl: "./carousel-list.component.html",
styleUrls: ["./carousel-list.component.scss"],
+ changeDetection: ChangeDetectionStrategy.OnPush
})
-export class CarouselListComponent implements OnInit {
-
- @Input() public discoverType: DiscoverType;
- @Input() public id: string;
- @Input() public isAdmin: boolean;
- @Output() public movieCount: EventEmitter = new EventEmitter();
+export class CarouselListComponent {
+ // Inputs using new input() function
+ public discoverType = input.required();
+ public id = input.required();
+ public isAdmin = input(false);
+
+ // Output using new output() function
+ public movieCount = output();
+
@ViewChild('carousel', {static: false}) carousel: Carousel;
+ // Services using inject() function
+ private searchService = inject(SearchV2Service);
+ private storageService = inject(StorageService);
+ private featureFacade = inject(FeaturesFacade);
+ private baseUrl = inject(APP_BASE_HREF);
+
+ // Public constants
public DiscoverOption = DiscoverOption;
- public discoverOptions: DiscoverOption = DiscoverOption.Combined;
- public discoverResults: IDiscoverCardResult[] = [];
- public movies: ISearchMovieResult[] = [];
- public tvShows: ISearchTvResult[] = [];
- public responsiveOptions: any;
public RequestType = RequestType;
- public loadingFlag: boolean;
public DiscoverType = DiscoverType;
- public is4kEnabled = false;
+
+ // State using signals
+ public discoverOptions = signal(DiscoverOption.Combined);
+ public discoverResults = signal([]);
+ public movies = signal([]);
+ public tvShows = signal([]);
+ public loadingFlag = signal(false);
+ public is4kEnabled = signal(false);
+
+ // Computed properties
+ public hasResults = computed(() => this.discoverResults().length > 0);
+ public totalResults = computed(() => this.discoverResults().length);
get mediaTypeStorageKey() {
- return "DiscoverOptions" + this.discoverType.toString();
+ return "DiscoverOptions" + this.discoverType().toString();
};
+
private amountToLoad = 10;
private currentlyLoaded = 0;
- private baseUrl: string = "";
+ public responsiveOptions: any;
-
- constructor(private searchService: SearchV2Service,
- private storageService: StorageService,
- private featureFacade: FeaturesFacade,
- @Inject(APP_BASE_HREF) private href: string) {
-
- if (this.href.length > 1) {
- this.baseUrl = this.href;
- }
+ constructor() {
Carousel.prototype.onTouchMove = () => { },
this.responsiveOptions = [
@@ -149,12 +158,14 @@ export class CarouselListComponent implements OnInit {
}
public async ngOnInit() {
-
- this.is4kEnabled = this.featureFacade.is4kEnabled();
+ // Initialize 4K feature flag
+ this.is4kEnabled.set(this.featureFacade.is4kEnabled());
this.currentlyLoaded = 0;
+
+ // Load saved discover options from storage
const localDiscoverOptions = +this.storageService.get(this.mediaTypeStorageKey);
if (localDiscoverOptions) {
- this.discoverOptions = DiscoverOption[DiscoverOption[localDiscoverOptions]];
+ this.discoverOptions.set(DiscoverOption[DiscoverOption[localDiscoverOptions]]);
}
// Load initial data - just enough to fill the first carousel page
@@ -162,10 +173,9 @@ export class CarouselListComponent implements OnInit {
await this.loadData(false);
// If we don't have enough results to fill the carousel, load one more batch
- if (this.discoverResults.length < 10) {
+ if (this.discoverResults().length < 10) {
await this.loadData(false);
}
-
}
public async toggleChanged(event: MatButtonToggleChange) {
@@ -183,7 +193,7 @@ export class CarouselListComponent implements OnInit {
if (end) {
var moviePromise: Promise;
var tvPromise: Promise;
- switch (+this.discoverOptions) {
+ switch (+this.discoverOptions()) {
case DiscoverOption.Combined:
moviePromise = this.loadMovies();
tvPromise = this.loadTv();
@@ -205,7 +215,7 @@ export class CarouselListComponent implements OnInit {
private async loadData(clearExisting: boolean = true) {
var moviePromise: Promise;
var tvPromise: Promise;
- switch (+this.discoverOptions) {
+ switch (+this.discoverOptions()) {
case DiscoverOption.Combined:
moviePromise = this.loadMovies();
tvPromise = this.loadTv();
@@ -223,50 +233,50 @@ export class CarouselListComponent implements OnInit {
}
private async switchDiscoverMode(newMode: DiscoverOption) {
- if (this.discoverOptions === newMode) {
+ if (this.discoverOptions() === newMode) {
return;
}
this.loading();
this.currentlyLoaded = 0;
- this.discoverOptions = +newMode;
+ this.discoverOptions.set(+newMode);
this.storageService.save(this.mediaTypeStorageKey, newMode.toString());
await this.loadData();
this.finishLoading();
}
private async loadMovies() {
- switch (this.discoverType) {
+ switch (this.discoverType()) {
case DiscoverType.Popular:
- this.movies = await this.searchService.popularMoviesByPage(this.currentlyLoaded, this.amountToLoad);
+ this.movies.set(await this.searchService.popularMoviesByPage(this.currentlyLoaded, this.amountToLoad));
break;
case DiscoverType.Trending:
- this.movies = await this.searchService.nowPlayingMoviesByPage(this.currentlyLoaded, this.amountToLoad);
+ this.movies.set(await this.searchService.nowPlayingMoviesByPage(this.currentlyLoaded, this.amountToLoad));
break;
case DiscoverType.Upcoming:
- this.movies = await this.searchService.upcomingMoviesByPage(this.currentlyLoaded, this.amountToLoad);
- break
+ this.movies.set(await this.searchService.upcomingMoviesByPage(this.currentlyLoaded, this.amountToLoad));
+ break;
case DiscoverType.RecentlyRequested:
- this.movies = await this.searchService.recentlyRequestedMoviesByPage(this.currentlyLoaded, this.amountToLoad);
+ this.movies.set(await this.searchService.recentlyRequestedMoviesByPage(this.currentlyLoaded, this.amountToLoad));
break;
case DiscoverType.Seasonal:
- this.movies = await this.searchService.seasonalMoviesByPage(this.currentlyLoaded, this.amountToLoad);
+ this.movies.set(await this.searchService.seasonalMoviesByPage(this.currentlyLoaded, this.amountToLoad));
break;
}
- this.movieCount.emit(this.movies.length);
+ this.movieCount.emit(this.movies().length);
this.currentlyLoaded += this.amountToLoad;
}
private async loadTv() {
- switch (this.discoverType) {
+ switch (this.discoverType()) {
case DiscoverType.Popular:
- this.tvShows = await this.searchService.popularTvByPage(this.currentlyLoaded, this.amountToLoad);
+ this.tvShows.set(await this.searchService.popularTvByPage(this.currentlyLoaded, this.amountToLoad));
break;
case DiscoverType.Trending:
- this.tvShows = await this.searchService.trendingTvByPage(this.currentlyLoaded, this.amountToLoad);
+ this.tvShows.set(await this.searchService.trendingTvByPage(this.currentlyLoaded, this.amountToLoad));
break;
case DiscoverType.Upcoming:
- this.tvShows = await this.searchService.anticipatedTvByPage(this.currentlyLoaded, this.amountToLoad);
- break
+ this.tvShows.set(await this.searchService.anticipatedTvByPage(this.currentlyLoaded, this.amountToLoad));
+ break;
case DiscoverType.RecentlyRequested:
// this.tvShows = await this.searchService.recentlyRequestedMoviesByPage(this.currentlyLoaded, this.amountToLoad); // TODO need to do some more mapping
break;
@@ -284,7 +294,7 @@ export class CarouselListComponent implements OnInit {
private createModel() {
const tempResults = [];
- switch (+this.discoverOptions) {
+ switch (+this.discoverOptions()) {
case DiscoverOption.Combined:
tempResults.push(...this.mapMovieModel());
tempResults.push(...this.mapTvModel());
@@ -298,14 +308,14 @@ export class CarouselListComponent implements OnInit {
break;
}
- this.discoverResults.push(...tempResults);
+ this.discoverResults.update(current => [...current, ...tempResults]);
this.finishLoading();
}
private mapMovieModel(): IDiscoverCardResult[] {
const tempResults = [];
- this.movies.forEach(m => {
+ this.movies().forEach(m => {
tempResults.push({
available: m.available,
posterPath: m.posterPath ? `https://image.tmdb.org/t/p/w500/${m.posterPath}` : this.baseUrl + "/images/default_movie_poster.png",
@@ -327,7 +337,7 @@ export class CarouselListComponent implements OnInit {
private mapTvModel(): IDiscoverCardResult[] {
const tempResults = [];
- this.tvShows.forEach(m => {
+ this.tvShows().forEach(m => {
tempResults.push({
available: m.fullyAvailable,
posterPath: m.backdropPath ? `https://image.tmdb.org/t/p/w500/${m.backdropPath}` : this.baseUrl + "/images/default_tv_poster.png",
@@ -348,7 +358,7 @@ export class CarouselListComponent implements OnInit {
}
private clear() {
- this.discoverResults = [];
+ this.discoverResults.set([]);
}
private shuffle(discover: IDiscoverCardResult[]): IDiscoverCardResult[] {
@@ -360,11 +370,11 @@ export class CarouselListComponent implements OnInit {
}
private loading() {
- this.loadingFlag = true;
+ this.loadingFlag.set(true);
}
private finishLoading() {
- this.loadingFlag = false;
+ this.loadingFlag.set(false);
}
diff --git a/src/Ombi/ClientApp/src/app/discover/components/discover/discover.component.html b/src/Ombi/ClientApp/src/app/discover/components/discover/discover.component.html
index dc4e33be1..ee66ec749 100644
--- a/src/Ombi/ClientApp/src/app/discover/components/discover/discover.component.html
+++ b/src/Ombi/ClientApp/src/app/discover/components/discover/discover.component.html
@@ -22,50 +22,58 @@
{{ 'Discovery.RecentlyRequestedTab' | translate }}
-
+ @for (item of [1,2,3,4,5]; track item) {
+
+ }
}
- @defer (on viewport; prefetch on idle) {
-
-
{{ 'Discovery.SeasonalTab' | translate }}
-
-
-
-
- } @placeholder(minimum 300) {
-
-
{{ 'Discovery.SeasonalTab' | translate }}
-
-
-
+ @if (showSeasonal()) {
+ @defer (on viewport; prefetch on idle) {
+
+
{{ 'Discovery.SeasonalTab' | translate }}
+
+
-
+ } @placeholder(minimum 300) {
+
+
{{ 'Discovery.SeasonalTab' | translate }}
+
+ @for (item of [1,2,3,4,5,6,7,8,9,10]; track item) {
+
+ }
+
+
+ }
}
@defer (on viewport; prefetch on idle) {
{{ 'Discovery.PopularTab' | translate }}
-
-
-
+
+
+
} @placeholder(minimum 300) {
{{ 'Discovery.PopularTab' | translate }}
-
+ @for (item of [1,2,3,4,5,6,7,8,9,10]; track item) {
+
+ }
}
@@ -73,17 +81,19 @@
@defer (on viewport; prefetch on idle) {
{{ 'Discovery.TrendingTab' | translate }}
-
-
-
+
+
+
} @placeholder(minimum 300) {
{{ 'Discovery.TrendingTab' | translate }}
-
+ @for (item of [1,2,3,4,5,6,7,8,9,10]; track item) {
+
+ }
}
@@ -91,17 +101,19 @@
@defer (on viewport; prefetch on idle) {
{{ 'Discovery.UpcomingTab' | translate }}
-
-
-
+
+
+
} @placeholder(minimum 300) {
{{ 'Discovery.UpcomingTab' | translate }}
-
+ @for (item of [1,2,3,4,5,6,7,8,9,10]; track item) {
+
+ }
}
diff --git a/src/Ombi/ClientApp/src/app/discover/components/discover/discover.component.ts b/src/Ombi/ClientApp/src/app/discover/components/discover/discover.component.ts
index ec50334c6..17b56443d 100644
--- a/src/Ombi/ClientApp/src/app/discover/components/discover/discover.component.ts
+++ b/src/Ombi/ClientApp/src/app/discover/components/discover/discover.component.ts
@@ -1,29 +1,34 @@
-import { Component, OnInit } from "@angular/core";
+import { Component, computed, inject, signal, ChangeDetectionStrategy } from "@angular/core";
import { AuthService } from "../../../auth/auth.service";
import { DiscoverType } from "../carousel-list/carousel-list.component";
@Component({
- standalone: false,
+ standalone: false,
templateUrl: "./discover.component.html",
styleUrls: ["./discover.component.scss"],
+ changeDetection: ChangeDetectionStrategy.OnPush
})
-export class DiscoverComponent implements OnInit {
-
+export class DiscoverComponent {
+ // Services using inject() function
+ private authService = inject(AuthService);
+ // Public constants
public DiscoverType = DiscoverType;
- public isAdmin: boolean;
- public showSeasonal: boolean;
+
+ // State using signals
+ public isAdmin = signal
(false);
+ public seasonalMovieCount = signal(0);
+
+ // Computed properties
+ public showSeasonal = computed(() => this.seasonalMovieCount() > 0);
- constructor(private authService: AuthService) { }
-
- public ngOnInit(): void {
- this.isAdmin = this.authService.isAdmin();
+ constructor() {
+ // Initialize admin status
+ this.isAdmin.set(this.authService.isAdmin());
}
- public setSeasonalMovieCount(count: number) {
- if (count > 0) {
- this.showSeasonal = true;
- }
+ public setSeasonalMovieCount(count: number): void {
+ this.seasonalMovieCount.set(count);
}
}
diff --git a/src/Ombi/ClientApp/src/app/issues/issues.component.html b/src/Ombi/ClientApp/src/app/issues/issues.component.html
index 72734ed85..993dc2394 100644
--- a/src/Ombi/ClientApp/src/app/issues/issues.component.html
+++ b/src/Ombi/ClientApp/src/app/issues/issues.component.html
@@ -1,28 +1,43 @@
-
-
+ @if (count()) {
- 0">
-
-
-
-
- 0" label="{{'Issues.InProgressTitle' | translate}}">
-
-
-
-
+ @if (hasPendingIssues()) {
+
+
+ }
+
+ @if (hasInProgressIssues()) {
+
+
+ @if (inProgressIssues()) {
+
+
+ }
+
+
+ }
+
- 0">
-
-
+ @if (hasResolvedIssues()) {
+
+
+ }
-
+ }
\ No newline at end of file
diff --git a/src/Ombi/ClientApp/src/app/issues/issues.component.ts b/src/Ombi/ClientApp/src/app/issues/issues.component.ts
index ed6df511e..f24005b17 100644
--- a/src/Ombi/ClientApp/src/app/issues/issues.component.ts
+++ b/src/Ombi/ClientApp/src/app/issues/issues.component.ts
@@ -1,69 +1,84 @@
-import { Component, OnInit } from "@angular/core";
-
-import { IssuesService } from "../services";
-
-import { IIssueCount, IIssues, IIssuesSummary, IPagenator, IssueStatus } from "../interfaces";
-
+import { Component, computed, inject, signal, ChangeDetectionStrategy } from "@angular/core";
import { PageEvent } from '@angular/material/paginator';
+import { IssuesService } from "../services";
import { IssuesV2Service } from "../services/issuesv2.service";
+import { IIssueCount, IIssues, IIssuesSummary, IssueStatus } from "../interfaces";
+import { CommonModule } from "@angular/common";
+import { MatPaginatorModule } from "@angular/material/paginator";
@Component({
- standalone: false,
+ standalone: false,
templateUrl: "issues.component.html",
styleUrls: ['issues.component.scss']
})
-export class IssuesComponent implements OnInit {
-
- public pendingIssues: IIssuesSummary[];
- public inProgressIssues: IIssuesSummary[];
- public resolvedIssues: IIssuesSummary[];
-
- public count: IIssueCount;
+export class IssuesComponent {
+ // Services using inject() function
+ private issuev2Service = inject(IssuesV2Service);
+ private issueService = inject(IssuesService);
+ // State using signals
+ private pendingSkip = signal(0);
+ private inProgressSkip = signal(0);
+ private resolvedSkip = signal(0);
+
private takeAmount = 50;
- private pendingSkip = 0;
- private inProgressSkip = 0;
- private resolvedSkip = 0;
- constructor(private issuev2Service: IssuesV2Service, private issueService: IssuesService) { }
+ // Public state signals
+ public pendingIssues = signal([]);
+ public inProgressIssues = signal([]);
+ public resolvedIssues = signal([]);
+ public count = signal(null);
- public ngOnInit() {
+ // Computed properties for derived state
+ public hasPendingIssues = computed(() => this.pendingIssues().length > 0);
+ public hasInProgressIssues = computed(() => this.inProgressIssues().length > 0);
+ public hasResolvedIssues = computed(() => this.resolvedIssues().length > 0);
+
+ public totalIssues = computed(() => {
+ const count = this.count();
+ if (!count) return 0;
+ return count.pending + count.inProgress + count.resolved;
+ });
+
+ constructor() {
+ // Initialize data
+ this.loadInitialData();
+ }
+
+ private loadInitialData(): void {
this.getPending();
this.getInProg();
this.getResolved();
- this.issueService.getIssuesCount().subscribe(x => this.count = x);
+ this.issueService.getIssuesCount().subscribe(count => this.count.set(count));
}
- public changePagePending(event: PageEvent) {
- this.pendingSkip = event.pageSize * event.pageIndex++;
+ public changePagePending(event: PageEvent): void {
+ this.pendingSkip.set(event.pageSize * event.pageIndex);
this.getPending();
}
- public changePageInProg(event: PageEvent) {
- this.inProgressSkip = event.pageSize * event.pageIndex++;
+ public changePageInProg(event: PageEvent): void {
+ this.inProgressSkip.set(event.pageSize * event.pageIndex);
this.getInProg();
}
- public changePageResolved(event: PageEvent) {
- this.resolvedSkip = event.pageSize * event.pageIndex++;
+ public changePageResolved(event: PageEvent): void {
+ this.resolvedSkip.set(event.pageSize * event.pageIndex);
this.getResolved();
}
- private getPending() {
- this.issuev2Service.getIssues(this.pendingSkip, this.takeAmount, IssueStatus.Pending).subscribe(x => {
- this.pendingIssues = x;
- });
+ private getPending(): void {
+ this.issuev2Service.getIssues(this.pendingSkip(), this.takeAmount, IssueStatus.Pending)
+ .subscribe(issues => this.pendingIssues.set(issues));
}
- private getInProg() {
- this.issuev2Service.getIssues(this.inProgressSkip, this.takeAmount, IssueStatus.InProgress).subscribe(x => {
- this.inProgressIssues = x;
- });
+ private getInProg(): void {
+ this.issuev2Service.getIssues(this.inProgressSkip(), this.takeAmount, IssueStatus.InProgress)
+ .subscribe(issues => this.inProgressIssues.set(issues));
}
- private getResolved() {
- this.issuev2Service.getIssues(this.resolvedSkip, this.takeAmount, IssueStatus.Resolved).subscribe(x => {
- this.resolvedIssues = x;
- });
+ private getResolved(): void {
+ this.issuev2Service.getIssues(this.resolvedSkip(), this.takeAmount, IssueStatus.Resolved)
+ .subscribe(issues => this.resolvedIssues.set(issues));
}
}
diff --git a/src/Ombi/ClientApp/src/app/media-details/components/tv/panels/tv-request-grid/tv-request-grid.component.html b/src/Ombi/ClientApp/src/app/media-details/components/tv/panels/tv-request-grid/tv-request-grid.component.html
index 53335f435..5e7327163 100644
--- a/src/Ombi/ClientApp/src/app/media-details/components/tv/panels/tv-request-grid/tv-request-grid.component.html
+++ b/src/Ombi/ClientApp/src/app/media-details/components/tv/panels/tv-request-grid/tv-request-grid.component.html
@@ -76,7 +76,6 @@
-->
-
+
diff --git a/src/Ombi/ClientApp/src/app/media-details/components/tv/tv-details.component.html b/src/Ombi/ClientApp/src/app/media-details/components/tv/tv-details.component.html
index 4661c9f6a..9e1fa9565 100644
--- a/src/Ombi/ClientApp/src/app/media-details/components/tv/tv-details.component.html
+++ b/src/Ombi/ClientApp/src/app/media-details/components/tv/tv-details.component.html
@@ -192,11 +192,13 @@
- @defer (on viewport; prefetch on idle) {
-
- } @placeholder {
-
- }
+
+
+
diff --git a/src/Ombi/ClientApp/src/app/media-details/media-details.component.scss b/src/Ombi/ClientApp/src/app/media-details/media-details.component.scss
index 196a8f93a..8d3ce8c4a 100644
--- a/src/Ombi/ClientApp/src/app/media-details/media-details.component.scss
+++ b/src/Ombi/ClientApp/src/app/media-details/media-details.component.scss
@@ -99,6 +99,14 @@
min-height: 600px;
}
+// FAB Button styling moved from tv-request-grid component
+.floating-fab {
+ position: fixed;
+ right: 3%;
+ bottom: 6%;
+ z-index: 10;
+}
+
#info-wrapper .sidebar.affixable.affix-top {
position: relative !important;
}
diff --git a/tests/cypress.config.ts b/tests/cypress.config.ts
index 53d177e2f..c37fac020 100644
--- a/tests/cypress.config.ts
+++ b/tests/cypress.config.ts
@@ -4,24 +4,39 @@ import { addCucumberPreprocessorPlugin } from "@badeball/cypress-cucumber-prepro
import createEsbuildPlugin from "@badeball/cypress-cucumber-preprocessor/esbuild";
export default defineConfig({
- watchForFileChanges: true,
- video: true,
+ // Performance optimizations
+ watchForFileChanges: false, // Disable in CI
+ video: false, // Disable video recording for faster runs
+ screenshotOnRunFailure: true,
+ trashAssetsBeforeRuns: true,
+
+ // Security and viewport
chromeWebSecurity: false,
- viewportWidth: 2560,
- viewportHeight: 1440,
+ viewportWidth: 1920,
+ viewportHeight: 1080,
+
+ // Retry configuration
retries: {
runMode: 2,
openMode: 0,
},
+
+ // Environment variables
env: {
username: 'a',
password: 'a',
- dockerhost: 'http://172.17.0.1'
+ dockerhost: 'http://172.17.0.1',
+ // Add test environment flags
+ isCI: process.env.CI === 'true',
+ // Add API base URL
+ apiBaseUrl: 'http://localhost:3577/api/v1'
},
+
+ // Project configuration
projectId: 'o5451s',
+
e2e: {
- // We've imported your old cypress plugins here.
- // You may want to clean this up later by importing these.
+ // Setup node events
async setupNodeEvents(
on: Cypress.PluginEvents,
config: Cypress.PluginConfigOptions
@@ -35,12 +50,53 @@ export default defineConfig({
})
);
- // Make sure to return the config object as it might have been modified by the plugin.
+ // Add performance monitoring
+ on('task', {
+ log(message) {
+ console.log(message);
+ return null;
+ },
+ table(message) {
+ console.table(message);
+ return null;
+ }
+ });
+
return config;
- // return require('./cypress/plugins/index.js')(on, config)
},
- baseUrl: 'http://localhost:5000',
- specPattern: ['cypress/tests/**/*.spec.ts*', '**/*.feature'],
- excludeSpecPattern: ['**/snapshots/*'],
+
+ // Base configuration
+ baseUrl: 'http://localhost:3577',
+ specPattern: [
+ 'cypress/tests/**/*.spec.ts*',
+ 'cypress/features/**/*.feature'
+ ],
+ excludeSpecPattern: [
+ '**/snapshots/*',
+ '**/examples/*',
+ '**/*.skip.ts'
+ ],
+
+ // Test isolation and performance
+ experimentalRunAllSpecs: true,
+ experimentalModifyObstructiveThirdPartyCode: true,
+
+ // Better error handling
+ defaultCommandTimeout: 10000,
+ requestTimeout: 10000,
+ responseTimeout: 10000,
+
+ // Screenshot and video settings
+ screenshotsFolder: 'cypress/screenshots',
+ videosFolder: 'cypress/videos',
},
-})
+
+ // Component testing (if needed later)
+ component: {
+ devServer: {
+ framework: 'angular',
+ bundler: 'webpack',
+ },
+ specPattern: 'cypress/component/**/*.cy.ts',
+ },
+});
diff --git a/tests/cypress/integration/page-objects/base.page.ts b/tests/cypress/integration/page-objects/base.page.ts
index 86f39de15..f4f0bd84a 100644
--- a/tests/cypress/integration/page-objects/base.page.ts
+++ b/tests/cypress/integration/page-objects/base.page.ts
@@ -1,10 +1,80 @@
import { navBar as NavBar } from './shared/NavBar';
-export abstract class BasePage {
- abstract visit(options: Cypress.VisitOptions): Cypress.Chainable
;
- abstract visit(): Cypress.Chainable;
- abstract visit(id: string): Cypress.Chainable;
- abstract visit(id: string, options: Cypress.VisitOptions): Cypress.Chainable;
- navbar = NavBar;
+export abstract class BasePage {
+ // Abstract visit methods
+ abstract visit(options?: any): Cypress.Chainable;
+ abstract visit(id?: string, options?: any): Cypress.Chainable;
+
+ // Common page properties
+ navbar = NavBar;
+
+ // Common page methods
+ /**
+ * Wait for page to be fully loaded
+ */
+ waitForPageLoad(): Cypress.Chainable {
+ return cy.get('body').should('be.visible');
+ }
+
+ /**
+ * Check if page is loaded by verifying a unique element
+ */
+ isPageLoaded(uniqueSelector: string): Cypress.Chainable {
+ return cy.get(uniqueSelector).should('exist').then(() => true);
+ }
+
+ /**
+ * Scroll to element with smooth behavior
+ */
+ scrollToElement(selector: string): Cypress.Chainable {
+ return cy.get(selector).scrollIntoView();
+ }
+
+ /**
+ * Wait for loading spinner to disappear
+ */
+ waitForLoadingToComplete(): Cypress.Chainable {
+ return cy.get('[data-test="loading-spinner"]', { timeout: 10000 }).should('not.exist');
+ }
+
+ /**
+ * Get element by data-test attribute
+ */
+ getByData(selector: string): Cypress.Chainable {
+ return cy.get(`[data-test="${selector}"]`);
+ }
+
+ /**
+ * Get element by data-test attribute with partial match
+ */
+ getByDataLike(selector: string): Cypress.Chainable {
+ return cy.get(`[data-test*="${selector}"]`);
+ }
+
+ /**
+ * Check if element is visible and enabled
+ */
+ isElementInteractive(selector: string): Cypress.Chainable {
+ return cy.get(selector)
+ .should('be.visible')
+ .should('not.be.disabled')
+ .then(() => true);
+ }
+
+ /**
+ * Take screenshot of current page
+ */
+ takeScreenshot(name?: string): Cypress.Chainable {
+ const screenshotName = name || `${this.constructor.name}_${Date.now()}`;
+ return cy.screenshot(screenshotName);
+ }
+
+ /**
+ * Log page action for debugging
+ */
+ logAction(action: string, details?: any): void {
+ // Use console.log instead of cy.log to avoid promise/cy command mixing
+ console.log(`[${this.constructor.name}] ${action}`, details);
+ }
}
diff --git a/tests/cypress/integration/page-objects/login/login.page.ts b/tests/cypress/integration/page-objects/login/login.page.ts
index 37e2b8eab..fb0021e20 100644
--- a/tests/cypress/integration/page-objects/login/login.page.ts
+++ b/tests/cypress/integration/page-objects/login/login.page.ts
@@ -1,36 +1,147 @@
import { BasePage } from "../base.page";
-class LoginPage extends BasePage {
+export class LoginPage extends BasePage {
+ // Page selectors
+ private readonly selectors = {
+ username: '#username-field',
+ password: '#password-field',
+ ombiSignInButton: '[data-cy=OmbiButton]',
+ plexSignInButton: '[data-cy=oAuthPlexButton]',
+ loginForm: '[data-test="login-form"]',
+ errorMessage: '[data-test="error-message"]',
+ loadingSpinner: '[data-test="loading-spinner"]'
+ } as const;
+ // Getters for page elements
+ get username() {
+ return cy.get(this.selectors.username);
+ }
- get username(): Cypress.Chainable {
- return cy.get('#username-field');
- }
+ get password() {
+ return cy.get(this.selectors.password);
+ }
- get password(): Cypress.Chainable {
- return cy.get('#password-field');
- }
+ get ombiSignInButton() {
+ return cy.get(this.selectors.ombiSignInButton);
+ }
- get ombiSignInButton(): Cypress.Chainable {
- return cy.get('[data-cy=OmbiButton]');
- }
+ get plexSignInButton() {
+ return cy.get(this.selectors.plexSignInButton);
+ }
- get plexSignInButton(): Cypress.Chainable {
- return cy.get('[data-cy=oAuthPlexButton]');
- }
+ get loginForm() {
+ return cy.get(this.selectors.loginForm);
+ }
- constructor() {
- super();
- }
+ get errorMessage() {
+ return cy.get(this.selectors.errorMessage);
+ }
- visit(options: Cypress.VisitOptions): Cypress.Chainable;
- visit(): Cypress.Chainable;
- visit(id: string): Cypress.Chainable;
- visit(id: string, options: Cypress.VisitOptions): Cypress.Chainable;
- visit(id?: any, options?: any) {
- return cy.visit(`/login`, options);
- }
+ get loadingSpinner() {
+ return cy.get(this.selectors.loadingSpinner);
+ }
+ // Page visit method
+ visit(options?: any): Cypress.Chainable {
+ this.logAction('Visiting login page');
+ return cy.visit('/login', options);
+ }
+
+ // Page-specific methods
+ /**
+ * Fill login form with credentials
+ */
+ fillLoginForm(username: string, password: string): Cypress.Chainable {
+ this.logAction('Filling login form', { username });
+
+ return cy.wrap(null).then(() => {
+ this.username.clear().type(username);
+ this.password.clear().type(password);
+ });
+ }
+
+ /**
+ * Submit login form
+ */
+ submitLoginForm(): Cypress.Chainable {
+ this.logAction('Submitting login form');
+ return this.ombiSignInButton.click();
+ }
+
+ /**
+ * Complete login flow
+ */
+ login(username: string, password: string): Cypress.Chainable {
+ this.logAction('Performing login', { username });
+
+ return this.fillLoginForm(username, password)
+ .then(() => this.submitLoginForm());
+ }
+
+ /**
+ * Wait for login to complete
+ */
+ waitForLoginComplete(): Cypress.Chainable {
+ this.logAction('Waiting for login to complete');
+
+ return cy.url().should('not.include', '/login')
+ .then(() => {
+ this.logAction('Login completed successfully');
+ });
+ }
+
+ /**
+ * Check if login form is visible
+ */
+ isLoginFormVisible(): Cypress.Chainable {
+ return this.loginForm.should('be.visible').then(() => true);
+ }
+
+ /**
+ * Check if Plex OAuth button is visible
+ */
+ isPlexOAuthVisible(): Cypress.Chainable {
+ return this.plexSignInButton.should('be.visible').then(() => true);
+ }
+
+ /**
+ * Check if error message is displayed
+ */
+ isErrorMessageVisible(): Cypress.Chainable {
+ return this.errorMessage.should('be.visible').then(() => true);
+ }
+
+ /**
+ * Get error message text
+ */
+ getErrorMessageText(): Cypress.Chainable {
+ return this.errorMessage.invoke('text');
+ }
+
+ /**
+ * Clear login form
+ */
+ clearLoginForm(): Cypress.Chainable {
+ this.logAction('Clearing login form');
+
+ return cy.wrap(null).then(() => {
+ this.username.clear();
+ this.password.clear();
+ });
+ }
+
+ /**
+ * Verify page is loaded
+ */
+ verifyPageLoaded(): Cypress.Chainable {
+ this.logAction('Verifying login page is loaded');
+
+ return this.waitForPageLoad()
+ .then(() => this.isLoginFormVisible())
+ .then(() => {
+ this.logAction('Login page loaded successfully');
+ });
+ }
}
export const loginPage = new LoginPage();
diff --git a/tests/cypress/support/commands.ts b/tests/cypress/support/commands.ts
index 9a08bdef1..8859575aa 100644
--- a/tests/cypress/support/commands.ts
+++ b/tests/cypress/support/commands.ts
@@ -1,126 +1,165 @@
// ***********************************************
-// This example commands.js shows you how to
-// create various custom commands and overwrite
-// existing commands.
-//
-// For more comprehensive examples of custom
-// commands please read more here:
-// https://on.cypress.io/custom-commands
+// Enhanced custom commands with better TypeScript support
// ***********************************************
-//
-//
-// -- This is a parent command --
-// Cypress.Commands.add("login", (email, password) => { ... })
-//
-//
-// -- This is a child command --
-// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... })
-//
-//
-// -- This is a dual command --
-// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... })
-//
-//
-// -- This will overwrite an existing command --
-// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... })
import 'cypress-wait-until';
-Cypress.Commands.add("landingSettings", (enabled) => {
- cy.fixture('login/landingPageSettings').then((settings) => {
- settings.enabled = enabled;
- cy.intercept("GET", "**/Settings/LandingPage", settings).as("landingPageSettingsDisabled");
- })
-})
-
-Cypress.Commands.add('loginWithCreds', (username, password) => {
- cy.request({
- method: 'POST',
- url: '/api/v1/token',
- body: {
- username: username,
- password: password,
- }
- })
- .then((resp) => {
- window.localStorage.setItem('id_token', resp.body.access_token);
- });
- });
-
- Cypress.Commands.add('login', () => {
- cy.clearLocalStorage();
- cy.request({
- method: 'POST',
- url: '/api/v1/token',
- body: {
- username: Cypress.env('username'),
- password: Cypress.env('password'),
- }
- })
- .then((resp) => {
- window.localStorage.setItem('id_token', resp.body.access_token);
- });
- });
-
-Cypress.Commands.add('removeLogin', () => {
- window.localStorage.removeItem('id_token');
-});
-
-Cypress.Commands.add('verifyNotification', (text) => {
- cy.contains(text, {timeout: 10000});
-});
-
-Cypress.Commands.add('createUser', (username, password, claims) => {
- cy.request({
- method: 'POST',
- url: '/api/v1/identity',
- body: {
- UserName: username,
- Password: password,
- Claims: claims,
- },
- headers: {
- 'Authorization': 'Bearer ' + window.localStorage.getItem('id_token'),
- }
- })
-})
-
-Cypress.Commands.add('generateUniqueId', () => {
- const uniqueSeed = Date.now().toString();
- const id = Cypress._.uniqueId(uniqueSeed);
- cy.wrap(id);
-});
-
-Cypress.Commands.add("getByData", (selector, ...args) => {
- return cy.get(`[data-test=${selector}]`, ...args);
-});
-
-
-Cypress.Commands.add("getByData", (selector) => {
- return cy.get(`[data-test=${selector}]`);
- });
-
- Cypress.Commands.add("getByDataLike", (selector) => {
- return cy.get(`[data-test*=${selector}]`);
- });
-
- Cypress.Commands.add('triggerHover', function(elements) {
-
- fireEvent(elements, 'mouseover');
-
-
- function fireEvent(element, event) {
- if (element.fireEvent) {
- element.fireEvent('on' + event);
- } else {
- const evObj = document.createEvent('Events');
-
- evObj.initEvent(event, true, false);
-
- element.dispatchEvent(evObj);
- }
+// Type definitions for custom commands
+declare global {
+ namespace Cypress {
+ interface Chainable {
+ landingSettings(enabled: boolean): Chainable;
+ loginWithCreds(username: string, password: string): Chainable;
+ login(): Chainable;
+ removeLogin(): Chainable;
+ verifyNotification(text: string): Chainable;
+ createUser(username: string, password: string, claims: string[]): Chainable;
+ generateUniqueId(): Chainable;
+ getByData(selector: string): Chainable>;
+ getByDataLike(selector: string): Chainable>;
+ triggerHover(elements: JQuery): Chainable;
+ waitForApiResponse(alias: string, timeout?: number): Chainable;
+ clearTestData(): Chainable;
+ seedTestData(fixture: string): Chainable;
+ api(options: any): Chainable;
}
+ }
+}
+// Enhanced landing page settings command
+Cypress.Commands.add("landingSettings", (enabled: boolean) => {
+ cy.fixture('login/landingPageSettings').then((settings) => {
+ settings.enabled = enabled;
+ cy.intercept("GET", "**/Settings/LandingPage", settings).as("landingPageSettings");
});
+});
+// Enhanced login with credentials
+Cypress.Commands.add('loginWithCreds', (username: string, password: string) => {
+ cy.request({
+ method: 'POST',
+ url: '/api/v1/token',
+ body: { username, password },
+ failOnStatusCode: false
+ }).then((resp) => {
+ if (resp.status === 200) {
+ window.localStorage.setItem('id_token', resp.body.access_token);
+ }
+ });
+
+ // Log outside of the promise chain
+ cy.log(`Login attempt for user: ${username}`);
+});
+
+// Enhanced default login
+Cypress.Commands.add('login', () => {
+ cy.clearLocalStorage();
+ cy.clearCookies();
+
+ const username = Cypress.env('username');
+ const password = Cypress.env('password');
+
+ if (!username || !password) {
+ throw new Error('Username and password must be set in environment variables');
+ }
+
+ cy.loginWithCreds(username, password);
+});
+
+// Enhanced login removal
+Cypress.Commands.add('removeLogin', () => {
+ cy.clearLocalStorage();
+ cy.clearCookies();
+ cy.log('Cleared authentication data');
+});
+
+// Enhanced notification verification with better error handling
+Cypress.Commands.add('verifyNotification', (text: string) => {
+ cy.contains(text, { timeout: 10000 })
+ .should('be.visible');
+});
+
+// Enhanced user creation with better error handling
+Cypress.Commands.add('createUser', (username: string, password: string, claims: string[]) => {
+ const token = window.localStorage.getItem('id_token');
+ if (!token) {
+ throw new Error('No authentication token found. Please login first.');
+ }
+
+ cy.request({
+ method: 'POST',
+ url: '/api/v1/identity',
+ body: {
+ UserName: username,
+ Password: password,
+ Claims: claims,
+ },
+ headers: {
+ 'Authorization': `Bearer ${token}`,
+ },
+ failOnStatusCode: false
+ }).then((resp) => {
+ if (resp.status !== 200) {
+ // Use console.log instead of cy.log inside promise
+ console.log(`Failed to create user ${username}: ${resp.status}`);
+ }
+ });
+
+ // Log outside of the promise chain
+ cy.log(`Creating user: ${username}`);
+});
+
+// Enhanced unique ID generation
+Cypress.Commands.add('generateUniqueId', () => {
+ const uniqueSeed = Date.now().toString();
+ const id = Cypress._.uniqueId(uniqueSeed);
+ cy.wrap(id);
+});
+
+// Enhanced data attribute selectors with better typing
+Cypress.Commands.add("getByData", (selector: string) => {
+ return cy.get(`[data-test="${selector}"]`);
+});
+
+Cypress.Commands.add("getByDataLike", (selector: string) => {
+ return cy.get(`[data-test*="${selector}"]`);
+});
+
+// Enhanced hover trigger with better event handling
+Cypress.Commands.add('triggerHover', function(elements: JQuery) {
+ elements.each((index, element) => {
+ const mouseoverEvent = new MouseEvent('mouseover', {
+ bubbles: true,
+ cancelable: true,
+ view: window
+ });
+ element.dispatchEvent(mouseoverEvent);
+ });
+});
+
+// New command: Wait for API response with timeout
+Cypress.Commands.add('waitForApiResponse', (alias: string, timeout: number = 10000) => {
+ cy.wait(`@${alias}`, { timeout });
+});
+
+// New command: Clear test data
+Cypress.Commands.add('clearTestData', () => {
+ cy.clearLocalStorage();
+ cy.clearCookies();
+ cy.clearAllSessionStorage();
+ cy.log('All test data cleared');
+});
+
+// New command: Seed test data from fixture
+Cypress.Commands.add('seedTestData', (fixture: string) => {
+ cy.fixture(fixture).then((data) => {
+ // Implementation depends on your seeding strategy
+ // Example: cy.request('POST', '/api/v1/test/seed', data);
+ });
+
+ // Log outside of the promise chain
+ cy.log(`Seeding test data from ${fixture}`);
+});
+
+
\ No newline at end of file
diff --git a/tests/cypress/support/e2e.ts b/tests/cypress/support/e2e.ts
index ad17442eb..26987e764 100644
--- a/tests/cypress/support/e2e.ts
+++ b/tests/cypress/support/e2e.ts
@@ -19,7 +19,8 @@ import './request.commands';
import './plex-settings.commands';
import './mock-data.commands';
import "cypress-real-events/support";
-import '@bahmutov/cy-api/support';
+import "@bahmutov/cy-api/support";
+
// Alternatively you can use CommonJS syntax:
// require('./commands')
diff --git a/tests/cypress/support/mock-data.commands.ts b/tests/cypress/support/mock-data.commands.ts
index cee19af26..91993d6b2 100644
--- a/tests/cypress/support/mock-data.commands.ts
+++ b/tests/cypress/support/mock-data.commands.ts
@@ -1,3 +1,12 @@
+// Type definitions for mock data commands
+declare global {
+ namespace Cypress {
+ interface Chainable {
+ addMock(mapping: any): Chainable;
+ clearMocks(): Chainable;
+ }
+ }
+}
Cypress.Commands.add('addMock', (mapping) => {
cy.request({
@@ -12,4 +21,6 @@ Cypress.Commands.add('clearMocks', () => {
method: 'DELETE',
url: 'http://localhost:32400/__admin/mappings'
})
-})
\ No newline at end of file
+})
+
+export {};
\ No newline at end of file
diff --git a/tests/cypress/support/plex-settings.commands.ts b/tests/cypress/support/plex-settings.commands.ts
index 859f80da2..0b8872729 100644
--- a/tests/cypress/support/plex-settings.commands.ts
+++ b/tests/cypress/support/plex-settings.commands.ts
@@ -1,3 +1,11 @@
+// Type definitions for plex settings commands
+declare global {
+ namespace Cypress {
+ interface Chainable {
+ clearPlexServers(): Chainable;
+ }
+ }
+}
Cypress.Commands.add('clearPlexServers', () => {
cy.request({
@@ -9,4 +17,6 @@ Cypress.Commands.add('clearPlexServers', () => {
'Content-Type':"application/json"
}
})
-})
\ No newline at end of file
+})
+
+export {};
\ No newline at end of file
diff --git a/tests/cypress/support/request.commands.ts b/tests/cypress/support/request.commands.ts
index 1d48d6f05..6496aa557 100644
--- a/tests/cypress/support/request.commands.ts
+++ b/tests/cypress/support/request.commands.ts
@@ -1,3 +1,14 @@
+// Type definitions for request commands
+declare global {
+ namespace Cypress {
+ interface Chainable {
+ requestGenericMovie(): Chainable;
+ requestMovie(movieId: number): Chainable;
+ requestAllTv(tvId: number): Chainable;
+ removeAllMovieRequests(): Chainable;
+ }
+ }
+}
Cypress.Commands.add('requestGenericMovie', () => {
cy.request({
@@ -47,4 +58,6 @@ Cypress.Commands.add('removeAllMovieRequests', () => {
'Authorization': 'Bearer ' + window.localStorage.getItem('id_token'),
}
});
-})
\ No newline at end of file
+})
+
+export {};
\ No newline at end of file
diff --git a/tests/cypress/tests/api/v1/tv-request.api.spec.ts b/tests/cypress/tests/api/v1/tv-request.api.spec.ts
index 526fc40dd..e37ebced7 100644
--- a/tests/cypress/tests/api/v1/tv-request.api.spec.ts
+++ b/tests/cypress/tests/api/v1/tv-request.api.spec.ts
@@ -83,3 +83,5 @@ describe("TV Request V1 API tests", () => {
});
});
});
+
+export {};
diff --git a/tests/cypress/tests/api/v1/tv-search.api.spec.ts b/tests/cypress/tests/api/v1/tv-search.api.spec.ts
index af88475a8..a59867c47 100644
--- a/tests/cypress/tests/api/v1/tv-search.api.spec.ts
+++ b/tests/cypress/tests/api/v1/tv-search.api.spec.ts
@@ -100,3 +100,5 @@ describe("TV Search V1 API tests", () => {
});
});
});
+
+export {};
diff --git a/tests/cypress/tests/details/tv/tvdetails-buttons.spec.ts b/tests/cypress/tests/details/tv/tvdetails-buttons.spec.ts
index f4177d14d..4597adbc7 100644
--- a/tests/cypress/tests/details/tv/tvdetails-buttons.spec.ts
+++ b/tests/cypress/tests/details/tv/tvdetails-buttons.spec.ts
@@ -67,7 +67,7 @@ describe("TV Details Buttons", () => {
});
- it.only("Issues Enabled", () => {
+ it("Issues Enabled", () => {
cy.intercept("GET", "**/Settings/issuesenabled", 'true').as('issuesEnabled');
cy.visit("/details/tv/1399");
diff --git a/tests/cypress/tests/details/tv/tvdetails-requests-grid.spec.ts b/tests/cypress/tests/details/tv/tvdetails-requests-grid.spec.ts
index f0274283f..8486bcbf5 100644
--- a/tests/cypress/tests/details/tv/tvdetails-requests-grid.spec.ts
+++ b/tests/cypress/tests/details/tv/tvdetails-requests-grid.spec.ts
@@ -190,3 +190,5 @@ describe("TV Requests Grid", function () {
.should('have.class', 'requested')
});
});
+
+export {};
diff --git a/tests/cypress/tests/discover/discover-responsive.spec.ts b/tests/cypress/tests/discover/discover-responsive.spec.ts
index de5f6e082..360312f83 100644
--- a/tests/cypress/tests/discover/discover-responsive.spec.ts
+++ b/tests/cypress/tests/discover/discover-responsive.spec.ts
@@ -27,3 +27,5 @@ describe("Discover Responsive Tests", () => {
});
+
+export {};
diff --git a/tests/cypress/tests/login/login.spec.ts b/tests/cypress/tests/login/login.spec.ts
index 0c45b6cbd..07427b4fa 100644
--- a/tests/cypress/tests/login/login.spec.ts
+++ b/tests/cypress/tests/login/login.spec.ts
@@ -76,3 +76,5 @@ cy.wait("@authSettings");
cy.url().should("include", "/discover");
});
});
+
+export {};
diff --git a/tests/cypress/tests/requests/requests.spec.ts b/tests/cypress/tests/requests/requests.spec.ts
index c161d0645..f189ae53f 100644
--- a/tests/cypress/tests/requests/requests.spec.ts
+++ b/tests/cypress/tests/requests/requests.spec.ts
@@ -50,3 +50,5 @@ describe("Requests Tests", () => {
row.title.should('not.exist');
});
});
+
+export {};
diff --git a/tests/cypress/tests/usermanagement/usermanagement.spec.ts b/tests/cypress/tests/usermanagement/usermanagement.spec.ts
index 1631f066a..656936ea5 100644
--- a/tests/cypress/tests/usermanagement/usermanagement.spec.ts
+++ b/tests/cypress/tests/usermanagement/usermanagement.spec.ts
@@ -160,4 +160,6 @@ describe('User Management Page', () => {
cy.get('#edituserToEdit').click();
cy.get('#rolePowerUser').should('have.class', 'mat-checked');
});
- });
\ No newline at end of file
+ });
+
+export {};
\ No newline at end of file
diff --git a/tests/package.json b/tests/package.json
index 07450868a..54d115629 100644
--- a/tests/package.json
+++ b/tests/package.json
@@ -2,9 +2,10 @@
"devDependencies": {
"@badeball/cypress-cucumber-preprocessor": "^14.0.0",
"@bahmutov/cy-api": "^1.5.0",
- "@bahmutov/cypress-esbuild-preprocessor": "^2.1.5",
+ "@bahmutov/cypress-esbuild-preprocessor": "^2.2.5",
"cypress": "13.17.0",
"cypress-wait-until": "^1.7.1",
+ "esbuild": "^0.18.0",
"typescript": "^4.2.3"
},
"name": "ombiautomation",
diff --git a/tests/tsconfig.json b/tests/tsconfig.json
index 07a8c10e2..1ee65506a 100644
--- a/tests/tsconfig.json
+++ b/tests/tsconfig.json
@@ -1,16 +1,36 @@
{
"compilerOptions": {
- "target": "es6",
+ "target": "ES2022",
+ "lib": ["ES2022", "DOM"],
+ "module": "ESNext",
+ "moduleResolution": "node",
+ "strict": true,
"esModuleInterop": true,
- "lib": ["es2018", "dom"],
- "types": ["cypress", "cypress-wait-until", "cypress-image-snapshot", "cypress-real-events", "@bahmutov/cy-api", "node"],
+ "skipLibCheck": true,
+ "forceConsistentCasingInFileNames": true,
+ "allowSyntheticDefaultImports": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "types": [
+ "cypress",
+ "cypress-wait-until",
+ "cypress-real-events",
+ "node"
+ ],
"baseUrl": "./cypress",
"paths": {
- "@/*": ["./*"]
+ "@/*": ["./*"],
+ "@fixtures/*": ["./fixtures/*"],
+ "@page-objects/*": ["./integration/page-objects/*"],
+ "@support/*": ["./support/*"]
}
},
"include": [
"**/*.ts",
"support/*.ts"
+ ],
+ "exclude": [
+ "node_modules"
]
}
\ No newline at end of file
diff --git a/tests/yarn.lock b/tests/yarn.lock
index 806873571..814330778 100644
--- a/tests/yarn.lock
+++ b/tests/yarn.lock
@@ -3,30 +3,38 @@
"@babel/code-frame@^7.0.0":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a"
- integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be"
+ integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==
dependencies:
- "@babel/highlight" "^7.18.6"
-
-"@babel/helper-validator-identifier@^7.18.6":
- version "7.19.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2"
- integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==
-
-"@babel/highlight@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf"
- integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==
- dependencies:
- "@babel/helper-validator-identifier" "^7.18.6"
- chalk "^2.0.0"
+ "@babel/helper-validator-identifier" "^7.27.1"
js-tokens "^4.0.0"
+ picocolors "^1.1.1"
+
+"@babel/helper-string-parser@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687"
+ integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==
+
+"@babel/helper-validator-identifier@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8"
+ integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==
"@babel/parser@^7.18.8":
- version "7.20.5"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.5.tgz#7f3c7335fe417665d929f34ae5dceae4c04015e8"
- integrity sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==
+ version "7.28.3"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.3.tgz#d2d25b814621bca5fe9d172bc93792547e7a2a71"
+ integrity sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==
+ dependencies:
+ "@babel/types" "^7.28.2"
+
+"@babel/types@^7.28.2":
+ version "7.28.2"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.2.tgz#da9db0856a9a88e0a13b019881d7513588cf712b"
+ integrity sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==
+ dependencies:
+ "@babel/helper-string-parser" "^7.27.1"
+ "@babel/helper-validator-identifier" "^7.27.1"
"@badeball/cypress-configuration@^4.0.0":
version "4.2.0"
@@ -75,12 +83,12 @@
dependencies:
common-tags "1.8.2"
-"@bahmutov/cypress-esbuild-preprocessor@^2.1.5":
- version "2.1.5"
- resolved "https://registry.yarnpkg.com/@bahmutov/cypress-esbuild-preprocessor/-/cypress-esbuild-preprocessor-2.1.5.tgz#6e4746a470f097f3833a25f5e72bdcac178cbc41"
- integrity sha512-cJMlZOZ3kUb/s2KQ8p7DJNiOzwApSoYCiK1toJKBvz58MbqBIeBjD7F8NFJE1MrFzYBYAOQcSMVWHp4y1l/Fjg==
+"@bahmutov/cypress-esbuild-preprocessor@^2.2.5":
+ version "2.2.5"
+ resolved "https://registry.yarnpkg.com/@bahmutov/cypress-esbuild-preprocessor/-/cypress-esbuild-preprocessor-2.2.5.tgz#92ca9a623b5d6b3d9c488b75f1b9557802c0b5ca"
+ integrity sha512-T8jugcaKdK3G470eWTo9fxeLXupnlTHLdWrjcfWuFM9spkHrASkiG20IpmAKiSPUjeXU0+A1EDssD48XMMxaKg==
dependencies:
- debug "4.3.4"
+ debug "4.4.1"
"@colors/colors@1.5.0":
version "1.5.0"
@@ -88,9 +96,9 @@
integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==
"@cucumber/cucumber-expressions@^16.0.0":
- version "16.1.0"
- resolved "https://registry.yarnpkg.com/@cucumber/cucumber-expressions/-/cucumber-expressions-16.1.0.tgz#2a2538b775e83b84a275ea10f618242717937968"
- integrity sha512-Q/tKDNje9RrcOXF2TO2NwTW92rzk+RwKkhYYKLxQT26Co8Qbjom0Cz02HsCMA2wjJ8dw6/d2IbWgiOay9RQA+w==
+ version "16.1.2"
+ resolved "https://registry.yarnpkg.com/@cucumber/cucumber-expressions/-/cucumber-expressions-16.1.2.tgz#8c7200a4490b48a0309f5cc4e058cf6578b5b578"
+ integrity sha512-CfHEbxJ5FqBwF6mJyLLz4B353gyHkoi6cCL4J0lfDZ+GorpcWw4n2OUAdxJmP7ZlREANWoTFlp4FhmkLKrCfUA==
dependencies:
regexp-match-indices "1.0.2"
@@ -127,9 +135,9 @@
integrity sha512-chTnjxV3vryL75N90wJIMdMafXmZoO2JgNJLYpsfcALL2/IQrRiny3vM9DgD5RDCSt1LNloMtb7rGey9YWxCsA==
"@cypress/request@^3.0.6":
- version "3.0.7"
- resolved "https://registry.yarnpkg.com/@cypress/request/-/request-3.0.7.tgz#6a74a4da98d9e5ae9121d6e2d9c14780c9b5cf1a"
- integrity sha512-LzxlLEMbBOPYB85uXrDqvD4MgcenjRBLIns3zyhx7vTPj/0u2eQhzXvPiGcaJrV38Q9dbkExWp6cOHPJ+EtFYg==
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/@cypress/request/-/request-3.0.9.tgz#8ed6e08fea0c62998b5552301023af7268f11625"
+ integrity sha512-I3l7FdGRXluAS44/0NguwWlO83J18p0vlr2FYHrJkWdNYhgVoiYo61IXPqaOsL+vNxU1ZqMACzItGK3/KKDsdw==
dependencies:
aws-sign2 "~0.7.0"
aws4 "^1.8.0"
@@ -137,14 +145,14 @@
combined-stream "~1.0.6"
extend "~3.0.2"
forever-agent "~0.6.1"
- form-data "~4.0.0"
+ form-data "~4.0.4"
http-signature "~1.4.0"
is-typedarray "~1.0.0"
isstream "~0.1.2"
json-stringify-safe "~5.0.1"
mime-types "~2.1.19"
performance-now "^2.1.0"
- qs "6.13.1"
+ qs "6.14.0"
safe-buffer "^5.1.2"
tough-cookie "^5.0.0"
tunnel-agent "^0.6.0"
@@ -158,20 +166,132 @@
debug "^3.1.0"
lodash.once "^4.1.1"
+"@esbuild/android-arm64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622"
+ integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==
+
+"@esbuild/android-arm@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682"
+ integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==
+
+"@esbuild/android-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2"
+ integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==
+
+"@esbuild/darwin-arm64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1"
+ integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==
+
+"@esbuild/darwin-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d"
+ integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==
+
+"@esbuild/freebsd-arm64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54"
+ integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==
+
+"@esbuild/freebsd-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e"
+ integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==
+
+"@esbuild/linux-arm64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0"
+ integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==
+
+"@esbuild/linux-arm@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0"
+ integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==
+
+"@esbuild/linux-ia32@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7"
+ integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==
+
"@esbuild/linux-loong64@0.14.54":
version "0.14.54"
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028"
integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==
+"@esbuild/linux-loong64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d"
+ integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==
+
+"@esbuild/linux-mips64el@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231"
+ integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==
+
+"@esbuild/linux-ppc64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb"
+ integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==
+
+"@esbuild/linux-riscv64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6"
+ integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==
+
+"@esbuild/linux-s390x@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071"
+ integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==
+
+"@esbuild/linux-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338"
+ integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==
+
+"@esbuild/netbsd-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1"
+ integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==
+
+"@esbuild/openbsd-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae"
+ integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==
+
+"@esbuild/sunos-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d"
+ integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==
+
+"@esbuild/win32-arm64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9"
+ integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==
+
+"@esbuild/win32-ia32@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102"
+ integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==
+
+"@esbuild/win32-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d"
+ integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==
+
"@types/node@*":
- version "18.11.10"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.10.tgz#4c64759f3c2343b7e6c4b9caf761c7a3a05cee34"
- integrity sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ==
+ version "24.3.0"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-24.3.0.tgz#89b09f45cb9a8ee69466f18ee5864e4c3eb84dec"
+ integrity sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==
+ dependencies:
+ undici-types "~7.10.0"
"@types/parse-json@^4.0.0":
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
- integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239"
+ integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==
"@types/sinonjs__fake-timers@8.1.1":
version "8.1.1"
@@ -179,9 +299,9 @@
integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==
"@types/sizzle@^2.3.2":
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef"
- integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==
+ version "2.3.9"
+ resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.9.tgz#d4597dbd4618264c414d7429363e3f50acb66ea2"
+ integrity sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==
"@types/uuid@8.3.4":
version "8.3.4"
@@ -189,9 +309,9 @@
integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==
"@types/yauzl@^2.9.1":
- version "2.10.0"
- resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599"
- integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==
+ version "2.10.3"
+ resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999"
+ integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==
dependencies:
"@types/node" "*"
@@ -220,13 +340,6 @@ ansi-regex@^5.0.1:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
-ansi-styles@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
- integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
- dependencies:
- color-convert "^1.9.0"
-
ansi-styles@^4.0.0, ansi-styles@^4.1.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
@@ -257,9 +370,9 @@ astral-regex@^2.0.0:
integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
async@^3.2.0:
- version "3.2.4"
- resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
- integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==
+ version "3.2.6"
+ resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce"
+ integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==
asynckit@^0.4.0:
version "0.4.0"
@@ -277,9 +390,9 @@ aws-sign2@~0.7.0:
integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==
aws4@^1.8.0:
- version "1.11.0"
- resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
- integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
+ version "1.13.2"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.2.tgz#0aa167216965ac9474ccfa83892cfb6b3e1e52ef"
+ integrity sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==
balanced-match@^1.0.0:
version "1.0.2"
@@ -309,9 +422,9 @@ bluebird@^3.7.2:
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
brace-expansion@^1.1.7:
- version "1.1.11"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
- integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ version "1.1.12"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843"
+ integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==
dependencies:
balanced-match "^1.0.0"
concat-map "0.0.1"
@@ -330,25 +443,25 @@ buffer@^5.7.1:
ieee754 "^1.1.13"
cachedir@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8"
- integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.4.0.tgz#7fef9cf7367233d7c88068fe6e34ed0d355a610d"
+ integrity sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==
-call-bind-apply-helpers@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz#32e5892e6361b29b0b545ba6f7763378daca2840"
- integrity sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==
+call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6"
+ integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==
dependencies:
es-errors "^1.3.0"
function-bind "^1.1.2"
call-bound@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.3.tgz#41cfd032b593e39176a71533ab4f384aa04fd681"
- integrity sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a"
+ integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==
dependencies:
- call-bind-apply-helpers "^1.0.1"
- get-intrinsic "^1.2.6"
+ call-bind-apply-helpers "^1.0.2"
+ get-intrinsic "^1.3.0"
callsites@^3.0.0:
version "3.1.0"
@@ -360,15 +473,6 @@ caseless@~0.12.0:
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==
-chalk@^2.0.0:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
- integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
- dependencies:
- ansi-styles "^3.2.1"
- escape-string-regexp "^1.0.5"
- supports-color "^5.3.0"
-
chalk@^4.1.0, chalk@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
@@ -383,9 +487,9 @@ check-more-types@^2.24.0:
integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==
ci-info@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.1.0.tgz#92319d2fa29d2620180ea5afed31f589bc98cf83"
- integrity sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.3.0.tgz#c39b1013f8fdbd28cd78e62318357d02da160cd7"
+ integrity sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==
class-transformer@0.5.1:
version "0.5.1"
@@ -405,9 +509,9 @@ cli-cursor@^3.1.0:
restore-cursor "^3.1.0"
cli-table3@~0.6.1:
- version "0.6.3"
- resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2"
- integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==
+ version "0.6.5"
+ resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f"
+ integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==
dependencies:
string-width "^4.2.0"
optionalDependencies:
@@ -428,13 +532,6 @@ cli-truncate@^2.1.0:
slice-ansi "^3.0.0"
string-width "^4.2.0"
-color-convert@^1.9.0:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
- integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
- dependencies:
- color-name "1.1.3"
-
color-convert@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
@@ -442,20 +539,15 @@ color-convert@^2.0.1:
dependencies:
color-name "~1.1.4"
-color-name@1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
- integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
-
color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
colorette@^2.0.16:
- version "2.0.19"
- resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798"
- integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==
+ version "2.0.20"
+ resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
+ integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==
colors@1.0.3:
version "1.0.3"
@@ -506,18 +598,18 @@ cosmiconfig@^7.0.1:
yaml "^1.10.0"
cross-spawn@^7.0.0:
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
- integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ version "7.0.6"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
+ integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
dependencies:
path-key "^3.1.0"
shebang-command "^2.0.0"
which "^2.0.1"
cypress-real-events@^1.13.0:
- version "1.13.0"
- resolved "https://registry.yarnpkg.com/cypress-real-events/-/cypress-real-events-1.13.0.tgz#6b7cd32dcac172db1493608f97a2576c7d0bd5af"
- integrity sha512-LoejtK+dyZ1jaT8wGT5oASTPfsNV8/ClRp99ruN60oPj8cBJYod80iJDyNwfPAu4GCxTXOhhAv9FO65Hpwt6Hg==
+ version "1.14.0"
+ resolved "https://registry.yarnpkg.com/cypress-real-events/-/cypress-real-events-1.14.0.tgz#c5495db50a2bd247f4accde983af7153566945d3"
+ integrity sha512-XmI8y3OZLh6cjRroPalzzS++iv+pGCaD9G9kfIbtspgv7GVsDt30dkZvSXfgZb4rAN+3pOkMVB7e0j4oXydW7Q==
cypress-wait-until@^1.7.1:
version "1.7.2"
@@ -581,16 +673,16 @@ dashdash@^1.12.0:
assert-plus "^1.0.0"
dayjs@^1.10.4:
- version "1.11.6"
- resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.6.tgz#2e79a226314ec3ec904e3ee1dd5a4f5e5b1c7afb"
- integrity sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==
+ version "1.11.13"
+ resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c"
+ integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==
-debug@4.3.4, debug@^4.1.1, debug@^4.2.0, debug@^4.3.2, debug@^4.3.4:
- version "4.3.4"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
- integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+debug@4.4.1, debug@^4.1.1, debug@^4.2.0, debug@^4.3.2, debug@^4.3.4:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b"
+ integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==
dependencies:
- ms "2.1.2"
+ ms "^2.1.3"
debug@^3.1.0:
version "3.2.7"
@@ -627,18 +719,19 @@ emoji-regex@^8.0.0:
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
end-of-stream@^1.1.0:
- version "1.4.4"
- resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
- integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ version "1.4.5"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c"
+ integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==
dependencies:
once "^1.4.0"
enquirer@^2.3.6:
- version "2.3.6"
- resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
- integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56"
+ integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==
dependencies:
ansi-colors "^4.1.1"
+ strip-ansi "^6.0.1"
error-ex@^1.3.1:
version "1.3.2"
@@ -664,13 +757,23 @@ es-errors@^1.3.0:
resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
-es-object-atoms@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941"
- integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==
+es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1"
+ integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==
dependencies:
es-errors "^1.3.0"
+es-set-tostringtag@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d"
+ integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==
+ dependencies:
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.6"
+ has-tostringtag "^1.0.2"
+ hasown "^2.0.2"
+
esbuild-android-64@0.14.54:
version "0.14.54"
resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be"
@@ -798,6 +901,34 @@ esbuild@^0.14.23:
esbuild-windows-64 "0.14.54"
esbuild-windows-arm64 "0.14.54"
+esbuild@^0.18.0:
+ version "0.18.20"
+ resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6"
+ integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==
+ optionalDependencies:
+ "@esbuild/android-arm" "0.18.20"
+ "@esbuild/android-arm64" "0.18.20"
+ "@esbuild/android-x64" "0.18.20"
+ "@esbuild/darwin-arm64" "0.18.20"
+ "@esbuild/darwin-x64" "0.18.20"
+ "@esbuild/freebsd-arm64" "0.18.20"
+ "@esbuild/freebsd-x64" "0.18.20"
+ "@esbuild/linux-arm" "0.18.20"
+ "@esbuild/linux-arm64" "0.18.20"
+ "@esbuild/linux-ia32" "0.18.20"
+ "@esbuild/linux-loong64" "0.18.20"
+ "@esbuild/linux-mips64el" "0.18.20"
+ "@esbuild/linux-ppc64" "0.18.20"
+ "@esbuild/linux-riscv64" "0.18.20"
+ "@esbuild/linux-s390x" "0.18.20"
+ "@esbuild/linux-x64" "0.18.20"
+ "@esbuild/netbsd-x64" "0.18.20"
+ "@esbuild/openbsd-x64" "0.18.20"
+ "@esbuild/sunos-x64" "0.18.20"
+ "@esbuild/win32-arm64" "0.18.20"
+ "@esbuild/win32-ia32" "0.18.20"
+ "@esbuild/win32-x64" "0.18.20"
+
escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
@@ -875,13 +1006,15 @@ forever-agent@~0.6.1:
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==
-form-data@~4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48"
- integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==
+form-data@~4.0.4:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.4.tgz#784cdcce0669a9d68e94d11ac4eea98088edd2c4"
+ integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.8"
+ es-set-tostringtag "^2.1.0"
+ hasown "^2.0.2"
mime-types "^2.1.12"
fs-extra@^9.1.0:
@@ -904,23 +1037,23 @@ function-bind@^1.1.2:
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
-get-intrinsic@^1.2.5, get-intrinsic@^1.2.6:
- version "1.2.7"
- resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.7.tgz#dcfcb33d3272e15f445d15124bc0a216189b9044"
- integrity sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==
+get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01"
+ integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==
dependencies:
- call-bind-apply-helpers "^1.0.1"
+ call-bind-apply-helpers "^1.0.2"
es-define-property "^1.0.1"
es-errors "^1.3.0"
- es-object-atoms "^1.0.0"
+ es-object-atoms "^1.1.1"
function-bind "^1.1.2"
- get-proto "^1.0.0"
+ get-proto "^1.0.1"
gopd "^1.2.0"
has-symbols "^1.1.0"
hasown "^2.0.2"
math-intrinsics "^1.1.0"
-get-proto@^1.0.0:
+get-proto@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1"
integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==
@@ -974,25 +1107,27 @@ gopd@^1.2.0:
integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
graceful-fs@^4.1.6, graceful-fs@^4.2.0:
- version "4.2.10"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
- integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
-
-has-flag@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
- integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
+ version "4.2.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
+ integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
has-flag@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
-has-symbols@^1.1.0:
+has-symbols@^1.0.3, has-symbols@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338"
integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==
+has-tostringtag@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc"
+ integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
+ dependencies:
+ has-symbols "^1.0.3"
+
hasown@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
@@ -1020,9 +1155,9 @@ ieee754@^1.1.13:
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
import-fresh@^3.2.1:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
- integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf"
+ integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==
dependencies:
parent-module "^1.0.0"
resolve-from "^4.0.0"
@@ -1124,9 +1259,9 @@ json-stringify-safe@~5.0.1:
integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
jsonfile@^6.0.1:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
- integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62"
+ integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==
dependencies:
universalify "^2.0.0"
optionalDependencies:
@@ -1234,16 +1369,11 @@ minimist@^1.2.8:
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
module-alias@^2.2.2:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/module-alias/-/module-alias-2.2.2.tgz#151cdcecc24e25739ff0aa6e51e1c5716974c0e0"
- integrity sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/module-alias/-/module-alias-2.2.3.tgz#ec2e85c68973bda6ab71ce7c93b763ec96053221"
+ integrity sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==
-ms@2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
- integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-
-ms@^2.1.1:
+ms@^2.1.1, ms@^2.1.3:
version "2.1.3"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
@@ -1261,9 +1391,9 @@ npm-run-path@^4.0.0:
path-key "^3.0.0"
object-inspect@^1.13.3:
- version "1.13.3"
- resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a"
- integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==
+ version "1.13.4"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213"
+ integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==
once@^1.3.0, once@^1.3.1, once@^1.4.0:
version "1.4.0"
@@ -1333,6 +1463,11 @@ performance-now@^2.1.0:
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==
+picocolors@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
+ integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
+
pify@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
@@ -1354,19 +1489,19 @@ proxy-from-env@1.0.0:
integrity sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==
pump@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
- integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.3.tgz#151d979f1a29668dc0025ec589a455b53282268d"
+ integrity sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==
dependencies:
end-of-stream "^1.1.0"
once "^1.3.1"
-qs@6.13.1:
- version "6.13.1"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.1.tgz#3ce5fc72bd3a8171b85c99b93c65dd20b7d1b16e"
- integrity sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==
+qs@6.14.0:
+ version "6.14.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930"
+ integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==
dependencies:
- side-channel "^1.0.6"
+ side-channel "^1.1.0"
reflect-metadata@0.1.13:
version "0.1.13"
@@ -1381,9 +1516,9 @@ regexp-match-indices@1.0.2:
regexp-tree "^0.1.11"
regexp-tree@^0.1.11:
- version "0.1.24"
- resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.24.tgz#3d6fa238450a4d66e5bc9c4c14bb720e2196829d"
- integrity sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==
+ version "0.1.27"
+ resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd"
+ integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==
request-progress@^3.0.0:
version "3.0.0"
@@ -1418,14 +1553,14 @@ restore-cursor@^3.1.0:
signal-exit "^3.0.2"
rfdc@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b"
- integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca"
+ integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==
rxjs@^7.5.1:
- version "7.5.7"
- resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.7.tgz#2ec0d57fdc89ece220d2e702730ae8f1e49def39"
- integrity sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==
+ version "7.8.2"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b"
+ integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==
dependencies:
tslib "^2.1.0"
@@ -1440,9 +1575,9 @@ safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
semver@^7.5.3:
- version "7.6.3"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
- integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
+ version "7.7.2"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58"
+ integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==
shebang-command@^2.0.0:
version "2.0.0"
@@ -1485,7 +1620,7 @@ side-channel-weakmap@^1.0.2:
object-inspect "^1.13.3"
side-channel-map "^1.0.1"
-side-channel@^1.0.6:
+side-channel@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9"
integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==
@@ -1520,9 +1655,9 @@ slice-ansi@^4.0.0:
is-fullwidth-code-point "^3.0.0"
source-map@^0.7.4:
- version "0.7.4"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656"
- integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==
+ version "0.7.6"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.6.tgz#a3658ab87e5b6429c8a1f3ba0083d4c61ca3ef02"
+ integrity sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==
sshpk@^1.18.0:
version "1.18.0"
@@ -1565,13 +1700,6 @@ strip-final-newline@^2.0.0:
resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
-supports-color@^5.3.0:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
- integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
- dependencies:
- has-flag "^3.0.0"
-
supports-color@^7.1.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
@@ -1587,36 +1715,36 @@ supports-color@^8.1.1:
has-flag "^4.0.0"
throttleit@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c"
- integrity sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.1.tgz#304ec51631c3b770c65c6c6f76938b384000f4d5"
+ integrity sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==
through@^2.3.8:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
-tldts-core@^6.1.70:
- version "6.1.70"
- resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-6.1.70.tgz#a954e93237ece2e1705b438600793c86a25f8c00"
- integrity sha512-RNnIXDB1FD4T9cpQRErEqw6ZpjLlGdMOitdV+0xtbsnwr4YFka1zpc7D4KD+aAn8oSG5JyFrdasZTE04qDE9Yg==
+tldts-core@^6.1.86:
+ version "6.1.86"
+ resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-6.1.86.tgz#a93e6ed9d505cb54c542ce43feb14c73913265d8"
+ integrity sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==
tldts@^6.1.32:
- version "6.1.70"
- resolved "https://registry.yarnpkg.com/tldts/-/tldts-6.1.70.tgz#b571e5645ab9dc6f289453115d52602b8a384cfe"
- integrity sha512-/W1YVgYVJd9ZDjey5NXadNh0mJXkiUMUue9Zebd0vpdo1sU+H4zFFTaJ1RKD4N6KFoHfcXy6l+Vu7bh+bdWCzA==
+ version "6.1.86"
+ resolved "https://registry.yarnpkg.com/tldts/-/tldts-6.1.86.tgz#087e0555b31b9725ee48ca7e77edc56115cd82f7"
+ integrity sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==
dependencies:
- tldts-core "^6.1.70"
+ tldts-core "^6.1.86"
tmp@~0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae"
- integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8"
+ integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==
tough-cookie@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-5.0.0.tgz#6b6518e2b5c070cf742d872ee0f4f92d69eac1af"
- integrity sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-5.1.2.tgz#66d774b4a1d9e12dc75089725af3ac75ec31bed7"
+ integrity sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==
dependencies:
tldts "^6.1.32"
@@ -1626,9 +1754,9 @@ tree-kill@1.2.2:
integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==
tslib@^2.1.0:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e"
- integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
+ integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
tunnel-agent@^0.6.0:
version "0.6.0"
@@ -1648,14 +1776,19 @@ type-fest@^0.21.3:
integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
typescript@^4.2.3:
- version "4.9.3"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db"
- integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==
+ version "4.9.5"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a"
+ integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==
+
+undici-types@~7.10.0:
+ version "7.10.0"
+ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.10.0.tgz#4ac2e058ce56b462b056e629cc6a02393d3ff350"
+ integrity sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==
universalify@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
- integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d"
+ integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==
untildify@^4.0.0:
version "4.0.0"