From a102c72e3f2664eb7ae8bba5649d178955d4ef5d Mon Sep 17 00:00:00 2001 From: Mohat Shil <146836180+mohatShilABB@users.noreply.github.com> Date: Thu, 21 Mar 2024 23:12:33 +0100 Subject: [PATCH 1/5] removed cypress & installed playwright - removed cypress (still need to remove folders and update readme.md) - installed playwright - wrote first few tests (homepage) --- .gitignore | 4 +++ cypress.config.ts | 11 ------- e2e/tests/homepage.spec.ts | 67 ++++++++++++++++++++++++++++++++++++++ package.json | 3 +- playwright.config.ts | 44 +++++++++++++++++++++++++ 5 files changed, 116 insertions(+), 13 deletions(-) delete mode 100644 cypress.config.ts create mode 100644 e2e/tests/homepage.spec.ts create mode 100644 playwright.config.ts diff --git a/.gitignore b/.gitignore index b39cb670e7..bcb338d16a 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,7 @@ cypress/e2e/play.cy.ts # vscode setting .vscode +/test-results/ +/playwright-report/ +/blob-report/ +/playwright/.cache/ diff --git a/cypress.config.ts b/cypress.config.ts deleted file mode 100644 index 26e545d0df..0000000000 --- a/cypress.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { defineConfig } from 'cypress'; - -export default defineConfig({ - e2e: { - setupNodeEvents(on, config) { - // implement node event listeners here - }, - baseUrl: 'http://localhost:3000', - watchForFileChanges: false - } -}); diff --git a/e2e/tests/homepage.spec.ts b/e2e/tests/homepage.spec.ts new file mode 100644 index 0000000000..24059921f6 --- /dev/null +++ b/e2e/tests/homepage.spec.ts @@ -0,0 +1,67 @@ +import { test, expect } from '@playwright/test'; + +test.beforeEach(async ({ page }) => { + await page.goto('/'); +}); + +test('Header section is visible and btns are editable', async ({ page }) => { + await page.waitForLoadState('domcontentloaded'); + const header = page.locator('[data-testid="app-header"]'); + await expect(header).toBeVisible(); // header to be visibile + await expect(header.getByTestId('app-logo')).toBeVisible(); + // assertion of header static informations + await expect(header.getByTestId('browse-btn')).toHaveText('Browse'); + await expect(header.getByTestId('events-btn')).toBeEditable(); + await expect(header.getByTestId('create-btn')).toBeEditable(); + await expect(header.getByTestId('leaderboard-btn')).toBeEditable(); + await expect(header.getByTestId('ideas-btn')).toBeEditable(); + await expect(header.getByTestId('github-btn')).toBeEditable(); + await expect(header.getByTestId('twitter-btn')).toBeEditable(); + await expect(header.getByTestId('discord-btn')).toBeEditable(); + await expect(header.getByTestId('share-btn')).toBeEditable(); +}); + +test('learn/create/socialize section should render and assert strings', async ({ page }) => { + const featuresSection = page.locator('[class="home-features"]'); + await featuresSection.scrollIntoViewIfNeeded(); + await expect(featuresSection).toBeInViewport(); + // learn + await expect(featuresSection.getByText('Learn how to')).toBeVisible(); + const learnString = featuresSection.getByText('Learn how to'); + await expect(learnString).toContainText( + 'Learn how to "Think in React" and build applications inspired by several plays(source code & demos). Get to the source code of it, find related article, or even a YouTube video. Learn from the expert code reviews.' + ); + + // create + await expect(featuresSection.getByText(' Create your own plays')).toBeVisible(); + const createStr = featuresSection.getByText(' Create your own plays'); + await expect(createStr).toContainText( + 'Create your own plays and own them by following a few simple steps. Learned something new? Perfect to present as a play. You can also contribute to the existing plays. Your play will be reviewed by the experts before being made public' + ); + // socialize + await expect(featuresSection.getByText('Socialize Share your plays')).toBeVisible(); + const socializeStr = featuresSection.getByText('Socialize Share your plays'); + await expect(socializeStr).toContainText( + 'Share your plays with the community. The best way of building in public is by sharing the learning. You can share your plays on social media platforms like Facebook, Twitter, LinkedIn, to name a few, just with a single click.' + ); +}); + +test('Ideas section is visible & goes to proper /pages ', async ({ page }) => { + const ideas = page.locator('[class="home-ideas"]'); + await ideas.scrollIntoViewIfNeeded(); + await expect(ideas).toBeInViewport(); + await expect(ideas).toContainText( + 'Not sure how to get started?We have got lot of ideasGet started with some ideas' + ); + + // navigation works + await ideas.getByRole('link', { name: 'Get started with some ideas' }).click(); + expect(page.url()).toMatch(/ideas/); + await page.goBack(); +}); + +test.only('Trending Plays section is visible, has four view, is clickable & goes to proper /pages ', async ({ + page +}) => { + await page.pause(); +}); diff --git a/package.json b/package.json index 593c8b7fdf..89c8ebe5b9 100644 --- a/package.json +++ b/package.json @@ -125,6 +125,7 @@ }, "devDependencies": { "@babel/plugin-transform-private-property-in-object": "^7.23.4", + "@playwright/test": "^1.42.1", "@tailwindcss/nesting": "0.0.0-insiders.565cd3e", "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", @@ -137,7 +138,6 @@ "@typescript-eslint/eslint-plugin": "6.4.0", "@typescript-eslint/parser": "^6.19.1", "autoprefixer": "^10.4.17", - "cypress": "^10.11.0", "eslint": "^8.56.0", "eslint-config-prettier": "^9.1.0", "eslint-config-standard-with-typescript": "^39.1.1", @@ -153,7 +153,6 @@ "postcss": "^8.4.35", "postcss-import": "^15.1.0", "prettier": "^3.2.4", - "puppeteer": "^21.9.0", "react-snap": "^1.23.0", "tailwind-scrollbar": "^2.1.0", "tailwindcss": "^3.4.1", diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 0000000000..dbad8aa91c --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,44 @@ +import { defineConfig, devices } from '@playwright/test'; + +/** + * See https://playwright.dev/docs/test-configuration. + */ +export default defineConfig({ + testDir: './e2e/tests', + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: 'html', + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Base URL to use in actions like `await page.goto('/')`. */ + baseURL: 'http://localhost:3000/', + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: 'on-first-retry' + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] } + } + + // { + // name: 'firefox', + // use: { ...devices['Desktop Firefox'] }, + // }, + + // { + // name: 'webkit', + // use: { ...devices['Desktop Safari'] }, + // }, + ] +}); From a05d01cdf45c3ac109be9d133acc43b2066b5aec Mon Sep 17 00:00:00 2001 From: Mohat Shil <146836180+mohatShilABB@users.noreply.github.com> Date: Fri, 22 Mar 2024 01:21:10 +0100 Subject: [PATCH 2/5] added more devices to test & completed homepage - firefox and chrome added - completed homepage fully (need to convert to po still) - create npm/yarn e2e script --- e2e/tests/homepage.spec.ts | 83 +++++++++++++++++++++++++++++++++++++- package.json | 3 +- playwright.config.ts | 18 ++++----- 3 files changed, 91 insertions(+), 13 deletions(-) diff --git a/e2e/tests/homepage.spec.ts b/e2e/tests/homepage.spec.ts index 24059921f6..4ed0b155e6 100644 --- a/e2e/tests/homepage.spec.ts +++ b/e2e/tests/homepage.spec.ts @@ -2,6 +2,7 @@ import { test, expect } from '@playwright/test'; test.beforeEach(async ({ page }) => { await page.goto('/'); + await page.waitForLoadState('domcontentloaded'); }); test('Header section is visible and btns are editable', async ({ page }) => { @@ -60,8 +61,86 @@ test('Ideas section is visible & goes to proper /pages ', async ({ page }) => { await page.goBack(); }); -test.only('Trending Plays section is visible, has four view, is clickable & goes to proper /pages ', async ({ +test('Trending Plays section is visible, has four view & goes to proper /pages ', async ({ + page +}) => { + const plays = page.locator('[class="home-plays"]'); + await plays.scrollIntoViewIfNeeded(); + await expect(plays.locator('[class="plays-title-primary"]')).toContainText('Trending Plays'); + await page.waitForLoadState('networkidle'); + // counts cards based on four links & added "View all play string" makes it five + const cardCount = plays.getByRole('link').count(); + expect(await cardCount).toEqual(5); + // nav check + await plays.getByRole('link', { name: 'View all Plays' }).click(); + expect(page.url()).toMatch(/plays/); + await page.goBack(); +}); + +test('What our section - testimonials is visible, slider is clickable & str to proper /pages ', async ({ page }) => { - await page.pause(); + const testimonials = page.locator('[class="testimonials"]'); + await testimonials.scrollIntoViewIfNeeded(); + await page.waitForLoadState('networkidle'); + await expect(testimonials.locator('[class="title-primary"]')).toContainText( + 'What Our Community Says!' + ); + // pagination swipier check + await expect(testimonials.locator('.swiper-pagination')).toBeEditable(); + await expect(testimonials.locator('[class*="swiper swiper-initialized"]')).toBeVisible(); + // nav check + await testimonials.getByRole('link', { name: 'View all Testimonials' }).click(); + expect(page.url()).toMatch(/testimonials/); + await page.goBack(); +}); + +test('big thanks to Contributors is visible ', async ({ page }) => { + const contributors = page.locator('[data-testid="contributors-section"]'); + await contributors.scrollIntoViewIfNeeded(); + await page.waitForLoadState('networkidle'); + expect(contributors).toBeInViewport; + await expect(contributors.locator('[class="title-primary"]')).toContainText( + 'Big Thanks to All Contributors!' + ); +}); +test('Our Partners & Sponsors is visible, links are clickable and has links ', async ({ page }) => { + const partnersSponsers = page.locator('[data-testid="sponsors-section"]'); + await partnersSponsers.scrollIntoViewIfNeeded(); + await page.waitForLoadState('networkidle'); + expect(partnersSponsers).toBeInViewport; + await expect(partnersSponsers.locator('[class="title-primary"]')).toContainText( + 'OurPartners & Sponsors' + ); + // total 10 links presents check + expect(await partnersSponsers.getByRole('link').count()).toEqual(10); + + // backers + await expect(partnersSponsers.locator('[class="backers-container"]')).toContainText('Backers'); + await expect(partnersSponsers.getByText('Support us with any monthly')).toContainText( + 'Support us with any monthly sponsorship. Your help means a lot to us. We will give you a shoutout and add you here.' + ); + await expect(partnersSponsers.locator('[class="prime-sponsors-container"]')).toContainText( + 'Prime Sponsors' + ); + await expect(partnersSponsers.getByText('Be a prime sponsor of')).toContainText( + 'Be a prime sponsor of ReactPlay. Your sponsorship will go a long way, and we will place you in our internal events, newsletters and here on the homepage.' + ); +}); + +test('footer is visible, links are clickable and has links ', async ({ page }) => { + const partnersSponsers = page.locator('[class="app-footer--home app-footer"]'); + await partnersSponsers.scrollIntoViewIfNeeded(); + await page.waitForLoadState('networkidle'); + expect(partnersSponsers).toBeInViewport; + await expect(partnersSponsers.locator('[class="body-primary"]')).toContainText( + 'An open-source project made with โค๏ธ by team ReactPlay.' + ); + await expect(partnersSponsers.getByRole('heading', { name: 'About' })).toBeVisible(); + await expect(partnersSponsers.getByRole('heading', { name: 'Show love' })).toBeVisible(); + // total 14 links + expect(await partnersSponsers.getByRole('link').count()).toEqual(14); + await partnersSponsers.getByRole('button', { name: 'Share about ReactPlay' }).click(); + await expect(page.locator('[class*="modal-share"]').nth(0)).toBeVisible(); + await page.getByRole('button', { name: 'Cancel' }).click(); }); diff --git a/package.json b/package.json index 89c8ebe5b9..aaa4e1d38d 100644 --- a/package.json +++ b/package.json @@ -91,8 +91,7 @@ "snap": "react-snap", "test": "react-scripts test", "eject": "react-scripts eject", - "cypress:open": "cypress open", - "cypress:run": "cypress run", + "e2e": "npx playwright test --reporter=html --retries=2", "lint": "eslint src/**/*.{js,jsx,ts,tsx}", "lint:fix": "eslint --fix src/**/*.{js,jsx,ts,tsx}", "format": "prettier --write \"./src/**/*.{js,jsx,ts,tsx,css,scss,md}\" --config ./.prettierrc", diff --git a/playwright.config.ts b/playwright.config.ts index dbad8aa91c..5ea25a444e 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -29,16 +29,16 @@ export default defineConfig({ { name: 'chromium', use: { ...devices['Desktop Chrome'] } - } + }, - // { - // name: 'firefox', - // use: { ...devices['Desktop Firefox'] }, - // }, + { + name: 'firefox', + use: { ...devices['Desktop Firefox'] } + }, - // { - // name: 'webkit', - // use: { ...devices['Desktop Safari'] }, - // }, + { + name: 'webkit', + use: { ...devices['Desktop Safari'] } + } ] }); From 5fc2e17ef463e36cf07c7c27483a433d9d632561 Mon Sep 17 00:00:00 2001 From: Mohat Shil <146836180+mohatShilABB@users.noreply.github.com> Date: Fri, 22 Mar 2024 22:32:13 +0100 Subject: [PATCH 3/5] rm'ed cy dir, added more tests & fixed README - removed cypress directory since all the tests are covered - converted homepage to pageobject - added ideaspage and also added po for it - fixed main readme file to adjust to playwright - added plays.spec to write more tests later --- README.md | 27 +++++-- cypress/e2e/homePage.cy.ts | 33 -------- cypress/e2e/ideasPage.cy.ts | 11 --- cypress/e2e/leaderboardPage.cy.ts | 11 --- cypress/support/commands.ts | 54 ------------- cypress/support/constant.ts | 2 - cypress/support/e2e.ts | 20 ----- e2e/README.md | 30 ++++++++ e2e/pageobjects/enums/constant.ts | 4 + e2e/pageobjects/pages/home.ts | 123 ++++++++++++++++++++++++++++++ e2e/pageobjects/pages/ideas.ts | 33 ++++++++ e2e/tests/homepage.spec.ts | 122 ++++++++++++----------------- e2e/tests/ideaspage.spec.ts | 54 +++++++++++++ e2e/tests/plays.spec.ts | 3 + playwright.config.ts | 2 + 15 files changed, 319 insertions(+), 210 deletions(-) delete mode 100644 cypress/e2e/homePage.cy.ts delete mode 100644 cypress/e2e/ideasPage.cy.ts delete mode 100644 cypress/e2e/leaderboardPage.cy.ts delete mode 100644 cypress/support/commands.ts delete mode 100644 cypress/support/constant.ts delete mode 100644 cypress/support/e2e.ts create mode 100644 e2e/README.md create mode 100644 e2e/pageobjects/enums/constant.ts create mode 100644 e2e/pageobjects/pages/home.ts create mode 100644 e2e/pageobjects/pages/ideas.ts create mode 100644 e2e/tests/ideaspage.spec.ts create mode 100644 e2e/tests/plays.spec.ts diff --git a/README.md b/README.md index 54bd273357..48449c1066 100644 --- a/README.md +++ b/README.md @@ -196,21 +196,34 @@ npm build It builds the app for production to the `build` folder. It correctly bundles React in production mode and optimizes the build for the best performance. The build is minified and the filenames include the hashes. -### ๐Ÿงช Test App Locally (E2E with Cypress) +-------------------------------------------------------------- -Use the following command to run cypress locally: +### ๐Ÿงช Test App Locally (E2E with Playwright) +Use the following command to install browser(s) binaries to test locally: ```bash -yarn cypress:open +yarn install playwright ``` OR ``` -npm run cypress:open +npm install playwright ``` -It will open the cypress dashboard, through which you need to select `E2E Testing`. -Once you are done with the selection you will get options to choose your preferred browser in which you want to run the test.! -Once you select the browser you need to click on `Start E2E Testing in .` The chosen browser will pop up you can see a list of cypress tests, click on the test to start testing.! +Use the following command to run Playwright tests: + +```bash +yarn e2e +``` +OR +``` +npm run e2e +``` +๐Ÿ‘€ Read more about testing in [react-play](../react-play/e2e/README.md) + +๐Ÿ‘€ Read more about playwright: https://playwright.dev/ + +-------------------------------------------------------------- + ### ๐Ÿš€ Deploy diff --git a/cypress/e2e/homePage.cy.ts b/cypress/e2e/homePage.cy.ts deleted file mode 100644 index 8473dca7d0..0000000000 --- a/cypress/e2e/homePage.cy.ts +++ /dev/null @@ -1,33 +0,0 @@ -// / - -import { CONTRIBUTORS_COUNT, TESTIMONIALS_COUNT } from '../support/constant'; - -describe('Test home page', () => { - beforeEach(() => { - cy.intercept('POST', '**/v1/graphql').as('contribs'); - cy.visit('/'); - cy.wait('@contribs'); - }); - - it('Header component should render properly', () => { - cy.header(); - }); - - it('Testitomonials section should render and navigation must be clickable', () => { - cy.get('[data-testid="testimonials-section"]').scrollIntoView().should('be.visible'); - cy.get('[data-testid="testimonials-swiper"]').scrollIntoView().should('be.visible'); - }); - - it('Testitomonials should have a number of slides', () => { - cy.get('[data-testid="testimonials-swiper"]').scrollIntoView().should('be.visible'); - cy.get('.swiper-slide').should('have.length', TESTIMONIALS_COUNT); - }); - - it('Contributors section should render with all contributors', () => { - cy.get('[data-testid="contributors-section"]').scrollIntoView().should('be.visible'); - cy.get('[data-testid="contributors-section"] [data-testid*="contributor-"]').should( - 'have.length', - CONTRIBUTORS_COUNT - ); - }); -}); diff --git a/cypress/e2e/ideasPage.cy.ts b/cypress/e2e/ideasPage.cy.ts deleted file mode 100644 index 980d92c8b7..0000000000 --- a/cypress/e2e/ideasPage.cy.ts +++ /dev/null @@ -1,11 +0,0 @@ -// / - -describe('Test play ideas page', () => { - beforeEach(() => { - cy.visit('/ideas'); - }); - - it('Header component should render properly', () => { - cy.header(); - }); -}); diff --git a/cypress/e2e/leaderboardPage.cy.ts b/cypress/e2e/leaderboardPage.cy.ts deleted file mode 100644 index 84ef08ef9c..0000000000 --- a/cypress/e2e/leaderboardPage.cy.ts +++ /dev/null @@ -1,11 +0,0 @@ -// / - -describe('Test leaderboard page', () => { - beforeEach(() => { - cy.visit('/leaderboard'); - }); - - it('Header component should render properly', () => { - cy.header(); - }); -}); diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts deleted file mode 100644 index ca09db9b00..0000000000 --- a/cypress/support/commands.ts +++ /dev/null @@ -1,54 +0,0 @@ -// / -// *********************************************** -// This example commands.ts 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 -// *********************************************** -// -// -// -- 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) => { ... }) -// -// declare global { -// namespace Cypress { -// interface Chainable { -// login(email: string, password: string): Chainable -// drag(subject: string, options?: Partial): Chainable -// dismiss(subject: string, options?: Partial): Chainable -// visit(originalFn: CommandOriginalFn, url: string, options: Partial): Chainable -// } -// } -// } - -// methods -Cypress.Commands.add('header', () => { - cy.get('[data-testid="app-header"]').should('be.visible'); - cy.get('[data-testid="app-logo"]').should('be.visible'); - cy.get('[data-testid="plays-search-box-container"]').should('not.exist'); - cy.get('[data-testid="header-links-container"]').should('be.visible'); - cy.get('[data-testid="browse-btn"]').should('be.visible').as('browseBtn'); - cy.get('[data-testid="create-btn"]').should('be.visible'); - cy.get('[data-testid="ideas-btn"]').should('be.visible'); - cy.get('[data-testid="github-btn"]').should('be.visible'); - cy.get('[data-testid="twitter-btn"]').should('be.visible'); - cy.get('[data-testid="share-btn"]').should('be.visible'); - cy.get('[data-testid="leaderboard-btn"]').should('be.visible'); - cy.get('@browseBtn').click(); - cy.get('[data-testid="plays-search-box-container"]').should('be.visible'); -}); diff --git a/cypress/support/constant.ts b/cypress/support/constant.ts deleted file mode 100644 index 82ad9a889a..0000000000 --- a/cypress/support/constant.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const TESTIMONIALS_COUNT = 9; -export const CONTRIBUTORS_COUNT = 29; diff --git a/cypress/support/e2e.ts b/cypress/support/e2e.ts deleted file mode 100644 index 598ab5f0d7..0000000000 --- a/cypress/support/e2e.ts +++ /dev/null @@ -1,20 +0,0 @@ -// *********************************************************** -// This example support/e2e.ts is processed and -// loaded automatically before your test files. -// -// This is a great place to put global configuration and -// behavior that modifies Cypress. -// -// You can change the location of this file or turn off -// automatically serving support files with the -// 'supportFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/configuration -// *********************************************************** - -// Import commands.js using ES2015 syntax: -import './commands'; - -// Alternatively you can use CommonJS syntax: -// require('./commands') diff --git a/e2e/README.md b/e2e/README.md new file mode 100644 index 0000000000..ac353ba78a --- /dev/null +++ b/e2e/README.md @@ -0,0 +1,30 @@ +## Purpose + +To test and provide good quality to react-play users. Making sure all of the basic path are functional and does not break user flow. + +test-case written for + +- home +- /plays +- /ideas + +Tests written followed simple page object rules, to keep the locaters segreggated and all the relevant reusable methods in the page files described at playwright docs, read more at: https://playwright.dev/docs/pom + + +### To run the test-cases use + +``` +yarn e2e +``` + +OR + +``` +npm run e2e +``` + +to debug test-cases use + +``` +yarn playwright test --debug +``` \ No newline at end of file diff --git a/e2e/pageobjects/enums/constant.ts b/e2e/pageobjects/enums/constant.ts new file mode 100644 index 0000000000..326ddebf01 --- /dev/null +++ b/e2e/pageobjects/enums/constant.ts @@ -0,0 +1,4 @@ +export enum Constant { + TRENDING_PLAYS_CARD_COUNT = 5, + PARTNERS_SPONSERS_LINKS_COUNT = 10 +} diff --git a/e2e/pageobjects/pages/home.ts b/e2e/pageobjects/pages/home.ts new file mode 100644 index 0000000000..b4562a0107 --- /dev/null +++ b/e2e/pageobjects/pages/home.ts @@ -0,0 +1,123 @@ +import { Locator, Page, expect } from '@playwright/test'; + +export class Home { + header: Locator; + appLogo: Locator; + browseBth: Locator; + createBtn: Locator; + eventBtn: Locator; + leaderboardBtn: Locator; + ideasBtn: Locator; + githubBtn: Locator; + twitterBtn: Locator; + discordBtn: Locator; + shareBtn: Locator; + featuresSection: Locator; + learnHowTo: Locator; + createYourPlays: Locator; + socializeYourPlays: Locator; + ideas: Locator; + plays: Locator; + playsTitle: Locator; + playsLink: Locator; + viewAllPlays: Locator; + testimonials: Locator; + testimonialsTitle: Locator; + swiperPagination: Locator; + swiperinitialized: Locator; + viewAllTestimonial: Locator; + contributors: Locator; + contributorsTitle: Locator; + partnersSponsers: Locator; + partnersSponsersTitle: Locator; + partnersSponsersLinks: Locator; + partnersSponsersBackersContainers: Locator; + partnersSponsersSupport: Locator; + partnersSponsersPrime: Locator; + partnersSponsersBePrime: Locator; + appFooter: Locator; + appFooterPrimaryStr: Locator; + appFooterAboutStr: Locator; + appFooterShowLove: Locator; + appFooterShareReactPlay: Locator; + appFooterModal: Locator; + appFooterModalCancel: Locator; + constructor(page: Page) { + this.header = page.locator('[data-testid="app-header"]'); + this.appLogo = this.header.getByTestId('app-logo'); + this.browseBth = this.header.getByTestId('browse-btn'); + this.eventBtn = this.header.getByTestId('events-btn'); + this.createBtn = this.header.getByTestId('create-btn'); + this.leaderboardBtn = this.header.getByTestId('leaderboard-btn'); + this.ideasBtn = this.header.getByTestId('ideas-btn'); + this.githubBtn = this.header.getByTestId('github-btn'); + this.twitterBtn = this.header.getByTestId('twitter-btn'); + this.discordBtn = this.header.getByTestId('discord-btn'); + this.shareBtn = this.header.getByTestId('share-btn'); + this.featuresSection = page.locator('[class="home-features"]'); + this.learnHowTo = this.featuresSection.getByText('Learn how to'); + this.createYourPlays = this.featuresSection.getByText(' Create your own plays'); + this.socializeYourPlays = this.featuresSection.getByText('Socialize Share your plays'); + this.ideas = page.locator('[class="home-ideas"]'); + this.plays = page.locator('[class="home-plays"]'); + this.playsTitle = this.plays.locator('[class="plays-title-primary"]'); + this.playsLink = this.plays.getByRole('link'); + this.viewAllPlays = this.plays.getByRole('link', { name: 'View all Plays' }); + this.testimonials = page.locator('[class="testimonials"]'); + this.testimonialsTitle = this.testimonials.locator('[class="title-primary"]'); + this.swiperPagination = this.testimonials.locator('.swiper-pagination'); + this.swiperinitialized = this.testimonials.locator('[class*="swiper swiper-initialized"]'); + this.viewAllTestimonial = this.testimonials.getByRole('link', { + name: 'View all Testimonials' + }); + this.contributors = page.locator('[data-testid="contributors-section"]'); + this.contributorsTitle = this.contributors.locator('[class="title-primary"]'); + this.partnersSponsers = page.locator('[data-testid="sponsors-section"]'); + this.partnersSponsersTitle = this.partnersSponsers.locator('[class="title-primary"]'); + this.partnersSponsersLinks = this.partnersSponsers.getByRole('link'); + this.partnersSponsersBackersContainers = this.partnersSponsers.locator( + '[class="backers-container"]' + ); + this.partnersSponsersSupport = this.partnersSponsers.getByText('Support us with any monthly'); + this.partnersSponsersPrime = this.partnersSponsers.locator( + '[class="prime-sponsors-container"]' + ); + this.partnersSponsersBePrime = this.partnersSponsers.getByText('Be a prime sponsor of'); + this.appFooter = page.locator('[class="app-footer--home app-footer"]'); + this.appFooterPrimaryStr = this.appFooter.locator('[class="body-primary"]'); + this.appFooterAboutStr = this.appFooter.getByRole('heading', { name: 'About' }); + this.appFooterShowLove = this.appFooter.getByRole('heading', { name: 'Show love' }); + this.appFooterShareReactPlay = this.appFooter.getByRole('button', { + name: 'Share about ReactPlay' + }); + this.appFooterModal = page.locator('[class*="modal-share"]').nth(0); + this.appFooterModalCancel = page.getByRole('button', { name: 'Cancel' }); + } + + async headerVisibleClickable() { + await expect(this.appLogo).toBeVisible(); + // assertion of header static informations + await expect(this.browseBth).toHaveText('Browse'); + await expect(this.eventBtn).toBeEditable(); + await expect(this.createBtn).toBeEditable(); + await expect(this.leaderboardBtn).toBeEditable(); + await expect(this.ideasBtn).toBeEditable(); + await expect(this.githubBtn).toBeEditable(); + await expect(this.twitterBtn).toBeEditable(); + await expect(this.discordBtn).toBeEditable(); + await expect(this.shareBtn).toBeEditable(); + } + + async footerVisibleClickable() { + await expect(this.appFooterPrimaryStr).toContainText( + 'An open-source project made with โค๏ธ by team ReactPlay.' + ); + await expect(this.appFooterAboutStr).toBeVisible(); + await expect(this.appFooterShowLove).toBeVisible(); + // total 14 links + expect(await this.appFooter.getByRole('link').count()).toEqual(14); + await this.appFooterShareReactPlay.click(); + await expect(this.appFooterModal).toBeVisible(); + await this.appFooterModalCancel.click(); + } +} diff --git a/e2e/pageobjects/pages/ideas.ts b/e2e/pageobjects/pages/ideas.ts new file mode 100644 index 0000000000..88638b3ffb --- /dev/null +++ b/e2e/pageobjects/pages/ideas.ts @@ -0,0 +1,33 @@ +import { Locator, Page, expect } from '@playwright/test'; + +export class Ideas { + ideasPageHeader: Locator; + ideasPageHeading: Locator; + ideasPageHeaderStr: Locator; + ideasPageAllStrToggle: Locator; + ideasPageBeginnertoggle: Locator; + ideasPageIntermidiateToggle: Locator; + ideasPageAdvancedToggle: Locator; + ideasPageHeaderBadgeCounter: Locator; + ideasPageCards: Locator; + constructor(page: Page) { + this.ideasPageHeader = page.locator('[class="playideas-header"]'); + this.ideasPageHeading = this.ideasPageHeader.getByRole('heading', { name: 'Play Ideas' }); + this.ideasPageHeaderStr = this.ideasPageHeader.getByText('Looking for project ideas to'); + this.ideasPageAllStrToggle = this.ideasPageHeader.getByText('All', { exact: true }); + this.ideasPageBeginnertoggle = this.ideasPageHeader.getByText('BEGINNER', { exact: true }); + this.ideasPageIntermidiateToggle = this.ideasPageHeader.getByText('INTERMEDIATE', { + exact: true + }); + this.ideasPageAdvancedToggle = this.ideasPageHeader.getByText('ADVANCED', { exact: true }); + this.ideasPageHeaderBadgeCounter = this.ideasPageHeader.locator('[class="header-title-badge"]'); + this.ideasPageCards = page.locator('[class="idea-actions"]'); + } + + async cardMatchwithBadgeinHeader() { + const ideasPageCardsConvert = await this.ideasPageCards.count(); + const ideasPageCardsConvertStr = ideasPageCardsConvert.toString(); + const counterOnHeader = await this.ideasPageHeaderBadgeCounter.innerText(); + expect(ideasPageCardsConvertStr).toEqual(counterOnHeader); + } +} diff --git a/e2e/tests/homepage.spec.ts b/e2e/tests/homepage.spec.ts index 4ed0b155e6..f9721a79e0 100644 --- a/e2e/tests/homepage.spec.ts +++ b/e2e/tests/homepage.spec.ts @@ -1,4 +1,6 @@ import { test, expect } from '@playwright/test'; +import { Home } from '../pageobjects/pages/home'; +import { Constant } from '../pageobjects/enums/constant'; test.beforeEach(async ({ page }) => { await page.goto('/'); @@ -7,56 +9,43 @@ test.beforeEach(async ({ page }) => { test('Header section is visible and btns are editable', async ({ page }) => { await page.waitForLoadState('domcontentloaded'); - const header = page.locator('[data-testid="app-header"]'); - await expect(header).toBeVisible(); // header to be visibile - await expect(header.getByTestId('app-logo')).toBeVisible(); - // assertion of header static informations - await expect(header.getByTestId('browse-btn')).toHaveText('Browse'); - await expect(header.getByTestId('events-btn')).toBeEditable(); - await expect(header.getByTestId('create-btn')).toBeEditable(); - await expect(header.getByTestId('leaderboard-btn')).toBeEditable(); - await expect(header.getByTestId('ideas-btn')).toBeEditable(); - await expect(header.getByTestId('github-btn')).toBeEditable(); - await expect(header.getByTestId('twitter-btn')).toBeEditable(); - await expect(header.getByTestId('discord-btn')).toBeEditable(); - await expect(header.getByTestId('share-btn')).toBeEditable(); + const home = new Home(page); + await expect(home.header).toBeVisible(); // header to be visibile + await home.headerVisibleClickable(); }); test('learn/create/socialize section should render and assert strings', async ({ page }) => { - const featuresSection = page.locator('[class="home-features"]'); - await featuresSection.scrollIntoViewIfNeeded(); - await expect(featuresSection).toBeInViewport(); + const features = new Home(page); + await features.featuresSection.scrollIntoViewIfNeeded(); + await expect(features.featuresSection).toBeInViewport(); // learn - await expect(featuresSection.getByText('Learn how to')).toBeVisible(); - const learnString = featuresSection.getByText('Learn how to'); - await expect(learnString).toContainText( + await expect(features.learnHowTo).toBeVisible(); + await expect(features.learnHowTo).toContainText( 'Learn how to "Think in React" and build applications inspired by several plays(source code & demos). Get to the source code of it, find related article, or even a YouTube video. Learn from the expert code reviews.' ); // create - await expect(featuresSection.getByText(' Create your own plays')).toBeVisible(); - const createStr = featuresSection.getByText(' Create your own plays'); - await expect(createStr).toContainText( + await expect(features.createYourPlays).toBeVisible(); + await expect(features.createYourPlays).toContainText( 'Create your own plays and own them by following a few simple steps. Learned something new? Perfect to present as a play. You can also contribute to the existing plays. Your play will be reviewed by the experts before being made public' ); // socialize - await expect(featuresSection.getByText('Socialize Share your plays')).toBeVisible(); - const socializeStr = featuresSection.getByText('Socialize Share your plays'); - await expect(socializeStr).toContainText( + await expect(features.socializeYourPlays).toBeVisible(); + await expect(features.socializeYourPlays).toContainText( 'Share your plays with the community. The best way of building in public is by sharing the learning. You can share your plays on social media platforms like Facebook, Twitter, LinkedIn, to name a few, just with a single click.' ); }); test('Ideas section is visible & goes to proper /pages ', async ({ page }) => { - const ideas = page.locator('[class="home-ideas"]'); - await ideas.scrollIntoViewIfNeeded(); - await expect(ideas).toBeInViewport(); - await expect(ideas).toContainText( + const ideasSection = new Home(page); + await ideasSection.ideas.scrollIntoViewIfNeeded(); + await expect(ideasSection.ideas).toBeInViewport(); + await expect(ideasSection.ideas).toContainText( 'Not sure how to get started?We have got lot of ideasGet started with some ideas' ); // navigation works - await ideas.getByRole('link', { name: 'Get started with some ideas' }).click(); + await ideasSection.ideas.getByRole('link', { name: 'Get started with some ideas' }).click(); expect(page.url()).toMatch(/ideas/); await page.goBack(); }); @@ -64,15 +53,15 @@ test('Ideas section is visible & goes to proper /pages ', async ({ page }) => { test('Trending Plays section is visible, has four view & goes to proper /pages ', async ({ page }) => { - const plays = page.locator('[class="home-plays"]'); - await plays.scrollIntoViewIfNeeded(); - await expect(plays.locator('[class="plays-title-primary"]')).toContainText('Trending Plays'); + const playsSection = new Home(page); + await playsSection.plays.scrollIntoViewIfNeeded(); + await expect(playsSection.playsTitle).toContainText('Trending Plays'); await page.waitForLoadState('networkidle'); // counts cards based on four links & added "View all play string" makes it five - const cardCount = plays.getByRole('link').count(); - expect(await cardCount).toEqual(5); + const cardCount = playsSection.playsLink.count(); + expect(await cardCount).toEqual(Constant.TRENDING_PLAYS_CARD_COUNT); // nav check - await plays.getByRole('link', { name: 'View all Plays' }).click(); + await playsSection.viewAllPlays.click(); expect(page.url()).toMatch(/plays/); await page.goBack(); }); @@ -80,67 +69,56 @@ test('Trending Plays section is visible, has four view & goes to proper /pages ' test('What our section - testimonials is visible, slider is clickable & str to proper /pages ', async ({ page }) => { - const testimonials = page.locator('[class="testimonials"]'); - await testimonials.scrollIntoViewIfNeeded(); + const testimonialsSection = new Home(page); + await testimonialsSection.testimonials.scrollIntoViewIfNeeded(); await page.waitForLoadState('networkidle'); - await expect(testimonials.locator('[class="title-primary"]')).toContainText( - 'What Our Community Says!' - ); + await expect(testimonialsSection.testimonialsTitle).toContainText('What Our Community Says!'); // pagination swipier check - await expect(testimonials.locator('.swiper-pagination')).toBeEditable(); - await expect(testimonials.locator('[class*="swiper swiper-initialized"]')).toBeVisible(); + await expect(testimonialsSection.swiperPagination).toBeEditable(); + await expect(testimonialsSection.swiperinitialized).toBeVisible(); // nav check - await testimonials.getByRole('link', { name: 'View all Testimonials' }).click(); + await testimonialsSection.viewAllTestimonial.click(); expect(page.url()).toMatch(/testimonials/); await page.goBack(); }); test('big thanks to Contributors is visible ', async ({ page }) => { - const contributors = page.locator('[data-testid="contributors-section"]'); - await contributors.scrollIntoViewIfNeeded(); + const contributorsSection = new Home(page); + await contributorsSection.contributors.scrollIntoViewIfNeeded(); await page.waitForLoadState('networkidle'); - expect(contributors).toBeInViewport; - await expect(contributors.locator('[class="title-primary"]')).toContainText( + expect(contributorsSection.contributors).toBeInViewport; + await expect(contributorsSection.contributorsTitle).toContainText( 'Big Thanks to All Contributors!' ); }); test('Our Partners & Sponsors is visible, links are clickable and has links ', async ({ page }) => { - const partnersSponsers = page.locator('[data-testid="sponsors-section"]'); - await partnersSponsers.scrollIntoViewIfNeeded(); + const partnersSponsersSection = new Home(page); + await partnersSponsersSection.partnersSponsers.scrollIntoViewIfNeeded(); await page.waitForLoadState('networkidle'); - expect(partnersSponsers).toBeInViewport; - await expect(partnersSponsers.locator('[class="title-primary"]')).toContainText( + expect(partnersSponsersSection.partnersSponsers).toBeInViewport; + await expect(partnersSponsersSection.partnersSponsersTitle).toContainText( 'OurPartners & Sponsors' ); // total 10 links presents check - expect(await partnersSponsers.getByRole('link').count()).toEqual(10); + expect(await partnersSponsersSection.partnersSponsersLinks.count()).toEqual( + Constant.PARTNERS_SPONSERS_LINKS_COUNT + ); // backers - await expect(partnersSponsers.locator('[class="backers-container"]')).toContainText('Backers'); - await expect(partnersSponsers.getByText('Support us with any monthly')).toContainText( + await expect(partnersSponsersSection.partnersSponsersBackersContainers).toContainText('Backers'); + await expect(partnersSponsersSection.partnersSponsersSupport).toContainText( 'Support us with any monthly sponsorship. Your help means a lot to us. We will give you a shoutout and add you here.' ); - await expect(partnersSponsers.locator('[class="prime-sponsors-container"]')).toContainText( - 'Prime Sponsors' - ); - await expect(partnersSponsers.getByText('Be a prime sponsor of')).toContainText( + await expect(partnersSponsersSection.partnersSponsersPrime).toContainText('Prime Sponsors'); + await expect(partnersSponsersSection.partnersSponsersBePrime).toContainText( 'Be a prime sponsor of ReactPlay. Your sponsorship will go a long way, and we will place you in our internal events, newsletters and here on the homepage.' ); }); test('footer is visible, links are clickable and has links ', async ({ page }) => { - const partnersSponsers = page.locator('[class="app-footer--home app-footer"]'); - await partnersSponsers.scrollIntoViewIfNeeded(); + const footer = new Home(page); + await footer.appFooter.scrollIntoViewIfNeeded(); await page.waitForLoadState('networkidle'); - expect(partnersSponsers).toBeInViewport; - await expect(partnersSponsers.locator('[class="body-primary"]')).toContainText( - 'An open-source project made with โค๏ธ by team ReactPlay.' - ); - await expect(partnersSponsers.getByRole('heading', { name: 'About' })).toBeVisible(); - await expect(partnersSponsers.getByRole('heading', { name: 'Show love' })).toBeVisible(); - // total 14 links - expect(await partnersSponsers.getByRole('link').count()).toEqual(14); - await partnersSponsers.getByRole('button', { name: 'Share about ReactPlay' }).click(); - await expect(page.locator('[class*="modal-share"]').nth(0)).toBeVisible(); - await page.getByRole('button', { name: 'Cancel' }).click(); + expect(footer.appFooter).toBeInViewport; + await footer.footerVisibleClickable(); }); diff --git a/e2e/tests/ideaspage.spec.ts b/e2e/tests/ideaspage.spec.ts new file mode 100644 index 0000000000..80e00991f8 --- /dev/null +++ b/e2e/tests/ideaspage.spec.ts @@ -0,0 +1,54 @@ +import { test, expect } from '@playwright/test'; +import { Home } from '../pageobjects/pages/home'; +import { Ideas } from '../pageobjects/pages/ideas'; + +test.beforeEach(async ({ page }) => { + await page.goto('/ideas'); + await page.waitForLoadState('domcontentloaded'); +}); + +test('Header section is visible and btns are editable', async ({ page }) => { + await page.waitForLoadState('domcontentloaded'); + const home = new Home(page); + await expect(home.header).toBeVisible(); // header to be visibile + await home.headerVisibleClickable(); +}); + +test('Ideas Page Header section is visible, btns are editable and count matchs with card number', async ({ + page +}) => { + const headerIdeas = new Ideas(page); + await expect(headerIdeas.ideasPageHeader).toBeVisible(); + await expect(headerIdeas.ideasPageHeading).toBeInViewport(); + await expect(headerIdeas.ideasPageHeaderStr).toContainText( + 'Looking for project ideas to practice React? Great, you have landed on the right place. Here are some ideas to get you started.' + ); + // toggle btns + await expect(headerIdeas.ideasPageAllStrToggle).toBeEditable(); + await expect(headerIdeas.ideasPageBeginnertoggle).toBeEditable(); + await expect(headerIdeas.ideasPageIntermidiateToggle).toBeEditable(); + await expect(headerIdeas.ideasPageAdvancedToggle).toBeEditable(); + // dynamically check counter on header + await headerIdeas.cardMatchwithBadgeinHeader(); +}); + +test('Beginner toggle is visible and count matchs with card number', async ({ page }) => { + const headerIdeas = new Ideas(page); + await headerIdeas.ideasPageBeginnertoggle.click(); + // checks counts + await headerIdeas.cardMatchwithBadgeinHeader(); +}); + +test('Intermidiate toggle is visible and count matchs with card number', async ({ page }) => { + const headerIdeas = new Ideas(page); + await headerIdeas.ideasPageIntermidiateToggle.click(); + // checks counts + await headerIdeas.cardMatchwithBadgeinHeader(); +}); + +test('Advanced toggle is visible and count matchs with card number', async ({ page }) => { + const headerIdeas = new Ideas(page); + await headerIdeas.ideasPageAdvancedToggle.click(); + // checks counts + await headerIdeas.cardMatchwithBadgeinHeader(); +}); diff --git a/e2e/tests/plays.spec.ts b/e2e/tests/plays.spec.ts new file mode 100644 index 0000000000..4d38f46e7c --- /dev/null +++ b/e2e/tests/plays.spec.ts @@ -0,0 +1,3 @@ +import { test, expect } from '@playwright/test'; +import { Home } from '../pageobjects/pages/home'; +import { Ideas } from '../pageobjects/pages/ideas'; diff --git a/playwright.config.ts b/playwright.config.ts index 5ea25a444e..146a0266e3 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -7,6 +7,8 @@ export default defineConfig({ testDir: './e2e/tests', /* Run tests in files in parallel */ fullyParallel: true, + /* timeout limit to properly tests */ + timeout: 90_000, /* Fail the build on CI if you accidentally left test.only in the source code. */ forbidOnly: !!process.env.CI, /* Retry on CI only */ From 47cb23fc3a2f1702d3d158620df166d300935bdd Mon Sep 17 00:00:00 2001 From: Mohat Shil <146836180+mohatShilABB@users.noreply.github.com> Date: Sat, 23 Mar 2024 18:50:23 +0100 Subject: [PATCH 4/5] complete set e2e tests added - removed cypress.yml and added pw yml - using list reporter instaed of line reporter - added full sets of tests --- .../{cypress.yml => playwright-e2e.yml} | 22 ++++-- e2e/pageobjects/pages/plays.ts | 74 +++++++++++++++++++ e2e/pageobjects/pages/testimonials.ts | 12 +++ e2e/tests/plays.spec.ts | 3 - e2e/tests/playspage.spec.ts | 65 ++++++++++++++++ e2e/tests/testimonialspage.spec.ts | 16 ++++ package.json | 2 +- 7 files changed, 185 insertions(+), 9 deletions(-) rename .github/workflows/{cypress.yml => playwright-e2e.yml} (61%) create mode 100644 e2e/pageobjects/pages/plays.ts create mode 100644 e2e/pageobjects/pages/testimonials.ts delete mode 100644 e2e/tests/plays.spec.ts create mode 100644 e2e/tests/playspage.spec.ts create mode 100644 e2e/tests/testimonialspage.spec.ts diff --git a/.github/workflows/cypress.yml b/.github/workflows/playwright-e2e.yml similarity index 61% rename from .github/workflows/cypress.yml rename to .github/workflows/playwright-e2e.yml index 7808bd2d53..b7d058cc63 100644 --- a/.github/workflows/cypress.yml +++ b/.github/workflows/playwright-e2e.yml @@ -1,4 +1,4 @@ -name: Cypress Tests +name: Playwright e2e Tests on: push: @@ -10,7 +10,7 @@ concurrency: group: environment-${{ github.ref }} cancel-in-progress: true jobs: - cypress-run: + playwright-run: runs-on: ubuntu-latest if: github.repository == 'reactplay/react-play' steps: @@ -21,9 +21,9 @@ jobs: npm install --legacy-peer-deps # Install NPM dependencies, cache them correctly - # and run all Cypress tests - - name: Cypress run - uses: cypress-io/github-action@v4 + # and run all Playwright tests + - name: Playwright run + uses: actions/checkout@v4 with: install-command: | npm install --legacy-peer-deps @@ -33,3 +33,15 @@ jobs: env: # pass GitHub token to detect new build vs re-run build GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + - name: Install dependencies + run: npm ci + - name: Install Playwright Browsers + run: npx playwright install --with-deps + - name: Run Playwright tests + run: yarn e2e + - uses: actions/upload-artifact@v4 + if: always() + with: + name: playwright-report + path: playwright-report/ + retention-days: 30 diff --git a/e2e/pageobjects/pages/plays.ts b/e2e/pageobjects/pages/plays.ts new file mode 100644 index 0000000000..9222a06a0b --- /dev/null +++ b/e2e/pageobjects/pages/plays.ts @@ -0,0 +1,74 @@ +import { Locator, Page, expect } from '@playwright/test'; + +export class Plays { + searchBoxContainer: Locator; + searchBoxFilter: Locator; + searchBoxFilterModal: Locator; + searchBoxFilterModalHeading: Locator; + searchBoxFilterModalText: Locator; + searchBoxFilterModalLevels: Locator; + searchBoxFilterModalTags: Locator; + searchBoxFilterModalOwners: Locator; + searchBoxFilterModalLanguages: Locator; + searchBoxFilterModalTextInputField: Locator; + searchBoxFilterModalLvlsInput: Locator; + searchBoxFilterModalCancelBtn: Locator; + searchBoxFilterModalApplyBtn: Locator; + searchBoxInputField: Locator; + oopsError: Locator; + oopsErrorPlaynotFound: Locator; + oopsErrorPlaynotFoundClear: Locator; + dynamicBannerContainer: Locator; + dynamicBannerContainerPlayBtn: Locator; + sortByPlayswrapper: Locator; + sortByPlays: Locator; + sortByPlaysNewest: Locator; + sortByPlaysOldest: Locator; + sortByPlaysMostLiked: Locator; + sortByPlaysRandom: Locator; + listOfPlays: Locator; + constructor(page: Page) { + this.searchBoxContainer = page.getByTestId('plays-search-box-container'); + this.searchBoxFilter = this.searchBoxContainer.getByRole('button', { name: 'Filter Plays' }); + this.searchBoxFilterModal = page.locator('[class="modal-filter"]'); + this.searchBoxFilterModalHeading = this.searchBoxFilterModal.getByRole('heading', { + name: 'Filter Plays By' + }); + this.searchBoxFilterModalText = this.searchBoxFilterModal.getByText('Text', { exact: true }); + this.searchBoxFilterModalLevels = this.searchBoxFilterModal.getByText('Levels'); + this.searchBoxFilterModalTags = this.searchBoxFilterModal.getByText('Tags'); + this.searchBoxFilterModalOwners = this.searchBoxFilterModal.getByText('Owners'); + this.searchBoxFilterModalLanguages = this.searchBoxFilterModal.getByText('Languages'); + this.searchBoxFilterModalCancelBtn = this.searchBoxFilterModal.getByRole('button', { + name: 'Cancel' + }); + this.searchBoxFilterModalApplyBtn = this.searchBoxFilterModal.getByRole('button', { + name: 'Apply' + }); + this.searchBoxInputField = page.getByTestId('plays-search-box-input-field'); + this.oopsError = page.getByText('OOPS!Play not foundYou migh'); + this.oopsErrorPlaynotFound = this.oopsError.getByText('Play not found'); + this.oopsErrorPlaynotFoundClear = this.oopsError.getByRole('link', { name: 'clear' }); + this.dynamicBannerContainer = page.locator('[class="dynamic-banner-container"]'); + this.dynamicBannerContainerPlayBtn = page.getByRole('button', { name: "Let's Play" }); + this.sortByPlayswrapper = page.locator('[class="sort-by-plays-wrapper"]'); + this.sortByPlays = this.sortByPlayswrapper.locator('#sort-by-plays'); + this.sortByPlaysNewest = this.sortByPlayswrapper.locator('[value="Newest"]'); + this.sortByPlaysOldest = this.sortByPlayswrapper.locator('[value="Oldest"]'); + this.sortByPlaysMostLiked = this.sortByPlayswrapper.locator('[value="Most Liked"]'); + this.sortByPlaysRandom = this.sortByPlayswrapper.locator('[value="Random"]'); + this.listOfPlays = page.locator('[class="list-plays"]'); + } + async filterModalAssertions() { + await this.searchBoxFilter.click(); + await expect(this.searchBoxFilterModalHeading).toBeVisible(); + await expect(this.searchBoxFilterModalText).toBeVisible(); + await expect(this.searchBoxFilterModalLevels).toBeVisible(); + await expect(this.searchBoxFilterModalTags).toBeVisible(); + await expect(this.searchBoxFilterModalOwners).toBeVisible(); + await expect(this.searchBoxFilterModalLanguages).toBeVisible(); + await expect(this.searchBoxFilterModalCancelBtn).toBeEditable(); + await expect(this.searchBoxFilterModalApplyBtn).toBeEditable(); + await this.searchBoxFilterModalCancelBtn.click(); + } +} diff --git a/e2e/pageobjects/pages/testimonials.ts b/e2e/pageobjects/pages/testimonials.ts new file mode 100644 index 0000000000..c8ad1939a3 --- /dev/null +++ b/e2e/pageobjects/pages/testimonials.ts @@ -0,0 +1,12 @@ +import { Locator, Page } from '@playwright/test'; + +export class Testimonials { + testimonialsTitle: Locator; + testimonialsBtn: Locator; + testimonialCards: Locator; + constructor(page: Page) { + this.testimonialsTitle = page.getByRole('heading', { name: 'What Our Community Says!' }); + this.testimonialsBtn = page.getByRole('button', { name: 'Testimonial' }); + this.testimonialCards = page.locator('[class*="grid"]'); + } +} diff --git a/e2e/tests/plays.spec.ts b/e2e/tests/plays.spec.ts deleted file mode 100644 index 4d38f46e7c..0000000000 --- a/e2e/tests/plays.spec.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { test, expect } from '@playwright/test'; -import { Home } from '../pageobjects/pages/home'; -import { Ideas } from '../pageobjects/pages/ideas'; diff --git a/e2e/tests/playspage.spec.ts b/e2e/tests/playspage.spec.ts new file mode 100644 index 0000000000..593772a979 --- /dev/null +++ b/e2e/tests/playspage.spec.ts @@ -0,0 +1,65 @@ +import { test, expect } from '@playwright/test'; +import { Plays } from '../pageobjects/pages/plays'; + +test.beforeEach(async ({ page }) => { + await page.goto('/plays'); + await page.waitForLoadState('networkidle'); +}); + +test('search functionaliy is visible and filter options is functions properly', async ({ + page +}) => { + const playsPage = new Plays(page); + await expect(playsPage.searchBoxContainer).toBeVisible(); + await expect(playsPage.searchBoxFilter).toBeVisible(); + // assertion of all filter modal fields + await playsPage.filterModalAssertions(); + await playsPage.searchBoxInputField.fill('testin e2e tests with react play'); + await expect(playsPage.oopsErrorPlaynotFound).toBeVisible(); + await playsPage.oopsErrorPlaynotFoundClear.click(); +}); + +test('play btn is editable, header is visible & user can nav back and forth using the btn', async ({ + page +}) => { + const playsPage = new Plays(page); + await expect(playsPage.searchBoxContainer).toBeVisible(); + await expect(playsPage.searchBoxFilter).toBeVisible(); + // assertion of all filter modal fields + await playsPage.filterModalAssertions(); + await expect(playsPage.dynamicBannerContainer).toBeVisible(); + await expect(playsPage.dynamicBannerContainerPlayBtn).toBeEditable(); + await playsPage.dynamicBannerContainerPlayBtn.click(); + await page.goBack(); +}); + +test('sort by section is functional ', async ({ page }) => { + const playsPage = new Plays(page); + await expect(playsPage.searchBoxContainer).toBeVisible(); + await expect(playsPage.searchBoxFilter).toBeVisible(); + + await expect(playsPage.sortByPlayswrapper).toBeVisible(); + await expect(playsPage.sortByPlaysNewest).not.toBeVisible(); + await expect(playsPage.sortByPlaysOldest).not.toBeVisible(); + await expect(playsPage.sortByPlaysMostLiked).not.toBeVisible(); + await expect(playsPage.sortByPlaysRandom).not.toBeVisible(); +}); + +test('Randomly click on some cards and return to the plays page', async ({ page }) => { + const playsPage = new Plays(page); + await expect(playsPage.searchBoxContainer).toBeVisible(); + await expect(playsPage.searchBoxFilter).toBeVisible(); + await expect(playsPage.listOfPlays).toBeVisible(); + + const allCards = playsPage.listOfPlays.locator('a'); + const numberOfCards = await allCards.count(); + const numberOfRandomClicks = 5; + const randomIndices = Array.from({ length: numberOfRandomClicks }, () => + Math.floor(Math.random() * numberOfCards) + ); + // Clicks on randomly selected cards + for (const index of randomIndices) { + await allCards.nth(index).click(); + await page.goBack(); + } +}); diff --git a/e2e/tests/testimonialspage.spec.ts b/e2e/tests/testimonialspage.spec.ts new file mode 100644 index 0000000000..a22065d528 --- /dev/null +++ b/e2e/tests/testimonialspage.spec.ts @@ -0,0 +1,16 @@ +import { test, expect } from '@playwright/test'; +import { Testimonials } from '../pageobjects/pages/testimonials'; + +test.beforeEach(async ({ page }) => { + await page.goto('/testimonials'); + await page.waitForLoadState('networkidle'); +}); + +test('testimonial page is visible, header is visible and btn is clickable ', async ({ page }) => { + const testimonialsPage = new Testimonials(page); + expect(page.url()).toMatch(/testimonials/); + await page.waitForLoadState('networkidle'); + await expect(testimonialsPage.testimonialsTitle).toContainText('What Our Community Says!'); + expect(testimonialsPage.testimonialsBtn).toBeEditable(); + expect(testimonialsPage.testimonialCards).toBeVisible(); +}); diff --git a/package.json b/package.json index aaa4e1d38d..cde91e5296 100644 --- a/package.json +++ b/package.json @@ -91,7 +91,7 @@ "snap": "react-snap", "test": "react-scripts test", "eject": "react-scripts eject", - "e2e": "npx playwright test --reporter=html --retries=2", + "e2e": "npx playwright test --reporter=html,list --retries=2", "lint": "eslint src/**/*.{js,jsx,ts,tsx}", "lint:fix": "eslint --fix src/**/*.{js,jsx,ts,tsx}", "format": "prettier --write \"./src/**/*.{js,jsx,ts,tsx,css,scss,md}\" --config ./.prettierrc", From 11978d02cc83787b83083086f7556572fadb6037 Mon Sep 17 00:00:00 2001 From: Mohat Shil <146836180+mohatShilABB@users.noreply.github.com> Date: Tue, 26 Mar 2024 14:52:03 +0100 Subject: [PATCH 5/5] comment resolve - typo broweBtn --- e2e/pageobjects/pages/home.ts | 6 +- pnpm-lock.yaml | 1109 +++++---------------------------- 2 files changed, 147 insertions(+), 968 deletions(-) diff --git a/e2e/pageobjects/pages/home.ts b/e2e/pageobjects/pages/home.ts index b4562a0107..54cf20024d 100644 --- a/e2e/pageobjects/pages/home.ts +++ b/e2e/pageobjects/pages/home.ts @@ -3,7 +3,7 @@ import { Locator, Page, expect } from '@playwright/test'; export class Home { header: Locator; appLogo: Locator; - browseBth: Locator; + browseBtn: Locator; createBtn: Locator; eventBtn: Locator; leaderboardBtn: Locator; @@ -45,7 +45,7 @@ export class Home { constructor(page: Page) { this.header = page.locator('[data-testid="app-header"]'); this.appLogo = this.header.getByTestId('app-logo'); - this.browseBth = this.header.getByTestId('browse-btn'); + this.browseBtn = this.header.getByTestId('browse-btn'); this.eventBtn = this.header.getByTestId('events-btn'); this.createBtn = this.header.getByTestId('create-btn'); this.leaderboardBtn = this.header.getByTestId('leaderboard-btn'); @@ -97,7 +97,7 @@ export class Home { async headerVisibleClickable() { await expect(this.appLogo).toBeVisible(); // assertion of header static informations - await expect(this.browseBth).toHaveText('Browse'); + await expect(this.browseBtn).toHaveText('Browse'); await expect(this.eventBtn).toBeEditable(); await expect(this.createBtn).toBeEditable(); await expect(this.leaderboardBtn).toBeEditable(); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 91044d5a87..bff5da1b3b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -247,6 +247,9 @@ devDependencies: '@babel/plugin-transform-private-property-in-object': specifier: ^7.23.4 version: 7.23.4(@babel/core@7.24.3) + '@playwright/test': + specifier: ^1.42.1 + version: 1.42.1 '@tailwindcss/nesting': specifier: 0.0.0-insiders.565cd3e version: 0.0.0-insiders.565cd3e(postcss@8.4.36) @@ -283,9 +286,6 @@ devDependencies: autoprefixer: specifier: ^10.4.17 version: 10.4.17(postcss@8.4.36) - cypress: - specifier: ^10.11.0 - version: 10.11.0 eslint: specifier: ^8.56.0 version: 8.56.0 @@ -331,9 +331,6 @@ devDependencies: prettier: specifier: ^3.2.4 version: 3.2.4 - puppeteer: - specifier: ^21.9.0 - version: 21.9.0(typescript@5.3.3) react-snap: specifier: ^1.23.0 version: 1.23.0 @@ -421,7 +418,7 @@ packages: '@babel/traverse': 7.23.7 '@babel/types': 7.23.6 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -444,7 +441,7 @@ packages: '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -563,7 +560,7 @@ packages: '@babel/core': 7.23.7 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -578,7 +575,7 @@ packages: '@babel/core': 7.23.7 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -1988,7 +1985,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.23.6 '@babel/types': 7.23.6 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -2006,7 +2003,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.24.1 '@babel/types': 7.24.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -2031,13 +2028,6 @@ packages: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: false - /@colors/colors@1.5.0: - resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} - engines: {node: '>=0.1.90'} - requiresBuild: true - dev: true - optional: true - /@csstools/normalize.css@12.1.1: resolution: {integrity: sha512-YAYeJ+Xqh7fUou1d1j9XHl44BmsuThiTr4iNrgCQ3J27IbhXsxXDGZ1cXv8Qvs99d4rBbLiSKy3+WZiet32PcQ==} dev: false @@ -2195,39 +2185,6 @@ packages: postcss-selector-parser: 6.0.15 dev: false - /@cypress/request@2.88.12: - resolution: {integrity: sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA==} - engines: {node: '>= 6'} - dependencies: - aws-sign2: 0.7.0 - aws4: 1.12.0 - caseless: 0.12.0 - combined-stream: 1.0.8 - extend: 3.0.2 - forever-agent: 0.6.1 - form-data: 2.3.3 - http-signature: 1.3.6 - is-typedarray: 1.0.0 - isstream: 0.1.2 - json-stringify-safe: 5.0.1 - mime-types: 2.1.35 - performance-now: 2.1.0 - qs: 6.10.4 - safe-buffer: 5.2.1 - tough-cookie: 4.1.3 - tunnel-agent: 0.6.0 - uuid: 8.3.2 - dev: true - - /@cypress/xvfb@1.2.4(supports-color@8.1.1): - resolution: {integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==} - dependencies: - debug: 3.2.7(supports-color@8.1.1) - lodash.once: 4.1.1 - transitivePeerDependencies: - - supports-color - dev: true - /@emotion/babel-plugin@11.11.0: resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} dependencies: @@ -2376,7 +2333,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.0 @@ -2946,7 +2903,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -3682,6 +3639,14 @@ packages: engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} dev: true + /@playwright/test@1.42.1: + resolution: {integrity: sha512-Gq9rmS54mjBL/7/MvBaNOBwbfnh7beHvS6oS4srqXFcQHpQCV1+c8JXWE8VLPyRDhgS3H8x8A7hztqI9VnwrAQ==} + engines: {node: '>=16'} + hasBin: true + dependencies: + playwright: 1.42.1 + dev: true + /@pmmmwh/react-refresh-webpack-plugin@0.5.11(react-refresh@0.11.0)(webpack-dev-server@4.15.1)(webpack@5.90.0): resolution: {integrity: sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==} engines: {node: '>= 10.13'} @@ -3769,22 +3734,6 @@ packages: resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} dev: false - /@puppeteer/browsers@1.9.1: - resolution: {integrity: sha512-PuvK6xZzGhKPvlx3fpfdM2kYY3P/hB1URtK8wA7XUJ6prn6pp22zvJHu48th0SGcHL9SutbPHrFuQgfXTFobWA==} - engines: {node: '>=16.3.0'} - hasBin: true - dependencies: - debug: 4.3.4(supports-color@8.1.1) - extract-zip: 2.0.1(supports-color@8.1.1) - progress: 2.0.3 - proxy-agent: 6.3.1 - tar-fs: 3.0.4 - unbzip2-stream: 1.4.3 - yargs: 17.7.2 - transitivePeerDependencies: - - supports-color - dev: true - /@react-leaflet/core@2.1.0(leaflet@1.9.4)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg==} peerDependencies: @@ -4197,10 +4146,6 @@ packages: engines: {node: '>= 6'} dev: false - /@tootallnate/quickjs-emscripten@0.23.0: - resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - dev: true - /@trysound/sax@0.2.0: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} @@ -4393,10 +4338,6 @@ packages: '@types/node': 20.11.6 dev: false - /@types/node@14.18.63: - resolution: {integrity: sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==} - dev: true - /@types/node@20.11.6: resolution: {integrity: sha512-+EOokTnksGVgip2PbYbr3xnR7kZigh4LbybAfBAw5BpnQ+FqBYUsvCEjYd70IXKlbohQ64mzEYmMtlWUY8q//Q==} dependencies: @@ -4506,14 +4447,6 @@ packages: '@types/node': 20.11.6 dev: false - /@types/sinonjs__fake-timers@8.1.1: - resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==} - dev: true - - /@types/sizzle@2.3.8: - resolution: {integrity: sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==} - dev: true - /@types/sockjs@0.3.36: resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} dependencies: @@ -4560,14 +4493,6 @@ packages: dependencies: '@types/yargs-parser': 21.0.3 - /@types/yauzl@2.10.3: - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - requiresBuild: true - dependencies: - '@types/node': 20.11.6 - dev: true - optional: true - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4584,7 +4509,7 @@ packages: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/type-utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 eslint: 8.56.0 graphemer: 1.4.0 ignore: 5.3.0 @@ -4613,7 +4538,7 @@ packages: '@typescript-eslint/type-utils': 6.4.0(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/utils': 6.4.0(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/visitor-keys': 6.4.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 eslint: 8.56.0 graphemer: 1.4.0 ignore: 5.3.0 @@ -4651,7 +4576,7 @@ packages: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 eslint: 8.56.0 typescript: 5.3.3 transitivePeerDependencies: @@ -4672,7 +4597,7 @@ packages: '@typescript-eslint/types': 6.19.1 '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.3.3) '@typescript-eslint/visitor-keys': 6.19.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 eslint: 8.56.0 typescript: 5.3.3 transitivePeerDependencies: @@ -4713,7 +4638,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 eslint: 8.56.0 tsutils: 3.21.0(typescript@5.3.3) typescript: 5.3.3 @@ -4733,7 +4658,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 6.4.0(typescript@5.3.3) '@typescript-eslint/utils': 6.4.0(eslint@8.56.0)(typescript@5.3.3) - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 eslint: 8.56.0 ts-api-utils: 1.0.3(typescript@5.3.3) typescript: 5.3.3 @@ -4766,7 +4691,7 @@ packages: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 @@ -4787,7 +4712,7 @@ packages: dependencies: '@typescript-eslint/types': 6.19.1 '@typescript-eslint/visitor-keys': 6.19.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 @@ -4808,7 +4733,7 @@ packages: dependencies: '@typescript-eslint/types': 6.4.0 '@typescript-eslint/visitor-keys': 6.4.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 @@ -5099,28 +5024,11 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: false - /agent-base@7.1.0: - resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} - engines: {node: '>= 14'} - dependencies: - debug: 4.3.4(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - dev: true - - /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - dev: true - /ajv-formats@2.1.1(ajv@8.12.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -5166,16 +5074,12 @@ packages: uri-js: 4.4.1 dev: false - /ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} - dev: true - /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} dependencies: type-fest: 0.21.3 + dev: false /ansi-escapes@5.0.0: resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} @@ -5228,10 +5132,6 @@ packages: normalize-path: 3.0.0 picomatch: 2.3.1 - /arch@2.2.0: - resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} - dev: true - /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -5342,39 +5242,17 @@ packages: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} dev: false - /asn1@0.2.6: - resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} - dependencies: - safer-buffer: 2.1.2 - dev: true - - /assert-plus@1.0.0: - resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} - engines: {node: '>=0.8'} - dev: true - /ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} dev: false - /ast-types@0.13.4: - resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} - engines: {node: '>=4'} - dependencies: - tslib: 2.6.2 - dev: true - - /astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - dev: true - /async-limiter@1.0.1: resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} dev: true /async@3.2.5: resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + dev: false /asynciterator.prototype@1.0.0: resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} @@ -5383,10 +5261,12 @@ packages: /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: false /at-least-node@1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} + dev: false /atob@2.1.2: resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} @@ -5424,14 +5304,6 @@ packages: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} - /aws-sign2@0.7.0: - resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} - dev: true - - /aws4@1.12.0: - resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} - dev: true - /axe-core@4.7.0: resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} engines: {node: '>=4'} @@ -5462,10 +5334,6 @@ packages: dequal: 2.0.3 dev: false - /b4a@1.6.4: - resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==} - dev: true - /babel-jest@27.5.1(@babel/core@7.23.7): resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -5643,25 +5511,10 @@ packages: engines: {node: '>= 0.6.0'} dev: false - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true - - /basic-ftp@5.0.4: - resolution: {integrity: sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==} - engines: {node: '>=10.0.0'} - dev: true - /batch@0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} dev: false - /bcrypt-pbkdf@1.0.2: - resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} - dependencies: - tweetnacl: 0.14.5 - dev: true - /bfj@7.1.0: resolution: {integrity: sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==} engines: {node: '>= 8.0.0'} @@ -5681,12 +5534,9 @@ packages: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} - /blob-util@2.0.2: - resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==} - dev: true - /bluebird@3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + dev: false /body-parser@1.18.3: resolution: {integrity: sha512-YQyoqQG3sO8iCmf8+hyVpgHHOv0/hCEFiS4zTGUwTA1HjAFX66wRcNQrVCeJq9pgESMRvUAOvSil5MJlmccuKQ==} @@ -5796,13 +5646,6 @@ packages: /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - dev: true - /builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} @@ -5822,11 +5665,6 @@ packages: engines: {node: '>= 0.8'} dev: false - /cachedir@2.4.0: - resolution: {integrity: sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==} - engines: {node: '>=6'} - dev: true - /call-bind@1.0.5: resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} dependencies: @@ -5903,10 +5741,6 @@ packages: engines: {node: '>=4'} dev: false - /caseless@0.12.0: - resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} - dev: true - /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -5945,11 +5779,6 @@ packages: engines: {node: '>=12.20'} dev: false - /check-more-types@2.24.0: - resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==} - engines: {node: '>= 0.8.0'} - dev: true - /check-types@11.2.3: resolution: {integrity: sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==} dev: false @@ -5985,16 +5814,6 @@ packages: engines: {node: '>=6.0'} dev: false - /chromium-bidi@0.5.4(devtools-protocol@0.0.1232444): - resolution: {integrity: sha512-p9CdiHl0xNh4P7oVa44zXgJJw+pvnHXFDB+tVdo25xaPLgQDVf2kQO+TDxD2fp2Evqi7vs/vGRINMzl1qJrWiw==} - peerDependencies: - devtools-protocol: '*' - dependencies: - devtools-protocol: 0.0.1232444 - mitt: 3.0.1 - urlpattern-polyfill: 9.0.0 - dev: true - /ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} @@ -6021,18 +5840,6 @@ packages: source-map: 0.6.1 dev: false - /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - dev: true - - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - dependencies: - restore-cursor: 3.1.0 - dev: true - /cli-cursor@4.0.0: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -6040,23 +5847,6 @@ packages: restore-cursor: 4.0.0 dev: true - /cli-table3@0.6.3: - resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} - engines: {node: 10.* || >= 12.*} - dependencies: - string-width: 4.2.3 - optionalDependencies: - '@colors/colors': 1.5.0 - dev: true - - /cli-truncate@2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} - dependencies: - slice-ansi: 3.0.0 - string-width: 4.2.3 - dev: true - /cli-truncate@3.1.0: resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -6080,6 +5870,7 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + dev: false /clsx@1.2.1: resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} @@ -6142,6 +5933,7 @@ packages: engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 + dev: false /commander@11.0.0: resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} @@ -6164,11 +5956,6 @@ packages: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} - /commander@5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} - dev: true - /commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} @@ -6186,6 +5973,7 @@ packages: /common-tags@1.8.2: resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} engines: {node: '>=4.0.0'} + dev: false /commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} @@ -6302,10 +6090,6 @@ packages: requiresBuild: true dev: false - /core-util-is@1.0.2: - resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} - dev: true - /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -6331,30 +6115,6 @@ packages: yaml: 1.10.2 dev: false - /cosmiconfig@9.0.0(typescript@5.3.3): - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - env-paths: 2.2.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - parse-json: 5.2.0 - typescript: 5.3.3 - dev: true - - /cross-fetch@4.0.0: - resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} - dependencies: - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - dev: true - /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -6672,56 +6432,6 @@ packages: /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - /cypress@10.11.0: - resolution: {integrity: sha512-lsaE7dprw5DoXM00skni6W5ElVVLGAdRUUdZjX2dYsGjbY/QnpzWZ95Zom1mkGg0hAaO/QVTZoFVS7Jgr/GUPA==} - engines: {node: '>=12.0.0'} - hasBin: true - requiresBuild: true - dependencies: - '@cypress/request': 2.88.12 - '@cypress/xvfb': 1.2.4(supports-color@8.1.1) - '@types/node': 14.18.63 - '@types/sinonjs__fake-timers': 8.1.1 - '@types/sizzle': 2.3.8 - arch: 2.2.0 - blob-util: 2.0.2 - bluebird: 3.7.2 - buffer: 5.7.1 - cachedir: 2.4.0 - chalk: 4.1.2 - check-more-types: 2.24.0 - cli-cursor: 3.1.0 - cli-table3: 0.6.3 - commander: 5.1.0 - common-tags: 1.8.2 - dayjs: 1.11.10 - debug: 4.3.4(supports-color@8.1.1) - enquirer: 2.4.1 - eventemitter2: 6.4.7 - execa: 4.1.0 - executable: 4.1.1 - extract-zip: 2.0.1(supports-color@8.1.1) - figures: 3.2.0 - fs-extra: 9.1.0 - getos: 3.2.1 - is-ci: 3.0.1 - is-installed-globally: 0.4.0 - lazy-ass: 1.6.0 - listr2: 3.14.0(enquirer@2.4.1) - lodash: 4.17.21 - log-symbols: 4.1.0 - minimist: 1.2.8 - ospath: 1.2.2 - pretty-bytes: 5.6.0 - proxy-from-env: 1.0.0 - request-progress: 3.0.0 - semver: 7.5.4 - supports-color: 8.1.1 - tmp: 0.2.1 - untildify: 4.0.0 - yauzl: 2.10.0 - dev: true - /d3-array@2.12.1: resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} dependencies: @@ -6794,18 +6504,6 @@ packages: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} dev: false - /dashdash@1.14.1: - resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} - engines: {node: '>=0.10'} - dependencies: - assert-plus: 1.0.0 - dev: true - - /data-uri-to-buffer@6.0.1: - resolution: {integrity: sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==} - engines: {node: '>= 14'} - dev: true - /data-urls@2.0.0: resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} engines: {node: '>=10'} @@ -6822,10 +6520,6 @@ packages: '@babel/runtime': 7.23.8 dev: false - /dayjs@1.11.10: - resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} - dev: true - /debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -6836,7 +6530,7 @@ packages: dependencies: ms: 2.0.0 - /debug@3.2.7(supports-color@8.1.1): + /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: supports-color: '*' @@ -6845,9 +6539,8 @@ packages: optional: true dependencies: ms: 2.1.3 - supports-color: 8.1.1 - /debug@4.3.4(supports-color@8.1.1): + /debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: @@ -6857,7 +6550,6 @@ packages: optional: true dependencies: ms: 2.1.2 - supports-color: 8.1.1 /decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} @@ -6932,18 +6624,10 @@ packages: has-property-descriptors: 1.0.1 object-keys: 1.1.1 - /degenerator@5.0.1: - resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} - engines: {node: '>= 14'} - dependencies: - ast-types: 0.13.4 - escodegen: 2.1.0 - esprima: 4.0.1 - dev: true - /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + dev: false /depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} @@ -6987,10 +6671,6 @@ packages: - supports-color dev: false - /devtools-protocol@0.0.1232444: - resolution: {integrity: sha512-pM27vqEfxSxRkTMnF+XCmxSEb6duO5R+t8A9DEEJgy4Wz2RVanje2mmj99B6A3zv2r/qGfYlOvYznUhuokizmg==} - dev: true - /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -7153,13 +6833,6 @@ packages: /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - /ecc-jsbn@0.1.2: - resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} - dependencies: - jsbn: 0.1.1 - safer-buffer: 2.1.2 - dev: true - /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -7205,12 +6878,6 @@ packages: iconv-lite: 0.6.3 dev: true - /end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - dependencies: - once: 1.4.0 - dev: true - /enhanced-resolve@5.15.0: resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} engines: {node: '>=10.13.0'} @@ -7218,14 +6885,6 @@ packages: graceful-fs: 4.2.11 tapable: 2.2.1 - /enquirer@2.4.1: - resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} - engines: {node: '>=8.6'} - dependencies: - ansi-colors: 4.1.3 - strip-ansi: 6.0.1 - dev: true - /entities@1.1.2: resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==} @@ -7233,15 +6892,11 @@ packages: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} dev: false - /env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - dev: true - /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 + dev: false /error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} @@ -7410,6 +7065,7 @@ packages: esutils: 2.0.3 optionalDependencies: source-map: 0.6.1 + dev: false /eslint-compat-utils@0.1.2(eslint@8.56.0): resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==} @@ -7504,7 +7160,7 @@ packages: /eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 is-core-module: 2.13.1 resolve: 1.22.8 transitivePeerDependencies: @@ -7517,10 +7173,10 @@ packages: eslint: '*' eslint-plugin-import: '*' dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 enhanced-resolve: 5.15.0 eslint: 8.56.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 @@ -7554,7 +7210,7 @@ packages: optional: true dependencies: '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.3) - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.19.1)(eslint-plugin-import@2.29.1)(eslint@8.56.0) @@ -7584,13 +7240,41 @@ packages: optional: true dependencies: '@typescript-eslint/parser': 6.19.1(eslint@8.56.0)(typescript@5.3.3) - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.19.1)(eslint-plugin-import@2.29.1)(eslint@8.56.0) transitivePeerDependencies: - supports-color + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 6.19.1(eslint@8.56.0)(typescript@5.3.3) + debug: 3.2.7 + eslint: 8.56.0 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.19.1)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + transitivePeerDependencies: + - supports-color + /eslint-plugin-es-x@7.5.0(eslint@8.56.0): resolution: {integrity: sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==} engines: {node: ^14.18.0 || >=16.0.0} @@ -7633,7 +7317,7 @@ packages: array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 doctrine: 2.1.0 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 @@ -7668,7 +7352,7 @@ packages: array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 doctrine: 2.1.0 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 @@ -7885,7 +7569,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -7933,6 +7617,7 @@ packages: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true + dev: false /esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} @@ -7967,10 +7652,6 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} - /eventemitter2@6.4.7: - resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==} - dev: true - /eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} dev: false @@ -7984,21 +7665,6 @@ packages: engines: {node: '>=0.8.x'} dev: false - /execa@4.1.0: - resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} - engines: {node: '>=10'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 5.2.0 - human-signals: 1.1.1 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - dev: true - /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -8029,13 +7695,6 @@ packages: strip-final-newline: 3.0.0 dev: true - /executable@4.1.1: - resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} - engines: {node: '>=4'} - dependencies: - pify: 2.3.0 - dev: true - /exit@0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} @@ -8143,10 +7802,6 @@ packages: - supports-color dev: false - /extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - dev: true - /extract-zip@1.7.0: resolution: {integrity: sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==} hasBin: true @@ -8159,25 +7814,6 @@ packages: - supports-color dev: true - /extract-zip@2.0.1(supports-color@8.1.1): - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true - dependencies: - debug: 4.3.4(supports-color@8.1.1) - get-stream: 5.2.0 - yauzl: 2.10.0 - optionalDependencies: - '@types/yauzl': 2.10.3 - transitivePeerDependencies: - - supports-color - dev: true - - /extsprintf@1.3.0: - resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} - engines: {'0': node >=0.6.0} - dev: true - /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -8185,10 +7821,6 @@ packages: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} dev: true - /fast-fifo@1.3.2: - resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} - dev: true - /fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} @@ -8233,13 +7865,6 @@ packages: resolution: {integrity: sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==} dev: false - /figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} - dependencies: - escape-string-regexp: 1.0.5 - dev: true - /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -8429,10 +8054,6 @@ packages: cross-spawn: 7.0.3 signal-exit: 4.1.0 - /forever-agent@0.6.1: - resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} - dev: true - /fork-ts-checker-webpack-plugin@6.5.3(eslint@8.56.0)(typescript@5.3.3)(webpack@5.90.0): resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} engines: {node: '>=10', yarn: '>=1.0.0'} @@ -8465,15 +8086,6 @@ packages: webpack: 5.90.0 dev: false - /form-data@2.3.3: - resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} - engines: {node: '>= 0.12'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: true - /form-data@3.0.1: resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} engines: {node: '>= 6'} @@ -8516,15 +8128,6 @@ packages: universalify: 2.0.1 dev: false - /fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - dev: true - /fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} @@ -8533,6 +8136,7 @@ packages: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 + dev: false /fs-monkey@1.0.5: resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==} @@ -8541,6 +8145,14 @@ packages: /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + /fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -8570,6 +8182,7 @@ packages: /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + dev: false /get-intrinsic@1.2.2: resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} @@ -8588,13 +8201,6 @@ packages: engines: {node: '>=8.0.0'} dev: false - /get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - dependencies: - pump: 3.0.0 - dev: true - /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -8611,30 +8217,6 @@ packages: dependencies: resolve-pkg-maps: 1.0.0 - /get-uri@6.0.2: - resolution: {integrity: sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==} - engines: {node: '>= 14'} - dependencies: - basic-ftp: 5.0.4 - data-uri-to-buffer: 6.0.1 - debug: 4.3.4(supports-color@8.1.1) - fs-extra: 8.1.0 - transitivePeerDependencies: - - supports-color - dev: true - - /getos@3.2.1: - resolution: {integrity: sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==} - dependencies: - async: 3.2.5 - dev: true - - /getpass@0.1.7: - resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} - dependencies: - assert-plus: 1.0.0 - dev: true - /giscus@1.4.0: resolution: {integrity: sha512-Pll+pcclTx47NcFDw8nuka2Ja85Gc4XWpzSgL0rszOQaMQRQIV8UMR+zP4a+/N3tV2TXc1SZ537kWlsN6EsAaw==} dependencies: @@ -8686,13 +8268,6 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 - /global-dirs@3.0.1: - resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} - engines: {node: '>=10'} - dependencies: - ini: 2.0.0 - dev: true - /global-modules@2.0.0: resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} engines: {node: '>=6'} @@ -8979,21 +8554,11 @@ packages: dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: false - /http-proxy-agent@7.0.0: - resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} - engines: {node: '>= 14'} - dependencies: - agent-base: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - dev: true - /http-proxy-middleware@2.0.6(@types/express@4.17.21): resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} engines: {node: '>=12.0.0'} @@ -9024,21 +8589,12 @@ packages: - debug dev: false - /http-signature@1.3.6: - resolution: {integrity: sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==} - engines: {node: '>=0.10'} - dependencies: - assert-plus: 1.0.0 - jsprim: 2.0.2 - sshpk: 1.18.0 - dev: true - /https-proxy-agent@2.2.4: resolution: {integrity: sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==} engines: {node: '>= 4.5.0'} dependencies: agent-base: 4.3.0 - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 transitivePeerDependencies: - supports-color dev: true @@ -9048,26 +8604,11 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: false - /https-proxy-agent@7.0.2: - resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} - engines: {node: '>= 14'} - dependencies: - agent-base: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - dev: true - - /human-signals@1.1.1: - resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} - engines: {node: '>=8.12.0'} - dev: true - /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -9132,10 +8673,6 @@ packages: harmony-reflect: 1.6.2 dev: false - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true - /ignore@5.3.0: resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} engines: {node: '>= 4'} @@ -9191,12 +8728,7 @@ packages: /ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: false - - /ini@2.0.0: - resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} - engines: {node: '>=10'} - dev: true + dev: false /internal-slot@1.0.6: resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} @@ -9210,14 +8742,6 @@ packages: resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} dev: false - /ip@1.1.9: - resolution: {integrity: sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==} - dev: true - - /ip@2.0.0: - resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} - dev: true - /ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} @@ -9244,6 +8768,7 @@ packages: /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: false /is-async-function@2.0.0: resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} @@ -9280,13 +8805,6 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - /is-ci@3.0.1: - resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} - hasBin: true - dependencies: - ci-info: 3.9.0 - dev: true - /is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: @@ -9347,14 +8865,6 @@ packages: resolution: {integrity: sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g==} dev: false - /is-installed-globally@0.4.0: - resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} - engines: {node: '>=10'} - dependencies: - global-dirs: 3.0.1 - is-path-inside: 3.0.3 - dev: true - /is-map@2.0.2: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} @@ -9434,6 +8944,7 @@ packages: /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} + dev: false /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} @@ -9460,11 +8971,7 @@ packages: /is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true + dev: false /is-weakmap@2.0.1: resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} @@ -9508,10 +9015,6 @@ packages: whatwg-fetch: 3.6.20 dev: true - /isstream@0.1.2: - resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} - dev: true - /istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} @@ -9543,7 +9046,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -10214,10 +9717,6 @@ packages: dependencies: argparse: 2.0.1 - /jsbn@0.1.1: - resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} - dev: true - /jsdom@16.7.0: resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} engines: {node: '>=10'} @@ -10284,6 +9783,7 @@ packages: /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: false /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -10294,14 +9794,11 @@ packages: /json-schema@0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + dev: false /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - /json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - dev: true - /json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true @@ -10313,18 +9810,13 @@ packages: engines: {node: '>=6'} hasBin: true - /jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - optionalDependencies: - graceful-fs: 4.2.11 - dev: true - /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 + dev: false /jsonpath@1.1.1: resolution: {integrity: sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==} @@ -10357,16 +9849,6 @@ packages: html2canvas: 1.4.1 dev: false - /jsprim@2.0.2: - resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==} - engines: {'0': node >=0.6.0} - dependencies: - assert-plus: 1.0.0 - extsprintf: 1.3.0 - json-schema: 0.4.0 - verror: 1.10.0 - dev: true - /jss-camel-case@6.1.0(jss@9.8.7): resolution: {integrity: sha512-HPF2Q7wmNW1t79mCqSeU2vdd/vFFGpkazwvfHMOhPlMgXrJDzdj9viA2SaHk9ZbD5pfL63a8ylp4++irYbbzMQ==} peerDependencies: @@ -10603,11 +10085,6 @@ packages: shell-quote: 1.8.1 dev: false - /lazy-ass@1.6.0: - resolution: {integrity: sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==} - engines: {node: '> 0.8'} - dev: true - /leaflet@1.9.4: resolution: {integrity: sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==} dev: false @@ -10656,7 +10133,7 @@ packages: dependencies: chalk: 5.3.0 commander: 11.0.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 execa: 7.2.0 lilconfig: 2.1.0 listr2: 6.6.1 @@ -10669,26 +10146,6 @@ packages: - supports-color dev: true - /listr2@3.14.0(enquirer@2.4.1): - resolution: {integrity: sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==} - engines: {node: '>=10.0.0'} - peerDependencies: - enquirer: '>= 2.3.0 < 3' - peerDependenciesMeta: - enquirer: - optional: true - dependencies: - cli-truncate: 2.1.0 - colorette: 2.0.20 - enquirer: 2.4.1 - log-update: 4.0.0 - p-map: 4.0.0 - rfdc: 1.3.1 - rxjs: 7.8.1 - through: 2.3.8 - wrap-ansi: 7.0.0 - dev: true - /listr2@6.6.1: resolution: {integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==} engines: {node: '>=16.0.0'} @@ -10791,10 +10248,6 @@ packages: /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - /lodash.once@4.1.1: - resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} - dev: true - /lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} dev: false @@ -10806,24 +10259,6 @@ packages: /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - dev: true - - /log-update@4.0.0: - resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} - engines: {node: '>=10'} - dependencies: - ansi-escapes: 4.3.2 - cli-cursor: 3.1.0 - slice-ansi: 4.0.0 - wrap-ansi: 6.2.0 - dev: true - /log-update@5.0.1: resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -10874,11 +10309,6 @@ packages: dependencies: yallist: 4.0.0 - /lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} - dev: true - /lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true @@ -11074,14 +10504,6 @@ packages: resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} engines: {node: '>=16 || 14 >=14.17'} - /mitt@3.0.1: - resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} - dev: true - - /mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - dev: true - /mkdirp@0.5.1: resolution: {integrity: sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==} deprecated: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.) @@ -11140,11 +10562,6 @@ packages: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: false - /netmask@2.0.2: - resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} - engines: {node: '>= 0.4.0'} - dev: true - /no-case@2.3.2: resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==} dependencies: @@ -11189,18 +10606,6 @@ packages: whatwg-url: 5.0.0 dev: false - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - dependencies: - whatwg-url: 5.0.0 - dev: true - /node-forge@1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} @@ -11231,6 +10636,7 @@ packages: engines: {node: '>=8'} dependencies: path-key: 3.1.1 + dev: false /npm-run-path@5.2.0: resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==} @@ -11413,10 +10819,6 @@ packages: prelude-ls: 1.2.1 type-check: 0.4.0 - /ospath@1.2.2: - resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==} - dev: true - /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -11450,13 +10852,6 @@ packages: dependencies: p-limit: 3.1.0 - /p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - dependencies: - aggregate-error: 3.1.0 - dev: true - /p-retry@4.6.2: resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} engines: {node: '>=8'} @@ -11478,31 +10873,6 @@ packages: resolution: {integrity: sha512-+5/hz0ZokCDf7BMMAeemE7FIo7gFZK7ImL62acHLXZwerGjqj+171bnaAWj4aCFCx6fwysAr2U7/AKuPyPhehA==} dev: false - /pac-proxy-agent@7.0.1: - resolution: {integrity: sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==} - engines: {node: '>= 14'} - dependencies: - '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) - get-uri: 6.0.2 - http-proxy-agent: 7.0.0 - https-proxy-agent: 7.0.2 - pac-resolver: 7.0.0 - socks-proxy-agent: 8.0.2 - transitivePeerDependencies: - - supports-color - dev: true - - /pac-resolver@7.0.0: - resolution: {integrity: sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==} - engines: {node: '>= 14'} - dependencies: - degenerator: 5.0.1 - ip: 1.1.9 - netmask: 2.0.2 - dev: true - /pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} dev: false @@ -11534,6 +10904,7 @@ packages: error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + dev: false /parse5@3.0.3: resolution: {integrity: sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==} @@ -11601,6 +10972,7 @@ packages: /performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + dev: false /picocolors@0.2.1: resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} @@ -11641,6 +11013,22 @@ packages: find-up: 3.0.0 dev: false + /playwright-core@1.42.1: + resolution: {integrity: sha512-mxz6zclokgrke9p1vtdy/COWBH+eOZgYUVVU34C73M+4j4HLlQJHtfcqiqqxpP0o8HhMkflvfbquLX5dg6wlfA==} + engines: {node: '>=16'} + hasBin: true + dev: true + + /playwright@1.42.1: + resolution: {integrity: sha512-PgwB03s2DZBcNRoW+1w9E+VkLBxweib6KTXM0M3tkiT4jVxKSi6PmVJ591J+0u10LUrgxB7dLRbiJqO5s2QPMg==} + engines: {node: '>=16'} + hasBin: true + dependencies: + playwright-core: 1.42.1 + optionalDependencies: + fsevents: 2.3.2 + dev: true + /postcss-attribute-case-insensitive@5.0.2(postcss@8.4.36): resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==} engines: {node: ^12 || ^14 || >=16} @@ -12455,6 +11843,7 @@ packages: /pretty-bytes@5.6.0: resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} engines: {node: '>=6'} + dev: false /pretty-error@4.0.0: resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} @@ -12569,38 +11958,12 @@ packages: forwarded: 0.2.0 ipaddr.js: 1.9.1 - /proxy-agent@6.3.1: - resolution: {integrity: sha512-Rb5RVBy1iyqOtNl15Cw/llpeLH8bsb37gM1FUfKQ+Wck6xHlbAhWGUFiTRHtkjqGTA5pSHz6+0hrPW/oECihPQ==} - engines: {node: '>= 14'} - dependencies: - agent-base: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) - http-proxy-agent: 7.0.0 - https-proxy-agent: 7.0.2 - lru-cache: 7.18.3 - pac-proxy-agent: 7.0.1 - proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.2 - transitivePeerDependencies: - - supports-color - dev: true - - /proxy-from-env@1.0.0: - resolution: {integrity: sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==} - dev: true - /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - - /pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - dev: true + dev: false /punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} @@ -12610,30 +11973,13 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - /puppeteer-core@21.9.0: - resolution: {integrity: sha512-QgowcczLAoLWlV38s3y3VuEvjJGfKU5rR6Q23GUbiGOaiQi+QpaWQ+aXdzP9LHVSUPmHdAaWhcvMztYSw3f8gQ==} - engines: {node: '>=16.13.2'} - dependencies: - '@puppeteer/browsers': 1.9.1 - chromium-bidi: 0.5.4(devtools-protocol@0.0.1232444) - cross-fetch: 4.0.0 - debug: 4.3.4(supports-color@8.1.1) - devtools-protocol: 0.0.1232444 - ws: 8.16.0 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - dev: true - /puppeteer@1.20.0: resolution: {integrity: sha512-bt48RDBy2eIwZPrkgbcwHtb51mj2nKvHOPMaSH2IsWiv7lOG9k9zhaRzpDZafrk05ajMc3cu+lSQYYOfH2DkVQ==} engines: {node: '>=6.4.0'} deprecated: < 21.5.0 is no longer supported requiresBuild: true dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 extract-zip: 1.7.0 https-proxy-agent: 2.2.4 mime: 2.6.0 @@ -12647,23 +11993,6 @@ packages: - utf-8-validate dev: true - /puppeteer@21.9.0(typescript@5.3.3): - resolution: {integrity: sha512-vcLR81Rp+MBrgqhiXZfpwEBbyKTa88Hd+8Al3+emWzcJb9evLLSfUYli0QUqhofPFrXsO2A/dAF9OunyOivL6w==} - engines: {node: '>=16.13.2'} - hasBin: true - requiresBuild: true - dependencies: - '@puppeteer/browsers': 1.9.1 - cosmiconfig: 9.0.0(typescript@5.3.3) - puppeteer-core: 21.9.0 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - typescript - - utf-8-validate - dev: true - /q@1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} @@ -12673,13 +12002,6 @@ packages: resolution: {integrity: sha512-c4iYnWb+k2E+vYpRimHqSu575b1/wKl4XFeJGpFmrJQz5I88v9aY2czh7s0w36srfCM1sXgC/xpoJz5dJfq+OQ==} dev: false - /qs@6.10.4: - resolution: {integrity: sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==} - engines: {node: '>=0.6'} - dependencies: - side-channel: 1.0.4 - dev: true - /qs@6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} @@ -12711,14 +12033,11 @@ packages: /querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + dev: false /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - /queue-tick@1.0.1: - resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} - dev: true - /raf@3.4.1: resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} dependencies: @@ -13488,15 +12807,10 @@ packages: strip-ansi: 6.0.1 dev: false - /request-progress@3.0.0: - resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==} - dependencies: - throttleit: 1.0.1 - dev: true - /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + dev: false /require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} @@ -13505,6 +12819,7 @@ packages: /requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + dev: false /reselect@4.1.8: resolution: {integrity: sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==} @@ -13569,14 +12884,6 @@ packages: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - dev: true - /restore-cursor@4.0.0: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -13644,12 +12951,6 @@ packages: dependencies: queue-microtask: 1.2.3 - /rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - dependencies: - tslib: 2.6.2 - dev: true - /safe-array-concat@1.1.0: resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} engines: {node: '>=0.4'} @@ -13974,24 +13275,6 @@ packages: engines: {node: '>=12'} dev: false - /slice-ansi@3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - dev: true - - /slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - dev: true - /slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} @@ -14000,11 +13283,6 @@ packages: is-fullwidth-code-point: 4.0.0 dev: true - /smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - dev: true - /sockjs@0.3.24: resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} dependencies: @@ -14013,25 +13291,6 @@ packages: websocket-driver: 0.7.4 dev: false - /socks-proxy-agent@8.0.2: - resolution: {integrity: sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==} - engines: {node: '>= 14'} - dependencies: - agent-base: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) - socks: 2.7.1 - transitivePeerDependencies: - - supports-color - dev: true - - /socks@2.7.1: - resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} - engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} - dependencies: - ip: 2.0.0 - smart-buffer: 4.2.0 - dev: true - /source-list-map@2.0.1: resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} dev: false @@ -14101,7 +13360,7 @@ packages: /spdy-transport@3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -14115,7 +13374,7 @@ packages: resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -14133,22 +13392,6 @@ packages: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: false - /sshpk@1.18.0: - resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} - engines: {node: '>=0.10.0'} - hasBin: true - dependencies: - asn1: 0.2.6 - assert-plus: 1.0.0 - bcrypt-pbkdf: 1.0.2 - dashdash: 1.14.1 - ecc-jsbn: 0.1.2 - getpass: 0.1.7 - jsbn: 0.1.1 - safer-buffer: 2.1.2 - tweetnacl: 0.14.5 - dev: true - /ssr-window@4.0.2: resolution: {integrity: sha512-ISv/Ch+ig7SOtw7G2+qkwfVASzazUnvlDTwypdLoPoySv+6MqlOV10VwPSE6EWkGjhW50lUmghPmpYZXMu/+AQ==} dev: false @@ -14197,13 +13440,6 @@ packages: internal-slot: 1.0.6 dev: true - /streamx@2.15.6: - resolution: {integrity: sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==} - dependencies: - fast-fifo: 1.3.2 - queue-tick: 1.0.1 - dev: true - /strict-uri-encode@2.0.0: resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} engines: {node: '>=4'} @@ -14333,6 +13569,7 @@ packages: /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} + dev: false /strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} @@ -14428,6 +13665,7 @@ packages: engines: {node: '>=10'} dependencies: has-flag: 4.0.0 + dev: false /supports-hyperlinks@2.3.0: resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} @@ -14559,22 +13797,6 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} - /tar-fs@3.0.4: - resolution: {integrity: sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==} - dependencies: - mkdirp-classic: 0.5.3 - pump: 3.0.0 - tar-stream: 3.1.7 - dev: true - - /tar-stream@3.1.7: - resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - dependencies: - b4a: 1.6.4 - fast-fifo: 1.3.2 - streamx: 2.15.6 - dev: true - /temp-dir@2.0.0: resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} engines: {node: '>=8'} @@ -14683,14 +13905,6 @@ packages: engines: {node: '>=8'} dev: false - /throttleit@1.0.1: - resolution: {integrity: sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==} - dev: true - - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true - /thunky@1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} dev: false @@ -14712,6 +13926,7 @@ packages: engines: {node: '>=8.17.0'} dependencies: rimraf: 3.0.2 + dev: false /tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} @@ -14747,9 +13962,11 @@ packages: punycode: 2.3.1 universalify: 0.2.0 url-parse: 1.5.10 + dev: false /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: false /tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} @@ -14808,20 +14025,10 @@ packages: typescript: 5.3.3 dev: false - /tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - dependencies: - safe-buffer: 5.2.1 - dev: true - /tween-functions@1.2.0: resolution: {integrity: sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA==} dev: false - /tweetnacl@0.14.5: - resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} - dev: true - /type-check@0.3.2: resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} engines: {node: '>= 0.8.0'} @@ -14852,6 +14059,7 @@ packages: /type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} + dev: false /type-fest@1.4.0: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} @@ -14936,13 +14144,6 @@ packages: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - /unbzip2-stream@1.4.3: - resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} - dependencies: - buffer: 5.7.1 - through: 2.3.8 - dev: true - /underscore@1.12.1: resolution: {integrity: sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==} dev: false @@ -14980,18 +14181,15 @@ packages: crypto-random-string: 2.0.0 dev: false - /universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - dev: true - /universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} + dev: false /universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} + dev: false /unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} @@ -15001,11 +14199,6 @@ packages: resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==} dev: false - /untildify@4.0.0: - resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} - engines: {node: '>=8'} - dev: true - /upath@1.2.0: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} engines: {node: '>=4'} @@ -15035,6 +14228,7 @@ packages: dependencies: querystringify: 2.2.0 requires-port: 1.0.0 + dev: false /url@0.11.3: resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==} @@ -15043,10 +14237,6 @@ packages: qs: 6.11.2 dev: false - /urlpattern-polyfill@9.0.0: - resolution: {integrity: sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==} - dev: true - /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.48)(react@18.2.0): resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: @@ -15097,6 +14287,7 @@ packages: /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true + dev: false /uzip@0.20201231.0: resolution: {integrity: sha512-OZeJfZP+R0z9D6TmBgLq2LHzSSptGMGDGigGiEe0pr8UBe/7fdflgHlHBNDASTXB5jnFuxHpNaJywSg8YFeGng==} @@ -15115,15 +14306,6 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - /verror@1.10.0: - resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} - engines: {'0': node >=0.6.0} - dependencies: - assert-plus: 1.0.0 - core-util-is: 1.0.2 - extsprintf: 1.3.0 - dev: true - /w3c-hr-time@1.0.2: resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} deprecated: Use your platform's native performance.now() and performance.timeOrigin. @@ -15170,6 +14352,7 @@ packages: /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: false /webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} @@ -15357,6 +14540,7 @@ packages: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 + dev: false /whatwg-url@7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} @@ -15650,15 +14834,6 @@ packages: workbox-core: 7.0.0 dev: false - /wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: true - /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -15725,6 +14900,7 @@ packages: optional: true utf-8-validate: optional: true + dev: false /xml-name-validator@3.0.0: resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} @@ -15741,6 +14917,7 @@ packages: /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} + dev: false /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -15770,6 +14947,7 @@ packages: /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + dev: false /yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} @@ -15795,6 +14973,7 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 + dev: false /yarn@1.22.21: resolution: {integrity: sha512-ynXaJsADJ9JiZ84zU25XkPGOvVMmZ5b7tmTSpKURYwgELdjucAOydqIOrOfTxVYcNXe91xvLZwcRh68SR3liCg==}