diff --git a/.gitignore b/.gitignore index e5a6966746d..54a3ca991ce 100644 --- a/.gitignore +++ b/.gitignore @@ -130,6 +130,7 @@ buildServer **/cypress/screenshots/** **/cypress/results/** **/cypress/report/** +**/allure-results/** # Playwright folders **/playwright-report/** diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000000..cd4d5eb2410 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,4 @@ +{ + "version": "0.2.0", + "configurations": [] +} \ No newline at end of file diff --git a/angular-universal-ssr/cypress.env.json b/angular-universal-ssr/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/angular-universal-ssr/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/angular-universal-ssr/e2e/methods/methods.ts b/angular-universal-ssr/e2e/methods/methods.ts index 5ef92bcd47c..2d09c8652f4 100644 --- a/angular-universal-ssr/e2e/methods/methods.ts +++ b/angular-universal-ssr/e2e/methods/methods.ts @@ -1,95 +1,113 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; +import { expect, Page } from '@playwright/test'; + +import { BaseMethods } from '../../../playwright-e2e/common/base'; import { baseSelectors, selectors, updatedSelectors } from '../../../cypress-e2e/common/selectors'; import { Constants } from '../../../cypress-e2e/fixtures/constants'; export class AngularUniversalSsrMethods extends BaseMethods { - public checkActiveTabNameConnection(activeTabName: string, componentName: string): void { - cy.get(selectors.angularUniversalSsrApp.activeTab) - .invoke('text') - .then((text: string) => { - if (text === activeTabName) { - this.checkElementWithTextPresence({ - selector: baseSelectors.tags.appRoot, - text: componentName, - visibilityState: 'be.visible', - }); - } + constructor(protected readonly page: Page) { + super(page); + } + + async checkActiveTabNameConnection(activeTabName: string, componentName: string): Promise { + const text = (await this.page.locator(selectors.angularUniversalSsrApp.activeTab).innerText()).trim(); + + if (text === activeTabName) { + await this.checkElementWithTextPresence({ + selector: baseSelectors.tags.appRoot, + text: componentName, + visibilityState: 'be.visible', }); + } } - public checkAddedCitiesBlockFunctionalityForMultipleHosts( + async checkAddedCitiesBlockFunctionalityForMultipleHosts( extraHost: number, addedCities: string[], addedCitySelector: string, selectedCityInfo: string[], selectedCityInfoSelector: string, - ): void { - this.clickElementWithText({ + ): Promise { + await this.clickElementWithText({ selector: updatedSelectors.angularUniversalSsrApp.tab, text: Constants.elementsText.angularUniversalSsrApp.tabsNames[2], }); - this.checkCitiesBlockFunctionality(); - cy.origin( - Cypress.env(`localhost${extraHost}`), - { args: { addedCities, addedCitySelector, selectedCityInfoSelector, selectedCityInfo } }, - ({ addedCities, addedCitySelector, selectedCityInfoSelector, selectedCityInfo }) => { - cy.visit('/'); - addedCities.forEach((city: string, counter: number) => { - cy.get(addedCitySelector).contains(city).click(); - cy.get(selectedCityInfoSelector).contains(selectedCityInfo[counter]).should('be.visible'); - cy.reload(true); - cy.get(selectedCityInfoSelector).should('not.exist'); - }); - }, - ); + + await this.checkCitiesBlockFunctionality(); + + const remotePage = await this.page.context().newPage(); + + try { + await remotePage.goto(`http://localhost:${extraHost}/`, { waitUntil: 'networkidle' }); + + for (let index = 0; index < addedCities.length; index++) { + const city = addedCities[index]; + const expectedInfo = selectedCityInfo[index]; + + await remotePage.locator(addedCitySelector).filter({ hasText: city }).first().click(); + await expect(remotePage.locator(selectedCityInfoSelector).filter({ hasText: expectedInfo })).toBeVisible(); + + await remotePage.reload({ waitUntil: 'networkidle' }); + await expect(remotePage.locator(selectedCityInfoSelector).filter({ hasText: expectedInfo })).toHaveCount(0); + } + } finally { + await remotePage.close(); + } } - public checkCitiesBlockFunctionality(): void { - Constants.elementsText.angularUniversalSsrApp.addedCities.forEach( - (city: string, counter: number) => { - this.clickElementWithText({ - selector: updatedSelectors.angularUniversalSsrApp.addedCity, - text: city, - }); - this.checkElementWithTextPresence({ - selector: selectors.angularUniversalSsrApp.selectedCityInfo, - text: Constants.commonPhrases.angularUniversalSsrApp.selectedCityInfo[counter], - visibilityState: 'be.visible', - }); - this.reloadWindow(); - this.checkElementVisibility({ - selector: selectors.angularUniversalSsrApp.selectedCityInfo, - isVisible: false, - }); - }, - ); + async checkCitiesBlockFunctionality(): Promise { + for (let index = 0; index < Constants.elementsText.angularUniversalSsrApp.addedCities.length; index++) { + const city = Constants.elementsText.angularUniversalSsrApp.addedCities[index]; + const expectedInfo = Constants.commonPhrases.angularUniversalSsrApp.selectedCityInfo[index]; + + await this.clickElementWithText({ + selector: updatedSelectors.angularUniversalSsrApp.addedCity, + text: city, + }); + + await this.checkElementWithTextPresence({ + selector: selectors.angularUniversalSsrApp.selectedCityInfo, + text: expectedInfo, + visibilityState: 'be.visible', + }); + + await this.reloadWindow(); + await this.checkElementVisibility({ + selector: selectors.angularUniversalSsrApp.selectedCityInfo, + isVisible: false, + }); + } } - public checkTextedElementsVisibility(elementsArray: string[], elementSelector: string): void { - elementsArray.forEach((element: string) => { - this.checkElementWithTextPresence({ + async checkTextedElementsVisibility(elementsArray: string[], elementSelector: string): Promise { + for (const element of elementsArray) { + await this.checkElementWithTextPresence({ selector: elementSelector, text: element, visibilityState: 'be.visible', }); - }); + } } - public addNewListValue(): void { - this.checkElementQuantity({ + async addNewListValue(): Promise { + await this.checkElementQuantity({ selector: baseSelectors.tags.coreElements.list, quantity: 3, }); - this.fillField({ + + await this.fillField({ selector: baseSelectors.tags.inputs.input, text: Constants.commonConstantsData.standardPhrase, }); - this.checkInputValue(Constants.commonConstantsData.standardPhrase); - this.clickElementWithText({ + + await this.checkInputValue(Constants.commonConstantsData.standardPhrase); + + await this.clickElementWithText({ selector: baseSelectors.tags.coreElements.button, text: Constants.elementsText.angularUniversalSsrApp.inputButtonText, }); - this.checkElementQuantity({ + + await this.checkElementQuantity({ selector: baseSelectors.tags.coreElements.list, quantity: 4, }); diff --git a/angular-universal-ssr/e2e/tests/clientChecks.cy.ts b/angular-universal-ssr/e2e/tests/clientChecks.cy.ts deleted file mode 100644 index 632894289c7..00000000000 --- a/angular-universal-ssr/e2e/tests/clientChecks.cy.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors, selectors, updatedSelectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; -import { AngularUniversalSsrMethods } from '../methods/methods'; - -const basePage: BaseMethods = new BaseMethods(); -const methodsPage: AngularUniversalSsrMethods = new AngularUniversalSsrMethods(); - -describe('Angular Universal SSR', () => { - context('It checks client app', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3000, - }); - }); - - it('Checks cities block visibility', () => { - basePage.checkElementVisibility({ - selector: selectors.angularUniversalSsrApp.citiesBlock, - }); - }); - - it('Checks cities block header visibility', () => { - basePage.checkElementWithTextPresence({ - parentSelector: selectors.angularUniversalSsrApp.citiesBlock, - selector: baseSelectors.tags.coreElements.div, - text: Constants.commonPhrases.angularUniversalSsrApp.blockHeaderText, - visibilityState: 'be.visible', - }); - }); - - it('Checks base cities names visibility', () => { - methodsPage.checkTextedElementsVisibility( - Constants.elementsText.angularUniversalSsrApp.addedCities, - updatedSelectors.angularUniversalSsrApp.addedCity, - ); - }); - - it('Checks that both cities links can be clicked', () => { - basePage.checkElementState({ - selector: updatedSelectors.angularUniversalSsrApp.addedCity, - state: ':disabled', - isMultiple: true, - jqueryValue: false, - }); - }); - - it('Clicks on city by name and checks description with text appear', () => { - Constants.elementsText.angularUniversalSsrApp.addedCities.forEach( - (city: string, counter: number) => { - basePage.clickElementWithText({ - selector: updatedSelectors.angularUniversalSsrApp.addedCity, - text: city, - }); - basePage.checkElementWithTextPresence({ - selector: selectors.angularUniversalSsrApp.selectedCityInfo, - text: Constants.commonPhrases.angularUniversalSsrApp.selectedCityInfo[counter], - visibilityState: 'be.visible', - }); - }, - ); - }); - - it('Checks that selection of city info can be reverted after reload', () => { - methodsPage.checkCitiesBlockFunctionality(); - }); - }); -}); diff --git a/angular-universal-ssr/e2e/tests/clientChecks.spec.ts b/angular-universal-ssr/e2e/tests/clientChecks.spec.ts new file mode 100644 index 00000000000..b9000bb7220 --- /dev/null +++ b/angular-universal-ssr/e2e/tests/clientChecks.spec.ts @@ -0,0 +1,74 @@ +import { expect, test } from '@playwright/test'; + +import { BaseMethods } from '../../../playwright-e2e/common/base'; +import { baseSelectors, selectors, updatedSelectors } from '../../../cypress-e2e/common/selectors'; +import { Constants } from '../../../cypress-e2e/fixtures/constants'; +import { AngularUniversalSsrMethods } from '../methods/methods'; + +test.describe('Angular Universal SSR - Client App', () => { + let basePage: BaseMethods; + let methodsPage: AngularUniversalSsrMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + methodsPage = new AngularUniversalSsrMethods(page); + + await basePage.openLocalhost({ number: 3000 }); + }); + + test('Checks cities block visibility', async () => { + await basePage.checkElementVisibility({ + selector: selectors.angularUniversalSsrApp.citiesBlock, + }); + }); + + test('Checks cities block header visibility', async () => { + await basePage.checkElementWithTextPresence({ + parentSelector: selectors.angularUniversalSsrApp.citiesBlock, + selector: baseSelectors.tags.coreElements.div, + text: Constants.commonPhrases.angularUniversalSsrApp.blockHeaderText, + visibilityState: 'be.visible', + }); + }); + + test('Checks base cities names visibility', async () => { + await methodsPage.checkTextedElementsVisibility( + Constants.elementsText.angularUniversalSsrApp.addedCities, + updatedSelectors.angularUniversalSsrApp.addedCity, + ); + }); + + test('Checks that both cities links can be clicked', async ({ page }) => { + const locator = page.locator(updatedSelectors.angularUniversalSsrApp.addedCity); + const count = await locator.count(); + expect(count).toBeGreaterThan(0); + + for (let index = 0; index < count; index++) { + await expect(locator.nth(index)).toBeEnabled(); + } + }); + + test('Clicks on city by name and checks description with text appear', async () => { + const cities = Constants.elementsText.angularUniversalSsrApp.addedCities; + + for (let index = 0; index < cities.length; index++) { + const city = cities[index]; + const expected = Constants.commonPhrases.angularUniversalSsrApp.selectedCityInfo[index]; + + await basePage.clickElementWithText({ + selector: updatedSelectors.angularUniversalSsrApp.addedCity, + text: city, + }); + + await basePage.checkElementWithTextPresence({ + selector: selectors.angularUniversalSsrApp.selectedCityInfo, + text: expected, + visibilityState: 'be.visible', + }); + } + }); + + test('Checks that selection of city info can be reverted after reload', async () => { + await methodsPage.checkCitiesBlockFunctionality(); + }); +}); diff --git a/angular-universal-ssr/e2e/tests/commonChecks.cy.ts b/angular-universal-ssr/e2e/tests/commonChecks.cy.ts deleted file mode 100644 index 6f8a703bba9..00000000000 --- a/angular-universal-ssr/e2e/tests/commonChecks.cy.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; -import { baseSelectors, updatedSelectors } from '../../../cypress-e2e/common/selectors'; -import { AngularUniversalSsrMethods } from '../methods/methods'; - -const basePage: BaseMethods = new BaseMethods(); -const methodsPage: AngularUniversalSsrMethods = new AngularUniversalSsrMethods(); - -describe('Angular Universal SSR', () => { - context('It checks components functionality', () => { - const appsData = [ - { - componentName: - Constants.commonPhrases.angularUniversalSsrApp.components.homeComponent.split(' ')[0], - tabName: Constants.elementsText.angularUniversalSsrApp.tabsNames[0], - componentText: Constants.commonPhrases.angularUniversalSsrApp.components.homeComponent, - }, - { - componentName: - Constants.commonPhrases.angularUniversalSsrApp.components.angularLazyComponent.split( - ' ', - )[0], - tabName: Constants.elementsText.angularUniversalSsrApp.tabsNames[1], - componentText: - Constants.commonPhrases.angularUniversalSsrApp.components.angularLazyComponent, - link: Constants.hrefs.angularUniversalSsrLinks.angularLink, - }, - { - componentName: Constants.elementsText.angularUniversalSsrApp.tabsNames[2].split(' ')[0], - tabName: Constants.elementsText.angularUniversalSsrApp.tabsNames[2], - link: Constants.hrefs.angularUniversalSsrLinks.federationLink, - }, - ]; - - // @ts-ignore - appsData.forEach( - (property: { - componentName: string; - tabName: string; - componentText: string; - link: string; - }) => { - const appTabSelector: string = updatedSelectors.angularUniversalSsrApp.tab; - - it(`Checks that ${property.componentName} component element text will be visible only if ${property.componentName} tab is active & text is not reverted after reload`, () => { - basePage.openLocalhost({ - number: 4000, - }); - - if (property.componentName === appsData[1].componentName) { - basePage.checkElementWithTextPresence({ - selector: appTabSelector, - text: appsData[1].componentText, - isVisible: false, - }); - basePage.clickElementWithText({ - selector: appTabSelector, - text: appsData[1].componentName, - }); - } - methodsPage.checkActiveTabNameConnection(property.tabName, property.componentText); - basePage.reloadWindow(); - if (property.componentName !== appsData[2].componentName) { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.appRoot, - text: property.componentText, - visibilityState: 'be.visible', - }); - } - }); - - it(`Checks link changes after click on ${property.componentName} tab & check link is not reverted after reload`, () => { - basePage.skipTestByCondition(property.componentName === appsData[0].tabName); - basePage.openLocalhost({ - number: 4000, - }); - basePage.checkUrlText(property.link); - basePage.clickElementWithText({ - selector: appTabSelector, - text: property.tabName, - }); - basePage.checkUrlText(property.link, true); - basePage.reloadWindow(); - basePage.checkUrlText(property.link, true); - }); - }, - ); - }); -}); diff --git a/angular-universal-ssr/e2e/tests/commonChecks.spec.ts b/angular-universal-ssr/e2e/tests/commonChecks.spec.ts new file mode 100644 index 00000000000..ad612389b96 --- /dev/null +++ b/angular-universal-ssr/e2e/tests/commonChecks.spec.ts @@ -0,0 +1,94 @@ +import { test } from '@playwright/test'; + +import { BaseMethods } from '../../../playwright-e2e/common/base'; +import { Constants } from '../../../cypress-e2e/fixtures/constants'; +import { baseSelectors, updatedSelectors } from '../../../cypress-e2e/common/selectors'; +import { AngularUniversalSsrMethods } from '../methods/methods'; + +type AppData = { + componentName: string; + tabName: string; + componentText?: string; + link?: string; +}; + +const appsData: AppData[] = [ + { + componentName: Constants.commonPhrases.angularUniversalSsrApp.components.homeComponent.split(' ')[0], + tabName: Constants.elementsText.angularUniversalSsrApp.tabsNames[0], + componentText: Constants.commonPhrases.angularUniversalSsrApp.components.homeComponent, + }, + { + componentName: Constants.commonPhrases.angularUniversalSsrApp.components.angularLazyComponent.split(' ')[0], + tabName: Constants.elementsText.angularUniversalSsrApp.tabsNames[1], + componentText: Constants.commonPhrases.angularUniversalSsrApp.components.angularLazyComponent, + link: Constants.hrefs.angularUniversalSsrLinks.angularLink, + }, + { + componentName: Constants.elementsText.angularUniversalSsrApp.tabsNames[2].split(' ')[0], + tabName: Constants.elementsText.angularUniversalSsrApp.tabsNames[2], + link: Constants.hrefs.angularUniversalSsrLinks.federationLink, + }, +]; + +test.describe('Angular Universal SSR - Components Functionality', () => { + let basePage: BaseMethods; + let methodsPage: AngularUniversalSsrMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + methodsPage = new AngularUniversalSsrMethods(page); + }); + + for (const property of appsData) { + test(`Component ${property.componentName} text is visible only when tab is active`, async () => { + await basePage.openLocalhost({ number: 4000 }); + + if (property.componentName === appsData[1].componentName) { + await basePage.checkElementWithTextPresence({ + selector: updatedSelectors.angularUniversalSsrApp.tab, + text: property.componentText, + isVisible: false, + }); + await basePage.clickElementWithText({ + selector: updatedSelectors.angularUniversalSsrApp.tab, + text: property.componentName, + }); + } + + await methodsPage.checkActiveTabNameConnection(property.tabName, property.componentText); + + await basePage.reloadWindow(); + + if (property.componentName !== appsData[2].componentName) { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.appRoot, + text: property.componentText, + visibilityState: 'be.visible', + }); + } + }); + + test(`Link changes after clicking ${property.componentName} tab`, async () => { + if (property.componentName === appsData[0].componentName) { + test.skip(); + } + + if (!property.link) { + test.skip(); + } + + await basePage.openLocalhost({ number: 4000 }); + await basePage.checkUrlText(property.link); + + await basePage.clickElementWithText({ + selector: updatedSelectors.angularUniversalSsrApp.tab, + text: property.tabName, + }); + + await basePage.checkUrlText(property.link, true); + await basePage.reloadWindow(); + await basePage.checkUrlText(property.link, true); + }); + } +}); diff --git a/angular-universal-ssr/e2e/tests/hostChecks.cy.ts b/angular-universal-ssr/e2e/tests/hostChecks.cy.ts deleted file mode 100644 index 2cbb2815f7f..00000000000 --- a/angular-universal-ssr/e2e/tests/hostChecks.cy.ts +++ /dev/null @@ -1,244 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors, selectors, updatedSelectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; -import { CssAttr } from '../../../cypress-e2e/types/cssAttr'; -import { AngularUniversalSsrMethods } from '../methods/methods'; -import { CommonTestData } from '../../../cypress-e2e/fixtures/commonTestData'; - -const basePage: BaseMethods = new BaseMethods(); -const methodsPage: AngularUniversalSsrMethods = new AngularUniversalSsrMethods(); - -const baseElementsQuantity: number = 3; - -describe('Angular Universal SSR', () => { - context('It checks host app', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 4000, - }); - }); - - it('Checks app root component visibility', () => { - basePage.checkElementVisibility({ - selector: baseSelectors.tags.appRoot, - }); - }); - - it('Checks app root component header text', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.appRoot, - text: Constants.commonPhrases.angularUniversalSsrApp.components.rootComponent, - }); - }); - - it('Checks value input visibility', () => { - basePage.checkElementVisibility({ - selector: baseSelectors.tags.inputs.input, - }); - }); - - it('Checks value input is not disabled', () => { - basePage.checkElementState({ - parentSelector: baseSelectors.tags.coreElements.div, - selector: baseSelectors.tags.inputs.input, - state: 'not.be.disabled', - }); - }); - - it('Checks value input button visibility', () => { - basePage.checkElementVisibility({ - parentSelector: baseSelectors.tags.coreElements.div, - selector: baseSelectors.tags.coreElements.button, - }); - }); - - it('Checks value input button text', () => { - basePage.checkElementWithTextPresence({ - parentSelector: baseSelectors.tags.coreElements.div, - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.angularUniversalSsrApp.inputButtonText, - visibilityState: 'be.visible', - }); - }); - - it('Checks value input button color', () => { - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.angularUniversalSsrApp.inputButtonText, - prop: CssAttr.backgroundColor, - value: Constants.color.lightGrey, - }); - }); - - it('Checks value input button is not disabled', () => { - basePage.checkElementState({ - parentSelector: baseSelectors.tags.coreElements.div, - selector: baseSelectors.tags.coreElements.button, - state: 'not.be.disabled', - }); - }); - - it('Checks value input has no validation', () => { - CommonTestData.multipleSizeStringsArray.forEach((string: string) => { - basePage.fillField({ - selector: baseSelectors.tags.inputs.input, - text: string, - }); - basePage.checkInputValue(string); - }); - }); - - it(`Checks that by default added values quantity equal to ${baseElementsQuantity}`, () => { - basePage.checkElementQuantity({ - selector: baseSelectors.tags.coreElements.list, - quantity: baseElementsQuantity, - }); - }); - - it('Checks basically added values names', () => { - methodsPage.checkTextedElementsVisibility( - Constants.elementsText.angularUniversalSsrApp.angularUniversalSsrAddedValuesNames, - baseSelectors.tags.coreElements.list, - ); - }); - - it('Checks add new value functionality', () => { - methodsPage.addNewListValue(); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.list, - text: Constants.commonConstantsData.standardPhrase, - visibilityState: 'be.visible', - }); - }); - - it('Checks that after applying value status in input it can be added more then once', () => { - methodsPage.addNewListValue(); - basePage.checkInputValue(Constants.commonConstantsData.standardPhrase); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.angularUniversalSsrApp.inputButtonText, - }); - basePage.checkElementQuantity({ - selector: baseSelectors.tags.coreElements.list, - quantity: 5, - }); - basePage.checkElementQuantity({ - selector: baseSelectors.tags.coreElements.list, - text: Constants.commonConstantsData.standardPhrase, - quantity: 2, - jqueryValue: true, - }); - }); - - it('Checks that empty input would not add new value to the list', () => { - basePage.checkElementQuantity({ - selector: baseSelectors.tags.coreElements.list, - quantity: baseElementsQuantity, - }); - basePage.checkInputValue(''); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.angularUniversalSsrApp.inputButtonText, - }); - basePage.checkElementQuantity({ - selector: baseSelectors.tags.coreElements.list, - quantity: baseElementsQuantity, - }); - }); - - it('Checks that newly added value disappears after reload', () => { - basePage.checkElementQuantity({ - selector: baseSelectors.tags.coreElements.list, - quantity: baseElementsQuantity, - }); - basePage.fillField({ - selector: baseSelectors.tags.inputs.input, - text: Constants.commonConstantsData.standardPhrase, - }); - basePage.checkInputValue(Constants.commonConstantsData.standardPhrase); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.angularUniversalSsrApp.inputButtonText, - }); - basePage.checkElementQuantity({ - selector: baseSelectors.tags.coreElements.list, - quantity: 4, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.list, - text: Constants.commonConstantsData.standardPhrase, - visibilityState: 'be.visible', - }); - basePage.reloadWindow(); - basePage.checkElementQuantity({ - selector: baseSelectors.tags.coreElements.list, - quantity: baseElementsQuantity, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.list, - text: Constants.commonConstantsData.standardPhrase, - isVisible: false, - }); - }); - - it('Checks app home component element text', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.appRoot, - text: Constants.commonPhrases.angularUniversalSsrApp.components.homeComponent, - }); - }); - - it(`Checks that tabs quantity equal to ${baseElementsQuantity}`, () => { - basePage.checkElementQuantity({ - selector: updatedSelectors.angularUniversalSsrApp.tab, - quantity: baseElementsQuantity, - }); - }); - - it('Checks tab names visibility', () => { - methodsPage.checkTextedElementsVisibility( - Constants.elementsText.angularUniversalSsrApp.tabsNames, - updatedSelectors.angularUniversalSsrApp.tab, - ); - }); - - it('Checks cities block appears after click on federation tab', () => { - basePage.checkElementVisibility({ - selector: selectors.angularUniversalSsrApp.citiesBlock, - isVisible: false, - }); - basePage.clickElementWithText({ - selector: updatedSelectors.angularUniversalSsrApp.tab, - text: Constants.elementsText.angularUniversalSsrApp.tabsNames[2], - }); - basePage.checkElementVisibility({ - selector: selectors.angularUniversalSsrApp.citiesBlock, - }); - }); - - it('Checks that cities block which appears after click on federation tab is equal to one in client app', () => { - basePage.checkElementVisibility({ - selector: selectors.angularUniversalSsrApp.citiesBlock, - isVisible: false, - }); - basePage.clickElementWithText({ - selector: updatedSelectors.angularUniversalSsrApp.tab, - text: Constants.elementsText.angularUniversalSsrApp.tabsNames[2], - }); - basePage.checkElementVisibility({ - selector: selectors.angularUniversalSsrApp.citiesBlock, - }); - basePage.compareInfoBetweenHosts(selectors.angularUniversalSsrApp.citiesBlock, 3000); - }); - - it('Checks added cities block functionality are the same for root and client hosts', () => { - methodsPage.checkAddedCitiesBlockFunctionalityForMultipleHosts( - 3000, - Constants.elementsText.angularUniversalSsrApp.addedCities, - updatedSelectors.angularUniversalSsrApp.addedCity, - Constants.commonPhrases.angularUniversalSsrApp.selectedCityInfo, - selectors.angularUniversalSsrApp.selectedCityInfo, - ); - }); - }); -}); diff --git a/angular-universal-ssr/e2e/tests/hostChecks.spec.ts b/angular-universal-ssr/e2e/tests/hostChecks.spec.ts new file mode 100644 index 00000000000..8bb47979708 --- /dev/null +++ b/angular-universal-ssr/e2e/tests/hostChecks.spec.ts @@ -0,0 +1,250 @@ +import { expect, test } from '@playwright/test'; + +import { BaseMethods } from '../../../playwright-e2e/common/base'; +import { baseSelectors, selectors, updatedSelectors } from '../../../cypress-e2e/common/selectors'; +import { Constants } from '../../../cypress-e2e/fixtures/constants'; +import { CommonTestData } from '../../../cypress-e2e/fixtures/commonTestData'; +import { AngularUniversalSsrMethods } from '../methods/methods'; + +const baseElementsQuantity = 3; + +test.describe('Angular Universal SSR - Host App', () => { + let basePage: BaseMethods; + let methodsPage: AngularUniversalSsrMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + methodsPage = new AngularUniversalSsrMethods(page); + + await basePage.openLocalhost({ number: 4000 }); + }); + + test('Checks app root component visibility', async () => { + await basePage.checkElementVisibility({ + selector: baseSelectors.tags.appRoot, + }); + }); + + test('Checks app root component header text', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.appRoot, + text: Constants.commonPhrases.angularUniversalSsrApp.components.rootComponent, + visibilityState: 'be.visible', + }); + }); + + test('Checks value input visibility', async () => { + await basePage.checkElementVisibility({ + selector: baseSelectors.tags.inputs.input, + }); + }); + + test('Checks value input is not disabled', async () => { + await basePage.checkElementState({ + parentSelector: baseSelectors.tags.coreElements.div, + selector: baseSelectors.tags.inputs.input, + state: 'not.be.disabled', + }); + }); + + test('Checks value input button visibility', async () => { + await basePage.checkElementVisibility({ + parentSelector: baseSelectors.tags.coreElements.div, + selector: baseSelectors.tags.coreElements.button, + }); + }); + + test('Checks value input button text', async () => { + await basePage.checkElementWithTextPresence({ + parentSelector: baseSelectors.tags.coreElements.div, + selector: baseSelectors.tags.coreElements.button, + text: Constants.elementsText.angularUniversalSsrApp.inputButtonText, + visibilityState: 'be.visible', + }); + }); + + test('Checks value input button color', async ({ page }) => { + const button = page + .locator(baseSelectors.tags.coreElements.button) + .filter({ hasText: Constants.elementsText.angularUniversalSsrApp.inputButtonText }) + .first(); + + const background = await button.evaluate(element => window.getComputedStyle(element).getPropertyValue('background-color')); + expect(background).toContain(Constants.color.lightGrey); + }); + + test('Checks value input button is not disabled', async () => { + await basePage.checkElementState({ + parentSelector: baseSelectors.tags.coreElements.div, + selector: baseSelectors.tags.coreElements.button, + state: 'not.be.disabled', + }); + }); + + test('Checks value input has no validation', async () => { + for (const value of CommonTestData.multipleSizeStringsArray) { + await basePage.fillField({ + selector: baseSelectors.tags.inputs.input, + text: value, + }); + await basePage.checkInputValue(value); + } + }); + + test(`Checks that by default added values quantity equal to ${baseElementsQuantity}`, async () => { + await basePage.checkElementQuantity({ + selector: baseSelectors.tags.coreElements.list, + quantity: baseElementsQuantity, + }); + }); + + test('Checks basically added values names', async () => { + await methodsPage.checkTextedElementsVisibility( + Constants.elementsText.angularUniversalSsrApp.angularUniversalSsrAddedValuesNames, + baseSelectors.tags.coreElements.list, + ); + }); + + test('Checks add new value functionality', async () => { + await methodsPage.addNewListValue(); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.list, + text: Constants.commonConstantsData.standardPhrase, + visibilityState: 'be.visible', + }); + }); + + test('Checks that after applying value status in input it can be added more than once', async () => { + await methodsPage.addNewListValue(); + await basePage.checkInputValue(Constants.commonConstantsData.standardPhrase); + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.elementsText.angularUniversalSsrApp.inputButtonText, + }); + await basePage.checkElementQuantity({ + selector: baseSelectors.tags.coreElements.list, + quantity: 5, + }); + await basePage.checkElementQuantity({ + selector: baseSelectors.tags.coreElements.list, + text: Constants.commonConstantsData.standardPhrase, + quantity: 2, + jqueryValue: true, + }); + }); + + test('Checks that empty input would not add new value to the list', async () => { + await basePage.checkElementQuantity({ + selector: baseSelectors.tags.coreElements.list, + quantity: baseElementsQuantity, + }); + await basePage.checkInputValue(''); + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.elementsText.angularUniversalSsrApp.inputButtonText, + }); + await basePage.checkElementQuantity({ + selector: baseSelectors.tags.coreElements.list, + quantity: baseElementsQuantity, + }); + }); + + test('Checks that newly added value disappears after reload', async () => { + await basePage.checkElementQuantity({ + selector: baseSelectors.tags.coreElements.list, + quantity: baseElementsQuantity, + }); + await basePage.fillField({ + selector: baseSelectors.tags.inputs.input, + text: Constants.commonConstantsData.standardPhrase, + }); + await basePage.checkInputValue(Constants.commonConstantsData.standardPhrase); + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.elementsText.angularUniversalSsrApp.inputButtonText, + }); + await basePage.checkElementQuantity({ + selector: baseSelectors.tags.coreElements.list, + quantity: 4, + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.list, + text: Constants.commonConstantsData.standardPhrase, + visibilityState: 'be.visible', + }); + await basePage.reloadWindow(); + await basePage.checkElementQuantity({ + selector: baseSelectors.tags.coreElements.list, + quantity: baseElementsQuantity, + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.list, + text: Constants.commonConstantsData.standardPhrase, + isVisible: false, + }); + }); + + test('Checks app home component element text', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.appRoot, + text: Constants.commonPhrases.angularUniversalSsrApp.components.homeComponent, + visibilityState: 'be.visible', + }); + }); + + test(`Checks that tabs quantity equal to ${baseElementsQuantity}`, async () => { + await basePage.checkElementQuantity({ + selector: updatedSelectors.angularUniversalSsrApp.tab, + quantity: baseElementsQuantity, + }); + }); + + test('Checks tab names visibility', async () => { + await methodsPage.checkTextedElementsVisibility( + Constants.elementsText.angularUniversalSsrApp.tabsNames, + updatedSelectors.angularUniversalSsrApp.tab, + ); + }); + + test('Checks cities block appears after click on federation tab', async ({ page }) => { + await basePage.checkElementVisibility({ + selector: selectors.angularUniversalSsrApp.citiesBlock, + isVisible: false, + }); + + await basePage.clickElementWithText({ + selector: updatedSelectors.angularUniversalSsrApp.tab, + text: Constants.elementsText.angularUniversalSsrApp.tabsNames[2], + }); + + await expect(page.locator(selectors.angularUniversalSsrApp.citiesBlock)).toBeVisible(); + }); + + test('Checks that cities block is equal between host and client apps', async () => { + await basePage.checkElementVisibility({ + selector: selectors.angularUniversalSsrApp.citiesBlock, + isVisible: false, + }); + + await basePage.clickElementWithText({ + selector: updatedSelectors.angularUniversalSsrApp.tab, + text: Constants.elementsText.angularUniversalSsrApp.tabsNames[2], + }); + + await basePage.checkElementVisibility({ + selector: selectors.angularUniversalSsrApp.citiesBlock, + }); + + await basePage.compareInfoBetweenHosts(selectors.angularUniversalSsrApp.citiesBlock, 3000); + }); + + test('Checks added cities block functionality across hosts', async () => { + await methodsPage.checkAddedCitiesBlockFunctionalityForMultipleHosts( + 3000, + Constants.elementsText.angularUniversalSsrApp.addedCities, + updatedSelectors.angularUniversalSsrApp.addedCity, + Constants.commonPhrases.angularUniversalSsrApp.selectedCityInfo, + selectors.angularUniversalSsrApp.selectedCityInfo, + ); + }); +}); diff --git a/angular-universal-ssr/e2e/tests/runAll.cy.ts b/angular-universal-ssr/e2e/tests/runAll.cy.ts deleted file mode 100644 index e4243153af6..00000000000 --- a/angular-universal-ssr/e2e/tests/runAll.cy.ts +++ /dev/null @@ -1,3 +0,0 @@ -import './clientChecks.cy'; -import './hostChecks.cy'; -import './commonChecks.cy'; diff --git a/angular-universal-ssr/package.json b/angular-universal-ssr/package.json index ffb11d30018..f083c11779b 100644 --- a/angular-universal-ssr/package.json +++ b/angular-universal-ssr/package.json @@ -17,9 +17,10 @@ "build": "pnpm --filter angular-universal-ssr_* build:federation", "serve": "pnpm --filter angular-universal-ssr_* --parallel serve:federation", "clean": "pnpm --filter angular-universal-ssr_* --parallel clean", - "e2e:ci": "pnpm run start & sleep 1 && wait-on tcp:4000 tcp:3000 && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/tests/runAll.cy.ts\" --browser=chrome" + "e2e:ci": "pnpm exec playwright test" }, "devDependencies": { + "@playwright/test": "^1.54.2", "wait-on": "7.2.0", "concurrently": "8.2.2" } diff --git a/angular-universal-ssr/playwright.config.ts b/angular-universal-ssr/playwright.config.ts new file mode 100644 index 00000000000..7b17302fa2b --- /dev/null +++ b/angular-universal-ssr/playwright.config.ts @@ -0,0 +1,22 @@ +import { defineConfig } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e', + timeout: 120_000, + expect: { + timeout: 10_000, + }, + retries: process.env.CI ? 1 : 0, + workers: 1, + reporter: 'list', + use: { + baseURL: 'http://localhost:4000', + trace: 'on-first-retry', + }, + webServer: { + command: 'pnpm run start', + url: 'http://localhost:4000', + timeout: 180_000, + reuseExistingServer: !process.env.CI, + }, +}); diff --git a/cypress-e2e/config/cypress.config.ts b/cypress-e2e/config/cypress.config.ts index 69be9ae10a5..bb125d08302 100644 --- a/cypress-e2e/config/cypress.config.ts +++ b/cypress-e2e/config/cypress.config.ts @@ -120,7 +120,7 @@ export default defineConfig({ localhost8081: 'http://localhost:8081', localhost8082: 'http://localhost:8082', localhost8083: 'http://localhost:8083', - localhost8084: 'http://localhost:8084', + localhost8184: 'http://localhost:8184', localhost9000: 'http://localhost:9000', localhost9001: 'http://localhost:9001', localhost9002: 'http://localhost:9002', diff --git a/cypress-e2e/fixtures/commonTestData.ts b/cypress-e2e/fixtures/commonTestData.ts index 428edb69295..90c067da050 100644 --- a/cypress-e2e/fixtures/commonTestData.ts +++ b/cypress-e2e/fixtures/commonTestData.ts @@ -2,6 +2,10 @@ import { getRandomTextString } from '../helpers/base-helper'; import { Constants } from './constants'; import { baseSelectors, selectors } from '../common/selectors'; +const typescriptHeader = + Constants.commonConstantsData.typeScript.charAt(0).toUpperCase() + + Constants.commonConstantsData.typeScript.slice(1); + export class CommonTestData { public static readonly multipleSizeStringsArray = [ getRandomTextString(10), @@ -44,12 +48,12 @@ export class CommonTestData { public static readonly commonTypeScriptAppsData = [ { host: 3001, - header: Constants.commonConstantsData.typeScript.charAt(0).toUpperCase(), + header: typescriptHeader, appName: Constants.commonConstantsData.commonCountAppNames.app1, }, { host: 3002, - header: Constants.commonConstantsData.typeScript.charAt(0).toUpperCase(), + header: typescriptHeader, appName: Constants.commonConstantsData.commonCountAppNames.app2, }, ]; diff --git a/cypress-e2e/fixtures/constants.ts b/cypress-e2e/fixtures/constants.ts index 6130f0a74bd..fd6f2874e7b 100644 --- a/cypress-e2e/fixtures/constants.ts +++ b/cypress-e2e/fixtures/constants.ts @@ -714,7 +714,7 @@ export class Constants { consumerCoreSectionButton: 'Button imported from /core', }, otherSectionCodeBlock: - '{ "userId": 1, "id": 1, "title": "delectus aut autem", "completed": false }', + '{\n "userId": 1,\n "id": 1,\n "title": "delectus aut autem",\n "completed": false\n}', consumerSection: { header: 'This is /consumer.', importMessages: { diff --git a/different-react-versions-isolated/cypress.env.json b/different-react-versions-isolated/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/different-react-versions-isolated/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/different-react-versions-isolated/e2e/checkDifferentReactVersionsIsolated.cy.ts b/different-react-versions-isolated/e2e/checkDifferentReactVersionsIsolated.cy.ts deleted file mode 100644 index a836adffd16..00000000000 --- a/different-react-versions-isolated/e2e/checkDifferentReactVersionsIsolated.cy.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { baseSelectors, selectors } from './../../cypress-e2e/common/selectors'; -import { Constants } from './../../cypress-e2e/fixtures/constants'; -import { BaseMethods } from '../../cypress-e2e/common/base'; - -const basePage: BaseMethods = new BaseMethods(); - -const appsData = [ - { - headerText: Constants.elementsText.differentReactVersionsIsolatedApp.headers.app1, - appName: Constants.commonConstantsData.commonCountAppNames.app1, - buttonName: Constants.updatedConstantsData.commonAppWithButton.app2, - host: 3001, - }, - { - headerText: Constants.elementsText.differentReactVersionsIsolatedApp.headers.app2, - appName: Constants.commonConstantsData.commonCountAppNames.app2, - buttonName: Constants.updatedConstantsData.commonAppWithButton.app2, - host: 3002, - }, -]; - -appsData.forEach( - (property: { headerText: string; appName: string; buttonName: string; host: number }) => { - describe('Different React Versions Isolated', () => { - context(`Check ${property.appName}`, () => { - beforeEach(() => { - basePage.openLocalhost({ - number: property.host, - }); - }); - - it(`Check ${property.appName} have ${property.headerText} header`, () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: property.headerText, - }); - }); - - it(`Check ${property.appName} have ${property.appName} subheader`, () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: property.appName, - }); - }); - - it(`Check ${property.appName} have ${property.buttonName} button`, () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: property.buttonName, - }); - }); - - it(`Check Apps share div with React version 16.14.0`, () => { - basePage.checkElementVisibility({ - selector: selectors.differentReactVersionsIsolatedApp.sharedBlock, - }); - if (property.host === 3001) { - basePage.openLocalhost({ - number: 3002, - }); - } else { - basePage.openLocalhost({ - number: 3001, - }); - } - basePage.checkElementVisibility({ - selector: selectors.differentReactVersionsIsolatedApp.sharedBlock, - }); - }); - - if (property.host === 3001) { - it(`Check ${property.appName} inject React version 16.14.0 block into a div parent element`, () => { - basePage.checkElementVisibility({ - parentSelector: baseSelectors.tags.coreElements.div, - selector: selectors.differentReactVersionsIsolatedApp.sharedBlock, - }); - basePage.checkElementVisibility({ - selector: selectors.differentReactVersionsIsolatedApp.divParent, - }); - }); - } else { - it(`Check ${property.appName} didn't inject React version 16.14.0 block into a div parent element`, () => { - basePage.checkElementVisibility({ - parentSelector: baseSelectors.tags.coreElements.div, - selector: selectors.differentReactVersionsIsolatedApp.sharedBlock, - }); - basePage.checkElementVisibility({ - selector: selectors.differentReactVersionsIsolatedApp.sharedBlock, - }); - basePage.checkElementVisibility({ - selector: selectors.differentReactVersionsIsolatedApp.divParent, - isVisible: false, - }); - }); - } - - it(`Check React version 16.14.0 block`, () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: Constants.elementsText.differentReactVersionsIsolatedApp.headers.app2, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: Constants.commonConstantsData.commonCountAppNames.app2, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.updatedConstantsData.commonAppWithButton.app2, - }); - }); - }); - }); - }, -); diff --git a/different-react-versions-isolated/e2e/checkDifferentReactVersionsIsolated.spec.ts b/different-react-versions-isolated/e2e/checkDifferentReactVersionsIsolated.spec.ts new file mode 100644 index 00000000000..a80b341519d --- /dev/null +++ b/different-react-versions-isolated/e2e/checkDifferentReactVersionsIsolated.spec.ts @@ -0,0 +1,116 @@ +import { test } from '@playwright/test'; + +import { BaseMethods } from '../../playwright-e2e/common/base'; +import { baseSelectors, selectors } from '../../cypress-e2e/common/selectors'; +import { Constants } from '../../cypress-e2e/fixtures/constants'; + +const appsData = [ + { + headerText: Constants.elementsText.differentReactVersionsIsolatedApp.headers.app1, + appName: Constants.commonConstantsData.commonCountAppNames.app1, + buttonName: Constants.updatedConstantsData.commonAppWithButton.app2, + host: 3001, + }, + { + headerText: Constants.elementsText.differentReactVersionsIsolatedApp.headers.app2, + appName: Constants.commonConstantsData.commonCountAppNames.app2, + buttonName: Constants.updatedConstantsData.commonAppWithButton.app2, + host: 3002, + }, +] as const; + +test.describe('Different React Versions Isolated', () => { + let basePage: BaseMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + }); + + for (const property of appsData) { + test.describe(`Check ${property.appName}`, () => { + test.beforeEach(async () => { + await basePage.openLocalhost({ number: property.host }); + }); + + test(`Check ${property.appName} have ${property.headerText} header`, async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h1, + text: property.headerText, + visibilityState: 'be.visible', + }); + }); + + test(`Check ${property.appName} have ${property.appName} subheader`, async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h2, + text: property.appName, + visibilityState: 'be.visible', + }); + }); + + test(`Check ${property.appName} have ${property.buttonName} button`, async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: property.buttonName, + visibilityState: 'be.visible', + }); + }); + + test('Check Apps share div with React version 16.14.0', async () => { + await basePage.checkElementVisibility({ + selector: selectors.differentReactVersionsIsolatedApp.sharedBlock, + }); + + const alternativeHost = property.host === 3001 ? 3002 : 3001; + await basePage.openLocalhost({ number: alternativeHost }); + await basePage.checkElementVisibility({ + selector: selectors.differentReactVersionsIsolatedApp.sharedBlock, + }); + }); + + if (property.host === 3001) { + test('Check App injects React version block into a div parent', async () => { + await basePage.checkElementVisibility({ + parentSelector: baseSelectors.tags.coreElements.div, + selector: selectors.differentReactVersionsIsolatedApp.sharedBlock, + }); + await basePage.checkElementVisibility({ + selector: selectors.differentReactVersionsIsolatedApp.divParent, + }); + }); + } else { + test(`Check ${property.appName} did not inject React version block into a div parent`, async () => { + await basePage.checkElementVisibility({ + parentSelector: baseSelectors.tags.coreElements.div, + selector: selectors.differentReactVersionsIsolatedApp.sharedBlock, + }); + await basePage.checkElementVisibility({ + selector: selectors.differentReactVersionsIsolatedApp.sharedBlock, + }); + await basePage.checkElementVisibility({ + selector: selectors.differentReactVersionsIsolatedApp.divParent, + isVisible: false, + }); + }); + } + + test('Check React version 16.14.0 block', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h1, + text: Constants.elementsText.differentReactVersionsIsolatedApp.headers.app2, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h2, + text: Constants.commonConstantsData.commonCountAppNames.app2, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.updatedConstantsData.commonAppWithButton.app2, + visibilityState: 'be.visible', + }); + }); + }); + } +}); diff --git a/different-react-versions-isolated/package.json b/different-react-versions-isolated/package.json index 52e87ed7fb9..d406e75a869 100644 --- a/different-react-versions-isolated/package.json +++ b/different-react-versions-isolated/package.json @@ -9,10 +9,11 @@ "legacy:build": "pnpm --filter different-react-versions-isolated_app* --parallel legacy:build", "serve": "pnpm --filter different-react-versions-isolated_app* --parallel serve", "clean": "pnpm --filter different-react-versions-isolated_app* --parallel clean", - "e2e:ci": "pnpm start & wait-on http-get://localhost:3001/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome", - "legacy:e2e:ci": "pnpm legacy:start & wait-on http-get://localhost:3001/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome" + "e2e:ci": "pnpm exec playwright test", + "legacy:e2e:ci": "pnpm exec playwright test" }, "devDependencies": { + "@playwright/test": "^1.54.2", "wait-on": "7.2.0" } } diff --git a/different-react-versions-isolated/playwright.config.ts b/different-react-versions-isolated/playwright.config.ts new file mode 100644 index 00000000000..07255b7c413 --- /dev/null +++ b/different-react-versions-isolated/playwright.config.ts @@ -0,0 +1,22 @@ +import { defineConfig } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e', + timeout: 120_000, + expect: { + timeout: 10_000, + }, + retries: process.env.CI ? 1 : 0, + workers: 1, + reporter: 'list', + use: { + baseURL: 'http://localhost:3001', + trace: 'on-first-retry', + }, + webServer: { + command: 'pnpm run start', + url: 'http://localhost:3001', + timeout: 180_000, + reuseExistingServer: !process.env.CI, + }, +}); diff --git a/different-react-versions-typescript/cypress.env.json b/different-react-versions-typescript/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/different-react-versions-typescript/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/different-react-versions-typescript/e2e/checkDiferentReactVersionsTypescriptApp.cy.ts b/different-react-versions-typescript/e2e/checkDiferentReactVersionsTypescriptApp.cy.ts deleted file mode 100644 index 4ace2181b48..00000000000 --- a/different-react-versions-typescript/e2e/checkDiferentReactVersionsTypescriptApp.cy.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { Constants } from './../../cypress-e2e/fixtures/constants'; -import { baseSelectors } from './../../cypress-e2e/common/selectors'; -import { BaseMethods } from '../../cypress-e2e/common/base'; -import { DifferentReactVersionsTypescriptMethods } from './methods/methods'; - -const basePage: BaseMethods = new BaseMethods(); -const methodsPage: DifferentReactVersionsTypescriptMethods = - new DifferentReactVersionsTypescriptMethods(); - -describe('Different React Versions Typescript', () => { - context('Check App1', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3001, - }); - }); - it('Check App headers and buttons visability', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: Constants.commonConstantsData.basicComponents.basicHostRemote, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: Constants.elementsText.differentReactVersionsApps.subheader, - }); - basePage.checkElementVisibility({ - selector: baseSelectors.tags.inputs.input, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.strong, - text: Constants.elementsText.differentReactVersionsApps.reactBlockParagraph, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: Constants.elementsText.differentReactVersionsApps.reactBlockHeader, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h3, - text: Constants.elementsText.differentReactVersionsApps.reactBlockSubheader, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: Constants.elementsText.differentReactVersionsApps.paragraph, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.updatedConstantsData.commonAppWithButton.app2, - }); - basePage.checkElementHaveProperty({ - selector: methodsPage.getBlockSelector( - baseSelectors.tags.coreElements.button.toUpperCase(), - ), - prop: Constants.commonConstantsData.commonAttributes.border, - value: Constants.color.nonRgbValues.borderRed1px, - }); - basePage.checkElementHaveProperty({ - selector: methodsPage.getBlockSelector(baseSelectors.tags.coreElements.div.toUpperCase()), - prop: Constants.commonConstantsData.commonAttributes.border, - value: Constants.color.nonRgbValues.borderRed1px, - }); - }); - - it('Check that filled text appear in header', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: Constants.elementsText.differentReactVersionsApps.reactBlockHeader, - }); - basePage.fillField({ - selector: baseSelectors.tags.inputs.input, - text: Constants.commonConstantsData.standardPhrase, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: `${Constants.elementsText.differentReactVersionsApps.reactBlockHeader} ${Constants.commonConstantsData.standardPhrase}`, - }); - }); - }); -}); - -describe('Different React Versions Typescript', () => { - context('Check App2', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3002, - }); - }); - - it('Check App elements visability', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: Constants.commonConstantsData.basicComponents.basicHostRemote, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: Constants.commonConstantsData.commonCountAppNames.app2.replace(' ', ''), - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: Constants.elementsText.differentReactVersionsApps.paragraph, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.updatedConstantsData.commonAppWithButton.app2, - }); - }); - }); -}); diff --git a/different-react-versions-typescript/e2e/checkDifferentReactVersionsTypescriptApp.spec.ts b/different-react-versions-typescript/e2e/checkDifferentReactVersionsTypescriptApp.spec.ts new file mode 100644 index 00000000000..588d2f19cc6 --- /dev/null +++ b/different-react-versions-typescript/e2e/checkDifferentReactVersionsTypescriptApp.spec.ts @@ -0,0 +1,126 @@ +import { test } from '@playwright/test'; + +import { BaseMethods } from '../../playwright-e2e/common/base'; +import { baseSelectors } from '../../cypress-e2e/common/selectors'; +import { Constants } from '../../cypress-e2e/fixtures/constants'; +import { DifferentReactVersionsTypescriptMethods } from './methods/methods'; + +const ports = { + app1: 3001, + app2: 3002, +} as const; + +test.describe('Different React Versions TypeScript - App1', () => { + let basePage: BaseMethods; + let methodsPage: DifferentReactVersionsTypescriptMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + methodsPage = new DifferentReactVersionsTypescriptMethods(); + + await basePage.openLocalhost({ number: ports.app1 }); + }); + + test('Check App headers and buttons visibility', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h1, + text: Constants.commonConstantsData.basicComponents.basicHostRemote, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h2, + text: Constants.elementsText.differentReactVersionsApps.subheader, + visibilityState: 'be.visible', + }); + await basePage.checkElementVisibility({ + selector: baseSelectors.tags.inputs.input, + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.strong, + text: Constants.elementsText.differentReactVersionsApps.reactBlockParagraph, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h2, + text: Constants.elementsText.differentReactVersionsApps.reactBlockHeader, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h3, + text: Constants.elementsText.differentReactVersionsApps.reactBlockSubheader, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.paragraph, + text: Constants.elementsText.differentReactVersionsApps.paragraph, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.updatedConstantsData.commonAppWithButton.app2, + visibilityState: 'be.visible', + }); + await basePage.checkElementHaveProperty({ + selector: methodsPage.getBlockSelector(baseSelectors.tags.coreElements.button.toUpperCase()), + prop: Constants.commonConstantsData.commonAttributes.border, + value: Constants.color.nonRgbValues.borderRed1px, + }); + await basePage.checkElementHaveProperty({ + selector: methodsPage.getBlockSelector(baseSelectors.tags.coreElements.div.toUpperCase()), + prop: Constants.commonConstantsData.commonAttributes.border, + value: Constants.color.nonRgbValues.borderRed1px, + }); + }); + + test('Check that filled text appear in header', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h2, + text: Constants.elementsText.differentReactVersionsApps.reactBlockHeader, + visibilityState: 'be.visible', + }); + + await basePage.fillField({ + selector: baseSelectors.tags.inputs.input, + text: Constants.commonConstantsData.standardPhrase, + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h2, + text: `${Constants.elementsText.differentReactVersionsApps.reactBlockHeader} ${Constants.commonConstantsData.standardPhrase}`, + visibilityState: 'be.visible', + }); + }); +}); + +test.describe('Different React Versions TypeScript - App2', () => { + let basePage: BaseMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + + await basePage.openLocalhost({ number: ports.app2 }); + }); + + test('Check App elements visibility', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h1, + text: Constants.commonConstantsData.basicComponents.basicHostRemote, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.paragraph, + text: Constants.commonConstantsData.commonCountAppNames.app2.replace(' ', ''), + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.paragraph, + text: Constants.elementsText.differentReactVersionsApps.paragraph, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.updatedConstantsData.commonAppWithButton.app2, + visibilityState: 'be.visible', + }); + }); +}); diff --git a/different-react-versions-typescript/package.json b/different-react-versions-typescript/package.json index 1458b483604..d5c89fabe21 100644 --- a/different-react-versions-typescript/package.json +++ b/different-react-versions-typescript/package.json @@ -13,10 +13,11 @@ "legacy:build": "pnpm --filter different-react-versions-typescript_* legacy:build", "serve": "pnpm --filter different-react-versions-typescript_* --parallel serve", "clean": "pnpm --filter different-react-versions-typescript_* --parallel clean", - "e2e:ci": "pnpm start & wait-on http-get://localhost:3001/ && wait-on http-get://localhost:3002/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome", - "legacy:e2e:ci": "pnpm legacy:start & wait-on http-get://localhost:3001/ && wait-on http-get://localhost:3002/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome" + "e2e:ci": "pnpm exec playwright test", + "legacy:e2e:ci": "pnpm exec playwright test" }, "devDependencies": { + "@playwright/test": "^1.54.2", "wait-on": "7.2.0" } } diff --git a/different-react-versions-typescript/playwright.config.ts b/different-react-versions-typescript/playwright.config.ts new file mode 100644 index 00000000000..07255b7c413 --- /dev/null +++ b/different-react-versions-typescript/playwright.config.ts @@ -0,0 +1,22 @@ +import { defineConfig } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e', + timeout: 120_000, + expect: { + timeout: 10_000, + }, + retries: process.env.CI ? 1 : 0, + workers: 1, + reporter: 'list', + use: { + baseURL: 'http://localhost:3001', + trace: 'on-first-retry', + }, + webServer: { + command: 'pnpm run start', + url: 'http://localhost:3001', + timeout: 180_000, + reuseExistingServer: !process.env.CI, + }, +}); diff --git a/different-react-versions/cypress.env.json b/different-react-versions/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/different-react-versions/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/different-react-versions/e2e/checkDiferentReactVersionsApp.cy.ts b/different-react-versions/e2e/checkDiferentReactVersionsApp.cy.ts deleted file mode 100644 index 77348c71e56..00000000000 --- a/different-react-versions/e2e/checkDiferentReactVersionsApp.cy.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { Constants } from './../../cypress-e2e/fixtures/constants'; -import { baseSelectors } from './../../cypress-e2e/common/selectors'; -import { BaseMethods } from '../../cypress-e2e/common/base'; -import { DifferentReactVersionsMethods } from './methods/methods'; - -const basePage: BaseMethods = new BaseMethods(); -const methodsPage: DifferentReactVersionsMethods = new DifferentReactVersionsMethods(); - -describe('Different React Versions', () => { - context('Check App1', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3001, - }); - }); - - it('Check App build and running', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: Constants.commonConstantsData.basicComponents.basicHostRemote, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: Constants.elementsText.differentReactVersionsApps.subheader, - }); - basePage.checkElementVisibility({ - selector: baseSelectors.tags.inputs.input, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.strong, - text: Constants.elementsText.differentReactVersionsApps.reactBlockParagraph, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: Constants.elementsText.differentReactVersionsApps.reactBlockHeader, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h3, - text: Constants.elementsText.differentReactVersionsApps.reactBlockSubheader, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: Constants.elementsText.differentReactVersionsApps.paragraph, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.updatedConstantsData.commonAppWithButton.app2, - }); - basePage.checkElementHaveProperty({ - selector: methodsPage.getBlockSelector( - baseSelectors.tags.coreElements.button.toUpperCase(), - ), - prop: Constants.commonConstantsData.commonAttributes.border, - value: Constants.color.nonRgbValues.borderRed1px, - }); - basePage.checkElementHaveProperty({ - selector: methodsPage.getBlockSelector(baseSelectors.tags.coreElements.div.toUpperCase()), - prop: Constants.commonConstantsData.commonAttributes.border, - value: Constants.color.nonRgbValues.borderRed1px, - }); - }); - - it('Check that filled text appear in header', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: Constants.elementsText.differentReactVersionsApps.reactBlockHeader, - }); - basePage.fillField({ - selector: baseSelectors.tags.inputs.input, - text: Constants.commonConstantsData.standardPhrase, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: `${Constants.elementsText.differentReactVersionsApps.reactBlockHeader} ${Constants.commonConstantsData.standardPhrase}`, - }); - }); - }); -}); - -describe('Different React Versions', () => { - context('Check App2', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3002, - }); - }); - - it('Check App build and running', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: Constants.commonConstantsData.basicComponents.basicHostRemote, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: Constants.commonConstantsData.commonCountAppNames.app2.replace(' ', ''), - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: Constants.elementsText.differentReactVersionsApps.paragraph, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.updatedConstantsData.commonAppWithButton.app2, - }); - }); - }); -}); diff --git a/different-react-versions/e2e/checkDifferentReactVersionsApp.spec.ts b/different-react-versions/e2e/checkDifferentReactVersionsApp.spec.ts new file mode 100644 index 00000000000..7c03e6b3e46 --- /dev/null +++ b/different-react-versions/e2e/checkDifferentReactVersionsApp.spec.ts @@ -0,0 +1,122 @@ +import { test } from '../../playwright-e2e/common/testFixtures'; + +import { BaseMethods } from '../../playwright-e2e/common/base'; +import { baseSelectors } from '../../cypress-e2e/common/selectors'; +import { Constants } from '../../cypress-e2e/fixtures/constants'; +import { DifferentReactVersionsMethods } from './methods/methods'; + +test.describe('Different React Versions - App1', () => { + let basePage: BaseMethods; + let methodsPage: DifferentReactVersionsMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + methodsPage = new DifferentReactVersionsMethods(); + + await basePage.openLocalhost({ number: 3001 }); + }); + + test('Check App build and running', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h1, + text: Constants.commonConstantsData.basicComponents.basicHostRemote, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h2, + text: Constants.elementsText.differentReactVersionsApps.subheader, + visibilityState: 'be.visible', + }); + await basePage.checkElementVisibility({ + selector: baseSelectors.tags.inputs.input, + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.strong, + text: Constants.elementsText.differentReactVersionsApps.reactBlockParagraph, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h2, + text: Constants.elementsText.differentReactVersionsApps.reactBlockHeader, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h3, + text: Constants.elementsText.differentReactVersionsApps.reactBlockSubheader, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.paragraph, + text: Constants.elementsText.differentReactVersionsApps.paragraph, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.updatedConstantsData.commonAppWithButton.app2, + visibilityState: 'be.visible', + }); + + await basePage.checkElementHaveProperty({ + selector: methodsPage.getBlockSelector(baseSelectors.tags.coreElements.button.toUpperCase()), + prop: Constants.commonConstantsData.commonAttributes.border, + value: Constants.color.nonRgbValues.borderRed1px, + }); + + await basePage.checkElementHaveProperty({ + selector: methodsPage.getBlockSelector(baseSelectors.tags.coreElements.div.toUpperCase()), + prop: Constants.commonConstantsData.commonAttributes.border, + value: Constants.color.nonRgbValues.borderRed1px, + }); + }); + + test('Check that filled text appear in header', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h2, + text: Constants.elementsText.differentReactVersionsApps.reactBlockHeader, + visibilityState: 'be.visible', + }); + + await basePage.fillField({ + selector: baseSelectors.tags.inputs.input, + text: Constants.commonConstantsData.standardPhrase, + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h2, + text: `${Constants.elementsText.differentReactVersionsApps.reactBlockHeader} ${Constants.commonConstantsData.standardPhrase}`, + visibilityState: 'be.visible', + }); + }); +}); + +test.describe('Different React Versions - App2', () => { + let basePage: BaseMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: 3002 }); + }); + + test('Check App build and running', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h1, + text: Constants.commonConstantsData.basicComponents.basicHostRemote, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.paragraph, + text: Constants.commonConstantsData.commonCountAppNames.app2.replace(' ', ''), + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.paragraph, + text: Constants.elementsText.differentReactVersionsApps.paragraph, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.updatedConstantsData.commonAppWithButton.app2, + visibilityState: 'be.visible', + }); + }); +}); diff --git a/different-react-versions/package.json b/different-react-versions/package.json index c0bb3fd88a8..a5d2a9b3856 100644 --- a/different-react-versions/package.json +++ b/different-react-versions/package.json @@ -9,10 +9,11 @@ "legacy:build": "pnpm --filter different-react-versions_app* legacy:build", "serve": "pnpm --filter different-react-versions_app* --parallel serve", "clean": "pnpm --filter different-react-versions_app* --parallel clean", - "e2e:ci": "pnpm start & wait-on http-get://localhost:3001/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome", - "legacy:e2e:ci": "pnpm legacy:start & wait-on http-get://localhost:3001/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome" + "e2e:ci": "pnpm exec playwright test", + "legacy:e2e:ci": "pnpm exec playwright test" }, "devDependencies": { + "@playwright/test": "^1.54.2", "wait-on": "7.2.0" } } diff --git a/different-react-versions/playwright.config.ts b/different-react-versions/playwright.config.ts new file mode 100644 index 00000000000..07255b7c413 --- /dev/null +++ b/different-react-versions/playwright.config.ts @@ -0,0 +1,22 @@ +import { defineConfig } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e', + timeout: 120_000, + expect: { + timeout: 10_000, + }, + retries: process.env.CI ? 1 : 0, + workers: 1, + reporter: 'list', + use: { + baseURL: 'http://localhost:3001', + trace: 'on-first-retry', + }, + webServer: { + command: 'pnpm run start', + url: 'http://localhost:3001', + timeout: 180_000, + reuseExistingServer: !process.env.CI, + }, +}); diff --git a/dynamic-system-host/cypress.env.json b/dynamic-system-host/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/dynamic-system-host/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/dynamic-system-host/e2e/checkApplications.cy.ts b/dynamic-system-host/e2e/checkApplications.cy.ts deleted file mode 100644 index 67f32705871..00000000000 --- a/dynamic-system-host/e2e/checkApplications.cy.ts +++ /dev/null @@ -1,169 +0,0 @@ -import { baseSelectors, commonSelectors } from '../../cypress-e2e/common/selectors'; -import { BaseMethods } from '../../cypress-e2e/common/base'; -import { Constants } from '../../cypress-e2e/fixtures/constants'; -import { getDateWithFormat } from '../../cypress-e2e/helpers/base-helper'; -import { CssAttr } from '../../cypress-e2e/types/cssAttr'; -import { returnCommonDynamicAppsData } from '../../cypress-e2e/fixtures/commonTestData'; - -const basePage: BaseMethods = new BaseMethods(); - -const appsData = returnCommonDynamicAppsData( - Constants.commonPhrases.dynamicSystemHostApp.paragraphText, -); - -appsData.forEach( - (property: { - headerSelector: string; - subHeaderSelector: string; - isButtonExist: boolean; - buttonSelector: string; - headerText: string; - appNameText: string; - widgetQuantity?: number; - widgetName: string[]; - widgetParagraph: string[]; - widgetColor: string[]; - paragraph: boolean; - host: number; - }) => { - const appName = - property.host === 3001 - ? appsData[0].appNameText - : property.host === 3002 - ? appsData[1].appNameText - : appsData[2].appNameText; - const host = - property.host === 3001 - ? appsData[0].host - : property.host === 3002 - ? appsData[1].host - : appsData[2].host; - const widget: number = - property.host === 3002 - ? Number(appsData[1].widgetQuantity) - : Number(appsData[2].widgetQuantity); - - describe('Dynamic System Host', () => { - context(`Check ${appName}`, () => { - it(`Check ${appName} built and running`, () => { - basePage.openLocalhost({ - number: host, - }); - basePage.checkElementWithTextPresence({ - selector: property.headerSelector, - text: property.headerText, - }); - basePage.checkElementWithTextPresence({ - selector: property.subHeaderSelector, - text: appName, - }); - property.paragraph - ? basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: Constants.commonPhrases.dynamicSystemHostApp.hostParagraph, - }) - : basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: Constants.commonPhrases.dynamicSystemHostApp.hostParagraph, - isVisible: false, - }); - }); - - it(`Check buttons in ${appName} exist`, () => { - basePage.openLocalhost({ - number: host, - }); - property.isButtonExist - ? Constants.elementsText.dynamicRemotesApp.buttonsText.forEach(button => { - basePage.checkElementWithTextPresence({ - selector: property.buttonSelector, - text: button, - }); - }) - : basePage.checkElementVisibility({ - selector: property.buttonSelector, - isVisible: property.isButtonExist, - }); - }); - - it(`Check functionality in ${appName}`, () => { - basePage.openLocalhost({ - number: host, - }); - if (property.isButtonExist) { - Constants.elementsText.dynamicRemotesApp.buttonsText.forEach(button => { - basePage.clickElementWithText({ - selector: property.buttonSelector, - text: button, - }); - basePage.checkElementVisibility({ - selector: commonSelectors.commonWidget.replace( - '{appQuantity}', - ( - Constants.elementsText.dynamicRemotesApp.buttonsText.indexOf(button) + 2 - ).toString(), - ), - }); - basePage.checkElementHaveProperty({ - selector: commonSelectors.commonWidget.replace( - '{appQuantity}', - ( - Constants.elementsText.dynamicRemotesApp.buttonsText.indexOf(button) + 2 - ).toString(), - ), - prop: CssAttr.backgroundColor, - value: - property.widgetColor[ - Constants.elementsText.dynamicRemotesApp.buttonsText.indexOf(button) - ], - }); - basePage.checkElementWithTextPresence({ - selector: property.subHeaderSelector, - text: property.widgetName[ - Constants.elementsText.dynamicRemotesApp.buttonsText.indexOf(button) - ], - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: property.widgetParagraph[ - Constants.elementsText.dynamicRemotesApp.buttonsText.indexOf(button) - ], - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: getDateWithFormat('current', 'MMMM Do YYYY, h:mm'), - }); - }); - } else { - basePage.checkElementVisibility({ - selector: commonSelectors.commonWidget.replace( - '{appQuantity}', - (widget + 2).toString(), - ), - }); - basePage.checkElementHaveProperty({ - selector: commonSelectors.commonWidget.replace( - '{appQuantity}', - (widget + 2).toString(), - ), - prop: 'background-color', - value: property.widgetColor[widget], - }); - basePage.checkElementWithTextPresence({ - selector: property.subHeaderSelector, - text: property.widgetName[widget], - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: property.widgetParagraph[widget], - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: getDateWithFormat('current', 'MMMM Do YYYY, h:mm'), - }); - } - }); - }); - }); - }, -); diff --git a/dynamic-system-host/e2e/checkApplications.spec.ts b/dynamic-system-host/e2e/checkApplications.spec.ts new file mode 100644 index 00000000000..7c4c7721ac5 --- /dev/null +++ b/dynamic-system-host/e2e/checkApplications.spec.ts @@ -0,0 +1,142 @@ +import { test } from '@playwright/test'; + +import { BaseMethods } from '../../playwright-e2e/common/base'; +import { baseSelectors, commonSelectors } from '../../playwright-e2e/common/selectors'; +import { Constants } from '../../playwright-e2e/fixtures/constants'; +import { getDateWithFormat } from '../../cypress-e2e/helpers/base-helper'; +import { CssAttr } from '../../cypress-e2e/types/cssAttr'; +import { returnCommonDynamicAppsData } from '../../cypress-e2e/fixtures/commonTestData'; + +const appsData = returnCommonDynamicAppsData( + Constants.commonPhrases.dynamicSystemHostApp.paragraphText, +); +const widgetButtons = Constants.elementsText.dynamicRemotesApp.buttonsText; +const dynamicHostParagraph = Constants.commonPhrases.dynamicSystemHostApp.hostParagraph; + +const getWidgetSelector = (index: number) => + commonSelectors.commonWidget.replace('{appQuantity}', String(index + 2)); + +appsData.forEach(app => { + test.describe(`Dynamic System Host - ${app.appNameText} (port ${app.host})`, () => { + test('renders shared header and optional paragraph', async ({ page }) => { + const basePage = new BaseMethods(page); + + await basePage.openLocalhost({ number: app.host }); + + await basePage.checkElementWithTextPresence({ + selector: app.headerSelector, + text: app.headerText, + }); + + await basePage.checkElementWithTextPresence({ + selector: app.subHeaderSelector, + text: app.appNameText, + }); + + if (app.paragraph) { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.paragraph, + text: dynamicHostParagraph, + }); + } else { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.paragraph, + text: dynamicHostParagraph, + isVisible: false, + }); + } + }); + + test('displays the expected widget trigger buttons', async ({ page }) => { + const basePage = new BaseMethods(page); + + await basePage.openLocalhost({ number: app.host }); + + if (app.isButtonExist) { + for (const buttonText of widgetButtons) { + await basePage.checkElementWithTextPresence({ + selector: app.buttonSelector, + text: buttonText, + }); + } + + return; + } + + await basePage.checkElementVisibility({ + selector: app.buttonSelector, + isVisible: false, + }); + }); + + test('loads widgets dynamically with correct styling and copy', async ({ page }) => { + const basePage = new BaseMethods(page); + + await basePage.openLocalhost({ number: app.host }); + + if (app.isButtonExist) { + for (const [index, buttonText] of widgetButtons.entries()) { + await test.step(`loads widget via ${buttonText}`, async () => { + await basePage.clickElementWithText({ + selector: app.buttonSelector, + text: buttonText, + }); + + const widgetSelector = getWidgetSelector(index); + + await basePage.checkElementVisibility({ selector: widgetSelector }); + + await basePage.checkElementHaveProperty({ + selector: widgetSelector, + prop: CssAttr.backgroundColor, + value: app.widgetColor[index], + }); + + await basePage.checkElementWithTextPresence({ + selector: app.subHeaderSelector, + text: app.widgetName[index], + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.paragraph, + text: app.widgetParagraph[index], + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.paragraph, + text: getDateWithFormat('current', 'MMMM Do YYYY, h:mm'), + }); + }); + } + + return; + } + + const widgetIndex = app.widgetQuantity ?? 0; + const widgetSelector = getWidgetSelector(widgetIndex); + + await basePage.checkElementVisibility({ selector: widgetSelector }); + + await basePage.checkElementHaveProperty({ + selector: widgetSelector, + prop: CssAttr.backgroundColor, + value: app.widgetColor[widgetIndex], + }); + + await basePage.checkElementWithTextPresence({ + selector: app.subHeaderSelector, + text: app.widgetName[widgetIndex], + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.paragraph, + text: app.widgetParagraph[widgetIndex], + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.paragraph, + text: getDateWithFormat('current', 'MMMM Do YYYY, h:mm'), + }); + }); + }); +}); diff --git a/dynamic-system-host/package.json b/dynamic-system-host/package.json index 3be6102f1a6..a1cb513be74 100644 --- a/dynamic-system-host/package.json +++ b/dynamic-system-host/package.json @@ -10,10 +10,15 @@ "legacy:build": "pnpm --filter dynamic-system-host_app* legacy:build", "serve": "pnpm --filter dynamic-system-host_app* --parallel serve", "clean": "pnpm --filter dynamic-system-host_app* --parallel clean", - "e2e:ci": "pnpm start & sleep 1 && wait-on tcp:3001 && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome", - "legacy:e2e:ci": "pnpm legacy:start & sleep 1 && wait-on tcp:3001 tcp:3002 && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome" + "test:e2e": "npx playwright test", + "test:e2e:ui": "npx playwright test --ui", + "test:e2e:debug": "npx playwright test --debug", + "e2e:ci": "pnpm build && npx playwright install --with-deps && npx playwright test --reporter=list", + "legacy:e2e:ci": "pnpm legacy:build && npx playwright install --with-deps && npx playwright test --reporter=list" }, "devDependencies": { - "wait-on": "7.2.0" + "wait-on": "7.2.0", + "@playwright/test": "^1.54.2", + "playwright": "^1.54.2" } } diff --git a/dynamic-system-host/playwright.config.ts b/dynamic-system-host/playwright.config.ts new file mode 100644 index 00000000000..abd8c3b28a2 --- /dev/null +++ b/dynamic-system-host/playwright.config.ts @@ -0,0 +1,50 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e', + timeout: 60_000, + expect: { + timeout: 15_000, + }, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 1 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost:3001', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1920, height: 1080 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + command: 'cd app1 && pnpm serve', + port: 3001, + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, + { + command: 'cd app2 && pnpm serve', + port: 3002, + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, + { + command: 'cd app3 && pnpm serve', + port: 3003, + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, + ], +}); diff --git a/error-boundary/cypress.env.json b/error-boundary/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/error-boundary/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/error-boundary/e2e/checkAutomaticVendorApps.cy.ts b/error-boundary/e2e/checkAutomaticVendorApps.cy.ts deleted file mode 100644 index cd891caa8af..00000000000 --- a/error-boundary/e2e/checkAutomaticVendorApps.cy.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; -import { CssAttr } from '../../../cypress-e2e/types/cssAttr'; - -const basePage: BaseMethods = new BaseMethods(); - -const appButtonPosition: number = 0; - -const appsData = [ - { - headerSelector: baseSelectors.tags.headers.h1, - subHeaderSelector: baseSelectors.tags.headers.h2, - buttonSelector: baseSelectors.tags.coreElements.button, - headerText: 'Offline Remote', - appNameText: Constants.commonConstantsData.commonCountAppNames.app1, - buttonColor: Constants.color.red, - host: 3001, - }, -]; - -appsData.forEach( - (property: { - headerSelector: string; - subHeaderSelector: string; - buttonSelector: string; - headerText: string; - appNameText: string; - buttonColor: string; - host: number; - }) => { - const host = property.host === 3002 ? appsData[1].host : appsData[0].host; - const appName = property.host === 3002 ? appsData[1].appNameText : appsData[0].appNameText; - const color = property.host === 3002 ? appsData[1].buttonColor : appsData[0].buttonColor; - - describe(`Endpoint Based Remotes`, () => { - context(`Check ${appName}:${host}`, () => { - beforeEach(() => { - basePage.openLocalhost({ - number: host, - }); - }); - - it(`Check ${appName} header and subheader exist on the page`, () => { - basePage.checkElementWithTextPresence({ - selector: property.headerSelector, - text: property.headerText, - }); - // basePage.checkElementWithTextPresence({ - // selector: property.subHeaderSelector, - // text: `${appName}`, - // }); - }); - - it(`Check buttons in ${appName} exist`, () => { - basePage.checkElementWithTextPresence({ - selector: property.buttonSelector, - text: `${appName} ${Constants.commonConstantsData.button}`, - }); - }); - - it(`Check button property in ${appName}`, () => { - basePage.checkElementContainText({ - selector: property.buttonSelector, - text: `${appName} ${Constants.commonConstantsData.button}`, - index: appButtonPosition, - }); - basePage.checkElementHaveProperty({ - selector: property.buttonSelector, - text: `${appName} ${Constants.commonConstantsData.button}`, - prop: CssAttr.background, - value: color, - }); - }); - }); - }); - }, -); diff --git a/error-boundary/e2e/checkAutomaticVendorApps.spec.ts b/error-boundary/e2e/checkAutomaticVendorApps.spec.ts new file mode 100644 index 00000000000..bf19f33d472 --- /dev/null +++ b/error-boundary/e2e/checkAutomaticVendorApps.spec.ts @@ -0,0 +1,19 @@ +import { test, expect } from '@playwright/test'; + +test.describe('Offline Remote', () => { + test.beforeEach(async ({ page }) => { + await page.goto('/'); + }); + + test('displays the offline remote header', async ({ page }) => { + await expect(page).toHaveURL('http://localhost:3001/'); + await expect(page.getByRole('heading', { level: 1, name: 'Offline Remote' })).toBeVisible(); + }); + + test('renders the App 1 button with a red background', async ({ page }) => { + const app1Button = page.getByRole('button', { name: 'App 1 Button' }); + + await expect(app1Button).toBeVisible(); + await expect(app1Button).toHaveCSS('background-color', 'rgb(136, 0, 0)'); + }); +}); diff --git a/error-boundary/package.json b/error-boundary/package.json index 1e496061c1b..0973ace5504 100644 --- a/error-boundary/package.json +++ b/error-boundary/package.json @@ -15,10 +15,14 @@ "clean": "pnpm --filter error-boundary_app* --parallel clean", "legacy:start": "pnpm --filter error-boundary_app* --parallel legacy:start", "legacy:build": "pnpm --filter error-boundary_app* --parallel legacy:build", - "e2e:ci": "pnpm start & wait-on http-get://localhost:3001/ && npx cypress run --config-file ../../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome", - "legacy:e2e:ci": "pnpm legacy:start & wait-on http-get://localhost:3001/ && npx cypress run --config-file ../../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome" + "test:e2e": "npx playwright test", + "test:e2e:ui": "npx playwright test --ui", + "test:e2e:debug": "npx playwright test --debug", + "e2e:ci": "pnpm build && npx playwright install --with-deps && npx playwright test --reporter=list", + "legacy:e2e:ci": "pnpm legacy:build && npx playwright install --with-deps && npx playwright test --reporter=list" }, "devDependencies": { - "wait-on": "7.2.0" + "@playwright/test": "^1.54.2", + "playwright": "^1.54.2" } } diff --git a/error-boundary/playwright.config.ts b/error-boundary/playwright.config.ts new file mode 100644 index 00000000000..3e693b51ee1 --- /dev/null +++ b/error-boundary/playwright.config.ts @@ -0,0 +1,46 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e', + timeout: 60_000, + expect: { + timeout: 15_000, + }, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 1 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost:3001', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1920, height: 1080 }, + }, + + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + + webServer: [ + { + command: 'cd app1 && pnpm serve', + port: 3001, + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, + { + command: 'cd app2 && pnpm serve', + port: 3002, + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, + ], +}); diff --git a/federated-css-react-ssr/e2e/common-checks.spec.ts b/federated-css-react-ssr/e2e/common-checks.spec.ts new file mode 100644 index 00000000000..6f5d4826b3c --- /dev/null +++ b/federated-css-react-ssr/e2e/common-checks.spec.ts @@ -0,0 +1,123 @@ +import { expect, test } from '@playwright/test'; +import type { Page } from '@playwright/test'; +import { selectors } from '../../playwright-e2e/common/selectors'; +import { CssAttr } from '../../playwright-e2e/types/cssAttr'; +import { Constants } from '../../playwright-e2e/fixtures/constants'; + +const { + css, + cssModule, + jss, + less, + scss, + styledComponent, + tailwindModule, +} = Constants.fullTestData.federatedCssTestData; + +type ButtonConfig = { + path: string; + bgColor: string; +}; + +type ShellConfig = { + port: number; + buttons: ButtonConfig[]; +}; + +type ExposeConfig = { + port: number; + button: ButtonConfig; + path?: string; +}; + +const shellApps: ShellConfig[] = [ + { port: 4000, buttons: [css, jss] }, + { port: 4001, buttons: [css, scss, scss] }, + { port: 4002, buttons: [styledComponent, jss] }, + { port: 4003, buttons: [styledComponent, jss, cssModule] }, + { port: 4004, buttons: [less, less, scss, scss] }, + { port: 4005, buttons: [tailwindModule, scss, scss] }, +]; + +const exposeApps: ExposeConfig[] = [ + { port: 3001, button: css, path: 'client' }, + { port: 3002, button: jss, path: 'client' }, + { port: 3003, button: tailwindModule, path: 'client' }, + { port: 3004, button: scss, path: 'client' }, + { port: 3005, button: styledComponent, path: 'client' }, + { port: 3006, button: cssModule, path: 'client' }, + { port: 3007, button: less, path: 'client' }, +]; + +const buildUrl = (port: number, path?: string): string => { + if (!path) { + return `http://localhost:${port}/`; + } + + if (path.startsWith('/')) { + return `http://localhost:${port}${path}`; + } + + if (path.startsWith('#')) { + return `http://localhost:${port}/${path}`; + } + + return `http://localhost:${port}/${path}`; +}; + +const expectButtonsInOrder = async (page: Page, buttons: ButtonConfig[]) => { + await page.waitForSelector(selectors.federatedCssButton, { timeout: 30_000 }); + const buttonLocator = page.locator(selectors.federatedCssButton); + await expect(buttonLocator).toHaveCount(buttons.length); + + for (const [index, button] of buttons.entries()) { + await expect(buttonLocator.nth(index)).toBeVisible(); + await expect(buttonLocator.nth(index)).toHaveCSS(CssAttr.backgroundColor, button.bgColor); + } +}; + +const expectAllButtonsMatch = async (page: Page, expected: ButtonConfig) => { + await page.waitForSelector(selectors.federatedCssButton, { timeout: 30_000 }); + const buttonLocator = page.locator(selectors.federatedCssButton); + await expect(buttonLocator).not.toHaveCount(0); + + const total = await buttonLocator.count(); + for (let index = 0; index < total; index += 1) { + await expect(buttonLocator.nth(index)).toBeVisible(); + await expect(buttonLocator.nth(index)).toHaveCSS(CssAttr.backgroundColor, expected.bgColor); + } +}; + +const visit = async (page: Page, port: number, path?: string) => { + await page.goto(buildUrl(port, path), { waitUntil: 'domcontentloaded' }); +}; + +test.describe('Federated CSS SSR shells', () => { + for (const app of shellApps) { + test(`shell port ${app.port} renders federated styles with JavaScript`, async ({ page }) => { + await visit(page, app.port); + await expectButtonsInOrder(page, app.buttons); + }); + + test(`shell port ${app.port} renders federated styles without JavaScript`, async ({ browser }) => { + const context = await browser.newContext({ javaScriptEnabled: false }); + const page = await context.newPage(); + + try { + await visit(page, app.port); + await expectButtonsInOrder(page, app.buttons); + } finally { + await context.close(); + } + }); + } +}); + +test.describe('Federated CSS SSR exposes', () => { + for (const app of exposeApps) { + test(`expose port ${app.port} renders federated styles`, async ({ page }) => { + await visit(page, app.port, app.path); + await expectAllButtonsMatch(page, app.button); + }); + } +}); diff --git a/federated-css-react-ssr/e2e/commonChecks.cy.ts b/federated-css-react-ssr/e2e/commonChecks.cy.ts deleted file mode 100644 index 7cfac6de2cf..00000000000 --- a/federated-css-react-ssr/e2e/commonChecks.cy.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { selectors } from '../../cypress-e2e/common/selectors'; -import { CssAttr } from '../../cypress-e2e/types/cssAttr'; -import { Constants } from '../../cypress-e2e/fixtures/constants'; -import { BaseMethods } from '../../cypress-e2e/common/base'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('It checks federated css ssr apps', () => { - const { - fullTestData: { - federatedCssTestData: { css, cssModule, jss, less, scss, styledComponent, tailwindModule }, - }, - } = Constants; - - const appsData = [ - { - port: 4000, - buttons: [css, jss], - isShell: true, - }, - { - port: 4001, - buttons: [css, scss, scss], - isShell: true, - }, - { - port: 4002, - buttons: [styledComponent, jss], - isShell: true, - }, - { - port: 4003, - buttons: [styledComponent, jss, cssModule], - isShell: true, - }, - { - port: 4004, - buttons: [less, less, scss, scss], - isShell: true, - }, - { - port: 4005, - buttons: [tailwindModule, scss, scss], - isShell: true, - }, - { - port: 3001, - buttons: [css], - isShell: false, - }, - { - port: 3002, - buttons: [jss], - isShell: false, - }, - { - port: 3003, - buttons: [tailwindModule], - isShell: false, - }, - { - port: 3004, - buttons: [scss], - isShell: false, - }, - { - port: 3005, - buttons: [styledComponent], - isShell: false, - }, - { - port: 3006, - buttons: [cssModule], - isShell: false, - }, - { - port: 3007, - buttons: [less], - isShell: false, - }, - ]; - appsData.forEach(appConfig => { - if (appConfig.isShell) { - it('should verify Shell App exposed buttons colors on page with invoked JS', () => { - basePage.openLocalhost(appConfig.port); - appConfig.buttons.forEach((cfg, idx) => { - basePage.checkElementHaveProperty({ - selector: selectors.federatedCssButton, - prop: CssAttr.backgroundColor, - value: cfg.bgColor, - index: idx, - }); - }); - }); - - it(`should verify Shell App exposed buttons colors on page without JS`, () => { - cy.reload(); - cy.request(Cypress.env(`localhost${appConfig.port}`)) - .its('body') - .then((html: string) => { - const scriptTag = ``; - const htmlWithoutJS = html.replace(scriptTag, ''); - // render Application without script tag - cy.document().invoke({ log: false }, 'write', htmlWithoutJS); - appConfig.buttons.forEach((cfg, idx) => { - basePage.checkElementHaveProperty({ - selector: selectors.federatedCssButton, - prop: CssAttr.backgroundColor, - value: cfg.bgColor, - index: idx, - }); - }); - }); - }); - } else { - appConfig.buttons.forEach(cfg => { - it(`should verify every button in expose ${appConfig.port} app`, () => { - basePage.openLocalhost(appConfig.port, 'client'); - basePage.checkElementHaveProperty({ - selector: selectors.federatedCssButton, - prop: CssAttr.css, - value: cfg.bgColor, - isMultiple: true, - }); - }); - }); - } - }); -}); diff --git a/federated-css-react-ssr/e2e/global-setup.ts b/federated-css-react-ssr/e2e/global-setup.ts new file mode 100644 index 00000000000..63aaec914c2 --- /dev/null +++ b/federated-css-react-ssr/e2e/global-setup.ts @@ -0,0 +1,24 @@ +import { execSync } from 'node:child_process'; + +function killPorts(ports: number[]) { + const unique = Array.from(new Set(ports)); + for (const port of unique) { + try { + // macOS/Linux via lsof; ignore if nothing found + execSync(`lsof -ti:${port} | xargs kill -9`, { stdio: 'ignore' }); + } catch {} + try { + // Linux alternative via fuser + execSync(`fuser -k ${port}/tcp`, { stdio: 'ignore' }); + } catch {} + } +} + +export default async function globalSetup() { + // SSR uses exposes on 3001-3007 and shells on 4000-4005 + const ports = [3001,3002,3003,3004,3005,3006,3007, 4000,4001,4002,4003,4004,4005]; + try { + killPorts(ports); + } catch {} +} + diff --git a/federated-css-react-ssr/e2e/global-teardown.ts b/federated-css-react-ssr/e2e/global-teardown.ts new file mode 100644 index 00000000000..1add813703e --- /dev/null +++ b/federated-css-react-ssr/e2e/global-teardown.ts @@ -0,0 +1,13 @@ +import { execSync } from 'node:child_process'; + +export default async function globalTeardown() { + const ports = [3001,3002,3003,3004,3005,3006,3007, 4000,4001,4002,4003,4004,4005]; + for (const port of ports) { + try { execSync(`lsof -ti:${port} | xargs kill -9`, { stdio: 'ignore' }); } catch {} + try { execSync(`fuser -k ${port}/tcp`, { stdio: 'ignore' }); } catch {} + } + await new Promise((r) => setTimeout(r, 200)); + const code = typeof process.exitCode === 'number' ? process.exitCode : 0; + // eslint-disable-next-line no-process-exit + process.exit(code); +} diff --git a/federated-css-react-ssr/e2e/run-all.spec.ts b/federated-css-react-ssr/e2e/run-all.spec.ts new file mode 100644 index 00000000000..093a438e534 --- /dev/null +++ b/federated-css-react-ssr/e2e/run-all.spec.ts @@ -0,0 +1,2 @@ +// Placeholder file retained for legacy structure; no-op in Playwright. +export {}; diff --git a/federated-css-react-ssr/e2e/runAll.cy.ts b/federated-css-react-ssr/e2e/runAll.cy.ts deleted file mode 100644 index 5ae32f93812..00000000000 --- a/federated-css-react-ssr/e2e/runAll.cy.ts +++ /dev/null @@ -1 +0,0 @@ -import './commonChecks.cy'; diff --git a/federated-css-react-ssr/expose-apps/expose-css-module/config/module-federation.js b/federated-css-react-ssr/expose-apps/expose-css-module/config/module-federation.js index df30ec02e40..cfc268c3c54 100644 --- a/federated-css-react-ssr/expose-apps/expose-css-module/config/module-federation.js +++ b/federated-css-react-ssr/expose-apps/expose-css-module/config/module-federation.js @@ -1,6 +1,6 @@ const deps = require('../package.json').dependencies; const { ModuleFederationPlugin } = require('webpack').container; -const { NodeFederationPlugin, StreamingTargetPlugin } = require('@module-federation/node'); +const { UniversalFederationPlugin } = require('@module-federation/node'); module.exports = { client: new ModuleFederationPlugin({ @@ -27,7 +27,9 @@ module.exports = { }, }), server: [ - new NodeFederationPlugin({ + new UniversalFederationPlugin({ + isServer: true, + useRuntimePlugin: true, name: 'expose_css_module', filename: 'remoteEntry.js', library: { type: 'commonjs-module' }, @@ -38,23 +40,10 @@ module.exports = { }, shared: { ...deps, - react: { - singleton: true, - requiredVersion: deps.react, - }, - 'react-dom': { - singleton: true, - requiredVersion: deps['react-dom'], - }, - 'isomorphic-style-loader': { - singleton: true, - }, + react: { singleton: true, requiredVersion: deps.react }, + 'react-dom': { singleton: true, requiredVersion: deps['react-dom'] }, + 'isomorphic-style-loader': { singleton: true }, }, }), - new StreamingTargetPlugin({ - name: 'expose_css_module', - library: { type: 'commonjs-module' }, - remotes: {}, - }), ], }; diff --git a/federated-css-react-ssr/expose-apps/expose-css-module/config/webpack.server.js b/federated-css-react-ssr/expose-apps/expose-css-module/config/webpack.server.js index 9aa3d71c6a7..38d46b3aa3b 100644 --- a/federated-css-react-ssr/expose-apps/expose-css-module/config/webpack.server.js +++ b/federated-css-react-ssr/expose-apps/expose-css-module/config/webpack.server.js @@ -12,7 +12,7 @@ module.exports = merge(sharedWebpackConfig, { optimization: { minimize: false, }, - target: false, + target: 'async-node', name: 'server', plugins: [...moduleFederationPlugin.server], }); diff --git a/federated-css-react-ssr/expose-apps/expose-css-module/package.json b/federated-css-react-ssr/expose-apps/expose-css-module/package.json index 5a64c0e0d17..b1030928f6f 100644 --- a/federated-css-react-ssr/expose-apps/expose-css-module/package.json +++ b/federated-css-react-ssr/expose-apps/expose-css-module/package.json @@ -5,7 +5,7 @@ "build": "pnpm build:client && pnpm build:server", "build:client": "webpack --mode production --config config/webpack.client.js", "build:server": "webpack --mode production --config config/webpack.server.js", - "serve": "npx serve dist/ -p 3006", + "serve": "pnpm dlx serve dist -l 3006", "start": "pnpm build && pnpm serve" }, "license": "MIT", @@ -24,11 +24,12 @@ "webpack": "5.101.0", "webpack-cli": "5.1.4", "webpack-dev-server": "5.0.4", - "webpack-merge": "6.0.1" + "webpack-merge": "6.0.1", + "@module-federation/enhanced": "0.17.1" }, "dependencies": { "@babel/runtime": "^7.13.10", "react": "^18.1.0", "react-dom": "^18.1.0" } -} \ No newline at end of file +} diff --git a/federated-css-react-ssr/expose-apps/expose-css/config/module-federation.js b/federated-css-react-ssr/expose-apps/expose-css/config/module-federation.js index 66037e96532..2b4faa8cb03 100644 --- a/federated-css-react-ssr/expose-apps/expose-css/config/module-federation.js +++ b/federated-css-react-ssr/expose-apps/expose-css/config/module-federation.js @@ -1,6 +1,6 @@ const deps = require('../package.json').dependencies; const { ModuleFederationPlugin } = require('webpack').container; -const { NodeFederationPlugin, StreamingTargetPlugin } = require('@module-federation/node'); +const { UniversalFederationPlugin } = require('@module-federation/node'); module.exports = { client: new ModuleFederationPlugin({ @@ -24,7 +24,9 @@ module.exports = { }, }), server: [ - new NodeFederationPlugin({ + new UniversalFederationPlugin({ + isServer: true, + useRuntimePlugin: true, name: 'expose_css', filename: 'remoteEntry.js', library: { type: 'commonjs-module' }, @@ -35,20 +37,9 @@ module.exports = { }, shared: { ...deps, - react: { - singleton: true, - requiredVersion: deps.react, - }, - 'react-dom': { - singleton: true, - requiredVersion: deps['react-dom'], - }, + react: { singleton: true, requiredVersion: deps.react }, + 'react-dom': { singleton: true, requiredVersion: deps['react-dom'] }, }, }), - new StreamingTargetPlugin({ - name: 'expose_css', - library: { type: 'commonjs-module' }, - remotes: {}, - }), ], }; diff --git a/federated-css-react-ssr/expose-apps/expose-css/config/webpack.server.js b/federated-css-react-ssr/expose-apps/expose-css/config/webpack.server.js index 1638bbc63c8..2c6d8c150e8 100644 --- a/federated-css-react-ssr/expose-apps/expose-css/config/webpack.server.js +++ b/federated-css-react-ssr/expose-apps/expose-css/config/webpack.server.js @@ -11,7 +11,7 @@ module.exports = merge(sharedWebpackConfig, { }, mode: 'development', devtool: false, - target: false, + target: 'async-node', name: 'server', plugins: [...moduleFederationPlugin.server], }); diff --git a/federated-css-react-ssr/expose-apps/expose-css/package.json b/federated-css-react-ssr/expose-apps/expose-css/package.json index 63fe518c807..61d4c754aef 100644 --- a/federated-css-react-ssr/expose-apps/expose-css/package.json +++ b/federated-css-react-ssr/expose-apps/expose-css/package.json @@ -5,7 +5,7 @@ "build": "pnpm build:client && pnpm build:server", "build:client": "webpack --mode development --config config/webpack.client.js", "build:server": "webpack --mode development --config config/webpack.server.js", - "serve": "npx serve dist/ -p 3001", + "serve": "pnpm dlx serve dist -l 3001", "start": "pnpm build && pnpm serve" }, "license": "MIT", @@ -24,11 +24,12 @@ "webpack": "5.101.0", "webpack-cli": "5.1.4", "webpack-dev-server": "5.0.4", - "webpack-merge": "6.0.1" + "webpack-merge": "6.0.1", + "@module-federation/enhanced": "0.17.1" }, "dependencies": { "@babel/runtime": "^7.13.10", "react": "^18.1.0", "react-dom": "^18.1.0" } -} \ No newline at end of file +} diff --git a/federated-css-react-ssr/expose-apps/expose-jss/config/module-federation.js b/federated-css-react-ssr/expose-apps/expose-jss/config/module-federation.js index 8c03af2e00e..fda73574fc9 100644 --- a/federated-css-react-ssr/expose-apps/expose-jss/config/module-federation.js +++ b/federated-css-react-ssr/expose-apps/expose-jss/config/module-federation.js @@ -1,6 +1,6 @@ const deps = require('../package.json').dependencies; const { ModuleFederationPlugin } = require('webpack').container; -const { NodeFederationPlugin, StreamingTargetPlugin } = require('@module-federation/node'); +const { UniversalFederationPlugin } = require('@module-federation/node'); module.exports = { client: new ModuleFederationPlugin({ @@ -26,7 +26,9 @@ module.exports = { }, }), server: [ - new NodeFederationPlugin({ + new UniversalFederationPlugin({ + isServer: true, + useRuntimePlugin: true, name: 'expose_jss', filename: 'remoteEntry.js', library: { type: 'commonjs-module' }, @@ -36,23 +38,10 @@ module.exports = { }, shared: { ...deps, - react: { - singleton: true, - requiredVersion: deps.react, - }, - 'react-dom': { - singleton: true, - requiredVersion: deps['react-dom'], - }, - 'react-jss': { - singleton: true, - }, + react: { singleton: true, requiredVersion: deps.react }, + 'react-dom': { singleton: true, requiredVersion: deps['react-dom'] }, + 'react-jss': { singleton: true }, }, }), - new StreamingTargetPlugin({ - name: 'expose_jss', - library: { type: 'commonjs-module' }, - remotes: {}, - }), ], }; diff --git a/federated-css-react-ssr/expose-apps/expose-jss/config/webpack.server.js b/federated-css-react-ssr/expose-apps/expose-jss/config/webpack.server.js index 9aa3d71c6a7..38d46b3aa3b 100644 --- a/federated-css-react-ssr/expose-apps/expose-jss/config/webpack.server.js +++ b/federated-css-react-ssr/expose-apps/expose-jss/config/webpack.server.js @@ -12,7 +12,7 @@ module.exports = merge(sharedWebpackConfig, { optimization: { minimize: false, }, - target: false, + target: 'async-node', name: 'server', plugins: [...moduleFederationPlugin.server], }); diff --git a/federated-css-react-ssr/expose-apps/expose-jss/package.json b/federated-css-react-ssr/expose-apps/expose-jss/package.json index 096065b60b8..37cbcfb07e9 100644 --- a/federated-css-react-ssr/expose-apps/expose-jss/package.json +++ b/federated-css-react-ssr/expose-apps/expose-jss/package.json @@ -5,7 +5,7 @@ "build": "pnpm build:client && pnpm build:server", "build:client": "webpack --mode development --config config/webpack.client.js", "build:server": "webpack --mode development --config config/webpack.server.js", - "serve": "npx serve dist/ -p 3002", + "serve": "pnpm dlx serve dist -l 3002", "start": "pnpm build && pnpm serve" }, "license": "MIT", @@ -23,11 +23,12 @@ "webpack": "5.101.0", "webpack-cli": "5.1.4", "webpack-dev-server": "5.0.4", - "webpack-merge": "6.0.1" + "webpack-merge": "6.0.1", + "@module-federation/enhanced": "0.17.1" }, "dependencies": { "@babel/runtime": "^7.13.10", "react": "^18.1.0", "react-dom": "^18.1.0" } -} \ No newline at end of file +} diff --git a/federated-css-react-ssr/expose-apps/expose-less/config/module-federation.js b/federated-css-react-ssr/expose-apps/expose-less/config/module-federation.js index d40581a1514..8f2a9f00bbe 100644 --- a/federated-css-react-ssr/expose-apps/expose-less/config/module-federation.js +++ b/federated-css-react-ssr/expose-apps/expose-less/config/module-federation.js @@ -1,6 +1,6 @@ const deps = require('../package.json').dependencies; const { ModuleFederationPlugin } = require('webpack').container; -const { NodeFederationPlugin, StreamingTargetPlugin } = require('@module-federation/node'); +const { UniversalFederationPlugin } = require('@module-federation/node'); module.exports = { client: new ModuleFederationPlugin({ @@ -24,7 +24,9 @@ module.exports = { }, }), server: [ - new NodeFederationPlugin({ + new UniversalFederationPlugin({ + isServer: true, + useRuntimePlugin: true, name: 'expose_less', filename: 'remoteEntry.js', library: { type: 'commonjs-module' }, @@ -35,20 +37,9 @@ module.exports = { }, shared: { ...deps, - react: { - singleton: true, - requiredVersion: deps.react, - }, - 'react-dom': { - singleton: true, - requiredVersion: deps['react-dom'], - }, + react: { singleton: true, requiredVersion: deps.react }, + 'react-dom': { singleton: true, requiredVersion: deps['react-dom'] }, }, }), - new StreamingTargetPlugin({ - name: 'expose_less', - library: { type: 'commonjs-module' }, - remotes: {}, - }), ], }; diff --git a/federated-css-react-ssr/expose-apps/expose-less/config/webpack.server.js b/federated-css-react-ssr/expose-apps/expose-less/config/webpack.server.js index 9aa3d71c6a7..38d46b3aa3b 100644 --- a/federated-css-react-ssr/expose-apps/expose-less/config/webpack.server.js +++ b/federated-css-react-ssr/expose-apps/expose-less/config/webpack.server.js @@ -12,7 +12,7 @@ module.exports = merge(sharedWebpackConfig, { optimization: { minimize: false, }, - target: false, + target: 'async-node', name: 'server', plugins: [...moduleFederationPlugin.server], }); diff --git a/federated-css-react-ssr/expose-apps/expose-less/package.json b/federated-css-react-ssr/expose-apps/expose-less/package.json index 8858cf128a2..842845f272e 100644 --- a/federated-css-react-ssr/expose-apps/expose-less/package.json +++ b/federated-css-react-ssr/expose-apps/expose-less/package.json @@ -5,7 +5,7 @@ "build": "pnpm build:client && pnpm build:server", "build:client": "webpack --mode production --config config/webpack.client.js", "build:server": "webpack --mode production --config config/webpack.server.js", - "serve": "npx serve dist/ -p 3007", + "serve": "pnpm dlx serve dist -l 3007", "start": "pnpm build && pnpm serve" }, "license": "MIT", @@ -26,11 +26,12 @@ "webpack": "5.101.0", "webpack-cli": "5.1.4", "webpack-dev-server": "5.0.4", - "webpack-merge": "6.0.1" + "webpack-merge": "6.0.1", + "@module-federation/enhanced": "0.17.1" }, "dependencies": { "@babel/runtime": "^7.13.10", "react": "^18.1.0", "react-dom": "^18.1.0" } -} \ No newline at end of file +} diff --git a/federated-css-react-ssr/expose-apps/expose-scss/config/module-federation.js b/federated-css-react-ssr/expose-apps/expose-scss/config/module-federation.js index 9a757576fdf..7da9ffe1eaf 100644 --- a/federated-css-react-ssr/expose-apps/expose-scss/config/module-federation.js +++ b/federated-css-react-ssr/expose-apps/expose-scss/config/module-federation.js @@ -1,6 +1,6 @@ const deps = require('../package.json').dependencies; const { ModuleFederationPlugin } = require('webpack').container; -const { NodeFederationPlugin, StreamingTargetPlugin } = require('@module-federation/node'); +const { UniversalFederationPlugin } = require('@module-federation/node'); module.exports = { client: new ModuleFederationPlugin({ @@ -24,7 +24,9 @@ module.exports = { }, }), server: [ - new NodeFederationPlugin({ + new UniversalFederationPlugin({ + isServer: true, + useRuntimePlugin: true, name: 'expose_scss', filename: 'remoteEntry.js', library: { type: 'commonjs-module' }, @@ -35,20 +37,9 @@ module.exports = { }, shared: { ...deps, - react: { - singleton: true, - requiredVersion: deps.react, - }, - 'react-dom': { - singleton: true, - requiredVersion: deps['react-dom'], - }, + react: { singleton: true, requiredVersion: deps.react }, + 'react-dom': { singleton: true, requiredVersion: deps['react-dom'] }, }, }), - new StreamingTargetPlugin({ - name: 'expose_scss', - library: { type: 'commonjs-module' }, - remotes: {}, - }), ], }; diff --git a/federated-css-react-ssr/expose-apps/expose-scss/config/webpack.server.js b/federated-css-react-ssr/expose-apps/expose-scss/config/webpack.server.js index 9aa3d71c6a7..38d46b3aa3b 100644 --- a/federated-css-react-ssr/expose-apps/expose-scss/config/webpack.server.js +++ b/federated-css-react-ssr/expose-apps/expose-scss/config/webpack.server.js @@ -12,7 +12,7 @@ module.exports = merge(sharedWebpackConfig, { optimization: { minimize: false, }, - target: false, + target: 'async-node', name: 'server', plugins: [...moduleFederationPlugin.server], }); diff --git a/federated-css-react-ssr/expose-apps/expose-scss/package.json b/federated-css-react-ssr/expose-apps/expose-scss/package.json index c15b698d3dc..d4d3fc62a06 100644 --- a/federated-css-react-ssr/expose-apps/expose-scss/package.json +++ b/federated-css-react-ssr/expose-apps/expose-scss/package.json @@ -5,7 +5,7 @@ "build": "pnpm build:client && pnpm build:server", "build:client": "webpack --mode production --config config/webpack.client.js", "build:server": "webpack --mode production --config config/webpack.server.js", - "serve": "npx serve dist/ -p 3004", + "serve": "pnpm dlx serve dist -l 3004", "start": "pnpm build && pnpm serve" }, "license": "MIT", @@ -25,11 +25,12 @@ "webpack": "5.101.0", "webpack-cli": "5.1.4", "webpack-dev-server": "5.0.4", - "webpack-merge": "6.0.1" + "webpack-merge": "6.0.1", + "@module-federation/enhanced": "0.17.1" }, "dependencies": { "@babel/runtime": "^7.13.10", "react": "^18.1.0", "react-dom": "^18.1.0" } -} \ No newline at end of file +} diff --git a/federated-css-react-ssr/expose-apps/expose-styled-component/config/module-federation.js b/federated-css-react-ssr/expose-apps/expose-styled-component/config/module-federation.js index 8ff8b2df9f1..bed385aa90f 100644 --- a/federated-css-react-ssr/expose-apps/expose-styled-component/config/module-federation.js +++ b/federated-css-react-ssr/expose-apps/expose-styled-component/config/module-federation.js @@ -1,6 +1,6 @@ const deps = require('../package.json').dependencies; const { ModuleFederationPlugin } = require('webpack').container; -const { NodeFederationPlugin, StreamingTargetPlugin } = require('@module-federation/node'); +const { UniversalFederationPlugin } = require('@module-federation/node'); module.exports = { client: new ModuleFederationPlugin({ @@ -26,7 +26,9 @@ module.exports = { }, }), server: [ - new NodeFederationPlugin({ + new UniversalFederationPlugin({ + isServer: true, + useRuntimePlugin: true, name: 'expose_styled_component', filename: 'remoteEntry.js', library: { type: 'commonjs-module' }, @@ -36,23 +38,10 @@ module.exports = { }, shared: { ...deps, - react: { - singleton: true, - requiredVersion: deps.react, - }, - 'react-dom': { - singleton: true, - requiredVersion: deps['react-dom'], - }, - 'styled-components': { - singleton: true, - }, + react: { singleton: true, requiredVersion: deps.react }, + 'react-dom': { singleton: true, requiredVersion: deps['react-dom'] }, + 'styled-components': { singleton: true }, }, }), - new StreamingTargetPlugin({ - name: 'expose_styled_component', - library: { type: 'commonjs-module' }, - remotes: {}, - }), ], }; diff --git a/federated-css-react-ssr/expose-apps/expose-styled-component/config/webpack.server.js b/federated-css-react-ssr/expose-apps/expose-styled-component/config/webpack.server.js index 9aa3d71c6a7..38d46b3aa3b 100644 --- a/federated-css-react-ssr/expose-apps/expose-styled-component/config/webpack.server.js +++ b/federated-css-react-ssr/expose-apps/expose-styled-component/config/webpack.server.js @@ -12,7 +12,7 @@ module.exports = merge(sharedWebpackConfig, { optimization: { minimize: false, }, - target: false, + target: 'async-node', name: 'server', plugins: [...moduleFederationPlugin.server], }); diff --git a/federated-css-react-ssr/expose-apps/expose-styled-component/package.json b/federated-css-react-ssr/expose-apps/expose-styled-component/package.json index 281e966df7d..583d7796c70 100644 --- a/federated-css-react-ssr/expose-apps/expose-styled-component/package.json +++ b/federated-css-react-ssr/expose-apps/expose-styled-component/package.json @@ -5,7 +5,7 @@ "build": "pnpm build:client && pnpm build:server", "build:client": "webpack --mode production --config config/webpack.client.js", "build:server": "webpack --mode production --config config/webpack.server.js", - "serve": "npx serve dist/ -p 3005", + "serve": "pnpm dlx serve dist -l 3005", "start": "pnpm build && pnpm serve" }, "license": "MIT", @@ -25,11 +25,12 @@ "webpack": "5.101.0", "webpack-cli": "5.1.4", "webpack-dev-server": "5.0.4", - "webpack-merge": "6.0.1" + "webpack-merge": "6.0.1", + "@module-federation/enhanced": "0.17.1" }, "dependencies": { "@babel/runtime": "^7.13.10", "react": "^18.1.0", "react-dom": "^18.1.0" } -} \ No newline at end of file +} diff --git a/federated-css-react-ssr/expose-apps/expose-tailwind-css/config/module-federation.js b/federated-css-react-ssr/expose-apps/expose-tailwind-css/config/module-federation.js index 21bf9879a08..2d246b6991e 100644 --- a/federated-css-react-ssr/expose-apps/expose-tailwind-css/config/module-federation.js +++ b/federated-css-react-ssr/expose-apps/expose-tailwind-css/config/module-federation.js @@ -1,6 +1,6 @@ const deps = require('../package.json').dependencies; const { ModuleFederationPlugin } = require('webpack').container; -const { NodeFederationPlugin, StreamingTargetPlugin } = require('@module-federation/node'); +const { UniversalFederationPlugin } = require('@module-federation/node'); module.exports = { client: new ModuleFederationPlugin({ @@ -27,7 +27,9 @@ module.exports = { }, }), server: [ - new NodeFederationPlugin({ + new UniversalFederationPlugin({ + isServer: true, + useRuntimePlugin: true, name: 'expose_tailwind_css', filename: 'remoteEntry.js', library: { type: 'commonjs-module' }, @@ -38,23 +40,10 @@ module.exports = { }, shared: { ...deps, - react: { - singleton: true, - requiredVersion: deps.react, - }, - 'react-dom': { - singleton: true, - requiredVersion: deps['react-dom'], - }, - 'isomorphic-style-loader': { - singleton: true, - }, + react: { singleton: true, requiredVersion: deps.react }, + 'react-dom': { singleton: true, requiredVersion: deps['react-dom'] }, + 'isomorphic-style-loader': { singleton: true }, }, }), - new StreamingTargetPlugin({ - name: 'expose_tailwind_css', - library: { type: 'commonjs-module' }, - remotes: {}, - }), ], }; diff --git a/federated-css-react-ssr/expose-apps/expose-tailwind-css/package.json b/federated-css-react-ssr/expose-apps/expose-tailwind-css/package.json index 7fac902406b..76684bb8673 100644 --- a/federated-css-react-ssr/expose-apps/expose-tailwind-css/package.json +++ b/federated-css-react-ssr/expose-apps/expose-tailwind-css/package.json @@ -5,7 +5,7 @@ "build": "pnpm build:client && pnpm build:server", "build:client": "webpack --mode production --config config/webpack.client.js", "build:server": "webpack --mode production --config config/webpack.server.js", - "serve": "npx serve dist/ -p 3003", + "serve": "pnpm dlx serve dist -l 3003", "start": "pnpm build && pnpm serve" }, "license": "MIT", @@ -34,4 +34,4 @@ "react": "^18.1.0", "react-dom": "^18.1.0" } -} \ No newline at end of file +} diff --git a/federated-css-react-ssr/package.json b/federated-css-react-ssr/package.json index 062c8f724ca..f89a99c5442 100644 --- a/federated-css-react-ssr/package.json +++ b/federated-css-react-ssr/package.json @@ -6,6 +6,16 @@ "private": true, "scripts": { "build": "pnpm --parallel --filter federated-css-react-ssr_* build", - "start": "pnpm --parallel --filter federated-css-react-ssr_* start" + "start": "pnpm --parallel --filter federated-css-react-ssr_* start", + "e2e": "pnpm exec playwright install --with-deps && playwright test", + "e2e:ci": "pnpm exec playwright install --with-deps && node scripts/kill-all-ports.cjs && playwright test --reporter=list", + "legacy:e2e:ci": "pnpm exec playwright install --with-deps && node scripts/kill-all-ports.cjs && playwright test --reporter=list", + "e2e:headed": "playwright test --headed" + }, + "devDependencies": { + "@playwright/test": "^1.54.2", + "kill-port": "2.0.1", + "react-jss": "10.10.0", + "wait-on": "7.2.0" } } diff --git a/federated-css-react-ssr/playwright.config.ts b/federated-css-react-ssr/playwright.config.ts new file mode 100644 index 00000000000..ad3ffeadaa2 --- /dev/null +++ b/federated-css-react-ssr/playwright.config.ts @@ -0,0 +1,52 @@ +import { defineConfig, devices } from '@playwright/test'; + +// Always reuse existing servers to avoid repeated start/stop cycles during runs +const reuseExisting = true; + +export default defineConfig({ + testDir: './e2e', + timeout: 180_000, + expect: { + timeout: 15_000, + }, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 1 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1280, height: 720 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + globalTeardown: './e2e/global-teardown.ts', + webServer: [ + { + command: 'node scripts/start-exposes.cjs', + cwd: __dirname, + // Wait for the last expose to be up to avoid racing shells against early ports + port: 3007, + reuseExistingServer: reuseExisting, + timeout: 900_000, + }, + { + // Start all shells and wait until all ports 4000-4005 respond + command: 'node scripts/start-shells.cjs', + cwd: __dirname, + port: 4005, + reuseExistingServer: reuseExisting, + timeout: 900_000, + }, + ], +}); diff --git a/federated-css-react-ssr/scripts/kill-all-ports.cjs b/federated-css-react-ssr/scripts/kill-all-ports.cjs new file mode 100644 index 00000000000..7958371d452 --- /dev/null +++ b/federated-css-react-ssr/scripts/kill-all-ports.cjs @@ -0,0 +1,18 @@ +const { execSync } = require('node:child_process'); + +function killPorts(ports) { + const unique = [...new Set(ports)]; + for (const port of unique) { + try { execSync(`lsof -ti:${port} | xargs kill -9`, { stdio: 'ignore' }); } catch {} + try { execSync(`fuser -k ${port}/tcp`, { stdio: 'ignore' }); } catch {} + } +} + +(async () => { + const exposePorts = [3001,3002,3003,3004,3005,3006,3007]; + const shellPorts = [4000,4001,4002,4003,4004,4005]; + const all = [...exposePorts, ...shellPorts]; + console.log('[kill-ports:ssr] killing', all.join(', ')); + killPorts(all); +})(); + diff --git a/federated-css-react-ssr/scripts/start-exposes.cjs b/federated-css-react-ssr/scripts/start-exposes.cjs new file mode 100644 index 00000000000..7c3d1d9d37d --- /dev/null +++ b/federated-css-react-ssr/scripts/start-exposes.cjs @@ -0,0 +1,121 @@ +const { spawn } = require('node:child_process'); +const path = require('node:path'); +const waitOn = require('wait-on'); +const kill = require('kill-port'); +const { execSync } = require('node:child_process'); + +const root = path.resolve(__dirname, '..'); + +function run(cmd, args, opts = {}) { + return spawn(cmd, args, { stdio: 'inherit', cwd: root, shell: true, ...opts }); +} + +async function killPort(port) { + try { + await kill(port, 'tcp'); + } catch (e) { + // Port might not be in use, ignore + } +} + +const delay = ms => new Promise(r => setTimeout(r, ms)); +function isPortInUse(port) { + try { + const out = execSync(`lsof -nPiTCP -sTCP:LISTEN | grep :${port}\\>`, { stdio: ['ignore', 'pipe', 'ignore'] }).toString(); + return out.trim().length > 0; + } catch { + return false; + } +} +function forceKillPort(port) { + try { execSync(`lsof -ti:${port} | xargs kill -9`, { stdio: 'ignore' }); } catch {} + try { execSync(`fuser -k ${port}/tcp`, { stdio: 'ignore' }); } catch {} +} +async function ensurePortFree(port, timeoutMs = 15000) { + const start = Date.now(); + while (Date.now() - start < timeoutMs) { + if (!isPortInUse(port)) return; + forceKillPort(port); + try { + const diag = execSync(`ss -ltnp | grep :${port} || true`, { stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim(); + if (diag) console.log(`[exposes] port ${port} still in use -> ${diag}`); + } catch {} + await delay(500); + } +} + +async function exec(cmd, args, opts = {}) { + return new Promise((resolve, reject) => { + const p = run(cmd, args, opts); + p.on('exit', code => (code === 0 ? resolve() : reject(new Error(`${cmd} ${args.join(' ')} failed (${code})`)))); + }); +} + +async function main() { + // Build and serve each expose sequentially, waiting for both server/client remoteEntry.js + const exposes = [ + { dir: 'expose-css', port: 3001 }, + { dir: 'expose-jss', port: 3002 }, + { dir: 'expose-tailwind-css', port: 3003 }, + { dir: 'expose-scss', port: 3004 }, + { dir: 'expose-styled-component', port: 3005 }, + { dir: 'expose-css-module', port: 3006 }, + { dir: 'expose-less', port: 3007 }, + ]; + + // Clean up all ports first with more aggressive approach + console.log('[exposes] cleaning up ports...'); + for (const { port } of exposes) { + await killPort(port); + // Additional cleanup attempt + try { + await killPort(port); + } catch (e) { + // Ignore + } + } + await new Promise(resolve => setTimeout(resolve, 3000)); + + const procs = []; + for (const { dir, port } of exposes) { + const cwd = path.join('expose-apps', dir); + console.log(`[exposes] building ${dir}...`); + await exec('pnpm', ['-C', cwd, 'run', 'build']); + // Sanity check: ensure remote entries exist + const fs = require('node:fs'); + const serverRemote = path.join(cwd, 'dist', 'server', 'remoteEntry.js'); + const clientRemote = path.join(cwd, 'dist', 'client', 'remoteEntry.js'); + if (!fs.existsSync(serverRemote)) { + console.warn(`[exposes] WARN: missing ${serverRemote}`); + } + if (!fs.existsSync(clientRemote)) { + console.warn(`[exposes] WARN: missing ${clientRemote}`); + } + console.log(`[exposes] ensuring port ${port} is free for ${dir}...`); + await ensurePortFree(port, 20000); + console.log(`[exposes] serving ${dir} on ${port}...`); + const p = run('pnpm', ['-C', cwd, 'run', 'serve']); + procs.push(p); + await waitOn({ + resources: [ + `http://localhost:${port}/server/remoteEntry.js`, + `http://localhost:${port}/client/remoteEntry.js`, + ], + timeout: 480000, + validateStatus: s => s >= 200 && s < 400, + }); + console.log(`[exposes] ${dir} ready on ${port}.`); + } + + const killAll = sig => procs.forEach(pr => pr.kill(sig)); + process.on('SIGINT', () => killAll('SIGINT')); + process.on('SIGTERM', () => killAll('SIGTERM')); + + // keep process alive + await new Promise(() => {}); +} + +main().catch(err => { + console.error(err); + process.exit(1); +}); diff --git a/federated-css-react-ssr/scripts/start-shells.cjs b/federated-css-react-ssr/scripts/start-shells.cjs new file mode 100644 index 00000000000..bee95755e4c --- /dev/null +++ b/federated-css-react-ssr/scripts/start-shells.cjs @@ -0,0 +1,109 @@ +const { spawn } = require('node:child_process'); +const path = require('node:path'); +const waitOn = require('wait-on'); +const kill = require('kill-port'); +const { execSync } = require('node:child_process'); + +const root = path.resolve(__dirname, '..'); + +function run(cmd, args, opts = {}) { + return spawn(cmd, args, { stdio: 'inherit', cwd: root, shell: true, ...opts }); +} + +async function killPort(port) { + try { + await kill(port, 'tcp'); + } catch (e) { + // Port might not be in use, ignore + } +} + +const delay = ms => new Promise(r => setTimeout(r, ms)); +function isPortInUse(port) { + try { + const out = execSync(`lsof -nPiTCP -sTCP:LISTEN | grep :${port}\\>`, { stdio: ['ignore', 'pipe', 'ignore'] }).toString(); + return out.trim().length > 0; + } catch { + return false; + } +} +function forceKillPort(port) { + try { execSync(`lsof -ti:${port} | xargs kill -9`, { stdio: 'ignore' }); } catch {} + try { execSync(`fuser -k ${port}/tcp`, { stdio: 'ignore' }); } catch {} +} +async function ensurePortFree(port, timeoutMs = 15000) { + const start = Date.now(); + while (Date.now() - start < timeoutMs) { + if (!isPortInUse(port)) return; + forceKillPort(port); + try { + const diag = execSync(`ss -ltnp | grep :${port} || true`, { stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim(); + if (diag) console.log(`[shells] port ${port} still in use -> ${diag}`); + } catch {} + await delay(500); + } +} + +async function exec(cmd, args, opts = {}) { + return new Promise((resolve, reject) => { + const p = run(cmd, args, opts); + p.on('exit', code => (code === 0 ? resolve() : reject(new Error(`${cmd} ${args.join(' ')} failed with code ${code}`)))); + }); +} + +async function main() { + // Build and start each shell sequentially to reduce CI CPU pressure. + const shells = [ + { dir: 'css-jss', port: 4000 }, + { dir: 'css-scss', port: 4001 }, + { dir: 'jss-styled-components', port: 4002 }, + { dir: 'jss-styled-components-css-module', port: 4003 }, + { dir: 'less-scss', port: 4004 }, + { dir: 'scss-tailwind-css', port: 4005 }, + ]; + + // Clean up all ports first with more aggressive approach + console.log('[shells] cleaning up ports...'); + for (const { port } of shells) { + await killPort(port); + // Additional cleanup attempt + try { + await killPort(port); + } catch (e) { + // Ignore + } + } + await new Promise(resolve => setTimeout(resolve, 3000)); + + const procs = []; + for (const { dir, port } of shells) { + const cwd = path.join('shell-apps', dir); + console.log(`[shells] building ${dir}...`); + await exec('pnpm', ['-C', cwd, 'run', 'build']); + + console.log(`[shells] ensuring port ${port} is free for ${dir}...`); + await ensurePortFree(port, 20000); + console.log(`[shells] starting ${dir} on port ${port}...`); + const p = run('pnpm', ['-C', cwd, 'run', 'serve']); + procs.push(p); + + await waitOn({ + resources: [`http://localhost:${port}`], + timeout: 480000, + validateStatus: s => s >= 200 && s < 400, + }); + console.log(`[shells] ${dir} is up on ${port}.`); + } + + const killAll = sig => procs.forEach(pr => pr.kill(sig)); + process.on('SIGINT', () => killAll('SIGINT')); + process.on('SIGTERM', () => killAll('SIGTERM')); + + // keep process alive + await new Promise(() => {}); +} + +main().catch(err => { + console.error(err); + process.exit(1); +}); diff --git a/federated-css-react-ssr/server-utils/loopback.js b/federated-css-react-ssr/server-utils/loopback.js new file mode 100644 index 00000000000..db1768e9da6 --- /dev/null +++ b/federated-css-react-ssr/server-utils/loopback.js @@ -0,0 +1,22 @@ +'use strict'; + +const LOOPBACK_HOSTS = new Set(['localhost', '127.0.0.1', '::1']); + +function sanitizeLoopbackHttpUrl(rawUrl) { + const url = new URL(rawUrl); + if (url.protocol !== 'http:') { + throw new Error(`Only http:// loopback URLs are supported for prewarm. Received: ${rawUrl}`); + } + if (!LOOPBACK_HOSTS.has(url.hostname)) { + throw new Error(`Refusing to access non-loopback host "${url.hostname}" for URL: ${rawUrl}`); + } + if (!url.port) { + url.port = '80'; + } + return url; +} + +module.exports = { + sanitizeLoopbackHttpUrl, + LOOPBACK_HOSTS, +}; diff --git a/federated-css-react-ssr/shell-apps/css-jss/config/module-federation.js b/federated-css-react-ssr/shell-apps/css-jss/config/module-federation.js index 68cfc542971..bf06fef78e1 100644 --- a/federated-css-react-ssr/shell-apps/css-jss/config/module-federation.js +++ b/federated-css-react-ssr/shell-apps/css-jss/config/module-federation.js @@ -1,6 +1,6 @@ const deps = require('../package.json').dependencies; const { ModuleFederationPlugin } = require('webpack').container; -const { NodeFederationPlugin, StreamingTargetPlugin } = require('@module-federation/node'); +const { UniversalFederationPlugin } = require('@module-federation/node'); module.exports = { client: new ModuleFederationPlugin({ @@ -28,7 +28,9 @@ module.exports = { ], }), server: [ - new NodeFederationPlugin({ + new UniversalFederationPlugin({ + isServer: true, + useRuntimePlugin: true, name: 'shell', library: { type: 'commonjs-module' }, filename: 'remoteEntry.js', @@ -36,39 +38,12 @@ module.exports = { expose_css: 'expose_css@http://localhost:3001/server/remoteEntry.js', expose_jss: 'expose_jss@http://localhost:3002/server/remoteEntry.js', }, - shared: [ - { - react: deps.react, - 'react-dom': deps['react-dom'], - 'styled-components': { - singleton: true, - }, - 'react-jss': { - singleton: true, - }, - 'isomorphic-style-loader': { - singleton: true, - }, - }, - ], - }), - new StreamingTargetPlugin({ - name: 'shell', - library: { type: 'commonjs-module' }, - remotes: { - expose_css: 'expose_css@http://localhost:3001/server/remoteEntry.js', - expose_jss: 'expose_jss@http://localhost:3002/server/remoteEntry.js', - }, shared: { - 'styled-components': { - singleton: true, - }, - 'react-jss': { - singleton: true, - }, - 'isomorphic-style-loader': { - singleton: true, - }, + react: { singleton: true, requiredVersion: deps.react }, + 'react-dom': { singleton: true, requiredVersion: deps['react-dom'] }, + 'styled-components': { singleton: true }, + 'react-jss': { singleton: true }, + 'isomorphic-style-loader': { singleton: true }, }, }), ], diff --git a/federated-css-react-ssr/shell-apps/css-jss/config/webpack.server.js b/federated-css-react-ssr/shell-apps/css-jss/config/webpack.server.js index 74d684d6c3e..cc041374c6e 100644 --- a/federated-css-react-ssr/shell-apps/css-jss/config/webpack.server.js +++ b/federated-css-react-ssr/shell-apps/css-jss/config/webpack.server.js @@ -5,7 +5,7 @@ const moduleFederationPlugin = require('./module-federation'); module.exports = merge(shared, { name: 'server', - target: false, + target: 'async-node', optimization: { minimize: false, }, diff --git a/federated-css-react-ssr/shell-apps/css-jss/package.json b/federated-css-react-ssr/shell-apps/css-jss/package.json index fe06b75984f..e1b8c956db4 100644 --- a/federated-css-react-ssr/shell-apps/css-jss/package.json +++ b/federated-css-react-ssr/shell-apps/css-jss/package.json @@ -43,6 +43,7 @@ "styled-components": "5.3.11", "webpack": "5.101.0", "webpack-cli": "5.1.4", - "webpack-merge": "6.0.1" + "webpack-merge": "6.0.1", + "@module-federation/enhanced": "0.17.1" } -} \ No newline at end of file +} diff --git a/federated-css-react-ssr/shell-apps/css-jss/server/index.js b/federated-css-react-ssr/shell-apps/css-jss/server/index.js index 2b65c498694..49fccf6133b 100644 --- a/federated-css-react-ssr/shell-apps/css-jss/server/index.js +++ b/federated-css-react-ssr/shell-apps/css-jss/server/index.js @@ -1,10 +1,42 @@ const express = require('express'); const initMiddleware = require('./middleware'); +const fetch = require('node-fetch'); +const { sanitizeLoopbackHttpUrl } = require('../../../server-utils/loopback'); const app = express(); const PORT = 4000; -const done = () => { +async function waitUrl(url, timeout = 300000) { + const target = sanitizeLoopbackHttpUrl(url); + const start = Date.now(); + // Retry until the remoteEntry.js is available over HTTP + /* eslint-disable no-await-in-loop */ + while (true) { + try { + const res = await fetch(target.href); + if (res.ok) return; + } catch (_) {} + + if (Date.now() - start > timeout) { + // extra diagnostics in CI: try to print which ports are listening + try { + const { execSync } = require('node:child_process'); + const ss = execSync(`ss -ltnp | grep :${target.port} || true`, { stdio: ['ignore','pipe','ignore'] }).toString().trim(); + if (ss) console.log(`[prewarm] port diag ${target.port}: ${ss}`); + } catch (e) {} + throw new Error(`prewarm timeout for ${target.href}`); + } + await new Promise(r => setTimeout(r, 5000)); + } +} + +const done = async () => { + // Ensure remotes are reachable before the first SSR render + await Promise.all([ + waitUrl('http://localhost:3001/server/remoteEntry.js'), + waitUrl('http://localhost:3002/server/remoteEntry.js'), + ]); + app.listen(PORT, () => { console.info( `[${new Date().toISOString()}]`, diff --git a/federated-css-react-ssr/shell-apps/css-jss/src/StyleProviders.js b/federated-css-react-ssr/shell-apps/css-jss/src/StyleProviders.js index 2687e687bdc..1b6aec74a2b 100644 --- a/federated-css-react-ssr/shell-apps/css-jss/src/StyleProviders.js +++ b/federated-css-react-ssr/shell-apps/css-jss/src/StyleProviders.js @@ -1,3 +1,15 @@ -import LoaderContext1 from 'expose_css/LoaderContext'; +// Avoid requiring remote LoaderContext during SSR startup. +// On the server, provide a passthrough provider; on the client, use remote providers. +let providers; +if (typeof window !== 'undefined') { + // eslint-disable-next-line global-require + const LoaderContext1 = require('expose_css/LoaderContext'); + providers = [LoaderContext1.StyleContext.Provider]; +} else { + // eslint-disable-next-line global-require + const React = require('react'); + const Passthrough = ({ children }) => React.createElement(React.Fragment, null, children); + providers = [Passthrough]; +} -export default [LoaderContext1.StyleContext.Provider]; +export default providers; diff --git a/federated-css-react-ssr/shell-apps/css-scss/config/module-federation.js b/federated-css-react-ssr/shell-apps/css-scss/config/module-federation.js index b95926c755e..b5d0cfe18cd 100644 --- a/federated-css-react-ssr/shell-apps/css-scss/config/module-federation.js +++ b/federated-css-react-ssr/shell-apps/css-scss/config/module-federation.js @@ -1,6 +1,6 @@ const deps = require('../package.json').dependencies; const { ModuleFederationPlugin } = require('webpack').container; -const { NodeFederationPlugin, StreamingTargetPlugin } = require('@module-federation/node'); +const { UniversalFederationPlugin } = require('@module-federation/node'); module.exports = { client: new ModuleFederationPlugin({ @@ -25,7 +25,9 @@ module.exports = { ], }), server: [ - new NodeFederationPlugin({ + new UniversalFederationPlugin({ + isServer: true, + useRuntimePlugin: true, name: 'shell', library: { type: 'commonjs-module' }, filename: 'remoteEntry.js', @@ -33,33 +35,11 @@ module.exports = { expose_css: 'expose_css@http://localhost:3001/server/remoteEntry.js', expose_scss: 'expose_scss@http://localhost:3004/server/remoteEntry.js', }, - shared: [ - { - react: deps.react, - 'react-dom': deps['react-dom'], - 'styled-components': { - singleton: true, - }, - 'react-jss': { - singleton: true, - }, - }, - ], - }), - new StreamingTargetPlugin({ - name: 'shell', - library: { type: 'commonjs-module' }, - remotes: { - expose_css: 'expose_css@http://localhost:3001/server/remoteEntry.js', - expose_scss: 'expose_scss@http://localhost:3004/server/remoteEntry.js', - }, shared: { - 'styled-components': { - singleton: true, - }, - 'react-jss': { - singleton: true, - }, + react: { singleton: true, requiredVersion: deps.react }, + 'react-dom': { singleton: true, requiredVersion: deps['react-dom'] }, + 'styled-components': { singleton: true }, + 'react-jss': { singleton: true }, }, }), ], diff --git a/federated-css-react-ssr/shell-apps/css-scss/config/webpack.server.js b/federated-css-react-ssr/shell-apps/css-scss/config/webpack.server.js index 08f8cbec0a6..078e65b4eb3 100644 --- a/federated-css-react-ssr/shell-apps/css-scss/config/webpack.server.js +++ b/federated-css-react-ssr/shell-apps/css-scss/config/webpack.server.js @@ -5,7 +5,7 @@ const moduleFederationPlugin = require('./module-federation'); module.exports = merge(shared, { name: 'server', - target: false, + target: 'async-node', optimization: { minimize: false, }, diff --git a/federated-css-react-ssr/shell-apps/css-scss/package.json b/federated-css-react-ssr/shell-apps/css-scss/package.json index 326a44e2598..603a92abd8a 100644 --- a/federated-css-react-ssr/shell-apps/css-scss/package.json +++ b/federated-css-react-ssr/shell-apps/css-scss/package.json @@ -43,6 +43,7 @@ "styled-components": "5.3.11", "webpack": "5.101.0", "webpack-cli": "5.1.4", - "webpack-merge": "6.0.1" + "webpack-merge": "6.0.1", + "@module-federation/enhanced": "0.17.1" } -} \ No newline at end of file +} diff --git a/federated-css-react-ssr/shell-apps/css-scss/server/index.js b/federated-css-react-ssr/shell-apps/css-scss/server/index.js index 90a714ca6e0..45760f01fa7 100644 --- a/federated-css-react-ssr/shell-apps/css-scss/server/index.js +++ b/federated-css-react-ssr/shell-apps/css-scss/server/index.js @@ -1,10 +1,36 @@ const express = require('express'); const initMiddleware = require('./middleware'); +const fetch = require('node-fetch'); +const { sanitizeLoopbackHttpUrl } = require('../../../server-utils/loopback'); const app = express(); const PORT = 4001; -const done = () => { +async function waitUrl(url, timeout = 300000) { + const target = sanitizeLoopbackHttpUrl(url); + const start = Date.now(); + while (true) { + try { + const res = await fetch(target.href); + if (res.ok) return; + } catch (_) {} + if (Date.now() - start > timeout) { + try { + const { execSync } = require('node:child_process'); + const ss = execSync(`ss -ltnp | grep :${target.port} || true`, { stdio: ['ignore','pipe','ignore'] }).toString().trim(); + if (ss) console.log(`[prewarm] port diag ${target.port}: ${ss}`); + } catch {} + throw new Error(`prewarm timeout for ${target.href}`); + } + await new Promise(r => setTimeout(r, 5000)); + } +} + +const done = async () => { + await Promise.all([ + waitUrl('http://localhost:3001/server/remoteEntry.js'), + waitUrl('http://localhost:3004/server/remoteEntry.js'), + ]); app.listen(PORT, () => { console.info( `[${new Date().toISOString()}]`, diff --git a/federated-css-react-ssr/shell-apps/css-scss/src/StyleProviders.js b/federated-css-react-ssr/shell-apps/css-scss/src/StyleProviders.js index 71caeaf9251..873fb4a3e99 100644 --- a/federated-css-react-ssr/shell-apps/css-scss/src/StyleProviders.js +++ b/federated-css-react-ssr/shell-apps/css-scss/src/StyleProviders.js @@ -1,4 +1,15 @@ -import LoaderContext1 from 'expose_css/LoaderContext'; -import LoaderContext2 from 'expose_scss/LoaderContext'; +let providers; +if (typeof window !== 'undefined') { + // eslint-disable-next-line global-require + const LoaderContext1 = require('expose_css/LoaderContext'); + // eslint-disable-next-line global-require + const LoaderContext2 = require('expose_scss/LoaderContext'); + providers = [LoaderContext1.StyleContext.Provider, LoaderContext2.StyleContext.Provider]; +} else { + // eslint-disable-next-line global-require + const React = require('react'); + const Passthrough = ({ children }) => React.createElement(React.Fragment, null, children); + providers = [Passthrough]; +} -export default [LoaderContext1.StyleContext.Provider, LoaderContext2.StyleContext.Provider]; +export default providers; diff --git a/federated-css-react-ssr/shell-apps/jss-styled-components-css-module/config/module-federation.js b/federated-css-react-ssr/shell-apps/jss-styled-components-css-module/config/module-federation.js index 82bb7cce249..0b9feaca2eb 100644 --- a/federated-css-react-ssr/shell-apps/jss-styled-components-css-module/config/module-federation.js +++ b/federated-css-react-ssr/shell-apps/jss-styled-components-css-module/config/module-federation.js @@ -1,6 +1,6 @@ const deps = require('../package.json').dependencies; const { ModuleFederationPlugin } = require('webpack').container; -const { NodeFederationPlugin, StreamingTargetPlugin } = require('@module-federation/node'); +const { UniversalFederationPlugin } = require('@module-federation/node'); module.exports = { client: new ModuleFederationPlugin({ @@ -30,7 +30,9 @@ module.exports = { ], }), server: [ - new NodeFederationPlugin({ + new UniversalFederationPlugin({ + isServer: true, + useRuntimePlugin: true, name: 'shell', library: { type: 'commonjs-module' }, filename: 'remoteEntry.js', @@ -40,41 +42,12 @@ module.exports = { expose_jss: 'expose_jss@http://localhost:3002/server/remoteEntry.js', expose_css_module: 'expose_css_module@http://localhost:3006/server/remoteEntry.js', }, - shared: [ - { - react: deps.react, - 'react-dom': deps['react-dom'], - 'styled-components': { - singleton: true, - }, - 'react-jss': { - singleton: true, - }, - 'isomorphic-style-loader': { - singleton: true, - }, - }, - ], - }), - new StreamingTargetPlugin({ - name: 'shell', - library: { type: 'commonjs-module' }, - remotes: { - expose_styled_component: - 'expose_styled_component@http://localhost:3005/server/remoteEntry.js', - expose_jss: 'expose_jss@http://localhost:3002/server/remoteEntry.js', - expose_css_module: 'expose_css_module@http://localhost:3006/server/remoteEntry.js', - }, shared: { - 'styled-components': { - singleton: true, - }, - 'react-jss': { - singleton: true, - }, - 'isomorphic-style-loader': { - singleton: true, - }, + react: { singleton: true, requiredVersion: deps.react }, + 'react-dom': { singleton: true, requiredVersion: deps['react-dom'] }, + 'styled-components': { singleton: true }, + 'react-jss': { singleton: true }, + 'isomorphic-style-loader': { singleton: true }, }, }), ], diff --git a/federated-css-react-ssr/shell-apps/jss-styled-components-css-module/config/webpack.server.js b/federated-css-react-ssr/shell-apps/jss-styled-components-css-module/config/webpack.server.js index 08f8cbec0a6..078e65b4eb3 100644 --- a/federated-css-react-ssr/shell-apps/jss-styled-components-css-module/config/webpack.server.js +++ b/federated-css-react-ssr/shell-apps/jss-styled-components-css-module/config/webpack.server.js @@ -5,7 +5,7 @@ const moduleFederationPlugin = require('./module-federation'); module.exports = merge(shared, { name: 'server', - target: false, + target: 'async-node', optimization: { minimize: false, }, diff --git a/federated-css-react-ssr/shell-apps/jss-styled-components-css-module/package.json b/federated-css-react-ssr/shell-apps/jss-styled-components-css-module/package.json index 9a7b1b57eef..767ed6e06f5 100644 --- a/federated-css-react-ssr/shell-apps/jss-styled-components-css-module/package.json +++ b/federated-css-react-ssr/shell-apps/jss-styled-components-css-module/package.json @@ -43,6 +43,7 @@ "styled-components": "5.3.11", "webpack": "5.101.0", "webpack-cli": "5.1.4", - "webpack-merge": "6.0.1" + "webpack-merge": "6.0.1", + "@module-federation/enhanced": "0.17.1" } -} \ No newline at end of file +} diff --git a/federated-css-react-ssr/shell-apps/jss-styled-components-css-module/server/index.js b/federated-css-react-ssr/shell-apps/jss-styled-components-css-module/server/index.js index 720c9259575..73291024722 100644 --- a/federated-css-react-ssr/shell-apps/jss-styled-components-css-module/server/index.js +++ b/federated-css-react-ssr/shell-apps/jss-styled-components-css-module/server/index.js @@ -1,10 +1,37 @@ const express = require('express'); const initMiddleware = require('./middleware'); +const fetch = require('node-fetch'); +const { sanitizeLoopbackHttpUrl } = require('../../../server-utils/loopback'); const app = express(); const PORT = 4003; -const done = () => { +async function waitUrl(url, timeout = 300000) { + const target = sanitizeLoopbackHttpUrl(url); + const start = Date.now(); + while (true) { + try { + const res = await fetch(target.href); + if (res.ok) return; + } catch (_) {} + if (Date.now() - start > timeout) { + try { + const { execSync } = require('node:child_process'); + const ss = execSync(`ss -ltnp | grep :${target.port} || true`, { stdio: ['ignore','pipe','ignore'] }).toString().trim(); + if (ss) console.log(`[prewarm] port diag ${target.port}: ${ss}`); + } catch {} + throw new Error(`prewarm timeout for ${target.href}`); + } + await new Promise(r => setTimeout(r, 5000)); + } +} + +const done = async () => { + await Promise.all([ + waitUrl('http://localhost:3005/server/remoteEntry.js'), + waitUrl('http://localhost:3002/server/remoteEntry.js'), + waitUrl('http://localhost:3006/server/remoteEntry.js'), + ]); app.listen(PORT, () => { console.info( `[${new Date().toISOString()}]`, diff --git a/federated-css-react-ssr/shell-apps/jss-styled-components-css-module/src/StyleProviders.js b/federated-css-react-ssr/shell-apps/jss-styled-components-css-module/src/StyleProviders.js index 7400ea9316a..bb028e396fd 100644 --- a/federated-css-react-ssr/shell-apps/jss-styled-components-css-module/src/StyleProviders.js +++ b/federated-css-react-ssr/shell-apps/jss-styled-components-css-module/src/StyleProviders.js @@ -1,3 +1,13 @@ -import LoaderContext1 from 'expose_css_module/LoaderContext'; +let providers; +if (typeof window !== 'undefined') { + // eslint-disable-next-line global-require + const LoaderContext1 = require('expose_css_module/LoaderContext'); + providers = [LoaderContext1.StyleContext.Provider]; +} else { + // eslint-disable-next-line global-require + const React = require('react'); + const Passthrough = ({ children }) => React.createElement(React.Fragment, null, children); + providers = [Passthrough]; +} -export default [LoaderContext1.StyleContext.Provider]; +export default providers; diff --git a/federated-css-react-ssr/shell-apps/jss-styled-components/config/module-federation.js b/federated-css-react-ssr/shell-apps/jss-styled-components/config/module-federation.js index 27e4819dad8..581ca74928b 100644 --- a/federated-css-react-ssr/shell-apps/jss-styled-components/config/module-federation.js +++ b/federated-css-react-ssr/shell-apps/jss-styled-components/config/module-federation.js @@ -1,6 +1,6 @@ const deps = require('../package.json').dependencies; const { ModuleFederationPlugin } = require('webpack').container; -const { NodeFederationPlugin, StreamingTargetPlugin } = require('@module-federation/node'); +const { UniversalFederationPlugin } = require('@module-federation/node'); module.exports = { client: new ModuleFederationPlugin({ @@ -29,7 +29,9 @@ module.exports = { ], }), server: [ - new NodeFederationPlugin({ + new UniversalFederationPlugin({ + isServer: true, + useRuntimePlugin: true, name: 'shell', library: { type: 'commonjs-module' }, filename: 'remoteEntry.js', @@ -38,40 +40,12 @@ module.exports = { 'expose_styled_component@http://localhost:3005/server/remoteEntry.js', expose_jss: 'expose_jss@http://localhost:3002/server/remoteEntry.js', }, - shared: [ - { - react: deps.react, - 'react-dom': deps['react-dom'], - 'styled-components': { - singleton: true, - }, - 'react-jss': { - singleton: true, - }, - 'isomorphic-style-loader': { - singleton: true, - }, - }, - ], - }), - new StreamingTargetPlugin({ - name: 'shell', - library: { type: 'commonjs-module' }, - remotes: { - expose_styled_component: - 'expose_styled_component@http://localhost:3005/server/remoteEntry.js', - expose_jss: 'expose_jss@http://localhost:3002/server/remoteEntry.js', - }, shared: { - 'styled-components': { - singleton: true, - }, - 'react-jss': { - singleton: true, - }, - 'isomorphic-style-loader': { - singleton: true, - }, + react: { singleton: true, requiredVersion: deps.react }, + 'react-dom': { singleton: true, requiredVersion: deps['react-dom'] }, + 'styled-components': { singleton: true }, + 'react-jss': { singleton: true }, + 'isomorphic-style-loader': { singleton: true }, }, }), ], diff --git a/federated-css-react-ssr/shell-apps/jss-styled-components/config/webpack.server.js b/federated-css-react-ssr/shell-apps/jss-styled-components/config/webpack.server.js index 08f8cbec0a6..078e65b4eb3 100644 --- a/federated-css-react-ssr/shell-apps/jss-styled-components/config/webpack.server.js +++ b/federated-css-react-ssr/shell-apps/jss-styled-components/config/webpack.server.js @@ -5,7 +5,7 @@ const moduleFederationPlugin = require('./module-federation'); module.exports = merge(shared, { name: 'server', - target: false, + target: 'async-node', optimization: { minimize: false, }, diff --git a/federated-css-react-ssr/shell-apps/jss-styled-components/package.json b/federated-css-react-ssr/shell-apps/jss-styled-components/package.json index 1a08cdd9fe5..16444684b12 100644 --- a/federated-css-react-ssr/shell-apps/jss-styled-components/package.json +++ b/federated-css-react-ssr/shell-apps/jss-styled-components/package.json @@ -43,6 +43,7 @@ "styled-components": "5.3.11", "webpack": "5.101.0", "webpack-cli": "5.1.4", - "webpack-merge": "6.0.1" + "webpack-merge": "6.0.1", + "@module-federation/enhanced": "0.17.1" } -} \ No newline at end of file +} diff --git a/federated-css-react-ssr/shell-apps/jss-styled-components/server/index.js b/federated-css-react-ssr/shell-apps/jss-styled-components/server/index.js index 6c214d55cf1..51b6341fb46 100644 --- a/federated-css-react-ssr/shell-apps/jss-styled-components/server/index.js +++ b/federated-css-react-ssr/shell-apps/jss-styled-components/server/index.js @@ -1,10 +1,36 @@ const express = require('express'); const initMiddleware = require('./middleware'); +const fetch = require('node-fetch'); +const { sanitizeLoopbackHttpUrl } = require('../../../server-utils/loopback'); const app = express(); const PORT = 4002; -const done = () => { +async function waitUrl(url, timeout = 300000) { + const target = sanitizeLoopbackHttpUrl(url); + const start = Date.now(); + while (true) { + try { + const res = await fetch(target.href); + if (res.ok) return; + } catch (_) {} + if (Date.now() - start > timeout) { + try { + const { execSync } = require('node:child_process'); + const ss = execSync(`ss -ltnp | grep :${target.port} || true`, { stdio: ['ignore','pipe','ignore'] }).toString().trim(); + if (ss) console.log(`[prewarm] port diag ${target.port}: ${ss}`); + } catch {} + throw new Error(`prewarm timeout for ${target.href}`); + } + await new Promise(r => setTimeout(r, 5000)); + } +} + +const done = async () => { + await Promise.all([ + waitUrl('http://localhost:3005/server/remoteEntry.js'), + waitUrl('http://localhost:3002/server/remoteEntry.js'), + ]); app.listen(PORT, () => { console.info( `[${new Date().toISOString()}]`, diff --git a/federated-css-react-ssr/shell-apps/less-scss/config/module-federation.js b/federated-css-react-ssr/shell-apps/less-scss/config/module-federation.js index 092f42f162d..f22a4a78b0e 100644 --- a/federated-css-react-ssr/shell-apps/less-scss/config/module-federation.js +++ b/federated-css-react-ssr/shell-apps/less-scss/config/module-federation.js @@ -1,6 +1,6 @@ const deps = require('../package.json').dependencies; const { ModuleFederationPlugin } = require('webpack').container; -const { NodeFederationPlugin, StreamingTargetPlugin } = require('@module-federation/node'); +const { UniversalFederationPlugin } = require('@module-federation/node'); module.exports = { client: new ModuleFederationPlugin({ @@ -25,7 +25,9 @@ module.exports = { ], }), server: [ - new NodeFederationPlugin({ + new UniversalFederationPlugin({ + isServer: true, + useRuntimePlugin: true, name: 'shell', library: { type: 'commonjs-module' }, filename: 'remoteEntry.js', @@ -33,33 +35,11 @@ module.exports = { expose_less: 'expose_less@http://localhost:3007/server/remoteEntry.js', expose_scss: 'expose_scss@http://localhost:3004/server/remoteEntry.js', }, - shared: [ - { - react: deps.react, - 'react-dom': deps['react-dom'], - 'styled-components': { - singleton: true, - }, - 'react-jss': { - singleton: true, - }, - }, - ], - }), - new StreamingTargetPlugin({ - name: 'shell', - library: { type: 'commonjs-module' }, - remotes: { - expose_less: 'expose_less@http://localhost:3007/server/remoteEntry.js', - expose_scss: 'expose_scss@http://localhost:3004/server/remoteEntry.js', - }, shared: { - 'styled-components': { - singleton: true, - }, - 'react-jss': { - singleton: true, - }, + react: { singleton: true, requiredVersion: deps.react }, + 'react-dom': { singleton: true, requiredVersion: deps['react-dom'] }, + 'styled-components': { singleton: true }, + 'react-jss': { singleton: true }, }, }), ], diff --git a/federated-css-react-ssr/shell-apps/less-scss/config/webpack.server.js b/federated-css-react-ssr/shell-apps/less-scss/config/webpack.server.js index 08f8cbec0a6..078e65b4eb3 100644 --- a/federated-css-react-ssr/shell-apps/less-scss/config/webpack.server.js +++ b/federated-css-react-ssr/shell-apps/less-scss/config/webpack.server.js @@ -5,7 +5,7 @@ const moduleFederationPlugin = require('./module-federation'); module.exports = merge(shared, { name: 'server', - target: false, + target: 'async-node', optimization: { minimize: false, }, diff --git a/federated-css-react-ssr/shell-apps/less-scss/package.json b/federated-css-react-ssr/shell-apps/less-scss/package.json index 399cbe9e011..5999f7fe688 100644 --- a/federated-css-react-ssr/shell-apps/less-scss/package.json +++ b/federated-css-react-ssr/shell-apps/less-scss/package.json @@ -43,6 +43,7 @@ "styled-components": "5.3.11", "webpack": "5.101.0", "webpack-cli": "5.1.4", - "webpack-merge": "6.0.1" + "webpack-merge": "6.0.1", + "@module-federation/enhanced": "0.17.1" } -} \ No newline at end of file +} diff --git a/federated-css-react-ssr/shell-apps/less-scss/server/index.js b/federated-css-react-ssr/shell-apps/less-scss/server/index.js index 959e05c10ae..52745b074c0 100644 --- a/federated-css-react-ssr/shell-apps/less-scss/server/index.js +++ b/federated-css-react-ssr/shell-apps/less-scss/server/index.js @@ -1,10 +1,36 @@ const express = require('express'); const initMiddleware = require('./middleware'); +const fetch = require('node-fetch'); +const { sanitizeLoopbackHttpUrl } = require('../../../server-utils/loopback'); const app = express(); const PORT = 4004; -const done = () => { +async function waitUrl(url, timeout = 300000) { + const target = sanitizeLoopbackHttpUrl(url); + const start = Date.now(); + while (true) { + try { + const res = await fetch(target.href); + if (res.ok) return; + } catch (_) {} + if (Date.now() - start > timeout) { + try { + const { execSync } = require('node:child_process'); + const ss = execSync(`ss -ltnp | grep :${target.port} || true`, { stdio: ['ignore','pipe','ignore'] }).toString().trim(); + if (ss) console.log(`[prewarm] port diag ${target.port}: ${ss}`); + } catch {} + throw new Error(`prewarm timeout for ${target.href}`); + } + await new Promise(r => setTimeout(r, 5000)); + } +} + +const done = async () => { + await Promise.all([ + waitUrl('http://localhost:3007/server/remoteEntry.js'), + waitUrl('http://localhost:3004/server/remoteEntry.js'), + ]); app.listen(PORT, () => { console.info( `[${new Date().toISOString()}]`, diff --git a/federated-css-react-ssr/shell-apps/less-scss/src/StyleProviders.js b/federated-css-react-ssr/shell-apps/less-scss/src/StyleProviders.js index 60df052ec71..5e825a72a60 100644 --- a/federated-css-react-ssr/shell-apps/less-scss/src/StyleProviders.js +++ b/federated-css-react-ssr/shell-apps/less-scss/src/StyleProviders.js @@ -1,4 +1,15 @@ -import LoaderContext1 from 'expose_less/LoaderContext'; -import LoaderContext2 from 'expose_scss/LoaderContext'; +let providers; +if (typeof window !== 'undefined') { + // eslint-disable-next-line global-require + const LoaderContext1 = require('expose_less/LoaderContext'); + // eslint-disable-next-line global-require + const LoaderContext2 = require('expose_scss/LoaderContext'); + providers = [LoaderContext1.StyleContext.Provider, LoaderContext2.StyleContext.Provider]; +} else { + // eslint-disable-next-line global-require + const React = require('react'); + const Passthrough = ({ children }) => React.createElement(React.Fragment, null, children); + providers = [Passthrough]; +} -export default [LoaderContext1.StyleContext.Provider, LoaderContext2.StyleContext.Provider]; +export default providers; diff --git a/federated-css-react-ssr/shell-apps/scss-tailwind-css/config/module-federation.js b/federated-css-react-ssr/shell-apps/scss-tailwind-css/config/module-federation.js index 36e8d4201e4..2152021d35a 100644 --- a/federated-css-react-ssr/shell-apps/scss-tailwind-css/config/module-federation.js +++ b/federated-css-react-ssr/shell-apps/scss-tailwind-css/config/module-federation.js @@ -1,6 +1,6 @@ const deps = require('../package.json').dependencies; const { ModuleFederationPlugin } = require('webpack').container; -const { NodeFederationPlugin, StreamingTargetPlugin } = require('@module-federation/node'); +const { UniversalFederationPlugin } = require('@module-federation/node'); module.exports = { client: new ModuleFederationPlugin({ @@ -28,7 +28,9 @@ module.exports = { ], }), server: [ - new NodeFederationPlugin({ + new UniversalFederationPlugin({ + isServer: true, + useRuntimePlugin: true, name: 'shell', library: { type: 'commonjs-module' }, filename: 'remoteEntry.js', @@ -36,39 +38,12 @@ module.exports = { expose_tailwind_css: 'expose_tailwind_css@http://localhost:3003/server/remoteEntry.js', expose_scss: 'expose_scss@http://localhost:3004/server/remoteEntry.js', }, - shared: [ - { - react: deps.react, - 'react-dom': deps['react-dom'], - 'styled-components': { - singleton: true, - }, - 'react-jss': { - singleton: true, - }, - 'isomorphic-style-loader': { - singleton: true, - }, - }, - ], - }), - new StreamingTargetPlugin({ - name: 'shell', - library: { type: 'commonjs-module' }, - remotes: { - expose_tailwind_css: 'expose_tailwind_css@http://localhost:3003/server/remoteEntry.js', - expose_scss: 'expose_scss@http://localhost:3004/server/remoteEntry.js', - }, shared: { - 'styled-components': { - singleton: true, - }, - 'react-jss': { - singleton: true, - }, - 'isomorphic-style-loader': { - singleton: true, - }, + react: { singleton: true, requiredVersion: deps.react }, + 'react-dom': { singleton: true, requiredVersion: deps['react-dom'] }, + 'styled-components': { singleton: true }, + 'react-jss': { singleton: true }, + 'isomorphic-style-loader': { singleton: true }, }, }), ], diff --git a/federated-css-react-ssr/shell-apps/scss-tailwind-css/config/webpack.server.js b/federated-css-react-ssr/shell-apps/scss-tailwind-css/config/webpack.server.js index 08f8cbec0a6..078e65b4eb3 100644 --- a/federated-css-react-ssr/shell-apps/scss-tailwind-css/config/webpack.server.js +++ b/federated-css-react-ssr/shell-apps/scss-tailwind-css/config/webpack.server.js @@ -5,7 +5,7 @@ const moduleFederationPlugin = require('./module-federation'); module.exports = merge(shared, { name: 'server', - target: false, + target: 'async-node', optimization: { minimize: false, }, diff --git a/federated-css-react-ssr/shell-apps/scss-tailwind-css/package.json b/federated-css-react-ssr/shell-apps/scss-tailwind-css/package.json index cb61c59dead..ceb9c0da8c9 100644 --- a/federated-css-react-ssr/shell-apps/scss-tailwind-css/package.json +++ b/federated-css-react-ssr/shell-apps/scss-tailwind-css/package.json @@ -43,6 +43,7 @@ "styled-components": "5.3.11", "webpack": "5.101.0", "webpack-cli": "5.1.4", - "webpack-merge": "6.0.1" + "webpack-merge": "6.0.1", + "@module-federation/enhanced": "0.17.1" } -} \ No newline at end of file +} diff --git a/federated-css-react-ssr/shell-apps/scss-tailwind-css/server/index.js b/federated-css-react-ssr/shell-apps/scss-tailwind-css/server/index.js index a46055430b6..fb0298686f3 100644 --- a/federated-css-react-ssr/shell-apps/scss-tailwind-css/server/index.js +++ b/federated-css-react-ssr/shell-apps/scss-tailwind-css/server/index.js @@ -1,10 +1,36 @@ const express = require('express'); const initMiddleware = require('./middleware'); +const fetch = require('node-fetch'); +const { sanitizeLoopbackHttpUrl } = require('../../../server-utils/loopback'); const app = express(); const PORT = 4005; -const done = () => { +async function waitUrl(url, timeout = 300000) { + const target = sanitizeLoopbackHttpUrl(url); + const start = Date.now(); + while (true) { + try { + const res = await fetch(target.href); + if (res.ok) return; + } catch (_) {} + if (Date.now() - start > timeout) { + try { + const { execSync } = require('node:child_process'); + const ss = execSync(`ss -ltnp | grep :${target.port} || true`, { stdio: ['ignore','pipe','ignore'] }).toString().trim(); + if (ss) console.log(`[prewarm] port diag ${target.port}: ${ss}`); + } catch {} + throw new Error(`prewarm timeout for ${target.href}`); + } + await new Promise(r => setTimeout(r, 5000)); + } +} + +const done = async () => { + await Promise.all([ + waitUrl('http://localhost:3003/server/remoteEntry.js'), + waitUrl('http://localhost:3004/server/remoteEntry.js'), + ]); app.listen(PORT, () => { console.info( `[${new Date().toISOString()}]`, diff --git a/federated-css-react-ssr/shell-apps/scss-tailwind-css/src/StyleProviders.js b/federated-css-react-ssr/shell-apps/scss-tailwind-css/src/StyleProviders.js index 9fb352ee007..22b861fd2d9 100644 --- a/federated-css-react-ssr/shell-apps/scss-tailwind-css/src/StyleProviders.js +++ b/federated-css-react-ssr/shell-apps/scss-tailwind-css/src/StyleProviders.js @@ -1,4 +1,15 @@ -import LoaderContext1 from 'expose_tailwind_css/LoaderContext'; -import LoaderContext2 from 'expose_scss/LoaderContext'; +let providers; +if (typeof window !== 'undefined') { + // eslint-disable-next-line global-require + const LoaderContext1 = require('expose_tailwind_css/LoaderContext'); + // eslint-disable-next-line global-require + const LoaderContext2 = require('expose_scss/LoaderContext'); + providers = [LoaderContext1.StyleContext.Provider, LoaderContext2.StyleContext.Provider]; +} else { + // eslint-disable-next-line global-require + const React = require('react'); + const Passthrough = ({ children }) => React.createElement(React.Fragment, null, children); + providers = [Passthrough]; +} -export default [LoaderContext1.StyleContext.Provider, LoaderContext2.StyleContext.Provider]; +export default providers; diff --git a/federated-css/README.md b/federated-css/README.md index 4c07667fc49..a3bf7715f56 100644 --- a/federated-css/README.md +++ b/federated-css/README.md @@ -58,7 +58,7 @@ Note. you don't need to start required remotes separately for this command. # Running Demo NextJs -Commands will run host NextJs App on `http://localhost:8081-8084/`. +Commands will run host NextJs App on `http://localhost:8081-8184/` (ports 8081, 8082, 8083, 8184). -`start:nextjs:combination-of-4` -`start:nextjs:jss-tailwind-global` -`start:nextjs:jss-css-and-tailwind-module` -`start:nextjs:less-and-styled-component` diff --git a/federated-css/consumers-nextjs/any-combination/components/nextjs-remote-page.js b/federated-css/consumers-nextjs/any-combination/components/nextjs-remote-page.js new file mode 100644 index 00000000000..b7ef17ce2fa --- /dev/null +++ b/federated-css/consumers-nextjs/any-combination/components/nextjs-remote-page.js @@ -0,0 +1 @@ +export { default } from './combined-pages'; diff --git a/federated-css/consumers-nextjs/any-combination/mf-plugin.config.js b/federated-css/consumers-nextjs/any-combination/mf-plugin.config.js index ea150e1a0cb..25f719dd00d 100644 --- a/federated-css/consumers-nextjs/any-combination/mf-plugin.config.js +++ b/federated-css/consumers-nextjs/any-combination/mf-plugin.config.js @@ -16,8 +16,9 @@ module.exports = { requiredVersion: false, singleton: true, }, - }, - extraOptions: { - skipSharingNextInternals: true, + 'react-dom': { + requiredVersion: false, + singleton: true, + }, }, }; diff --git a/federated-css/consumers-nextjs/any-combination/next.config.js b/federated-css/consumers-nextjs/any-combination/next.config.js index e18dfbb83fa..72916138b3f 100644 --- a/federated-css/consumers-nextjs/any-combination/next.config.js +++ b/federated-css/consumers-nextjs/any-combination/next.config.js @@ -1,4 +1,4 @@ -const NextFederationPlugin = require('@module-federation/nextjs-mf/lib/NextFederationPlugin'); +const { NextFederationPlugin } = require('@module-federation/nextjs-mf'); const mfConfig = require('./mf-plugin.config'); module.exports = { @@ -8,8 +8,13 @@ module.exports = { test: /\.css$/, use: ['style-loader', 'css-loader'], }); + config.plugins.push(new NextFederationPlugin(mfConfig)); + } else { + config.externals = config.externals || []; + config.externals.push(/^expose_/); } + return config; }, // your original next.config.js export diff --git a/federated-css/consumers-nextjs/any-combination/package.json b/federated-css/consumers-nextjs/any-combination/package.json index e2159e79998..d8e28cfeaac 100644 --- a/federated-css/consumers-nextjs/any-combination/package.json +++ b/federated-css/consumers-nextjs/any-combination/package.json @@ -2,8 +2,8 @@ "name": "@federated-css/next-any-combination", "version": "0.1.0", "scripts": { - "build": "next build", - "start": "next dev -p 8080", + "build": "cross-env NEXT_PRIVATE_LOCAL_WEBPACK=true next build", + "start": "cross-env NEXT_PRIVATE_LOCAL_WEBPACK=true next dev -p 8080", "lint": "next lint" }, "dependencies": { @@ -17,6 +17,7 @@ "devDependencies": { "@types/react": "18.3.3", "eslint": "9.6.0", - "eslint-config-next": "14.2.4" + "eslint-config-next": "14.2.4", + "cross-env": "7.0.3" } -} \ No newline at end of file +} diff --git a/federated-css/consumers-nextjs/any-combination/pages/_app.js b/federated-css/consumers-nextjs/any-combination/pages/_app.js index 244e40bb5b0..485e37584c0 100644 --- a/federated-css/consumers-nextjs/any-combination/pages/_app.js +++ b/federated-css/consumers-nextjs/any-combination/pages/_app.js @@ -1,3 +1,4 @@ +import '../utils/ensureNmdPolyfill'; import '../styles/globals.css'; function MyApp({ Component, pageProps }) { diff --git a/federated-css/consumers-nextjs/any-combination/utils/ensureNmdPolyfill.js b/federated-css/consumers-nextjs/any-combination/utils/ensureNmdPolyfill.js new file mode 100644 index 00000000000..e15e583f54f --- /dev/null +++ b/federated-css/consumers-nextjs/any-combination/utils/ensureNmdPolyfill.js @@ -0,0 +1,44 @@ +const runtimeNmd = (module) => { + module.paths = module.paths || []; + if (!module.children) { + module.children = []; + } + return module; +}; + +export const ensureNmdPolyfill = () => { + const runtimes = []; + + if (typeof __webpack_require__ === 'function') { + runtimes.push(__webpack_require__); + } + + if ( + typeof globalThis !== 'undefined' && + typeof globalThis.__webpack_require__ === 'function' + ) { + runtimes.push(globalThis.__webpack_require__); + } + + if (typeof Function.prototype.nmd !== 'function') { + Function.prototype.nmd = runtimeNmd; + } + + for (const runtime of runtimes) { + if (typeof runtime.nmd !== 'function') { + runtime.nmd = runtimeNmd; + } + } + + if ( + typeof globalThis !== 'undefined' && + typeof globalThis.__webpack_require__ !== 'function' && + runtimes.length > 0 + ) { + globalThis.__webpack_require__ = runtimes[0]; + } +}; + +ensureNmdPolyfill(); + +export default ensureNmdPolyfill; diff --git a/federated-css/consumers-nextjs/combination-of-4/components/nextjs-remote-page.js b/federated-css/consumers-nextjs/combination-of-4/components/nextjs-remote-page.js new file mode 100644 index 00000000000..b7ef17ce2fa --- /dev/null +++ b/federated-css/consumers-nextjs/combination-of-4/components/nextjs-remote-page.js @@ -0,0 +1 @@ +export { default } from './combined-pages'; diff --git a/federated-css/consumers-nextjs/combination-of-4/mf-plugin.config.js b/federated-css/consumers-nextjs/combination-of-4/mf-plugin.config.js index 185cdd00ed8..2d1d43cd0d8 100644 --- a/federated-css/consumers-nextjs/combination-of-4/mf-plugin.config.js +++ b/federated-css/consumers-nextjs/combination-of-4/mf-plugin.config.js @@ -18,8 +18,9 @@ module.exports = { requiredVersion: false, singleton: true, }, - }, - extraOptions: { - skipSharingNextInternals: true, + 'react-dom': { + requiredVersion: false, + singleton: true, + }, }, }; diff --git a/federated-css/consumers-nextjs/combination-of-4/next.config.js b/federated-css/consumers-nextjs/combination-of-4/next.config.js index e18dfbb83fa..fbae49d62ac 100644 --- a/federated-css/consumers-nextjs/combination-of-4/next.config.js +++ b/federated-css/consumers-nextjs/combination-of-4/next.config.js @@ -1,4 +1,4 @@ -const NextFederationPlugin = require('@module-federation/nextjs-mf/lib/NextFederationPlugin'); +const { NextFederationPlugin } = require('@module-federation/nextjs-mf'); const mfConfig = require('./mf-plugin.config'); module.exports = { @@ -8,10 +8,19 @@ module.exports = { test: /\.css$/, use: ['style-loader', 'css-loader'], }); + config.plugins.push(new NextFederationPlugin(mfConfig)); + } else { + config.externals = config.externals || []; + config.externals.push(/^expose_/); } + return config; }, // your original next.config.js export reactStrictMode: true, + eslint: { + // Skip linting during CI builds/start to avoid legacy options failure and speed up startup + ignoreDuringBuilds: true, + }, }; diff --git a/federated-css/consumers-nextjs/combination-of-4/package.json b/federated-css/consumers-nextjs/combination-of-4/package.json index bacb19322ee..191e7fa9a52 100644 --- a/federated-css/consumers-nextjs/combination-of-4/package.json +++ b/federated-css/consumers-nextjs/combination-of-4/package.json @@ -2,8 +2,8 @@ "name": "@federated-css/next-combination-of-4", "version": "0.1.0", "scripts": { - "build": "next build", - "start": "next dev -p 8081", + "build": "cross-env NEXT_PRIVATE_LOCAL_WEBPACK=true next build", + "start": "cross-env NEXT_PRIVATE_LOCAL_WEBPACK=true next dev -p 8081", "lint": "next lint" }, "dependencies": { @@ -17,6 +17,7 @@ "devDependencies": { "@types/react": "18.3.3", "eslint": "9.6.0", - "eslint-config-next": "14.2.4" + "eslint-config-next": "14.2.4", + "cross-env": "7.0.3" } -} \ No newline at end of file +} diff --git a/federated-css/consumers-nextjs/combination-of-4/pages/_app.js b/federated-css/consumers-nextjs/combination-of-4/pages/_app.js index 244e40bb5b0..485e37584c0 100644 --- a/federated-css/consumers-nextjs/combination-of-4/pages/_app.js +++ b/federated-css/consumers-nextjs/combination-of-4/pages/_app.js @@ -1,3 +1,4 @@ +import '../utils/ensureNmdPolyfill'; import '../styles/globals.css'; function MyApp({ Component, pageProps }) { diff --git a/federated-css/consumers-nextjs/combination-of-4/utils/ensureNmdPolyfill.js b/federated-css/consumers-nextjs/combination-of-4/utils/ensureNmdPolyfill.js new file mode 100644 index 00000000000..e15e583f54f --- /dev/null +++ b/federated-css/consumers-nextjs/combination-of-4/utils/ensureNmdPolyfill.js @@ -0,0 +1,44 @@ +const runtimeNmd = (module) => { + module.paths = module.paths || []; + if (!module.children) { + module.children = []; + } + return module; +}; + +export const ensureNmdPolyfill = () => { + const runtimes = []; + + if (typeof __webpack_require__ === 'function') { + runtimes.push(__webpack_require__); + } + + if ( + typeof globalThis !== 'undefined' && + typeof globalThis.__webpack_require__ === 'function' + ) { + runtimes.push(globalThis.__webpack_require__); + } + + if (typeof Function.prototype.nmd !== 'function') { + Function.prototype.nmd = runtimeNmd; + } + + for (const runtime of runtimes) { + if (typeof runtime.nmd !== 'function') { + runtime.nmd = runtimeNmd; + } + } + + if ( + typeof globalThis !== 'undefined' && + typeof globalThis.__webpack_require__ !== 'function' && + runtimes.length > 0 + ) { + globalThis.__webpack_require__ = runtimes[0]; + } +}; + +ensureNmdPolyfill(); + +export default ensureNmdPolyfill; diff --git a/federated-css/consumers-nextjs/jss-and-tailwind-global/components/nextjs-remote-page.js b/federated-css/consumers-nextjs/jss-and-tailwind-global/components/nextjs-remote-page.js new file mode 100644 index 00000000000..b7ef17ce2fa --- /dev/null +++ b/federated-css/consumers-nextjs/jss-and-tailwind-global/components/nextjs-remote-page.js @@ -0,0 +1 @@ +export { default } from './combined-pages'; diff --git a/federated-css/consumers-nextjs/jss-and-tailwind-global/mf-plugin.config.js b/federated-css/consumers-nextjs/jss-and-tailwind-global/mf-plugin.config.js index 0014b3a64b4..cfbe8eb8576 100644 --- a/federated-css/consumers-nextjs/jss-and-tailwind-global/mf-plugin.config.js +++ b/federated-css/consumers-nextjs/jss-and-tailwind-global/mf-plugin.config.js @@ -16,8 +16,9 @@ module.exports = { requiredVersion: false, singleton: true, }, - }, - extraOptions: { - skipSharingNextInternals: true, + 'react-dom': { + requiredVersion: false, + singleton: true, + }, }, }; diff --git a/federated-css/consumers-nextjs/jss-and-tailwind-global/next.config.js b/federated-css/consumers-nextjs/jss-and-tailwind-global/next.config.js index e18dfbb83fa..6d074dc1197 100644 --- a/federated-css/consumers-nextjs/jss-and-tailwind-global/next.config.js +++ b/federated-css/consumers-nextjs/jss-and-tailwind-global/next.config.js @@ -1,4 +1,4 @@ -const NextFederationPlugin = require('@module-federation/nextjs-mf/lib/NextFederationPlugin'); +const { NextFederationPlugin } = require('@module-federation/nextjs-mf'); const mfConfig = require('./mf-plugin.config'); module.exports = { @@ -8,10 +8,18 @@ module.exports = { test: /\.css$/, use: ['style-loader', 'css-loader'], }); + config.plugins.push(new NextFederationPlugin(mfConfig)); + } else { + config.externals = config.externals || []; + config.externals.push(/^expose_/); } + return config; }, // your original next.config.js export reactStrictMode: true, + eslint: { + ignoreDuringBuilds: true, + }, }; diff --git a/federated-css/consumers-nextjs/jss-and-tailwind-global/package.json b/federated-css/consumers-nextjs/jss-and-tailwind-global/package.json index a0b2802b4df..22e3b23506e 100644 --- a/federated-css/consumers-nextjs/jss-and-tailwind-global/package.json +++ b/federated-css/consumers-nextjs/jss-and-tailwind-global/package.json @@ -2,8 +2,8 @@ "name": "@federated-css/next-jss-and-tailwind-global", "version": "0.1.0", "scripts": { - "build": "next build", - "start": "next dev -p 8082", + "build": "cross-env NEXT_PRIVATE_LOCAL_WEBPACK=true next build", + "start": "cross-env NEXT_PRIVATE_LOCAL_WEBPACK=true next dev -p 8082", "lint": "next lint" }, "dependencies": { @@ -17,6 +17,7 @@ "devDependencies": { "@types/react": "18.3.3", "eslint": "9.6.0", - "eslint-config-next": "14.2.4" + "eslint-config-next": "14.2.4", + "cross-env": "7.0.3" } -} \ No newline at end of file +} diff --git a/federated-css/consumers-nextjs/jss-and-tailwind-global/pages/_app.js b/federated-css/consumers-nextjs/jss-and-tailwind-global/pages/_app.js index 244e40bb5b0..485e37584c0 100644 --- a/federated-css/consumers-nextjs/jss-and-tailwind-global/pages/_app.js +++ b/federated-css/consumers-nextjs/jss-and-tailwind-global/pages/_app.js @@ -1,3 +1,4 @@ +import '../utils/ensureNmdPolyfill'; import '../styles/globals.css'; function MyApp({ Component, pageProps }) { diff --git a/federated-css/consumers-nextjs/jss-and-tailwind-global/utils/ensureNmdPolyfill.js b/federated-css/consumers-nextjs/jss-and-tailwind-global/utils/ensureNmdPolyfill.js new file mode 100644 index 00000000000..e15e583f54f --- /dev/null +++ b/federated-css/consumers-nextjs/jss-and-tailwind-global/utils/ensureNmdPolyfill.js @@ -0,0 +1,44 @@ +const runtimeNmd = (module) => { + module.paths = module.paths || []; + if (!module.children) { + module.children = []; + } + return module; +}; + +export const ensureNmdPolyfill = () => { + const runtimes = []; + + if (typeof __webpack_require__ === 'function') { + runtimes.push(__webpack_require__); + } + + if ( + typeof globalThis !== 'undefined' && + typeof globalThis.__webpack_require__ === 'function' + ) { + runtimes.push(globalThis.__webpack_require__); + } + + if (typeof Function.prototype.nmd !== 'function') { + Function.prototype.nmd = runtimeNmd; + } + + for (const runtime of runtimes) { + if (typeof runtime.nmd !== 'function') { + runtime.nmd = runtimeNmd; + } + } + + if ( + typeof globalThis !== 'undefined' && + typeof globalThis.__webpack_require__ !== 'function' && + runtimes.length > 0 + ) { + globalThis.__webpack_require__ = runtimes[0]; + } +}; + +ensureNmdPolyfill(); + +export default ensureNmdPolyfill; diff --git a/federated-css/consumers-nextjs/jss-css-and-tailwind-module/components/nextjs-remote-page.js b/federated-css/consumers-nextjs/jss-css-and-tailwind-module/components/nextjs-remote-page.js new file mode 100644 index 00000000000..b7ef17ce2fa --- /dev/null +++ b/federated-css/consumers-nextjs/jss-css-and-tailwind-module/components/nextjs-remote-page.js @@ -0,0 +1 @@ +export { default } from './combined-pages'; diff --git a/federated-css/consumers-nextjs/jss-css-and-tailwind-module/mf-plugin.config.js b/federated-css/consumers-nextjs/jss-css-and-tailwind-module/mf-plugin.config.js index d7b7721e2e8..dc74912753b 100644 --- a/federated-css/consumers-nextjs/jss-css-and-tailwind-module/mf-plugin.config.js +++ b/federated-css/consumers-nextjs/jss-css-and-tailwind-module/mf-plugin.config.js @@ -17,8 +17,9 @@ module.exports = { requiredVersion: false, singleton: true, }, - }, - extraOptions: { - skipSharingNextInternals: true, + 'react-dom': { + requiredVersion: false, + singleton: true, + }, }, }; diff --git a/federated-css/consumers-nextjs/jss-css-and-tailwind-module/next.config.js b/federated-css/consumers-nextjs/jss-css-and-tailwind-module/next.config.js index e18dfbb83fa..6d074dc1197 100644 --- a/federated-css/consumers-nextjs/jss-css-and-tailwind-module/next.config.js +++ b/federated-css/consumers-nextjs/jss-css-and-tailwind-module/next.config.js @@ -1,4 +1,4 @@ -const NextFederationPlugin = require('@module-federation/nextjs-mf/lib/NextFederationPlugin'); +const { NextFederationPlugin } = require('@module-federation/nextjs-mf'); const mfConfig = require('./mf-plugin.config'); module.exports = { @@ -8,10 +8,18 @@ module.exports = { test: /\.css$/, use: ['style-loader', 'css-loader'], }); + config.plugins.push(new NextFederationPlugin(mfConfig)); + } else { + config.externals = config.externals || []; + config.externals.push(/^expose_/); } + return config; }, // your original next.config.js export reactStrictMode: true, + eslint: { + ignoreDuringBuilds: true, + }, }; diff --git a/federated-css/consumers-nextjs/jss-css-and-tailwind-module/package.json b/federated-css/consumers-nextjs/jss-css-and-tailwind-module/package.json index 634c3e216eb..82392d04b6b 100644 --- a/federated-css/consumers-nextjs/jss-css-and-tailwind-module/package.json +++ b/federated-css/consumers-nextjs/jss-css-and-tailwind-module/package.json @@ -2,8 +2,8 @@ "name": "@federated-css/next-jss-css-and-tailwind-module", "version": "0.1.0", "scripts": { - "build": "next build", - "start": "next dev -p 8083", + "build": "cross-env NEXT_PRIVATE_LOCAL_WEBPACK=true next build", + "start": "cross-env NEXT_PRIVATE_LOCAL_WEBPACK=true next dev -p 8083", "lint": "next lint" }, "dependencies": { @@ -17,6 +17,7 @@ "devDependencies": { "@types/react": "18.3.3", "eslint": "9.6.0", - "eslint-config-next": "14.2.4" + "eslint-config-next": "14.2.4", + "cross-env": "7.0.3" } -} \ No newline at end of file +} diff --git a/federated-css/consumers-nextjs/jss-css-and-tailwind-module/pages/_app.js b/federated-css/consumers-nextjs/jss-css-and-tailwind-module/pages/_app.js index 244e40bb5b0..485e37584c0 100644 --- a/federated-css/consumers-nextjs/jss-css-and-tailwind-module/pages/_app.js +++ b/federated-css/consumers-nextjs/jss-css-and-tailwind-module/pages/_app.js @@ -1,3 +1,4 @@ +import '../utils/ensureNmdPolyfill'; import '../styles/globals.css'; function MyApp({ Component, pageProps }) { diff --git a/federated-css/consumers-nextjs/jss-css-and-tailwind-module/utils/ensureNmdPolyfill.js b/federated-css/consumers-nextjs/jss-css-and-tailwind-module/utils/ensureNmdPolyfill.js new file mode 100644 index 00000000000..e15e583f54f --- /dev/null +++ b/federated-css/consumers-nextjs/jss-css-and-tailwind-module/utils/ensureNmdPolyfill.js @@ -0,0 +1,44 @@ +const runtimeNmd = (module) => { + module.paths = module.paths || []; + if (!module.children) { + module.children = []; + } + return module; +}; + +export const ensureNmdPolyfill = () => { + const runtimes = []; + + if (typeof __webpack_require__ === 'function') { + runtimes.push(__webpack_require__); + } + + if ( + typeof globalThis !== 'undefined' && + typeof globalThis.__webpack_require__ === 'function' + ) { + runtimes.push(globalThis.__webpack_require__); + } + + if (typeof Function.prototype.nmd !== 'function') { + Function.prototype.nmd = runtimeNmd; + } + + for (const runtime of runtimes) { + if (typeof runtime.nmd !== 'function') { + runtime.nmd = runtimeNmd; + } + } + + if ( + typeof globalThis !== 'undefined' && + typeof globalThis.__webpack_require__ !== 'function' && + runtimes.length > 0 + ) { + globalThis.__webpack_require__ = runtimes[0]; + } +}; + +ensureNmdPolyfill(); + +export default ensureNmdPolyfill; diff --git a/federated-css/consumers-nextjs/less-and-styled-component/components/nextjs-remote-page.js b/federated-css/consumers-nextjs/less-and-styled-component/components/nextjs-remote-page.js new file mode 100644 index 00000000000..b7ef17ce2fa --- /dev/null +++ b/federated-css/consumers-nextjs/less-and-styled-component/components/nextjs-remote-page.js @@ -0,0 +1 @@ +export { default } from './combined-pages'; diff --git a/federated-css/consumers-nextjs/less-and-styled-component/mf-plugin.config.js b/federated-css/consumers-nextjs/less-and-styled-component/mf-plugin.config.js index 53882b4af5a..1f938948f83 100644 --- a/federated-css/consumers-nextjs/less-and-styled-component/mf-plugin.config.js +++ b/federated-css/consumers-nextjs/less-and-styled-component/mf-plugin.config.js @@ -16,8 +16,9 @@ module.exports = { requiredVersion: false, singleton: true, }, - }, - extraOptions: { - skipSharingNextInternals: true, + 'react-dom': { + requiredVersion: false, + singleton: true, + }, }, }; diff --git a/federated-css/consumers-nextjs/less-and-styled-component/next.config.js b/federated-css/consumers-nextjs/less-and-styled-component/next.config.js index e18dfbb83fa..6d074dc1197 100644 --- a/federated-css/consumers-nextjs/less-and-styled-component/next.config.js +++ b/federated-css/consumers-nextjs/less-and-styled-component/next.config.js @@ -1,4 +1,4 @@ -const NextFederationPlugin = require('@module-federation/nextjs-mf/lib/NextFederationPlugin'); +const { NextFederationPlugin } = require('@module-federation/nextjs-mf'); const mfConfig = require('./mf-plugin.config'); module.exports = { @@ -8,10 +8,18 @@ module.exports = { test: /\.css$/, use: ['style-loader', 'css-loader'], }); + config.plugins.push(new NextFederationPlugin(mfConfig)); + } else { + config.externals = config.externals || []; + config.externals.push(/^expose_/); } + return config; }, // your original next.config.js export reactStrictMode: true, + eslint: { + ignoreDuringBuilds: true, + }, }; diff --git a/federated-css/consumers-nextjs/less-and-styled-component/package.json b/federated-css/consumers-nextjs/less-and-styled-component/package.json index 5829e013984..bdf139416de 100644 --- a/federated-css/consumers-nextjs/less-and-styled-component/package.json +++ b/federated-css/consumers-nextjs/less-and-styled-component/package.json @@ -2,8 +2,8 @@ "name": "@federated-css/next-less-and-styled-component", "version": "0.1.0", "scripts": { - "build": "next build", - "start": "next dev -p 8084", + "build": "cross-env NEXT_PRIVATE_LOCAL_WEBPACK=true next build", + "start": "cross-env NEXT_PRIVATE_LOCAL_WEBPACK=true next dev -p 8184", "lint": "next lint" }, "dependencies": { @@ -17,6 +17,7 @@ "devDependencies": { "@types/react": "18.3.3", "eslint": "9.6.0", - "eslint-config-next": "14.2.4" + "eslint-config-next": "14.2.4", + "cross-env": "7.0.3" } -} \ No newline at end of file +} diff --git a/federated-css/consumers-nextjs/less-and-styled-component/pages/_app.js b/federated-css/consumers-nextjs/less-and-styled-component/pages/_app.js index 244e40bb5b0..485e37584c0 100644 --- a/federated-css/consumers-nextjs/less-and-styled-component/pages/_app.js +++ b/federated-css/consumers-nextjs/less-and-styled-component/pages/_app.js @@ -1,3 +1,4 @@ +import '../utils/ensureNmdPolyfill'; import '../styles/globals.css'; function MyApp({ Component, pageProps }) { diff --git a/federated-css/consumers-nextjs/less-and-styled-component/utils/ensureNmdPolyfill.js b/federated-css/consumers-nextjs/less-and-styled-component/utils/ensureNmdPolyfill.js new file mode 100644 index 00000000000..e15e583f54f --- /dev/null +++ b/federated-css/consumers-nextjs/less-and-styled-component/utils/ensureNmdPolyfill.js @@ -0,0 +1,44 @@ +const runtimeNmd = (module) => { + module.paths = module.paths || []; + if (!module.children) { + module.children = []; + } + return module; +}; + +export const ensureNmdPolyfill = () => { + const runtimes = []; + + if (typeof __webpack_require__ === 'function') { + runtimes.push(__webpack_require__); + } + + if ( + typeof globalThis !== 'undefined' && + typeof globalThis.__webpack_require__ === 'function' + ) { + runtimes.push(globalThis.__webpack_require__); + } + + if (typeof Function.prototype.nmd !== 'function') { + Function.prototype.nmd = runtimeNmd; + } + + for (const runtime of runtimes) { + if (typeof runtime.nmd !== 'function') { + runtime.nmd = runtimeNmd; + } + } + + if ( + typeof globalThis !== 'undefined' && + typeof globalThis.__webpack_require__ !== 'function' && + runtimes.length > 0 + ) { + globalThis.__webpack_require__ = runtimes[0]; + } +}; + +ensureNmdPolyfill(); + +export default ensureNmdPolyfill; diff --git a/federated-css/consumers-react/combination-of-5/rspack.config.js b/federated-css/consumers-react/combination-of-5/rspack.config.js index aa561d9a851..59f92d8d8f9 100644 --- a/federated-css/consumers-react/combination-of-5/rspack.config.js +++ b/federated-css/consumers-react/combination-of-5/rspack.config.js @@ -4,7 +4,7 @@ const path = require('path'); const mfConfig = require('./mf-plugin.config'); module.exports = { - entry: './src/index', + entry: ['./src/ensureNmdPolyfill', './src/index'], mode: 'development', devServer: { static: { diff --git a/federated-css/consumers-react/combination-of-5/src/bootstrap.js b/federated-css/consumers-react/combination-of-5/src/bootstrap.js index 129ffb0c0f9..456c0791096 100644 --- a/federated-css/consumers-react/combination-of-5/src/bootstrap.js +++ b/federated-css/consumers-react/combination-of-5/src/bootstrap.js @@ -1,3 +1,4 @@ +import './ensureNmdPolyfill'; import App from './App'; import React from 'react'; import { createRoot } from 'react-dom/client'; diff --git a/federated-css/consumers-react/combination-of-5/src/ensureNmdPolyfill.js b/federated-css/consumers-react/combination-of-5/src/ensureNmdPolyfill.js new file mode 100644 index 00000000000..e15e583f54f --- /dev/null +++ b/federated-css/consumers-react/combination-of-5/src/ensureNmdPolyfill.js @@ -0,0 +1,44 @@ +const runtimeNmd = (module) => { + module.paths = module.paths || []; + if (!module.children) { + module.children = []; + } + return module; +}; + +export const ensureNmdPolyfill = () => { + const runtimes = []; + + if (typeof __webpack_require__ === 'function') { + runtimes.push(__webpack_require__); + } + + if ( + typeof globalThis !== 'undefined' && + typeof globalThis.__webpack_require__ === 'function' + ) { + runtimes.push(globalThis.__webpack_require__); + } + + if (typeof Function.prototype.nmd !== 'function') { + Function.prototype.nmd = runtimeNmd; + } + + for (const runtime of runtimes) { + if (typeof runtime.nmd !== 'function') { + runtime.nmd = runtimeNmd; + } + } + + if ( + typeof globalThis !== 'undefined' && + typeof globalThis.__webpack_require__ !== 'function' && + runtimes.length > 0 + ) { + globalThis.__webpack_require__ = runtimes[0]; + } +}; + +ensureNmdPolyfill(); + +export default ensureNmdPolyfill; diff --git a/federated-css/consumers-react/css-module-and-jss/rspack.config.js b/federated-css/consumers-react/css-module-and-jss/rspack.config.js index e179231957f..eff91a8b8e1 100644 --- a/federated-css/consumers-react/css-module-and-jss/rspack.config.js +++ b/federated-css/consumers-react/css-module-and-jss/rspack.config.js @@ -4,7 +4,7 @@ const path = require('path'); const mfConfig = require('./mf-plugin.config'); module.exports = { - entry: './src/index', + entry: ['./src/ensureNmdPolyfill', './src/index'], mode: 'development', devServer: { static: { diff --git a/federated-css/consumers-react/css-module-and-jss/src/bootstrap.js b/federated-css/consumers-react/css-module-and-jss/src/bootstrap.js index 129ffb0c0f9..456c0791096 100644 --- a/federated-css/consumers-react/css-module-and-jss/src/bootstrap.js +++ b/federated-css/consumers-react/css-module-and-jss/src/bootstrap.js @@ -1,3 +1,4 @@ +import './ensureNmdPolyfill'; import App from './App'; import React from 'react'; import { createRoot } from 'react-dom/client'; diff --git a/federated-css/consumers-react/css-module-and-jss/src/ensureNmdPolyfill.js b/federated-css/consumers-react/css-module-and-jss/src/ensureNmdPolyfill.js new file mode 100644 index 00000000000..e15e583f54f --- /dev/null +++ b/federated-css/consumers-react/css-module-and-jss/src/ensureNmdPolyfill.js @@ -0,0 +1,44 @@ +const runtimeNmd = (module) => { + module.paths = module.paths || []; + if (!module.children) { + module.children = []; + } + return module; +}; + +export const ensureNmdPolyfill = () => { + const runtimes = []; + + if (typeof __webpack_require__ === 'function') { + runtimes.push(__webpack_require__); + } + + if ( + typeof globalThis !== 'undefined' && + typeof globalThis.__webpack_require__ === 'function' + ) { + runtimes.push(globalThis.__webpack_require__); + } + + if (typeof Function.prototype.nmd !== 'function') { + Function.prototype.nmd = runtimeNmd; + } + + for (const runtime of runtimes) { + if (typeof runtime.nmd !== 'function') { + runtime.nmd = runtimeNmd; + } + } + + if ( + typeof globalThis !== 'undefined' && + typeof globalThis.__webpack_require__ !== 'function' && + runtimes.length > 0 + ) { + globalThis.__webpack_require__ = runtimes[0]; + } +}; + +ensureNmdPolyfill(); + +export default ensureNmdPolyfill; diff --git a/federated-css/consumers-react/less-and-scss/rspack.config.js b/federated-css/consumers-react/less-and-scss/rspack.config.js index 062ee0e9574..4b121d2ee62 100644 --- a/federated-css/consumers-react/less-and-scss/rspack.config.js +++ b/federated-css/consumers-react/less-and-scss/rspack.config.js @@ -1,5 +1,5 @@ const HtmlWebpackPlugin = require('html-webpack-plugin'); -const { ModuleFederationPlugin } = require('@module-federation/enhanced'); +const { ModuleFederationPlugin } = require('@rspack/core').container; const path = require('path'); const mfConfig = require('./mf-plugin.config'); diff --git a/federated-css/consumers-react/tailwind-module-and-jss/src/bootstrap.js b/federated-css/consumers-react/tailwind-module-and-jss/src/bootstrap.js index 129ffb0c0f9..456c0791096 100644 --- a/federated-css/consumers-react/tailwind-module-and-jss/src/bootstrap.js +++ b/federated-css/consumers-react/tailwind-module-and-jss/src/bootstrap.js @@ -1,3 +1,4 @@ +import './ensureNmdPolyfill'; import App from './App'; import React from 'react'; import { createRoot } from 'react-dom/client'; diff --git a/federated-css/consumers-react/tailwind-module-and-jss/src/ensureNmdPolyfill.js b/federated-css/consumers-react/tailwind-module-and-jss/src/ensureNmdPolyfill.js new file mode 100644 index 00000000000..e15e583f54f --- /dev/null +++ b/federated-css/consumers-react/tailwind-module-and-jss/src/ensureNmdPolyfill.js @@ -0,0 +1,44 @@ +const runtimeNmd = (module) => { + module.paths = module.paths || []; + if (!module.children) { + module.children = []; + } + return module; +}; + +export const ensureNmdPolyfill = () => { + const runtimes = []; + + if (typeof __webpack_require__ === 'function') { + runtimes.push(__webpack_require__); + } + + if ( + typeof globalThis !== 'undefined' && + typeof globalThis.__webpack_require__ === 'function' + ) { + runtimes.push(globalThis.__webpack_require__); + } + + if (typeof Function.prototype.nmd !== 'function') { + Function.prototype.nmd = runtimeNmd; + } + + for (const runtime of runtimes) { + if (typeof runtime.nmd !== 'function') { + runtime.nmd = runtimeNmd; + } + } + + if ( + typeof globalThis !== 'undefined' && + typeof globalThis.__webpack_require__ !== 'function' && + runtimes.length > 0 + ) { + globalThis.__webpack_require__ = runtimes[0]; + } +}; + +ensureNmdPolyfill(); + +export default ensureNmdPolyfill; diff --git a/federated-css/consumers-react/tailwind-module-and-jss/webpack.config.js b/federated-css/consumers-react/tailwind-module-and-jss/webpack.config.js index b16e01ac79a..52ab7da1dda 100644 --- a/federated-css/consumers-react/tailwind-module-and-jss/webpack.config.js +++ b/federated-css/consumers-react/tailwind-module-and-jss/webpack.config.js @@ -4,7 +4,7 @@ const path = require('path'); const mfConfig = require('./mf-plugin.config'); module.exports = { - entry: './src/index', + entry: ['./src/ensureNmdPolyfill', './src/index'], mode: 'development', devServer: { static: { diff --git a/federated-css/e2e/common-checks.spec.ts b/federated-css/e2e/common-checks.spec.ts new file mode 100644 index 00000000000..93ff4a8cadd --- /dev/null +++ b/federated-css/e2e/common-checks.spec.ts @@ -0,0 +1,169 @@ +import { test, expect } from '@playwright/test'; +import { selectors } from '../../playwright-e2e/common/selectors'; +import { CssAttr } from '../../playwright-e2e/types/cssAttr'; +import { Constants } from '../../playwright-e2e/fixtures/constants'; + +type ButtonConfig = { + path: string; + bgColor: string; +}; + +type AppConfig = { + port: number; + buttons: ButtonConfig[]; + isNextJs?: boolean; +}; + +const { + css, + cssModule, + jss, + less, + scss, + styledComponent, + tailwindGlobal, + tailwindModule, +} = Constants.fullTestData.federatedCssTestData; + +const appsUnderTest: AppConfig[] = [ + { + port: 8081, + buttons: [css, scss, less, tailwindGlobal], + isNextJs: true, + }, + { + port: 8083, + buttons: [cssModule, jss, tailwindModule], + isNextJs: true, + }, + { + port: 8082, + buttons: [jss, tailwindGlobal], + isNextJs: true, + }, + { + port: 8184, + buttons: [styledComponent, less], + isNextJs: true, + }, + { + port: 3001, + buttons: [css, scss, less, tailwindGlobal], + }, + { + port: 3002, + buttons: [tailwindModule, jss, css, less, scss], + }, + { + port: 3003, + buttons: [css, styledComponent], + }, + { + port: 3004, + buttons: [cssModule, jss], + }, + { + port: 3005, + buttons: [less, scss], + }, + { + port: 3006, + buttons: [less, tailwindGlobal], + }, + { + port: 3007, + buttons: [jss, tailwindModule], + }, + { + port: 4000, + buttons: [css], + }, + { + port: 4001, + buttons: [cssModule], + }, + { + port: 4002, + buttons: [jss], + }, + { + port: 4003, + buttons: [less], + }, + { + port: 4004, + buttons: [scss], + }, + { + port: 4005, + buttons: [styledComponent], + }, + { + port: 4006, + buttons: [tailwindGlobal], + }, + { + port: 4007, + buttons: [tailwindModule], + }, +]; + +const buildUrl = (port: number, route?: string): string => { + if (!route) { + return `http://localhost:${port}/`; + } + + if (route.startsWith('#')) { + return `http://localhost:${port}/${route}`; + } + + if (route.startsWith('/')) { + return `http://localhost:${port}${route}`; + } + + return `http://localhost:${port}/${route}`; +}; + +const combinedPath = (app: AppConfig): string => `${app.isNextJs ? '' : '#/'}combined`; + +const pagePath = (app: AppConfig, button: ButtonConfig): string => + app.buttons.length > 1 ? `${app.isNextJs ? '' : '#/'}${button.path}` : ''; + +test.describe('Federated CSS registry', () => { + for (const app of appsUnderTest) { + for (const button of app.buttons) { + test(`port ${app.port} renders ${button.path}`, async ({ page }) => { + await page.goto(buildUrl(app.port, pagePath(app, button)), { + waitUntil: 'domcontentloaded', + }); + + // Be tolerant to slower remote/style loading in CI + await page.waitForSelector(selectors.federatedCssButton, { timeout: 30_000 }); + + const buttons = page.locator(selectors.federatedCssButton); + const primaryButton = buttons.first(); + await expect(primaryButton).toBeVisible(); + await expect(primaryButton).toHaveCSS(CssAttr.backgroundColor, button.bgColor); + }); + } + + if (app.buttons.length > 1) { + test(`port ${app.port} combined view exposes federated styles`, async ({ page }) => { + await page.goto(buildUrl(app.port, combinedPath(app)), { + waitUntil: 'domcontentloaded', + }); + + // Be tolerant to slower remote/style loading in CI + await page.waitForSelector(selectors.federatedCssButton, { timeout: 30_000 }); + const buttons = page.locator(selectors.federatedCssButton); + await expect(buttons).toHaveCount(app.buttons.length); + + for (const [index, button] of app.buttons.entries()) { + const federatedButton = buttons.nth(index); + await expect(federatedButton).toBeVisible(); + await expect(federatedButton).toHaveCSS(CssAttr.backgroundColor, button.bgColor); + } + }); + } + } +}); diff --git a/federated-css/e2e/commonChecks.cy.ts b/federated-css/e2e/commonChecks.cy.ts deleted file mode 100644 index 1557b9548c5..00000000000 --- a/federated-css/e2e/commonChecks.cy.ts +++ /dev/null @@ -1,134 +0,0 @@ -import { selectors } from '../../cypress-e2e/common/selectors'; -import { CssAttr } from '../../cypress-e2e/types/cssAttr'; -import { Constants } from '../../cypress-e2e/fixtures/constants'; -import { BaseMethods } from '../../cypress-e2e/common/base'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('It checks federated css apps', () => { - const { - fullTestData: { - federatedCssTestData: { - css, - cssModule, - jss, - less, - scss, - styledComponent, - tailwindGlobal, - tailwindModule, - }, - }, - } = Constants; - const appsData = [ - { - port: 8081, - buttons: [css, scss, less, tailwindGlobal], - isNextJs: true, - }, - { - port: 8083, - buttons: [cssModule, jss, tailwindModule], - isNextJs: true, - }, - { - port: 8082, - buttons: [jss, tailwindGlobal], - isNextJs: true, - }, - { - port: 8084, - buttons: [styledComponent, less], - isNextJs: true, - }, - { - port: 3001, - buttons: [css, scss, less, tailwindGlobal], - }, - { - port: 3002, - buttons: [tailwindModule, jss, css, less, scss], - }, - { - port: 3003, - buttons: [css, styledComponent], - }, - { - port: 3004, - buttons: [cssModule, jss], - }, - { - port: 3005, - buttons: [less, scss], - }, - { - port: 3006, - buttons: [less, tailwindGlobal], - }, - { - port: 3007, - buttons: [jss, tailwindModule], - }, - { - port: 4000, - buttons: [css], - }, - { - port: 4001, - buttons: [cssModule], - }, - { - port: 4002, - buttons: [jss], - }, - { - port: 4003, - buttons: [less], - }, - { - port: 4004, - buttons: [scss], - }, - { - port: 4005, - buttons: [styledComponent], - }, - { - port: 4006, - buttons: [tailwindGlobal], - }, - { - port: 4007, - buttons: [tailwindModule], - }, - ]; - - appsData.forEach(appConfig => { - appConfig.buttons.forEach(cfg => { - it(`should verify consumed ${cfg.path} page`, () => { - basePage.openLocalhost( - appConfig.port, - appConfig.buttons.length > 1 ? `${appConfig.isNextJs ? '' : '#/'}${cfg.path}` : '', - ); - basePage.checkElementHaveProperty({ - selector: selectors.federatedCssButton, - prop: CssAttr.backgroundColor, - value: cfg.bgColor, - }); - }); - }); - - it('should verify exposed buttons colors on combined page', () => { - basePage.skipTestByCondition(appConfig.buttons.length <= 1); - basePage.openLocalhost(appConfig.port, `${appConfig.isNextJs ? '' : '#/'}combined`); - appConfig.buttons.forEach((cfg, idx) => { - basePage.checkElementHaveProperty({ - selector: selectors.federatedCssButton, - prop: CssAttr.backgroundColor, - value: cfg.bgColor, - index: idx, - }); - }); - }); - }); -}); diff --git a/federated-css/e2e/global-setup.ts b/federated-css/e2e/global-setup.ts new file mode 100644 index 00000000000..74c5bce01b3 --- /dev/null +++ b/federated-css/e2e/global-setup.ts @@ -0,0 +1,16 @@ +import { execFileSync } from 'node:child_process'; +import { resolve } from 'node:path'; + +async function killAll() { + const killer = resolve(__dirname, '../scripts/kill-all-ports.cjs'); + execFileSync(process.execPath, [killer], { stdio: 'inherit' }); +} + +export default async function globalSetup() { + try { + await killAll(); + } catch (e) { + // ignore; CI will retry inside start scripts + } +} + diff --git a/federated-css/e2e/global-teardown.ts b/federated-css/e2e/global-teardown.ts new file mode 100644 index 00000000000..9b4be0983f6 --- /dev/null +++ b/federated-css/e2e/global-teardown.ts @@ -0,0 +1,15 @@ +import { execFileSync } from 'node:child_process'; +import { resolve } from 'node:path'; + +export default async function globalTeardown() { + try { + const killer = resolve(__dirname, '../scripts/kill-all-ports.cjs'); + execFileSync(process.execPath, [killer], { stdio: 'inherit' }); + } catch (e) { + // ignore + } + await new Promise((r) => setTimeout(r, 200)); + const code = typeof process.exitCode === 'number' ? process.exitCode : 0; + // eslint-disable-next-line no-process-exit + process.exit(code); +} diff --git a/federated-css/e2e/runAll.cy.ts b/federated-css/e2e/runAll.cy.ts deleted file mode 100644 index 5ae32f93812..00000000000 --- a/federated-css/e2e/runAll.cy.ts +++ /dev/null @@ -1 +0,0 @@ -import './commonChecks.cy'; diff --git a/federated-css/expose-remotes/expose-css-module/rspack.config.js b/federated-css/expose-remotes/expose-css-module/rspack.config.js index 12ca8609173..b513b4fb423 100644 --- a/federated-css/expose-remotes/expose-css-module/rspack.config.js +++ b/federated-css/expose-remotes/expose-css-module/rspack.config.js @@ -7,7 +7,7 @@ const { } = require('../remotes.config'); module.exports = { - entry: './src/index', + entry: ['./src/ensureNmdPolyfill', './src/index'], mode: 'development', devServer: { static: { @@ -45,7 +45,16 @@ module.exports = { }, { test: /\.css$/, - use: ['style-loader', 'css-loader'], + use: [ + 'style-loader', + { + loader: 'css-loader', + options: { + modules: true, + esModule: true, + }, + }, + ], }, ], }, diff --git a/federated-css/expose-remotes/expose-css-module/src/App.js b/federated-css/expose-remotes/expose-css-module/src/App.js index 5a1a36e7a05..23e0d065092 100644 --- a/federated-css/expose-remotes/expose-css-module/src/App.js +++ b/federated-css/expose-remotes/expose-css-module/src/App.js @@ -1,3 +1,4 @@ +import './ensureNmdPolyfill'; import React from 'react'; const Component = React.lazy(() => import('./Component')); diff --git a/federated-css/expose-remotes/expose-css-module/src/Component.js b/federated-css/expose-remotes/expose-css-module/src/Component.js index 5d682f0942f..52e158a6032 100644 --- a/federated-css/expose-remotes/expose-css-module/src/Component.js +++ b/federated-css/expose-remotes/expose-css-module/src/Component.js @@ -1,5 +1,7 @@ import React from 'react'; -import classes from './Button.styles.module.css'; +import * as moduleStyles from './Button.styles.module.css'; + +const classes = moduleStyles.default || moduleStyles; const style = { padding: 12, diff --git a/federated-css/expose-remotes/expose-css-module/src/bootstrap.js b/federated-css/expose-remotes/expose-css-module/src/bootstrap.js index a8680f71cdf..129ffb0c0f9 100644 --- a/federated-css/expose-remotes/expose-css-module/src/bootstrap.js +++ b/federated-css/expose-remotes/expose-css-module/src/bootstrap.js @@ -1,5 +1,7 @@ import App from './App'; import React from 'react'; -import ReactDOM from 'react-dom'; +import { createRoot } from 'react-dom/client'; -ReactDOM.render(, document.getElementById('root')); +const container = document.getElementById('root'); +const root = createRoot(container); +root.render(); diff --git a/federated-css/expose-remotes/expose-css-module/src/ensureNmdPolyfill.js b/federated-css/expose-remotes/expose-css-module/src/ensureNmdPolyfill.js new file mode 100644 index 00000000000..e15e583f54f --- /dev/null +++ b/federated-css/expose-remotes/expose-css-module/src/ensureNmdPolyfill.js @@ -0,0 +1,44 @@ +const runtimeNmd = (module) => { + module.paths = module.paths || []; + if (!module.children) { + module.children = []; + } + return module; +}; + +export const ensureNmdPolyfill = () => { + const runtimes = []; + + if (typeof __webpack_require__ === 'function') { + runtimes.push(__webpack_require__); + } + + if ( + typeof globalThis !== 'undefined' && + typeof globalThis.__webpack_require__ === 'function' + ) { + runtimes.push(globalThis.__webpack_require__); + } + + if (typeof Function.prototype.nmd !== 'function') { + Function.prototype.nmd = runtimeNmd; + } + + for (const runtime of runtimes) { + if (typeof runtime.nmd !== 'function') { + runtime.nmd = runtimeNmd; + } + } + + if ( + typeof globalThis !== 'undefined' && + typeof globalThis.__webpack_require__ !== 'function' && + runtimes.length > 0 + ) { + globalThis.__webpack_require__ = runtimes[0]; + } +}; + +ensureNmdPolyfill(); + +export default ensureNmdPolyfill; diff --git a/federated-css/expose-remotes/expose-css/src/bootstrap.js b/federated-css/expose-remotes/expose-css/src/bootstrap.js index a8680f71cdf..129ffb0c0f9 100644 --- a/federated-css/expose-remotes/expose-css/src/bootstrap.js +++ b/federated-css/expose-remotes/expose-css/src/bootstrap.js @@ -1,5 +1,7 @@ import App from './App'; import React from 'react'; -import ReactDOM from 'react-dom'; +import { createRoot } from 'react-dom/client'; -ReactDOM.render(, document.getElementById('root')); +const container = document.getElementById('root'); +const root = createRoot(container); +root.render(); diff --git a/federated-css/expose-remotes/expose-tailwind-css-global/rspack.config.js b/federated-css/expose-remotes/expose-tailwind-css-global/rspack.config.js index 2958eff419b..e9f5ea0e61e 100644 --- a/federated-css/expose-remotes/expose-tailwind-css-global/rspack.config.js +++ b/federated-css/expose-remotes/expose-tailwind-css-global/rspack.config.js @@ -7,7 +7,7 @@ const { } = require('../remotes.config'); module.exports = { - entry: './src/index', + entry: ['./src/ensureNmdPolyfill', './src/index'], mode: 'development', devServer: { static: { diff --git a/federated-css/expose-remotes/expose-tailwind-css-global/src/App.js b/federated-css/expose-remotes/expose-tailwind-css-global/src/App.js index 5a1a36e7a05..23e0d065092 100644 --- a/federated-css/expose-remotes/expose-tailwind-css-global/src/App.js +++ b/federated-css/expose-remotes/expose-tailwind-css-global/src/App.js @@ -1,3 +1,4 @@ +import './ensureNmdPolyfill'; import React from 'react'; const Component = React.lazy(() => import('./Component')); diff --git a/federated-css/expose-remotes/expose-tailwind-css-global/src/ensureNmdPolyfill.js b/federated-css/expose-remotes/expose-tailwind-css-global/src/ensureNmdPolyfill.js new file mode 100644 index 00000000000..e15e583f54f --- /dev/null +++ b/federated-css/expose-remotes/expose-tailwind-css-global/src/ensureNmdPolyfill.js @@ -0,0 +1,44 @@ +const runtimeNmd = (module) => { + module.paths = module.paths || []; + if (!module.children) { + module.children = []; + } + return module; +}; + +export const ensureNmdPolyfill = () => { + const runtimes = []; + + if (typeof __webpack_require__ === 'function') { + runtimes.push(__webpack_require__); + } + + if ( + typeof globalThis !== 'undefined' && + typeof globalThis.__webpack_require__ === 'function' + ) { + runtimes.push(globalThis.__webpack_require__); + } + + if (typeof Function.prototype.nmd !== 'function') { + Function.prototype.nmd = runtimeNmd; + } + + for (const runtime of runtimes) { + if (typeof runtime.nmd !== 'function') { + runtime.nmd = runtimeNmd; + } + } + + if ( + typeof globalThis !== 'undefined' && + typeof globalThis.__webpack_require__ !== 'function' && + runtimes.length > 0 + ) { + globalThis.__webpack_require__ = runtimes[0]; + } +}; + +ensureNmdPolyfill(); + +export default ensureNmdPolyfill; diff --git a/federated-css/expose-remotes/expose-tailwind-css-module/rspack.config.js b/federated-css/expose-remotes/expose-tailwind-css-module/rspack.config.js index a6e4c1c7620..294cd95dfde 100644 --- a/federated-css/expose-remotes/expose-tailwind-css-module/rspack.config.js +++ b/federated-css/expose-remotes/expose-tailwind-css-module/rspack.config.js @@ -7,7 +7,7 @@ const { } = require('../remotes.config'); module.exports = { - entry: './src/index', + entry: ['./src/ensureNmdPolyfill', './src/index'], mode: 'development', devServer: { static: { @@ -45,7 +45,17 @@ module.exports = { }, { test: /\.css$/, - use: ['style-loader', 'css-loader', 'postcss-loader'], + use: [ + 'style-loader', + { + loader: 'css-loader', + options: { + modules: true, + esModule: true, + }, + }, + 'postcss-loader', + ], }, ], }, diff --git a/federated-css/expose-remotes/expose-tailwind-css-module/src/App.js b/federated-css/expose-remotes/expose-tailwind-css-module/src/App.js index 5a1a36e7a05..23e0d065092 100644 --- a/federated-css/expose-remotes/expose-tailwind-css-module/src/App.js +++ b/federated-css/expose-remotes/expose-tailwind-css-module/src/App.js @@ -1,3 +1,4 @@ +import './ensureNmdPolyfill'; import React from 'react'; const Component = React.lazy(() => import('./Component')); diff --git a/federated-css/expose-remotes/expose-tailwind-css-module/src/Component.js b/federated-css/expose-remotes/expose-tailwind-css-module/src/Component.js index 39f2c4949c4..23dd1d90045 100644 --- a/federated-css/expose-remotes/expose-tailwind-css-module/src/Component.js +++ b/federated-css/expose-remotes/expose-tailwind-css-module/src/Component.js @@ -1,5 +1,6 @@ import React from 'react'; -import classes from './tailwind.module.css'; +import * as moduleStyles from './tailwind.module.css'; +const classes = moduleStyles.default || moduleStyles; const style = { padding: 12, diff --git a/federated-css/expose-remotes/expose-tailwind-css-module/src/ensureNmdPolyfill.js b/federated-css/expose-remotes/expose-tailwind-css-module/src/ensureNmdPolyfill.js new file mode 100644 index 00000000000..e15e583f54f --- /dev/null +++ b/federated-css/expose-remotes/expose-tailwind-css-module/src/ensureNmdPolyfill.js @@ -0,0 +1,44 @@ +const runtimeNmd = (module) => { + module.paths = module.paths || []; + if (!module.children) { + module.children = []; + } + return module; +}; + +export const ensureNmdPolyfill = () => { + const runtimes = []; + + if (typeof __webpack_require__ === 'function') { + runtimes.push(__webpack_require__); + } + + if ( + typeof globalThis !== 'undefined' && + typeof globalThis.__webpack_require__ === 'function' + ) { + runtimes.push(globalThis.__webpack_require__); + } + + if (typeof Function.prototype.nmd !== 'function') { + Function.prototype.nmd = runtimeNmd; + } + + for (const runtime of runtimes) { + if (typeof runtime.nmd !== 'function') { + runtime.nmd = runtimeNmd; + } + } + + if ( + typeof globalThis !== 'undefined' && + typeof globalThis.__webpack_require__ !== 'function' && + runtimes.length > 0 + ) { + globalThis.__webpack_require__ = runtimes[0]; + } +}; + +ensureNmdPolyfill(); + +export default ensureNmdPolyfill; diff --git a/federated-css/package.json b/federated-css/package.json index 57ddfe13270..bbfb149a6e3 100644 --- a/federated-css/package.json +++ b/federated-css/package.json @@ -7,7 +7,8 @@ "build": "pnpm --filter federated-css-mono_* --parallel build", "clean": "pnpm --filter federated-css-mono_* --parallel clean", "start:all": "pnpm --filter federated-css-mono_* --parallel start", - "e2e:ci": "pnpm run build", + "e2e:ci": "pnpm exec playwright install --with-deps && node scripts/kill-all-ports.cjs && playwright test --reporter=list", + "legacy:e2e:ci": "pnpm exec playwright install --with-deps && node scripts/kill-all-ports.cjs && playwright test --reporter=list", "start:expose-all": "pnpm --filter federated-css-mono_expose-* --parallel start", "start:react:css-styled-component": "pnpm --filter federated-css-mono_expose-* --filter @federated-css/css-and-styled-component --parallel start", "start:react:less-scss": "pnpm --filter federated-css-mono_expose-* --filter @federated-css/less-and-scss --parallel start", @@ -21,7 +22,13 @@ "start:nextjs:any-combination": "pnpm --filter federated-css-mono_expose-* --filter @federated-css/next-any-combination --parallel start", "start:nextjs:jss-tailwind-global": "pnpm --filter federated-css-mono_expose-* --filter @federated-css/next-jss-and-tailwind-global --parallel start", "start:nextjs:jss-css-and-tailwind-module": "pnpm --filter federated-css-mono_expose-* --filter @federated-css/next-jss-css-and-tailwind-module --parallel start", - "start:nextjs:less-and-styled-component": "pnpm --filter federated-css-mono_expose-* --filter @federated-css/next-less-and-styled-component --parallel start" + "start:nextjs:less-and-styled-component": "pnpm --filter federated-css-mono_expose-* --filter @federated-css/next-less-and-styled-component --parallel start", + "e2e": "playwright test", + "e2e:headed": "playwright test --headed" }, - "devDependencies": {} + "devDependencies": { + "@playwright/test": "^1.54.2", + "kill-port": "2.0.1", + "wait-on": "7.2.0" + } } diff --git a/federated-css/playwright.config.ts b/federated-css/playwright.config.ts new file mode 100644 index 00000000000..eb1cbb3da59 --- /dev/null +++ b/federated-css/playwright.config.ts @@ -0,0 +1,44 @@ +import { defineConfig, devices } from '@playwright/test'; + +// Always reuse existing servers to avoid repeated start/stop cycles during runs +const reuseExisting = true; + +export default defineConfig({ + testDir: './e2e', + timeout: 120_000, + expect: { + timeout: 30_000, + }, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 1 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1280, height: 720 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + globalTeardown: './e2e/global-teardown.ts', + webServer: [ + { + // Build/serve exposes and consumers-react; start next consumers; wait for all ports + command: 'node scripts/start-all.cjs', + cwd: __dirname, + port: 8081, + reuseExistingServer: reuseExisting, + timeout: 480_000, + }, + ], +}); diff --git a/federated-css/scripts/aggressive-port-cleanup.cjs b/federated-css/scripts/aggressive-port-cleanup.cjs new file mode 100644 index 00000000000..7d20e3ef130 --- /dev/null +++ b/federated-css/scripts/aggressive-port-cleanup.cjs @@ -0,0 +1,95 @@ +const { execSync } = require('node:child_process'); + +const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); + +function normalizePorts(ports) { + const list = Array.isArray(ports) ? ports : [ports]; + return [...new Set(list.map(Number).filter(port => Number.isFinite(port) && port > 0))]; +} + +function killWithLsof(ports) { + if (process.platform === 'win32') return false; + const args = ports.map(port => `-ti:${port}`).join(' '); + if (!args) return false; + try { + const stdout = execSync(`lsof ${args}`, { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] }).trim(); + if (!stdout) return false; + const pids = [...new Set(stdout.split(/\s+/).filter(Boolean))]; + if (pids.length === 0) return false; + execSync(`kill -9 ${pids.join(' ')}`, { stdio: 'ignore' }); + return true; + } catch (err) { + // lsof exits with code 1 if nothing is found – treat as success (port already free) + if (err.status === 1 || err.code === 1) { + return false; + } + throw err; + } +} + +function killWithFuser(ports) { + if (process.platform !== 'linux') return false; + const args = ports.map(port => `${port}/tcp`).join(' '); + if (!args) return false; + try { + execSync(`fuser -k ${args}`, { stdio: 'ignore' }); + return true; + } catch (err) { + // Exit code 1 means no processes to kill – ignore. + if (err.status === 1 || err.code === 1) { + return false; + } + throw err; + } +} + +async function aggressiveKillPorts(ports) { + const list = normalizePorts(ports); + if (list.length === 0) return; + + console.log(`[aggressive-cleanup] Killing ports ${list.join(', ')}...`); + + // Run both strategies to maximise compatibility. + try { + killWithLsof(list); + } catch (err) { + console.warn(`[aggressive-cleanup] lsof kill failed: ${err.message}`); + } + + try { + killWithFuser(list); + } catch (err) { + console.warn(`[aggressive-cleanup] fuser kill failed: ${err.message}`); + } +} + +async function aggressiveKillPort(port) { + await aggressiveKillPorts([port]); +} + +async function cleanupAllPorts() { + const reactConsumerPorts = [3001, 3002, 3003, 3004, 3005, 3006, 3007]; + const exposePorts = [4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007]; + const nextConsumerPorts = [8081, 8082, 8083, 8184]; + + const allPorts = [...reactConsumerPorts, ...exposePorts, ...nextConsumerPorts]; + + console.log('[aggressive-cleanup] Starting aggressive port cleanup...'); + for (let attempt = 1; attempt <= 3; attempt++) { + console.log(`[aggressive-cleanup] Attempt ${attempt}...`); + await aggressiveKillPorts(allPorts); + if (attempt < 3) { + await sleep(1000 * attempt); + } + } + console.log('[aggressive-cleanup] All ports aggressively cleaned.'); +} + +if (require.main === module) { + cleanupAllPorts().catch(err => { + console.error('[aggressive-cleanup] Error:', err); + process.exit(1); + }); +} + +module.exports = { aggressiveKillPort, aggressiveKillPorts, cleanupAllPorts }; diff --git a/federated-css/scripts/kill-all-ports.cjs b/federated-css/scripts/kill-all-ports.cjs new file mode 100644 index 00000000000..b90e4a79211 --- /dev/null +++ b/federated-css/scripts/kill-all-ports.cjs @@ -0,0 +1,78 @@ +const { execSync, spawn } = require('node:child_process'); +const path = require('node:path'); +const { cleanupAllPorts } = require('./aggressive-port-cleanup.cjs'); + +const reactConsumerPorts = [3001, 3002, 3003, 3004, 3005, 3006, 3007]; +const exposePorts = [4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007]; +const nextConsumerPorts = [8081, 8082, 8083, 8184]; + +const ports = [...new Set([...reactConsumerPorts, ...exposePorts, ...nextConsumerPorts])]; + +function detectUsedPorts(portList) { + const result = new Set(); + if (process.platform === 'win32') { + return portList.map(String); + } + + try { + const stdout = execSync('lsof -nPiTCP -sTCP:LISTEN', { + encoding: 'utf8', + stdio: ['ignore', 'pipe', 'ignore'], + }); + const candidates = new Set(portList); + for (const line of stdout.split('\n')) { + const match = line.match(/:(\d+)\s+\(LISTEN\)/); + if (!match) continue; + const port = Number(match[1]); + if (candidates.has(port)) { + result.add(String(port)); + } + } + } catch (err) { + if (!(err.status === 1 || err.code === 1)) { + console.warn(`[kill-all-ports] Unable to scan ports via lsof: ${err.message}`); + } + } + + return [...result]; +} + +async function runKillPortOnce(portList) { + if (portList.length === 0) return; + + const cliPath = require.resolve('kill-port/cli.js'); + console.log(`[kill-all-ports] Killing ports with single kill-port command: ${portList.join(', ')}`); + + return new Promise((resolve, reject) => { + const child = spawn(process.execPath, [cliPath, ...portList], { + stdio: 'inherit', + cwd: path.resolve(__dirname, '..'), + }); + + child.on('error', reject); + child.on('close', code => { + if (code === 0) { + resolve(); + } else { + reject(new Error(`kill-port exited with code ${code}`)); + } + }); + }); +} + +(async () => { + try { + const usedPorts = detectUsedPorts(ports); + if (usedPorts.length) { + await runKillPortOnce(usedPorts); + } else { + console.log('[kill-all-ports] No active processes detected on target ports.'); + } + } catch (err) { + console.warn(`[kill-all-ports] kill-port failed (${err.message}). Falling back to aggressive cleanup.`); + } + await cleanupAllPorts(); +})().catch(err => { + console.error('[kill-all-ports] Error:', err); + process.exit(1); +}); diff --git a/federated-css/scripts/start-all.cjs b/federated-css/scripts/start-all.cjs new file mode 100644 index 00000000000..1c2c420f287 --- /dev/null +++ b/federated-css/scripts/start-all.cjs @@ -0,0 +1,270 @@ +const { spawn } = require('node:child_process'); +const waitOn = require('wait-on'); +const path = require('node:path'); +const fs = require('node:fs'); +const { aggressiveKillPort, aggressiveKillPorts } = require('./aggressive-port-cleanup.cjs'); + +const WAIT_TIMEOUT = 480000; +const isReadyStatus = status => status >= 200 && status < 400; +const delay = ms => new Promise(resolve => setTimeout(resolve, ms)); +const { execSync } = require('node:child_process'); + +function isPortInUse(port) { + try { + const out = execSync(`lsof -nPiTCP -sTCP:LISTEN | grep :${port}\\>`, { stdio: ['ignore', 'pipe', 'ignore'] }).toString(); + return out.trim().length > 0; + } catch { + // grep exits non-zero if not found + return false; + } +} + +function forceKillPort(port) { + try { execSync(`lsof -ti:${port} | xargs kill -9`, { stdio: 'ignore' }); } catch {} + try { execSync(`fuser -k ${port}/tcp`, { stdio: 'ignore' }); } catch {} +} + +function diagnosePort(port, label) { + try { + const ssout = execSync(`ss -ltnp | grep :${port} || true`, { stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim(); + if (ssout) console.log(`[federated-css] diag ${label} port ${port}: ${ssout}`); + } catch {} + try { + const lsofout = execSync(`lsof -nPiTCP -sTCP:LISTEN | grep :${port} || true`, { stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim(); + if (lsofout) console.log(`[federated-css] diag ${label} port ${port} (lsof): ${lsofout}`); + } catch {} +} + +async function ensurePortFree(port, timeoutMs = 15000) { + const start = Date.now(); + while (Date.now() - start < timeoutMs) { + if (!isPortInUse(port)) return; + forceKillPort(port); + try { + const diag = execSync(`ss -ltnp | grep :${port} || true`, { stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim(); + if (diag) { + console.log(`[federated-css] port ${port} still in use -> ${diag}`); + } + } catch {} + await delay(500); + } +} + +const root = path.resolve(__dirname, '..'); + +// Ensure v8 compile cache writes go to a local ignored folder instead of polluting +// sibling workspaces (corepack/pnpm relies on this cache under the hood). +const v8CacheDir = path.join(root, '.cache', 'v8-compile-cache'); +fs.mkdirSync(v8CacheDir, { recursive: true }); +process.env.V8_COMPILE_CACHE_CACHE_DIR = v8CacheDir; + +function run(cmd, args) { + return spawn(cmd, args, { stdio: 'inherit', cwd: root, shell: true }); +} + +async function waitForReady(proc, resources, label, timeout = WAIT_TIMEOUT) { + let ready = false; + let exitHandler; + const waitPromise = waitOn({ resources, timeout, validateStatus: isReadyStatus }).then(() => { + ready = true; + }); + + const exitPromise = new Promise((_, reject) => { + exitHandler = code => { + if (!ready) { + const message = `${label} exited before becoming ready (code ${code ?? 'unknown'})`; + reject(new Error(message)); + } + }; + proc.once('exit', exitHandler); + }); + + try { + await Promise.race([waitPromise, exitPromise]); + if (!ready) { + await waitPromise.catch(() => {}); + throw new Error(`${label} did not report ready`); + } + } finally { + if (exitHandler) { + proc.removeListener('exit', exitHandler); + } + } +} + +async function ensureExit(proc) { + if (proc.exitCode != null || proc.signalCode != null) return; + await new Promise(resolve => proc.once('exit', resolve)); +} + +async function main() { + const reactConsumers = [ + { dir: 'combination-of-4', port: 3001, serve: true }, + { dir: 'combination-of-5', port: 3002, serve: true }, + { dir: 'css-and-styled-component', port: 3003 }, + { dir: 'css-module-and-jss', port: 3004 }, + { dir: 'less-and-scss', port: 3005 }, + { dir: 'tailwind-global-and-less', port: 3006 }, + { dir: 'tailwind-module-and-jss', port: 3007 }, + ]; + + const exposes = [4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007]; + + const nextConsumers = [ + { dir: 'jss-css-and-tailwind-module', port: 8083 }, + { dir: 'jss-and-tailwind-global', port: 8082 }, + { dir: 'less-and-styled-component', port: 8184 }, + { dir: 'combination-of-4', port: 8081 }, + ]; + + const procs = []; + + const removeProc = proc => { + const index = procs.indexOf(proc); + if (index !== -1) { + procs.splice(index, 1); + } + }; + + // Kill all potentially conflicting ports first using aggressive cleanup + console.log('[federated-css] cleaning up ports aggressively...'); + const allPorts = [...reactConsumers.map(c => c.port), ...exposes, ...nextConsumers.map(c => c.port)]; + + // Use aggressive cleanup for all ports + await aggressiveKillPorts(allPorts); + + // Give OS time to fully release ports + await delay(3000); + + console.log('[federated-css] starting consumers-react (sequential servers)...'); + for (const { dir, port, serve } of reactConsumers) { + const cwd = path.join('consumers-react', dir); + + // Build and serve static for ALL react consumers to avoid multiple dev servers + console.log(`[federated-css] building consumers-react ${dir} for static serve...`); + await new Promise((res, rej) => { + const buildProc = run('pnpm', ['-C', cwd, 'run', 'build']); + buildProc.on('exit', code => (code === 0 ? res() : rej(new Error(`build ${dir} failed`)))); + }); + console.log(`[federated-css] ensuring port ${port} is free for consumers-react ${dir}...`); + await ensurePortFree(port, 20000); + const serveProc = run('pnpm', ['-C', cwd, 'run', 'serve']); + procs.push(serveProc); + + await waitForReady(procs[procs.length - 1], [`http://localhost:${port}`], `consumers-react ${dir}`); + console.log(`[federated-css] consumers-react ${dir} up at ${port}`); + } + + console.log('[federated-css] building expose apps (sequential)...'); + for (const port of exposes) { + const dirMap = { + 4000: 'expose-css', + 4001: 'expose-css-module', + 4002: 'expose-jss', + 4003: 'expose-less', + 4004: 'expose-scss', + 4005: 'expose-styled-component', + 4006: 'expose-tailwind-css-global', + 4007: 'expose-tailwind-css-module', + }; + const dir = dirMap[port]; + if (!dir) continue; + const cwd = path.join('expose-remotes', dir); + await new Promise((res, rej) => { + const p = run('pnpm', ['-C', cwd, 'run', 'build']); + p.on('exit', c => (c === 0 ? res() : rej(new Error(`build ${dir} failed`)))); + }); + } + + console.log('[federated-css] serving expose apps (sequential)...'); + for (const port of exposes) { + const dirMap = { + 4000: 'expose-css', + 4001: 'expose-css-module', + 4002: 'expose-jss', + 4003: 'expose-less', + 4004: 'expose-scss', + 4005: 'expose-styled-component', + 4006: 'expose-tailwind-css-global', + 4007: 'expose-tailwind-css-module', + }; + const dir = dirMap[port]; + if (!dir) continue; + const cwd = path.join('expose-remotes', dir); + console.log(`[federated-css] ensuring port ${port} is free for expose ${dir}...`); + await ensurePortFree(port, 20000); + const p = run('pnpm', ['-C', cwd, 'run', 'serve']); + procs.push(p); + const exposeResources = [ + `http://localhost:${port}`, + `http://localhost:${port}/remoteEntry.js`, + ]; + await waitForReady(procs[procs.length - 1], exposeResources, `expose ${dir}`); + console.log(`[federated-css] expose ${dir} up at ${port}`); + } + + console.log('[federated-css] starting Next consumers (sequential production servers)...'); + for (const { dir, port } of nextConsumers) { + const cwd = path.join('consumers-nextjs', dir); + const label = `next ${dir}`; + let lastError; + const maxAttempts = 3; + + for (let attempt = 1; attempt <= maxAttempts; attempt++) { + console.log(`[federated-css] preparing ${label} on port ${port} (attempt ${attempt}/${maxAttempts})...`); + await aggressiveKillPort(port); + await delay(1500 * attempt); + + if (attempt === 1) { + console.log(`[federated-css] building ${label} for production...`); + await new Promise((resolve, reject) => { + const buildProc = run('pnpm', ['-C', cwd, 'run', 'build']); + buildProc.on('exit', code => (code === 0 ? resolve() : reject(new Error(`${label} build failed (code ${code})`)))); + }); + } + + console.log(`[federated-css] ensuring port ${port} is free for ${label}...`); + await ensurePortFree(port, 20000); + console.log(`[federated-css] starting ${label} with next start...`); + const proc = run('pnpm', ['-C', cwd, 'exec', 'next', 'start', '-H', '127.0.0.1', '-p', String(port)]); + procs.push(proc); + + try { + await waitForReady(proc, [`http://localhost:${port}`], `${label} (port ${port})`); + console.log(`[federated-css] ${label} up at ${port}`); + break; + } catch (error) { + lastError = error; + console.warn(`[federated-css] ${label} failed to start: ${error.message}`); + diagnosePort(port, label); + removeProc(proc); + try { + proc.kill('SIGTERM'); + } catch (killError) { + if (killError && killError.code !== 'ESRCH') { + console.warn(`[federated-css] failed to kill ${label}: ${killError.message}`); + } + } + await ensureExit(proc); + // Make absolutely sure the port is free before retrying + console.log(`[federated-css] clearing port ${port} before retrying ${label}...`); + await ensurePortFree(port, 20000); + await delay(1500 * attempt); + + if (attempt === maxAttempts) { + throw lastError; + } + } + } + } + + console.log('[federated-css] all ports are up.'); + + const killAll = sig => { procs.forEach(pr => pr.kill(sig)); }; + process.on('SIGINT', () => killAll('SIGINT')); + process.on('SIGTERM', () => killAll('SIGTERM')); + + await new Promise(() => {}); +} + +main().catch(err => { console.error(err); process.exit(1); }); diff --git a/federated-npm/cypress.env.json b/federated-npm/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/federated-npm/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/federated-npm/e2e/checkApplications.cy.ts b/federated-npm/e2e/checkApplications.cy.ts deleted file mode 100644 index 86ec317a6bd..00000000000 --- a/federated-npm/e2e/checkApplications.cy.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { BaseMethods } from '../../cypress-e2e/common/base'; -import { baseSelectors } from '../../cypress-e2e/common/selectors'; -import { Constants } from '../../cypress-e2e/fixtures/constants'; - -const basePage: BaseMethods = new BaseMethods(); - -const appsData = [ - { - appNameText: Constants.commonConstantsData.commonCountAppNames.app1, - host: 3001, - }, - { - appNameText: Constants.commonConstantsData.commonCountAppNames.app2, - host: 3002, - }, - // { - // appNameText: Constants.commonConstantsData.commonCountAppNames.app3, - // host: 3003 - // }, -]; - -appsData.forEach(function (property: { appNameText: string; host: number }) { - describe('Federated npm', () => { - context(`Check ${property.appNameText}`, () => { - it(`Check header block with text visibility`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: Constants.commonConstantsData.basicComponents.basicHostRemote, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: property.host === 3003 ? appsData[1].appNameText : `${property.appNameText}`, - visibilityState: 'be.visible', - }); - }); - - it(`Check button text visibility`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.updatedConstantsData.commonAppWithButton.app2, - visibilityState: 'be.visible', - }); - }); - }); - }); -}); diff --git a/federated-npm/e2e/checkApplications.spec.ts b/federated-npm/e2e/checkApplications.spec.ts new file mode 100644 index 00000000000..8bf634b4a7b --- /dev/null +++ b/federated-npm/e2e/checkApplications.spec.ts @@ -0,0 +1,54 @@ +import { test } from '@playwright/test'; +import { BaseMethods } from '../../playwright-e2e/common/base'; +import { baseSelectors } from '../../playwright-e2e/common/selectors'; +import { Constants } from '../../playwright-e2e/fixtures/constants'; + +const appsData = [ + { + appName: Constants.commonConstantsData.commonCountAppNames.app1, + host: 3001, + }, + { + appName: Constants.commonConstantsData.commonCountAppNames.app2, + host: 3002, + }, + { + // App 3 renders App 2 heading text because it consumes the remote app. + appName: Constants.commonConstantsData.commonCountAppNames.app2, + host: 3003, + }, +]; + +test.describe('Federated npm', () => { + appsData.forEach(({ appName, host }) => { + test.describe(`Check ${appName} on port ${host}`, () => { + test('Check header block with text visibility', async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: host }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h1, + text: Constants.commonConstantsData.basicComponents.basicHostRemote, + visibilityState: 'be.visible', + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h2, + text: appName, + visibilityState: 'be.visible', + }); + }); + + test('Check button text visibility', async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: host }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.updatedConstantsData.commonAppWithButton.app2, + visibilityState: 'be.visible', + }); + }); + }); + }); +}); diff --git a/federated-npm/package.json b/federated-npm/package.json index 976c7b8f62b..d14f845e3ed 100644 --- a/federated-npm/package.json +++ b/federated-npm/package.json @@ -11,14 +11,19 @@ "scripts": { "start": "pnpm --filter federated-npm_* --parallel start", "legacy:start": "pnpm --filter federated-npm_* --parallel legacy:start", - "build": "pnpm --filter build", - "legacy:build": "pnpm --filter legacy:build", + "build": "pnpm --filter federated-npm_* --parallel build", + "legacy:build": "pnpm --filter federated-npm_* --parallel legacy:build", "serve": "pnpm --filter federated-npm_* --parallel serve", "clean": "pnpm --filter federated-npm_* --parallel clean", - "e2e:ci": "pnpm start & sleep 1 && wait-on tcp:3001 tcp:3002 tcp:3003 && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome", - "legacy:e2e:ci": "pnpm legacy:start & sleep 1 && wait-on tcp:3001 tcp:3002 tcp:3003 && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome" + "test:e2e": "npx playwright test", + "test:e2e:ui": "npx playwright test --ui", + "test:e2e:debug": "npx playwright test --debug", + "e2e:ci": "pnpm build && npx playwright install --with-deps && npx playwright test --reporter=list", + "legacy:e2e:ci": "pnpm legacy:build && npx playwright install --with-deps && npx playwright test --reporter=list" }, "devDependencies": { - "wait-on": "7.2.0" + "wait-on": "7.2.0", + "@playwright/test": "^1.54.2", + "playwright": "^1.54.2" } } diff --git a/federated-npm/playwright.config.ts b/federated-npm/playwright.config.ts new file mode 100644 index 00000000000..cefda7a1fc5 --- /dev/null +++ b/federated-npm/playwright.config.ts @@ -0,0 +1,52 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e', + timeout: 60000, + expect: { + timeout: 15000, + }, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 1 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost:3001', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1920, height: 1080 }, + }, + + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + + webServer: [ + { + command: 'cd app1 && pnpm serve', + port: 3001, + reuseExistingServer: !process.env.CI, + timeout: 120000, + }, + { + command: 'cd app2 && pnpm serve', + port: 3002, + reuseExistingServer: !process.env.CI, + timeout: 120000, + }, + { + command: 'cd app3 && pnpm serve', + port: 3003, + reuseExistingServer: !process.env.CI, + timeout: 120000, + }, + ], +}); diff --git a/i18next-nextjs-react/cypress.env.json b/i18next-nextjs-react/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/i18next-nextjs-react/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/i18next-nextjs-react/e2e/checkNextHost.cy.ts b/i18next-nextjs-react/e2e/checkNextHost.cy.ts deleted file mode 100644 index a6f5c8ae65b..00000000000 --- a/i18next-nextjs-react/e2e/checkNextHost.cy.ts +++ /dev/null @@ -1,181 +0,0 @@ -import { BaseMethods } from '../../cypress-e2e/common/base'; -import { baseSelectors } from '../../cypress-e2e/common/selectors'; -import { Constants } from '../../cypress-e2e/fixtures/constants'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('i18next Nextjs React', () => { - context('Check Next host', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3000, - }); - }); - - it('Check the content exist on Next host', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.nextHost.english.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.nextHost.english.text, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.nextHost.english.title, - }); - - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.title, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.text, - }); - }); - - it('Check the language is changed from Next section', () => { - basePage.clickElementWithText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.nextHost.english.button, - }); - - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.nextHost.francais.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.nextHost.francais.text, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.nextHost.francais.title, - }); - - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.francais.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.francais.title, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.francais.text, - }); - - basePage.clickElementWithText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.nextHost.francais.button, - }); - - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.nextHost.english.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.nextHost.english.text, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.nextHost.english.title, - }); - - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.title, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.text, - }); - }); - - it('Check the language is changed from remote child section', () => { - basePage.clickElementWithText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.button, - }); - - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.nextHost.francais.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.nextHost.francais.text, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.nextHost.francais.title, - }); - - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.francais.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.francais.title, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.francais.text, - }); - - basePage.clickElementWithText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.francais.button, - }); - - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.nextHost.english.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.nextHost.english.text, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.nextHost.english.title, - }); - - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.title, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.text, - }); - }); - }); -}); diff --git a/i18next-nextjs-react/e2e/checkNextHost.spec.ts b/i18next-nextjs-react/e2e/checkNextHost.spec.ts new file mode 100644 index 00000000000..fac8518e473 --- /dev/null +++ b/i18next-nextjs-react/e2e/checkNextHost.spec.ts @@ -0,0 +1,192 @@ +import { test } from '@playwright/test'; + +import { BaseMethods } from '../../playwright-e2e/common/base'; +import { baseSelectors } from '../../cypress-e2e/common/selectors'; +import { Constants } from '../../cypress-e2e/fixtures/constants'; + +const translations = Constants.updatedConstantsData.reactAppsTranslations; + +test.describe('i18next Nextjs React - Next Host', () => { + let basePage: BaseMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: 3000 }); + }); + + test('Check the content exist on Next host', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.section, + text: translations.nextHost.english.button, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.nextHost.english.text, + }); + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.nextHost.english.title, + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.section, + text: translations.remote.english.button, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.remote.english.title, + }); + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.remote.english.text, + }); + }); + + test('Check the language is changed from Next section', async () => { + await basePage.clickElementWithText({ + selector: baseSelectors.tags.section, + text: translations.nextHost.english.button, + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.section, + text: translations.nextHost.francais.button, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.nextHost.francais.text, + }); + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.nextHost.francais.title, + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.section, + text: translations.remote.francais.button, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.remote.francais.title, + }); + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.remote.francais.text, + }); + + await basePage.clickElementWithText({ + selector: baseSelectors.tags.section, + text: translations.nextHost.francais.button, + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.section, + text: translations.nextHost.english.button, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.nextHost.english.text, + }); + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.nextHost.english.title, + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.section, + text: translations.remote.english.button, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.remote.english.title, + }); + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.remote.english.text, + }); + }); + + test('Check the language is changed from remote child section', async () => { + await basePage.clickElementWithText({ + selector: baseSelectors.tags.section, + text: translations.remote.english.button, + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.section, + text: translations.nextHost.francais.button, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.nextHost.francais.text, + }); + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.nextHost.francais.title, + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.section, + text: translations.remote.francais.button, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.remote.francais.title, + }); + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.remote.francais.text, + }); + + await basePage.clickElementWithText({ + selector: baseSelectors.tags.section, + text: translations.remote.francais.button, + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.section, + text: translations.nextHost.english.button, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.nextHost.english.text, + }); + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.nextHost.english.title, + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.section, + text: translations.remote.english.button, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.remote.english.title, + }); + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.remote.english.text, + }); + }); +}); diff --git a/i18next-nextjs-react/e2e/checkReactHost.cy.ts b/i18next-nextjs-react/e2e/checkReactHost.cy.ts deleted file mode 100644 index fd6364ae5be..00000000000 --- a/i18next-nextjs-react/e2e/checkReactHost.cy.ts +++ /dev/null @@ -1,189 +0,0 @@ -import { BaseMethods } from '../../cypress-e2e/common/base'; -import { baseSelectors } from '../../cypress-e2e/common/selectors'; -import { Constants } from '../../cypress-e2e/fixtures/constants'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('i18next Nextjs React', () => { - // TODO cy.exec don't build the apps correctly cause lerna executes without exit code. Uncomment after fix this issue! - // before(() => { - // basePage.buildTheSample(Constants.samplesPath.i18nextNextjsReact) - // }) - - // after(() => { - // basePage.shutdownTheSample(Constants.samplesPath.i18nextNextjsReact) - // }) - context('Check Next host', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3001, - }); - }); - - it('Check the content exist on React host', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.host.english.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.host.english.text, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.host.english.title, - }); - - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.title, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.text, - }); - }); - - it('Check the language is changed from Next section', () => { - basePage.clickElementWithText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.host.english.button, - }); - - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.host.francais.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.host.francais.text, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.host.francais.title, - }); - - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.francais.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.francais.title, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.francais.text, - }); - - basePage.clickElementWithText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.host.francais.button, - }); - - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.host.english.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.host.english.text, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.host.english.title, - }); - - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.title, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.text, - }); - }); - - it('Check the language is changed from remote child section', () => { - basePage.clickElementWithText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.button, - }); - - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.host.francais.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.host.francais.text, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.host.francais.title, - }); - - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.francais.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.francais.title, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.francais.text, - }); - - basePage.clickElementWithText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.francais.button, - }); - - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.host.english.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.host.english.text, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.host.english.title, - }); - - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.title, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.text, - }); - }); - }); -}); diff --git a/i18next-nextjs-react/e2e/checkReactHost.spec.ts b/i18next-nextjs-react/e2e/checkReactHost.spec.ts new file mode 100644 index 00000000000..7fd046a4232 --- /dev/null +++ b/i18next-nextjs-react/e2e/checkReactHost.spec.ts @@ -0,0 +1,192 @@ +import { test } from '@playwright/test'; + +import { BaseMethods } from '../../playwright-e2e/common/base'; +import { baseSelectors } from '../../cypress-e2e/common/selectors'; +import { Constants } from '../../cypress-e2e/fixtures/constants'; + +const translations = Constants.updatedConstantsData.reactAppsTranslations; + +test.describe('i18next Nextjs React - React Host', () => { + let basePage: BaseMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: 3001 }); + }); + + test('Check the content exist on React host', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.section, + text: translations.host.english.button, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.host.english.text, + }); + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.host.english.title, + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.section, + text: translations.remote.english.button, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.remote.english.title, + }); + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.remote.english.text, + }); + }); + + test('Check the language is changed from React host section', async () => { + await basePage.clickElementWithText({ + selector: baseSelectors.tags.section, + text: translations.host.english.button, + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.section, + text: translations.host.francais.button, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.host.francais.text, + }); + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.host.francais.title, + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.section, + text: translations.remote.francais.button, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.remote.francais.title, + }); + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.remote.francais.text, + }); + + await basePage.clickElementWithText({ + selector: baseSelectors.tags.section, + text: translations.host.francais.button, + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.section, + text: translations.host.english.button, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.host.english.text, + }); + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.host.english.title, + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.section, + text: translations.remote.english.button, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.remote.english.title, + }); + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.remote.english.text, + }); + }); + + test('Check the language is changed from remote child section', async () => { + await basePage.clickElementWithText({ + selector: baseSelectors.tags.section, + text: translations.remote.english.button, + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.section, + text: translations.host.francais.button, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.host.francais.text, + }); + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.host.francais.title, + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.section, + text: translations.remote.francais.button, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.remote.francais.title, + }); + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.remote.francais.text, + }); + + await basePage.clickElementWithText({ + selector: baseSelectors.tags.section, + text: translations.remote.francais.button, + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.section, + text: translations.host.english.button, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.host.english.text, + }); + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.host.english.title, + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.section, + text: translations.remote.english.button, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.remote.english.title, + }); + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: translations.remote.english.text, + }); + }); +}); diff --git a/i18next-nextjs-react/e2e/checkReactRemote.cy.ts b/i18next-nextjs-react/e2e/checkReactRemote.cy.ts deleted file mode 100644 index 4fd3e2fcc73..00000000000 --- a/i18next-nextjs-react/e2e/checkReactRemote.cy.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { BaseMethods } from '../../cypress-e2e/common/base'; -import { baseSelectors } from '../../cypress-e2e/common/selectors'; -import { Constants } from '../../cypress-e2e/fixtures/constants'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('i18next Nextjs React', () => { - // TODO cy.exec don't build the apps correctly cause lerna executes without exit code. Uncomment after fix this issue! - // before(() => { - // basePage.buildTheSample(Constants.samplesPath.i18nextNextjsReact) - // }) - - // after(() => { - // basePage.shutdownTheSample(Constants.samplesPath.i18nextNextjsReact) - // }) - context('Check React remote', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3002, - }); - }); - - it('Check the content of the page exist', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.ids.app, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.title, - }); - basePage.checkElementContainText({ - selector: baseSelectors.ids.app, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.text, - }); - }); - - it('Check the language is changed', () => { - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.button, - }); - - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.francais.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.ids.app, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.francais.title, - }); - basePage.checkElementContainText({ - selector: baseSelectors.ids.app, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.francais.text, - }); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.francais.button, - }); - - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.ids.app, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.title, - }); - basePage.checkElementContainText({ - selector: baseSelectors.ids.app, - text: Constants.updatedConstantsData.reactAppsTranslations.remote.english.text, - }); - }); - }); -}); diff --git a/i18next-nextjs-react/e2e/checkReactRemote.spec.ts b/i18next-nextjs-react/e2e/checkReactRemote.spec.ts new file mode 100644 index 00000000000..858db416465 --- /dev/null +++ b/i18next-nextjs-react/e2e/checkReactRemote.spec.ts @@ -0,0 +1,75 @@ +import { test } from '@playwright/test'; + +import { BaseMethods } from '../../playwright-e2e/common/base'; +import { baseSelectors } from '../../cypress-e2e/common/selectors'; +import { Constants } from '../../cypress-e2e/fixtures/constants'; + +const translations = Constants.updatedConstantsData.reactAppsTranslations; + +test.describe('i18next Nextjs React - React Remote', () => { + let basePage: BaseMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: 3002 }); + }); + + test('Check the content of the page exist', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: translations.remote.english.button, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.ids.app, + text: translations.remote.english.title, + }); + await basePage.checkElementContainText({ + selector: baseSelectors.ids.app, + text: translations.remote.english.text, + }); + }); + + test('Check the language is changed', async () => { + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: translations.remote.english.button, + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: translations.remote.francais.button, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.ids.app, + text: translations.remote.francais.title, + }); + await basePage.checkElementContainText({ + selector: baseSelectors.ids.app, + text: translations.remote.francais.text, + }); + + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: translations.remote.francais.button, + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: translations.remote.english.button, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.ids.app, + text: translations.remote.english.title, + }); + await basePage.checkElementContainText({ + selector: baseSelectors.ids.app, + text: translations.remote.english.text, + }); + }); +}); diff --git a/i18next-nextjs-react/e2e/runAll.cy.ts b/i18next-nextjs-react/e2e/runAll.cy.ts deleted file mode 100644 index 07be71f77ec..00000000000 --- a/i18next-nextjs-react/e2e/runAll.cy.ts +++ /dev/null @@ -1,3 +0,0 @@ -import './checkNextHost.cy'; -import './checkReactHost.cy'; -import './checkReactRemote.cy'; diff --git a/i18next-nextjs-react/next-host/components/ReactRemoteContent.tsx b/i18next-nextjs-react/next-host/components/ReactRemoteContent.tsx new file mode 100644 index 00000000000..744b789b6f7 --- /dev/null +++ b/i18next-nextjs-react/next-host/components/ReactRemoteContent.tsx @@ -0,0 +1,33 @@ +import React, { type MouseEvent } from 'react'; +import i18nService from 'i18next-shared-lib/lib/i18nService'; + +import useReactRemoteTranslation from '../i18n/useReactRemoteTranslation'; + +const ReactRemoteContent = () => { + const { t } = useReactRemoteTranslation('react-remote-main'); + + const switchLanguage = () => { + i18nService.switchLanguage(); + }; + + const handleButtonClick = (event: MouseEvent) => { + event.stopPropagation(); + switchLanguage(); + }; + + return ( +
+
{t('remoteTitle')}
+ +
{t('remoteContent')}
+
+ ); +}; + +export default ReactRemoteContent; diff --git a/i18next-nextjs-react/next-host/i18n/react-remote/en/index.ts b/i18next-nextjs-react/next-host/i18n/react-remote/en/index.ts new file mode 100644 index 00000000000..76ccabd50d3 --- /dev/null +++ b/i18next-nextjs-react/next-host/i18n/react-remote/en/index.ts @@ -0,0 +1,7 @@ +import reactRemoteMain from './react-remote-main.json'; + +const TranslationsEN = { + 'react-remote-main': reactRemoteMain, +}; + +export default TranslationsEN; diff --git a/i18next-nextjs-react/next-host/i18n/react-remote/en/react-remote-main.json b/i18next-nextjs-react/next-host/i18n/react-remote/en/react-remote-main.json new file mode 100644 index 00000000000..28f09e6cd56 --- /dev/null +++ b/i18next-nextjs-react/next-host/i18n/react-remote/en/react-remote-main.json @@ -0,0 +1,5 @@ +{ + "remoteTitle": "React Remote : Title", + "changeLanguageButtonLabel": "React Remote : change language", + "remoteContent": "React Remote : I'm the remote child !" +} diff --git a/i18next-nextjs-react/next-host/i18n/react-remote/fr/index.ts b/i18next-nextjs-react/next-host/i18n/react-remote/fr/index.ts new file mode 100644 index 00000000000..94421e55b97 --- /dev/null +++ b/i18next-nextjs-react/next-host/i18n/react-remote/fr/index.ts @@ -0,0 +1,7 @@ +import reactRemoteMain from './react-remote-main.json'; + +const TranslationsFR = { + 'react-remote-main': reactRemoteMain, +}; + +export default TranslationsFR; diff --git a/i18next-nextjs-react/next-host/i18n/react-remote/fr/react-remote-main.json b/i18next-nextjs-react/next-host/i18n/react-remote/fr/react-remote-main.json new file mode 100644 index 00000000000..321be176817 --- /dev/null +++ b/i18next-nextjs-react/next-host/i18n/react-remote/fr/react-remote-main.json @@ -0,0 +1,5 @@ +{ + "remoteTitle": "React Remote : Titre", + "changeLanguageButtonLabel": "React Remote : changer la langue", + "remoteContent": "React Remote : Je suis le remote child" +} diff --git a/i18next-nextjs-react/next-host/i18n/useReactRemoteTranslation.ts b/i18next-nextjs-react/next-host/i18n/useReactRemoteTranslation.ts new file mode 100644 index 00000000000..435f68f5434 --- /dev/null +++ b/i18next-nextjs-react/next-host/i18n/useReactRemoteTranslation.ts @@ -0,0 +1,11 @@ +import useInstanceTranslation from 'i18next-shared-lib/lib/useInstanceTranslation'; + +import TranslationsEN from './react-remote/en'; +import TranslationsFR from './react-remote/fr'; + +const useReactRemoteTranslation = useInstanceTranslation('react-remote', { + en: TranslationsEN, + fr: TranslationsFR, +}); + +export default useReactRemoteTranslation; diff --git a/i18next-nextjs-react/next-host/next.config.js b/i18next-nextjs-react/next-host/next.config.js deleted file mode 100644 index ecf2b271161..00000000000 --- a/i18next-nextjs-react/next-host/next.config.js +++ /dev/null @@ -1,34 +0,0 @@ -const { NextFederationPlugin } = require('@module-federation/nextjs-mf'); -const deps = require('./package.json').dependencies; - -module.exports = { - webpack(config, options) { - if (!options.isServer) { - config.plugins.push( - new NextFederationPlugin({ - name: 'next-host', - filename: 'static/chunks/remoteEntry.js', - remotes: { - reactRemote: 'reactRemote@http://localhost:3002/remoteEntry.js', - }, - exposes: {}, - shared: { - 'i18next-shared-lib/': { - // BEWARE THE TRAILING "/" !! - singleton: true, - }, - i18next: { - singleton: true, - requiredVersion: deps.i18next, - }, - 'react-i18next': { - singleton: true, - requiredVersion: deps['react-i18next'], - }, - }, - }), - ); - } - return config; - }, -}; diff --git a/i18next-nextjs-react/next-host/pages/_app.tsx b/i18next-nextjs-react/next-host/pages/_app.tsx index f3f962852c8..a8d199eb95f 100644 --- a/i18next-nextjs-react/next-host/pages/_app.tsx +++ b/i18next-nextjs-react/next-host/pages/_app.tsx @@ -1,7 +1,20 @@ import '../styles/globals.css'; import type { AppProps } from 'next/app'; +import { useEffect } from 'react'; function MyApp({ Component, pageProps }: AppProps) { + useEffect(() => { + const selectors = ['style[data-next-hide-fouc="true"]', 'noscript[data-next-hide-fouc="true"]']; + + selectors.forEach((selector) => { + document.querySelectorAll(selector).forEach((element) => element.remove()); + }); + + if (document.body.style.display === 'none') { + document.body.style.removeProperty('display'); + } + }, []); + return ; } diff --git a/i18next-nextjs-react/next-host/pages/index.tsx b/i18next-nextjs-react/next-host/pages/index.tsx index c22400c6c85..ded27763ebe 100644 --- a/i18next-nextjs-react/next-host/pages/index.tsx +++ b/i18next-nextjs-react/next-host/pages/index.tsx @@ -1,17 +1,32 @@ import type { NextPage } from 'next'; -import useNextHostTranslation from '../i18n/useNextHostTranslation'; import dynamic from 'next/dynamic'; -const ReactRemoteContent = dynamic(() => import('reactRemote/Content'), { ssr: false }); +import { useEffect, useState, type MouseEvent } from 'react'; import i18nService from 'i18next-shared-lib/lib/i18nService'; -console.log(__webpack_share_scopes__); -setTimeout(() => console.log(__webpack_share_scopes__), 1000); +import useNextHostTranslation from '../i18n/useNextHostTranslation'; + +const ReactRemoteContent = dynamic(() => import('../components/ReactRemoteContent'), { ssr: false }); const Home: NextPage = () => { const { t } = useNextHostTranslation('next-main'); + const [isRemoteVisible, setIsRemoteVisible] = useState(false); + + useEffect(() => { + setIsRemoteVisible(true); + }, []); + const switchLanguage = () => { i18nService.switchLanguage(); }; + + const handleSectionClick = () => { + switchLanguage(); + }; + + const handleButtonClick = (event: MouseEvent) => { + event.stopPropagation(); + switchLanguage(); + }; return (
{

Next Host

{t('mainText')}

- -
-
-

{`${t('remoteChildTitle')} :`}

- + + {isRemoteVisible && ( +
+

{`${t('remoteChildTitle')} :`}

+ +
+ )}
); diff --git a/i18next-nextjs-react/package.json b/i18next-nextjs-react/package.json index 099747027de..be271936d7a 100644 --- a/i18next-nextjs-react/package.json +++ b/i18next-nextjs-react/package.json @@ -6,11 +6,12 @@ "main": "index.js", "scripts": { "start": "concurrently \"cd next-host; npm run dev\" \"cd react-host; npm run start:live\" \"cd react-remote; npm run start:live\" \"cd i18next-shared-lib; npm run dev\"", - "e2e:ci": "pnpm start & wait-on http-get://localhost:3000/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/runAll.cy.ts\" --browser=chrome --headless" + "e2e:ci": "pnpm exec playwright test" }, "author": "Frédéric JAMMES", "license": "ISC", "devDependencies": { + "@playwright/test": "^1.54.2", "wait-on": "7.2.0" } } diff --git a/i18next-nextjs-react/playwright.config.ts b/i18next-nextjs-react/playwright.config.ts new file mode 100644 index 00000000000..cef76d392ab --- /dev/null +++ b/i18next-nextjs-react/playwright.config.ts @@ -0,0 +1,22 @@ +import { defineConfig } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e', + timeout: 150_000, + expect: { + timeout: 10_000, + }, + retries: process.env.CI ? 1 : 0, + workers: 1, + reporter: 'list', + use: { + baseURL: 'http://localhost:3000', + trace: 'on-first-retry', + }, + webServer: { + command: 'pnpm run start', + url: 'http://localhost:3000', + timeout: 240_000, + reuseExistingServer: !process.env.CI, + }, +}); diff --git a/i18next-nextjs-react/react-host/src/App.tsx b/i18next-nextjs-react/react-host/src/App.tsx index a860cfdef97..e25cf58c994 100644 --- a/i18next-nextjs-react/react-host/src/App.tsx +++ b/i18next-nextjs-react/react-host/src/App.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { type MouseEvent } from 'react'; import { createRoot } from 'react-dom/client'; import './index.css'; @@ -12,6 +12,15 @@ const App = () => { const switchLanguage = () => { i18nService.switchLanguage(); }; + + const handleSectionClick = () => { + switchLanguage(); + }; + + const handleButtonClick = (event: MouseEvent) => { + event.stopPropagation(); + switchLanguage(); + }; return (
{

React Host

{t('mainText')}

- -
-
-

{`${t('remoteChildTitle')} :`}

- + +
+

{`${t('remoteChildTitle')} :`}

+ +
); diff --git a/i18next-nextjs-react/react-remote/src/Content.tsx b/i18next-nextjs-react/react-remote/src/Content.tsx index 3f44ec0d902..be88cba264b 100644 --- a/i18next-nextjs-react/react-remote/src/Content.tsx +++ b/i18next-nextjs-react/react-remote/src/Content.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { type MouseEvent } from 'react'; import useReactRemoteTranslation from './i18n/useReactRemoteTranslation'; import i18nService from 'i18next-shared-lib/lib/i18nService'; @@ -9,6 +9,11 @@ export const Content = () => { i18nService.switchLanguage(); }; + const handleButtonClick = (event: MouseEvent) => { + event.stopPropagation(); + switchLanguage(); + }; + return (
{ >
{t('remoteTitle')}
{t('remoteContent')}
diff --git a/loadable-react-16/cypress.env.json b/loadable-react-16/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/loadable-react-16/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/loadable-react-16/e2e/checkLoadableReact16Apps.cy.ts b/loadable-react-16/e2e/checkLoadableReact16Apps.cy.ts deleted file mode 100644 index 0b2085150cf..00000000000 --- a/loadable-react-16/e2e/checkLoadableReact16Apps.cy.ts +++ /dev/null @@ -1,119 +0,0 @@ -import { Constants } from '../../cypress-e2e/fixtures/constants'; -import { baseSelectors, selectors } from '../../cypress-e2e/common/selectors'; -import { BaseMethods } from '../../cypress-e2e/common/base'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Loadable React 16', () => { - context('Check App1', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3000, - }); - }); - it('Check App headers and buttons visability', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: Constants.elementsText.reactApps.header, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: Constants.elementsText.reactApps.app1.subHeader, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h3, - text: Constants.elementsText.reactApps.header3, - visibilityState: 'be.visible', - }); - basePage.checkElementVisibility({ - selector: baseSelectors.tags.inputs.input, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.reactApps.regularButton, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.reactApps.loadableButton, - visibilityState: 'be.visible', - }); - }); - - it('Check that App 2 Content Block with filled text appear', () => { - basePage.fillField({ - selector: baseSelectors.tags.inputs.input, - text: Constants.commonConstantsData.standardPhrase, - }); - basePage.checkElementWithTextPresence({ - selector: `${selectors.reactApp.app2ContentBlock} ${baseSelectors.tags.headers.h2}`, - text: Constants.elementsText.reactApps.splitedApp.header, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: `${selectors.reactApp.app2ContentBlock} ${baseSelectors.tags.paragraph}`, - text: Constants.elementsText.reactApps.splitedApp.subHeader, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.strong, - text: Constants.commonConstantsData.standardPhrase, - visibilityState: 'be.visible', - }); - }); - }); -}); - -describe('Loadable React 16', () => { - context('Check App2', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3001, - }); - }); - - it('Check App elements visability', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: Constants.elementsText.reactApps.header, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: Constants.elementsText.reactApps.app2.subHeader, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h3, - text: Constants.elementsText.reactApps.header3, - visibilityState: 'be.visible', - }); - basePage.checkElementVisibility({ - selector: baseSelectors.tags.inputs.input, - }); - }); - it('Check that App 2 Content Block with filled text appear', () => { - basePage.fillField({ - selector: baseSelectors.tags.inputs.input, - text: Constants.commonConstantsData.standardPhrase, - }); - basePage.checkElementWithTextPresence({ - selector: `${selectors.reactApp.app2ContentBlock} ${baseSelectors.tags.headers.h2}`, - text: Constants.elementsText.reactApps.splitedApp.header, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: `${selectors.reactApp.app2ContentBlock} ${baseSelectors.tags.paragraph}`, - text: Constants.elementsText.reactApps.splitedApp.subHeader, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.strong, - text: Constants.commonConstantsData.standardPhrase, - visibilityState: 'be.visible', - }); - }); - }); -}); diff --git a/loadable-react-16/e2e/checkLoadableReact16Apps.spec.ts b/loadable-react-16/e2e/checkLoadableReact16Apps.spec.ts new file mode 100644 index 00000000000..34159eb3b30 --- /dev/null +++ b/loadable-react-16/e2e/checkLoadableReact16Apps.spec.ts @@ -0,0 +1,123 @@ +import { test } from '@playwright/test'; + +import { BaseMethods } from '../../playwright-e2e/common/base'; +import { baseSelectors, selectors } from '../../cypress-e2e/common/selectors'; +import { Constants } from '../../cypress-e2e/fixtures/constants'; + +const standardPhrase = Constants.commonConstantsData.standardPhrase; + +test.describe('Loadable React 16 - App1', () => { + let basePage: BaseMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: 3000 }); + }); + + test('Check App headers and buttons visibility', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h1, + text: Constants.elementsText.reactApps.header, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h2, + text: Constants.elementsText.reactApps.app1.subHeader, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h3, + text: Constants.elementsText.reactApps.header3, + visibilityState: 'be.visible', + }); + await basePage.checkElementVisibility({ + selector: baseSelectors.tags.inputs.input, + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.elementsText.reactApps.regularButton, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.elementsText.reactApps.loadableButton, + visibilityState: 'be.visible', + }); + }); + + test('Check that App 2 Content Block with filled text appear', async () => { + await basePage.fillField({ + selector: baseSelectors.tags.inputs.input, + text: standardPhrase, + }); + + await basePage.checkElementWithTextPresence({ + selector: `${selectors.reactApp.app2ContentBlock} ${baseSelectors.tags.headers.h2}`, + text: Constants.elementsText.reactApps.splitedApp.header, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: `${selectors.reactApp.app2ContentBlock} ${baseSelectors.tags.paragraph}`, + text: Constants.elementsText.reactApps.splitedApp.subHeader, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.strong, + text: standardPhrase, + visibilityState: 'be.visible', + }); + }); +}); + +test.describe('Loadable React 16 - App2', () => { + let basePage: BaseMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: 3001 }); + }); + + test('Check App elements visibility', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h1, + text: Constants.elementsText.reactApps.header, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h2, + text: Constants.elementsText.reactApps.app2.subHeader, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h3, + text: Constants.elementsText.reactApps.header3, + visibilityState: 'be.visible', + }); + await basePage.checkElementVisibility({ + selector: baseSelectors.tags.inputs.input, + }); + }); + + test('Check that App 2 Content Block with filled text appear', async () => { + await basePage.fillField({ + selector: baseSelectors.tags.inputs.input, + text: standardPhrase, + }); + + await basePage.checkElementWithTextPresence({ + selector: `${selectors.reactApp.app2ContentBlock} ${baseSelectors.tags.headers.h2}`, + text: Constants.elementsText.reactApps.splitedApp.header, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: `${selectors.reactApp.app2ContentBlock} ${baseSelectors.tags.paragraph}`, + text: Constants.elementsText.reactApps.splitedApp.subHeader, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.strong, + text: standardPhrase, + visibilityState: 'be.visible', + }); + }); +}); diff --git a/loadable-react-16/package.json b/loadable-react-16/package.json index a32f76416f4..96b65d10679 100644 --- a/loadable-react-16/package.json +++ b/loadable-react-16/package.json @@ -3,13 +3,14 @@ "ignored": true, "version": "0.0.1", "scripts": { - "start": "pnpm --filter loadable-react-16_* --parallel start", + "start": "node scripts/run-servers.cjs", "build": "pnpm --filter loadable-react-16_* build", - "serve": "pnpm --filter loadable-react-16_* --parallel serve", + "serve": "node scripts/run-servers.cjs --skip-build", "clean": "pnpm --filter loadable-react-16_* --parallel clean", - "e2e:ci": "pnpm start & sleep 2 && wait-on tcp:3000 && wait-on tcp:3001 && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome && lsof -ti tcp:3000,3001,3002 | xargs kill" + "e2e:ci": "pnpm exec playwright test" }, "devDependencies": { + "@playwright/test": "^1.54.2", "wait-on": "7.2.0" } } diff --git a/loadable-react-16/playwright.config.ts b/loadable-react-16/playwright.config.ts new file mode 100644 index 00000000000..a317e03544c --- /dev/null +++ b/loadable-react-16/playwright.config.ts @@ -0,0 +1,22 @@ +import { defineConfig } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e', + timeout: 120_000, + expect: { + timeout: 10_000, + }, + retries: process.env.CI ? 1 : 0, + workers: 1, + reporter: 'list', + use: { + baseURL: 'http://localhost:3000', + trace: 'on-first-retry', + }, + webServer: { + command: 'pnpm run start', + url: 'http://localhost:3000', + timeout: 180_000, + reuseExistingServer: !process.env.CI, + }, +}); diff --git a/loadable-react-16/scripts/run-servers.cjs b/loadable-react-16/scripts/run-servers.cjs new file mode 100755 index 00000000000..8bbc1405930 --- /dev/null +++ b/loadable-react-16/scripts/run-servers.cjs @@ -0,0 +1,141 @@ +#!/usr/bin/env node +const { spawn } = require('child_process'); +const waitOn = require('wait-on'); + +const skipBuild = process.argv.includes('--skip-build'); +const isWindows = process.platform === 'win32'; +const longRunningProcesses = []; +let isShuttingDown = false; + +process.on('SIGINT', () => shutdown(0)); +process.on('SIGTERM', () => shutdown(0)); + +function spawnPnpmProcess(args) { + return spawn('pnpm', args, { + stdio: 'inherit', + shell: isWindows, + }); +} + +function runCommand(args, label) { + return new Promise((resolve, reject) => { + const command = spawnPnpmProcess(args); + + command.on('error', error => { + reject(new Error(`${label} failed to start: ${error.message}`)); + }); + + command.on('exit', code => { + if (code === 0) { + resolve(); + return; + } + + reject(new Error(`${label} exited with code ${code ?? 0}`)); + }); + }); +} + +function spawnServer(args, label) { + const serverProcess = spawnPnpmProcess(args); + + longRunningProcesses.push(serverProcess); + + serverProcess.on('error', error => { + console.error(`${label} failed: ${error.message}`); + shutdown(1); + }); + + serverProcess.on('exit', code => { + if (isShuttingDown) { + return; + } + + const exitCode = typeof code === 'number' ? code : 1; + console.error(`${label} exited with code ${exitCode}`); + shutdown(exitCode === 0 ? 0 : exitCode); + }); + + return serverProcess; +} + +function waitForResources(resources) { + return new Promise((resolve, reject) => { + waitOn( + { + resources, + interval: 200, + timeout: 120_000, + validateStatus: status => status >= 200 && status < 500, + }, + error => { + if (error) { + reject(error); + return; + } + + resolve(); + }, + ); + }); +} + +function shutdown(code = 0) { + if (isShuttingDown) { + return; + } + + isShuttingDown = true; + + const terminationPromises = longRunningProcesses.map(child => { + if (child.exitCode !== null || child.killed) { + return Promise.resolve(); + } + + return new Promise(resolve => { + child.once('exit', resolve); + + if (!child.killed) { + child.kill('SIGTERM'); + } + + const forceKillTimeout = setTimeout(() => { + if (child.exitCode === null && !child.killed) { + child.kill('SIGKILL'); + } + clearTimeout(forceKillTimeout); + }, 5000); + }); + }); + + Promise.allSettled(terminationPromises).finally(() => { + process.exit(code); + }); +} + +async function main() { + try { + if (!skipBuild) { + console.log('Building loadable-react-16 applications...'); + await runCommand(['--filter', 'loadable-react-16_*', 'build'], 'Build command'); + console.log('Build completed successfully.'); + } + + console.log('Starting loadable-react-16_app2 server...'); + spawnServer(['--filter', 'loadable-react-16_app2', 'serve'], 'loadable-react-16_app2 serve'); + + console.log('Waiting for app2 remote assets to become available...'); + await waitForResources([ + 'http-get://localhost:3001/server/remoteEntry.js', + 'http-get://localhost:3001/static/federation-stats.json', + ]); + console.log('App2 remote assets are available. Starting loadable-react-16_app1 server...'); + + spawnServer(['--filter', 'loadable-react-16_app1', 'serve'], 'loadable-react-16_app1 serve'); + } catch (error) { + console.error(error && error.message ? error.message : error); + shutdown(1); + } +} + +main(); diff --git a/loadable-react-18/app1/@mf-types/app2/Content.d.ts b/loadable-react-18/app1/@mf-types/app2/Content.d.ts new file mode 100644 index 00000000000..df1a07a087d --- /dev/null +++ b/loadable-react-18/app1/@mf-types/app2/Content.d.ts @@ -0,0 +1,2 @@ +export * from './compiled-types/src/client/components/Content'; +export { default } from './compiled-types/src/client/components/Content'; diff --git a/loadable-react-18/app1/@mf-types/app2/apis.d.ts b/loadable-react-18/app1/@mf-types/app2/apis.d.ts new file mode 100644 index 00000000000..a51accec443 --- /dev/null +++ b/loadable-react-18/app1/@mf-types/app2/apis.d.ts @@ -0,0 +1,2 @@ +export type RemoteKeys = 'app2/Content'; +export type PackageType = T extends 'app2/Content' ? typeof import('app2/Content') : any; diff --git a/loadable-react-18/app1/@mf-types/app2/compiled-types/src/client/components/Content.d.ts b/loadable-react-18/app1/@mf-types/app2/compiled-types/src/client/components/Content.d.ts new file mode 100644 index 00000000000..2e2de557dae --- /dev/null +++ b/loadable-react-18/app1/@mf-types/app2/compiled-types/src/client/components/Content.d.ts @@ -0,0 +1,6 @@ +import React from 'react'; +export interface ContentProps { + content?: string; +} +declare const Content: React.FC; +export default Content; diff --git a/loadable-react-18/app1/@mf-types/index.d.ts b/loadable-react-18/app1/@mf-types/index.d.ts new file mode 100644 index 00000000000..7d9293626d0 --- /dev/null +++ b/loadable-react-18/app1/@mf-types/index.d.ts @@ -0,0 +1,22 @@ +import type { PackageType as App2PackageType, RemoteKeys as App2RemoteKeys } from './app2/apis.d.ts'; + +declare module '@module-federation/runtime' { + type RemoteKeys = App2RemoteKeys; + type PackageType = T extends RemoteKeys ? App2PackageType : Fallback; + export function loadRemote(packageName: T): Promise>; + export function loadRemote(packageName: T): Promise>; +} + +declare module '@module-federation/enhanced/runtime' { + type RemoteKeys = App2RemoteKeys; + type PackageType = T extends RemoteKeys ? App2PackageType : Fallback; + export function loadRemote(packageName: T): Promise>; + export function loadRemote(packageName: T): Promise>; +} + +declare module '@module-federation/runtime-tools' { + type RemoteKeys = App2RemoteKeys; + type PackageType = T extends RemoteKeys ? App2PackageType : Fallback; + export function loadRemote(packageName: T): Promise>; + export function loadRemote(packageName: T): Promise>; +} diff --git a/loadable-react-18/app1/src/server/mfFunctions.ts b/loadable-react-18/app1/src/server/mfFunctions.ts index a506f54eac6..70c7d34e6b9 100644 --- a/loadable-react-18/app1/src/server/mfFunctions.ts +++ b/loadable-react-18/app1/src/server/mfFunctions.ts @@ -13,13 +13,31 @@ const isMfComponent = component => mfAppNamesRegex.test(component); * @return {string[]} chunk ids of the rendered components. */ export const getLoadableRequiredComponents = extractor => { - const loadableElement = extractor - .getScriptElements() - .find(el => el.key === '__LOADABLE_REQUIRED_CHUNKS___ext'); + const scriptElements = extractor?.getScriptElements?.() ?? []; - const { namedChunks } = JSON.parse(loadableElement.props.dangerouslySetInnerHTML.__html); + const loadableElement = scriptElements.find( + el => el?.key === '__LOADABLE_REQUIRED_CHUNKS___ext', + ); - return namedChunks; + if (!loadableElement) { + return []; + } + + try { + const rawHtml = loadableElement.props?.dangerouslySetInnerHTML?.__html; + + if (!rawHtml) { + return []; + } + + const parsedData = JSON.parse(rawHtml); + const { namedChunks } = parsedData ?? {}; + + return Array.isArray(namedChunks) ? namedChunks : []; + } catch (error) { + console.error('[getLoadableRequiredComponents] Failed to parse required chunks', error); + return []; + } }; const getMfRenderedComponents = loadableRequiredComponents => { @@ -31,21 +49,48 @@ const getMfRenderedComponents = loadableRequiredComponents => { const getMFStats = async () => { const promises = Object.values(mfStatsUrlMap).map(url => axios.get(url)); - return Promise.all(promises).then(responses => responses.map(response => response.data)); + + try { + const responses = await Promise.all(promises); + + return responses.map(response => response.data); + } catch (error) { + console.error('[getMFStats] Failed to fetch remote federation stats', error); + return []; + } }; export const getMfChunks = async extractor => { const loadableRequiredComponents = getLoadableRequiredComponents(extractor); + if (!loadableRequiredComponents.length) { + return [[], []]; + } + const mfRenderedComponents = getMfRenderedComponents(loadableRequiredComponents); + if (!mfRenderedComponents.length) { + return [[], []]; + } + const mfChunks = await getMFStats(); - const scriptsArr = []; - const stylesArr = []; + if (!mfChunks.length) { + return [[], []]; + } + + const scriptsArr: string[] = []; + const stylesArr: string[] = []; + mfRenderedComponents.forEach(([appName, component]) => { - const remoteStats = mfChunks.find(remote => remote.name === appName); - remoteStats.exposes[component].forEach(chunk => { + const remoteStats = mfChunks.find(remote => remote?.name === appName); + const exposeChunks = remoteStats?.exposes?.[component]; + + if (!Array.isArray(exposeChunks)) { + return; + } + + exposeChunks.forEach(chunk => { const url = 'http://localhost:3001/static/' + chunk; url.endsWith('.css') ? stylesArr.push(url) : scriptsArr.push(url); diff --git a/loadable-react-18/app1/src/server/renderAndExtractContext.tsx b/loadable-react-18/app1/src/server/renderAndExtractContext.tsx index a518aaf2220..219822c7eb4 100644 --- a/loadable-react-18/app1/src/server/renderAndExtractContext.tsx +++ b/loadable-react-18/app1/src/server/renderAndExtractContext.tsx @@ -27,26 +27,46 @@ export async function renderAndExtractContext({ // @loadable chunk extractor chunkExtractor, }: RenderAndExtractContextOptions) { - const { default: App } = await import('../client/components/App'); + let markup = ''; - // This not work, The ChunkExtractorManager context provider - // do not pass the chunkExtractor to the context consumer (ChunkExtractorManager) - // const markup = await renderToString(chunkExtractor.collectChunks()); + try { + const { default: App } = await import('../client/components/App'); - const markup = await renderToStaticMarkup( - - - , - ); + // This not work, The ChunkExtractorManager context provider + // do not pass the chunkExtractor to the context consumer (ChunkExtractorManager) + // const markup = await renderToString(chunkExtractor.collectChunks()); - const linkTags = chunkExtractor.getLinkTags(); - const scriptTags = chunkExtractor.getScriptTags(); + markup = await renderToStaticMarkup( + + + , + ); + } catch (error) { + console.error('[renderAndExtractContext] Failed to render App component', error); + } + + let linkTags = ''; + let scriptTags = ''; + + try { + linkTags = chunkExtractor.getLinkTags(); + scriptTags = chunkExtractor.getScriptTags(); + } catch (error) { + console.error('[renderAndExtractContext] Failed to collect chunk tags', error); + } // ================ WORKAROUND ================ - const [mfRequiredScripts, mfRequiredStyles] = await getMfChunks(chunkExtractor); + let mfScriptTags = ''; + let mfStyleTags = ''; + + try { + const [mfRequiredScripts, mfRequiredStyles] = await getMfChunks(chunkExtractor); - const mfScriptTags = mfRequiredScripts.map(createScriptTag).join(''); - const mfStyleTags = mfRequiredStyles.map(createStyleTag).join(''); + mfScriptTags = mfRequiredScripts.map(createScriptTag).join(''); + mfStyleTags = mfRequiredStyles.map(createStyleTag).join(''); + } catch (error) { + console.error('[renderAndExtractContext] Failed to collect module federation chunks', error); + } // ================ WORKAROUND ================ console.log('mfScriptTags', mfScriptTags); diff --git a/loadable-react-18/app1/src/server/serverRender.tsx b/loadable-react-18/app1/src/server/serverRender.tsx index 3a42a3439ec..f7956d4527d 100644 --- a/loadable-react-18/app1/src/server/serverRender.tsx +++ b/loadable-react-18/app1/src/server/serverRender.tsx @@ -43,7 +43,7 @@ export default async function serverRender(req, res, next) { console.error('[renderAndExtractContext serverRender]', error); } - const { markup, linkTags, scriptTags } = result as RenderAndExtractContextResult; + const { markup = '', linkTags = '', scriptTags = '' } = (result || {}) as Partial; res.write(`${linkTags}`); res.write(`
${markup}
`); diff --git a/loadable-react-18/cypress.env.json b/loadable-react-18/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/loadable-react-18/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/loadable-react-18/e2e/checkLoadableReact18Apps.cy.ts b/loadable-react-18/e2e/checkLoadableReact18Apps.cy.ts deleted file mode 100644 index f86741036eb..00000000000 --- a/loadable-react-18/e2e/checkLoadableReact18Apps.cy.ts +++ /dev/null @@ -1,119 +0,0 @@ -import { Constants } from '../../cypress-e2e/fixtures/constants'; -import { baseSelectors, selectors } from '../../cypress-e2e/common/selectors'; -import { BaseMethods } from '../../cypress-e2e/common/base'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Loadable React 18', () => { - context('Check App1', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3000, - }); - }); - it('Check App headers and buttons visability', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: Constants.elementsText.reactApps.header, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: Constants.elementsText.reactApps.app1.subHeader, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h3, - text: Constants.elementsText.reactApps.header3, - visibilityState: 'be.visible', - }); - basePage.checkElementVisibility({ - selector: baseSelectors.tags.inputs.input, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.reactApps.regularButton, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.reactApps.loadableButton, - visibilityState: 'be.visible', - }); - }); - - it('Check that App 2 Content Block with filled text appear', () => { - basePage.fillField({ - selector: baseSelectors.tags.inputs.input, - text: Constants.commonConstantsData.standardPhrase, - }); - basePage.checkElementWithTextPresence({ - selector: `${selectors.reactApp.app2ContentBlock} ${baseSelectors.tags.headers.h2}`, - text: Constants.elementsText.reactApps.splitedApp.header, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: `${selectors.reactApp.app2ContentBlock} ${baseSelectors.tags.paragraph}`, - text: Constants.elementsText.reactApps.splitedApp.subHeader, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.strong, - text: Constants.commonConstantsData.standardPhrase, - visibilityState: 'be.visible', - }); - }); - }); -}); - -describe('Loadable React 18', () => { - context('Check App2', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3001, - }); - }); - - it('Check App elements visability', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: Constants.elementsText.reactApps.header, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: Constants.elementsText.reactApps.app2.subHeader, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h3, - text: Constants.elementsText.reactApps.header3, - visibilityState: 'be.visible', - }); - basePage.checkElementVisibility({ - selector: baseSelectors.tags.inputs.input, - }); - }); - it('Check that App 2 Content Block with filled text appear', () => { - basePage.fillField({ - selector: baseSelectors.tags.inputs.input, - text: Constants.commonConstantsData.standardPhrase, - }); - basePage.checkElementWithTextPresence({ - selector: `${selectors.reactApp.app2ContentBlock} ${baseSelectors.tags.headers.h2}`, - text: Constants.elementsText.reactApps.splitedApp.header, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: `${selectors.reactApp.app2ContentBlock} ${baseSelectors.tags.paragraph}`, - text: Constants.elementsText.reactApps.splitedApp.subHeader, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.strong, - text: Constants.commonConstantsData.standardPhrase, - visibilityState: 'be.visible', - }); - }); - }); -}); diff --git a/loadable-react-18/e2e/checkLoadableReact18Apps.spec.ts b/loadable-react-18/e2e/checkLoadableReact18Apps.spec.ts new file mode 100644 index 00000000000..f203a7b619b --- /dev/null +++ b/loadable-react-18/e2e/checkLoadableReact18Apps.spec.ts @@ -0,0 +1,123 @@ +import { test } from '@playwright/test'; + +import { BaseMethods } from '../../playwright-e2e/common/base'; +import { baseSelectors, selectors } from '../../playwright-e2e/common/selectors'; +import { Constants } from '../../playwright-e2e/fixtures/constants'; + +const standardPhrase = Constants.commonConstantsData.standardPhrase; + +test.describe('Loadable React 18 - App1', () => { + let basePage: BaseMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: 3000 }); + }); + + test('Check App headers and buttons visibility', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h1, + text: Constants.elementsText.reactApps.header, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h2, + text: Constants.elementsText.reactApps.app1.subHeader, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h3, + text: Constants.elementsText.reactApps.header3, + visibilityState: 'be.visible', + }); + await basePage.checkElementVisibility({ + selector: baseSelectors.tags.inputs.input, + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.elementsText.reactApps.regularButton, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.elementsText.reactApps.loadableButton, + visibilityState: 'be.visible', + }); + }); + + test('Check that App 2 Content Block with filled text appears', async () => { + await basePage.fillField({ + selector: baseSelectors.tags.inputs.input, + text: standardPhrase, + }); + + await basePage.checkElementWithTextPresence({ + selector: `${selectors.reactApp.app2ContentBlock} ${baseSelectors.tags.headers.h2}`, + text: Constants.elementsText.reactApps.splitedApp.header, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: `${selectors.reactApp.app2ContentBlock} ${baseSelectors.tags.paragraph}`, + text: Constants.elementsText.reactApps.splitedApp.subHeader, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.strong, + text: standardPhrase, + visibilityState: 'be.visible', + }); + }); +}); + +test.describe('Loadable React 18 - App2', () => { + let basePage: BaseMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: 3001 }); + }); + + test('Check App elements visibility', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h1, + text: Constants.elementsText.reactApps.header, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h2, + text: Constants.elementsText.reactApps.app2.subHeader, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h3, + text: Constants.elementsText.reactApps.header3, + visibilityState: 'be.visible', + }); + await basePage.checkElementVisibility({ + selector: baseSelectors.tags.inputs.input, + }); + }); + + test('Check that App 2 Content Block with filled text appears', async () => { + await basePage.fillField({ + selector: baseSelectors.tags.inputs.input, + text: standardPhrase, + }); + + await basePage.checkElementWithTextPresence({ + selector: `${selectors.reactApp.app2ContentBlock} ${baseSelectors.tags.headers.h2}`, + text: Constants.elementsText.reactApps.splitedApp.header, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: `${selectors.reactApp.app2ContentBlock} ${baseSelectors.tags.paragraph}`, + text: Constants.elementsText.reactApps.splitedApp.subHeader, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.strong, + text: standardPhrase, + visibilityState: 'be.visible', + }); + }); +}); diff --git a/loadable-react-18/package.json b/loadable-react-18/package.json index 2d94c276768..19d87a09a3c 100644 --- a/loadable-react-18/package.json +++ b/loadable-react-18/package.json @@ -3,14 +3,19 @@ "ignored": true, "version": "0.0.1", "scripts": { - "start": "pnpm --filter loadable-react-18_* --parallel start", + "start": "node scripts/start.js", "build": "pnpm --filter loadable-react-18_* build", "serve": "pnpm --filter loadable-react-18_* --parallel serve", "clean": "pnpm --filter loadable-react-18_* --parallel clean", - "e2e:ci": "pnpm start & sleep 2 && wait-on tcp:3000 && wait-on tcp:3001 && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome && kill-port 3000 3001 3002" + "pretest:e2e": "pnpm build", + "test:e2e": "pnpm exec playwright test", + "test:e2e:ui": "pnpm exec playwright test --ui", + "test:e2e:debug": "pnpm exec playwright test --debug", + "e2e:ci": "pnpm exec playwright install --with-deps && pnpm build && pnpm exec playwright test --reporter=list" }, "devDependencies": { - "wait-on": "7.2.0", - "kill-port": "2.0.1" + "@playwright/test": "^1.54.2", + "playwright": "^1.54.2", + "wait-on": "7.2.0" } } diff --git a/loadable-react-18/playwright.config.ts b/loadable-react-18/playwright.config.ts new file mode 100644 index 00000000000..cf3310950cd --- /dev/null +++ b/loadable-react-18/playwright.config.ts @@ -0,0 +1,23 @@ +import { defineConfig } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e', + timeout: 120_000, + expect: { + timeout: 10_000, + }, + retries: process.env.CI ? 1 : 0, + workers: 1, + reporter: 'list', + use: { + baseURL: 'http://localhost:3000', + trace: 'on-first-retry', + }, + webServer: { + // Use prebuilt bundles and only start servers for e2e reliability + command: 'pnpm run serve', + url: 'http://localhost:3000', + timeout: 180_000, + reuseExistingServer: !process.env.CI, + }, +}); diff --git a/loadable-react-18/scripts/start.js b/loadable-react-18/scripts/start.js new file mode 100644 index 00000000000..c5e5b00d63d --- /dev/null +++ b/loadable-react-18/scripts/start.js @@ -0,0 +1,83 @@ +const { spawn } = require('node:child_process'); +const process = require('node:process'); +const waitOn = require('wait-on'); + +const processes = new Set(); +let shuttingDown = false; + +function spawnProcess(command, args, name) { + const child = spawn(command, args, { + stdio: 'inherit', + }); + + processes.add(child); + + child.on('exit', (code, signal) => { + processes.delete(child); + + if (shuttingDown) { + return; + } + + const exitCode = typeof code === 'number' ? code : 1; + + if (exitCode === 0 && !signal) { + console.error(`${name} exited unexpectedly.`); + shutdown(1); + } else { + console.error(`${name} exited with code ${exitCode}${signal ? ` (signal: ${signal})` : ''}`); + shutdown(exitCode || 1); + } + }); + + child.on('error', error => { + if (shuttingDown) { + return; + } + + console.error(`${name} failed to start`, error); + shutdown(1); + }); + + return child; +} + +function shutdown(code = 0) { + if (shuttingDown) { + return; + } + + shuttingDown = true; + + for (const child of processes) { + if (!child.killed) { + child.kill('SIGINT'); + } + } + + process.exit(code); +} + +['SIGINT', 'SIGTERM', 'SIGQUIT'].forEach(signal => { + process.on(signal, () => shutdown(0)); +}); + +console.log('Starting App2...'); +spawnProcess('pnpm', ['--filter', 'loadable-react-18_app2', 'start'], 'App2'); + +waitOn({ + resources: ['http://localhost:3001/server/remoteEntry.js'], + timeout: 180_000, +}) + .then(() => { + if (shuttingDown) { + return; + } + + console.log('App2 is ready. Starting App1...'); + spawnProcess('pnpm', ['--filter', 'loadable-react-18_app1', 'start'], 'App1'); + }) + .catch(error => { + console.error('Failed to detect App2 readiness', error); + shutdown(1); + }); diff --git a/native-federation-react/cypress.env.json b/native-federation-react/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/native-federation-react/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/native-federation-react/e2e/tests/commonChecks.cy.ts b/native-federation-react/e2e/tests/commonChecks.cy.ts deleted file mode 100644 index 12daeb2142e..00000000000 --- a/native-federation-react/e2e/tests/commonChecks.cy.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Native Federation React', () => { - context('It checks components header and console message', () => { - const appsData = [ - { - host: 3000, - header: Constants.commonConstantsData.basicComponents.host, - }, - { - host: 3001, - header: Constants.commonConstantsData.basicComponents.remote, - }, - ]; - - appsData.forEach((property: { host: number; header: string }) => { - it(`Checks ${property.header} page header visibility`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: property.header, - visibilityState: 'be.visible', - }); - }); - - it(`Checks console message visibility in ${property.header} component`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: Constants.elementsText.nativeFederationReactApp.messages.pageMessages - .checkConsoleMessage, - visibilityState: 'be.visible', - }); - }); - - it('Checks apps console date message', () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkInfoInConsole( - Constants.elementsText.nativeFederationReactApp.messages.consoleMessages.dateMessage, - ); - }); - - it('Checks apps console weekend message', () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkInfoInConsole( - Constants.elementsText.nativeFederationReactApp.messages.consoleMessages.weekendMessage, - ); - }); - }); - }); -}); diff --git a/native-federation-react/e2e/tests/commonChecks.spec.ts b/native-federation-react/e2e/tests/commonChecks.spec.ts new file mode 100644 index 00000000000..b380b9c045d --- /dev/null +++ b/native-federation-react/e2e/tests/commonChecks.spec.ts @@ -0,0 +1,81 @@ +import { test } from '@playwright/test'; +import type { Page } from '@playwright/test'; + +import { BaseMethods } from '../../../playwright-e2e/common/base'; +import { baseSelectors } from '../../../cypress-e2e/common/selectors'; +import { Constants } from '../../../cypress-e2e/fixtures/constants'; + +interface AppData { + host: number; + header: string; +} + +const appsData: AppData[] = [ + { + host: 3000, + header: Constants.commonConstantsData.basicComponents.host, + }, + { + host: 3001, + header: Constants.commonConstantsData.basicComponents.remote, + }, +]; + +async function expectConsoleMessage( + page: Page, + expected: string, + action: () => Promise, +): Promise { + const consolePromise = page.waitForEvent('console', { + predicate: message => message.type() === 'log' && message.text().includes(expected), + timeout: 10_000, + }); + + await action(); + await consolePromise; +} + +test.describe('Native Federation React - Shared checks', () => { + appsData.forEach(app => { + test(`Checks ${app.header} page header visibility`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: app.host }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h1, + text: app.header, + visibilityState: 'be.visible', + }); + }); + + test(`Checks console message visibility in ${app.header} component`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: app.host }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.paragraph, + text: Constants.elementsText.nativeFederationReactApp.messages.pageMessages + .checkConsoleMessage, + visibilityState: 'be.visible', + }); + }); + + test(`Checks ${app.header} console date message`, async ({ page }) => { + const basePage = new BaseMethods(page); + await expectConsoleMessage( + page, + Constants.elementsText.nativeFederationReactApp.messages.consoleMessages.dateMessage, + () => basePage.openLocalhost({ number: app.host }), + ); + await basePage.reloadWindow(); + }); + + test(`Checks ${app.header} console weekend message`, async ({ page }) => { + const basePage = new BaseMethods(page); + await expectConsoleMessage( + page, + Constants.elementsText.nativeFederationReactApp.messages.consoleMessages.weekendMessage, + () => basePage.openLocalhost({ number: app.host }), + ); + await basePage.reloadWindow(); + }); + }); +}); diff --git a/native-federation-react/e2e/tests/hostComponentChecks.cy.ts b/native-federation-react/e2e/tests/hostComponentChecks.cy.ts deleted file mode 100644 index 1db6077ffaa..00000000000 --- a/native-federation-react/e2e/tests/hostComponentChecks.cy.ts +++ /dev/null @@ -1,158 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; -import { baseSelectors, selectors } from '../../../cypress-e2e/common/selectors'; - -const basePage: BaseMethods = new BaseMethods(); - -const elementsQuantity = 2; - -describe('Native Federation React', () => { - context("It checks host apps' component", () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3000, - }); - }); - - it('Checks apps console loading module message', () => { - basePage.checkInfoInConsole( - Constants.elementsText.nativeFederationReactApp.messages.consoleMessages - .loadingModuleMessage, - ); - }); - - it('Checks apps console remote module message', () => { - basePage.checkInfoInConsole( - Constants.elementsText.nativeFederationReactApp.messages.consoleMessages - .remoteModuleMessage, - ); - }); - - it('Checks remote component greeting visibility', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.elementsText.nativeFederationReactApp.messages.pageMessages - .remoteComponentGreeting, - visibilityState: 'be.visible', - }); - }); - - it('Checks change components message visibility', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.elementsText.nativeFederationReactApp.messages.pageMessages - .changeComponentMessage, - visibilityState: 'be.visible', - }); - }); - - it('Checks page includes two links', () => { - basePage.checkElementQuantity({ - parentSelector: baseSelectors.tags.coreElements.body, - selector: baseSelectors.tags.coreElements.link, - quantity: elementsQuantity, - }); - }); - - it('Checks both links has same names', () => { - basePage.checkElementQuantity({ - selector: baseSelectors.tags.coreElements.link, - text: Constants.elementsText.nativeFederationReactApp.elementsTexts.linkName, - quantity: elementsQuantity, - }); - }); - - it('Checks page includes two buttons', () => { - basePage.checkElementQuantity({ - parentSelector: baseSelectors.tags.coreElements.body, - selector: baseSelectors.tags.coreElements.button, - quantity: elementsQuantity, - }); - }); - - it('Checks buttons are not disabled', () => { - basePage.checkElementQuantity({ - selector: baseSelectors.tags.coreElements.button, - state: 'not.be.disabled', - quantity: elementsQuantity, - }); - basePage.checkElementState({ - selector: baseSelectors.tags.coreElements.button, - state: 'not.be.disabled', - }); - }); - - it('Checks links are not disabled', () => { - basePage.checkElementQuantity({ - selector: baseSelectors.tags.coreElements.link, - state: 'not.be.disabled', - quantity: elementsQuantity, - }); - basePage.checkElementState({ - selector: baseSelectors.tags.coreElements.link, - state: 'not.be.disabled', - }); - }); - - it('Checks both linked buttons include same link', () => { - basePage.checkElementQuantity({ - selector: baseSelectors.tags.coreElements.link, - state: 'not.be.disabled', - quantity: elementsQuantity, - }); - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.coreElements.link, - attr: Constants.commonConstantsData.commonAttributes.attr, - prop: Constants.commonConstantsData.commonAttributes.href, - value: Constants.commonConstantsData.commonLinks.react, - isMultiple: true, - }); - }); - - it('Checks both buttons contain same text', () => { - basePage.checkElementQuantity({ - selector: baseSelectors.tags.coreElements.button, - state: 'not.be.disabled', - quantity: elementsQuantity, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.nativeFederationReactApp.elementsTexts.buttonText, - visibilityState: 'be.visible', - isMultiple: true, - }); - }); - - it('Checks host button visibility', () => { - basePage.checkElementVisibility({ - parentSelector: baseSelectors.tags.coreElements.div, - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.nativeFederationReactApp.buttons.host, - }); - }); - - it('Checks remote button visibility', () => { - basePage.checkElementVisibility({ - parentSelector: baseSelectors.tags.coreElements.div, - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.nativeFederationReactApp.buttons.remote, - }); - }); - - it('Checks that host button text includes counter which changed after click & check value reverted after reload', () => { - basePage.checkCounterFunctionality({ - button: selectors.nativeFederationReactApp.buttons.host, - counterText: Constants.elementsText.nativeFederationReactApp.elementsTexts.buttonText, - isReloaded: true, - }); - }); - - it('Checks that remote button text includes counter which changed after click & check value reverted after reload', () => { - basePage.checkCounterFunctionality({ - button: selectors.nativeFederationReactApp.buttons.remote, - counterText: Constants.elementsText.nativeFederationReactApp.elementsTexts.buttonText, - isReloaded: true, - }); - }); - }); -}); diff --git a/native-federation-react/e2e/tests/hostComponentChecks.spec.ts b/native-federation-react/e2e/tests/hostComponentChecks.spec.ts new file mode 100644 index 00000000000..d4ce3b07921 --- /dev/null +++ b/native-federation-react/e2e/tests/hostComponentChecks.spec.ts @@ -0,0 +1,199 @@ +import { expect, test } from '@playwright/test'; +import type { Page } from '@playwright/test'; + +import { BaseMethods } from '../../../playwright-e2e/common/base'; +import { Constants } from '../../../cypress-e2e/fixtures/constants'; +import { baseSelectors, selectors } from '../../../cypress-e2e/common/selectors'; + +const elementsQuantity = 2; + +async function expectConsoleMessage( + page: Page, + expected: string, + action: () => Promise, +): Promise { + const consolePromise = page.waitForEvent('console', { + predicate: message => message.type() === 'log' && message.text().includes(expected), + timeout: 10_000, + }); + + await action(); + await consolePromise; +} + +async function verifyCounter({ + basePage, + page, + buttonSelector, + counterText, + shouldReload = false, +}: { + basePage: BaseMethods; + page: Page; + buttonSelector: string; + counterText: string; + shouldReload?: boolean; +}): Promise { + const button = page.locator(buttonSelector); + await expect(button).toBeVisible(); + await expect(button).toContainText(counterText); + + const initialText = (await button.innerText()).trim(); + const initialValueMatch = initialText.match(/(\d+)$/); + const initialValue = initialValueMatch ? Number(initialValueMatch[1]) : 0; + + await button.click(); + + const incrementedText = counterText.replace(/\d+$/, String(initialValue + 1)); + await expect(button).toContainText(incrementedText); + + if (shouldReload) { + await basePage.reloadWindow(); + await expect(button).toContainText(counterText); + } +} + +test.describe('Native Federation React - Host component', () => { + let basePage: BaseMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: 3000 }); + }); + + test('Checks apps console loading module message', async ({ page }) => { + await expectConsoleMessage( + page, + Constants.elementsText.nativeFederationReactApp.messages.consoleMessages.loadingModuleMessage, + () => basePage.openLocalhost({ number: 3000 }), + ); + }); + + test('Checks apps console remote module message', async ({ page }) => { + await expectConsoleMessage( + page, + Constants.elementsText.nativeFederationReactApp.messages.consoleMessages.remoteModuleMessage, + () => basePage.openLocalhost({ number: 3000 }), + ); + }); + + test('Checks remote component greeting visibility', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: Constants.elementsText.nativeFederationReactApp.messages.pageMessages + .remoteComponentGreeting, + visibilityState: 'be.visible', + }); + }); + + test('Checks change components message visibility', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: Constants.elementsText.nativeFederationReactApp.messages.pageMessages + .changeComponentMessage, + visibilityState: 'be.visible', + }); + }); + + test('Checks page includes two links', async () => { + await basePage.checkElementQuantity({ + parentSelector: baseSelectors.tags.coreElements.body, + selector: baseSelectors.tags.coreElements.link, + quantity: elementsQuantity, + }); + }); + + test('Checks both links have same names', async () => { + await basePage.checkElementQuantity({ + selector: baseSelectors.tags.coreElements.link, + text: Constants.elementsText.nativeFederationReactApp.elementsTexts.linkName, + quantity: elementsQuantity, + }); + }); + + test('Checks page includes two buttons', async () => { + await basePage.checkElementQuantity({ + parentSelector: baseSelectors.tags.coreElements.body, + selector: baseSelectors.tags.coreElements.button, + quantity: elementsQuantity, + }); + }); + + test('Checks buttons are not disabled', async () => { + await basePage.checkElementQuantity({ + parentSelector: baseSelectors.tags.coreElements.body, + selector: baseSelectors.tags.coreElements.button, + quantity: elementsQuantity, + }); + await basePage.checkElementState({ + selector: baseSelectors.tags.coreElements.button, + state: 'not.be.disabled', + }); + }); + + test('Checks links are not disabled', async () => { + await basePage.checkElementQuantity({ + selector: baseSelectors.tags.coreElements.link, + quantity: elementsQuantity, + }); + await basePage.checkElementState({ + selector: baseSelectors.tags.coreElements.link, + state: 'not.be.disabled', + }); + }); + + test('Checks both linked buttons include same link', async () => { + await basePage.checkElementHaveProperty({ + selector: baseSelectors.tags.coreElements.link, + attr: Constants.commonConstantsData.commonAttributes.attr, + prop: Constants.commonConstantsData.commonAttributes.href, + value: Constants.commonConstantsData.commonLinks.react, + isMultiple: true, + }); + }); + + test('Checks both buttons contain same text', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.elementsText.nativeFederationReactApp.elementsTexts.buttonText, + visibilityState: 'be.visible', + isMultiple: true, + }); + }); + + test('Checks host button visibility', async () => { + await basePage.checkElementVisibility({ + parentSelector: baseSelectors.tags.coreElements.div, + selector: baseSelectors.tags.coreElements.button, + text: Constants.elementsText.nativeFederationReactApp.buttons.host, + }); + }); + + test('Checks remote button visibility', async () => { + await basePage.checkElementVisibility({ + parentSelector: baseSelectors.tags.coreElements.div, + selector: baseSelectors.tags.coreElements.button, + text: Constants.elementsText.nativeFederationReactApp.buttons.remote, + }); + }); + + test('Checks that host button counter updates and resets after reload', async ({ page }) => { + await verifyCounter({ + basePage, + page, + buttonSelector: selectors.nativeFederationReactApp.buttons.host, + counterText: Constants.elementsText.nativeFederationReactApp.elementsTexts.buttonText, + shouldReload: true, + }); + }); + + test('Checks that remote button counter updates and resets after reload', async ({ page }) => { + await verifyCounter({ + basePage, + page, + buttonSelector: selectors.nativeFederationReactApp.buttons.remote, + counterText: Constants.elementsText.nativeFederationReactApp.elementsTexts.buttonText, + shouldReload: true, + }); + }); +}); diff --git a/native-federation-react/e2e/tests/runAll.cy.ts b/native-federation-react/e2e/tests/runAll.cy.ts deleted file mode 100644 index 5109c126a8b..00000000000 --- a/native-federation-react/e2e/tests/runAll.cy.ts +++ /dev/null @@ -1,2 +0,0 @@ -import './commonChecks.cy'; -import './hostComponentChecks.cy'; diff --git a/native-federation-react/e2e/tests/runAll.spec.ts b/native-federation-react/e2e/tests/runAll.spec.ts new file mode 100644 index 00000000000..95d8b1193bd --- /dev/null +++ b/native-federation-react/e2e/tests/runAll.spec.ts @@ -0,0 +1,2 @@ +// Playwright automatically discovers specs, so this file intentionally has no test definitions. +export {}; diff --git a/native-federation-react/package.json b/native-federation-react/package.json index 6ca219bb45e..c7ece5ff268 100644 --- a/native-federation-react/package.json +++ b/native-federation-react/package.json @@ -16,13 +16,17 @@ "start:remote": "pnpx serve dist/remote -l 3001 --cors", "start:host": "pnpx serve dist/host -l 3000", "start": "concurrently \"npm run start:remote\" \"npm run start:host\"", - "e2e:ci": "pnpm run build && pnpm run start & wait-on http-get://localhost:3000/ && pnpx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/tests/runAll.cy.ts\" --browser=chrome" + "test:e2e": "pnpm exec playwright test", + "test:e2e:ui": "pnpm exec playwright test --ui", + "test:e2e:debug": "pnpm exec playwright test --debug", + "e2e:ci": "pnpm run build && pnpm exec playwright install --with-deps && pnpm exec playwright test --reporter=list" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { "@hyrious/esbuild-plugin-commonjs": "0.2.6", + "@playwright/test": "^1.54.2", "@softarc/native-federation": "3.3.1", "@softarc/native-federation-runtime": "3.3.1", "@types/node": "24.2.1", @@ -32,6 +36,7 @@ "concurrently": "9.2.0", "esbuild": "0.25.9", "json5": "2.2.3", + "playwright": "^1.54.2", "serve": "14.2.4", "wait-on": "8.0.4" }, diff --git a/native-federation-react/playwright.config.ts b/native-federation-react/playwright.config.ts new file mode 100644 index 00000000000..e772de9f927 --- /dev/null +++ b/native-federation-react/playwright.config.ts @@ -0,0 +1,22 @@ +import { defineConfig } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e/tests', + timeout: 180_000, + expect: { + timeout: 10_000, + }, + retries: process.env.CI ? 1 : 0, + workers: 1, + reporter: 'list', + use: { + baseURL: 'http://localhost:3000', + trace: 'on-first-retry', + }, + webServer: { + command: 'pnpm run build && pnpm run start', + url: 'http://localhost:3000', + timeout: 240_000, + reuseExistingServer: !process.env.CI, + }, +}); diff --git a/nested-remote/cypress.env.json b/nested-remote/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/nested-remote/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/nested-remote/e2e/checkApp1.cy.ts b/nested-remote/e2e/checkApp1.cy.ts deleted file mode 100644 index b73cd3fcf19..00000000000 --- a/nested-remote/e2e/checkApp1.cy.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { BaseMethods } from '../../cypress-e2e/common/base'; -import { baseSelectors } from '../../cypress-e2e/common/selectors'; -import { Constants } from '../../cypress-e2e/fixtures/constants'; -import { CssAttr } from '../../cypress-e2e/types/cssAttr'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Nested', () => { - // TODO cy.exec don't build the apps correctly cause lerna executes without exit code. Uncomment after fix this issue! - // before(() => { - // basePage.buildTheSample(Constants.samplesPath.Nested) - // }) - - // after(() => { - // basePage.shutdownTheSample(Constants.samplesPath.Nested) - // }) - context('Check App 1', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3001, - }); - }); - - it('Check elements exist', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.updatedConstantsData.commonAppWithButton.app3, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.ids.root, - text: Constants.elementsText.nestedApp.app2Container, - }); - basePage.checkElementContainText({ - selector: baseSelectors.ids.root, - text: Constants.elementsText.nestedApp.app1Text, - }); - }); - - it('Check colors', () => { - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.elementsText.nestedApp.app2Container, - prop: CssAttr.backgroundColor, - value: Constants.color.chineseSilver, - }); - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.updatedConstantsData.commonAppWithButton.app3, - prop: CssAttr.background, - value: Constants.color.aquamarine, - }); - }); - }); -}); diff --git a/nested-remote/e2e/checkApp1.spec.ts b/nested-remote/e2e/checkApp1.spec.ts new file mode 100644 index 00000000000..76adbcaa674 --- /dev/null +++ b/nested-remote/e2e/checkApp1.spec.ts @@ -0,0 +1,47 @@ +import { test } from '@playwright/test'; + +import { BaseMethods } from '../../playwright-e2e/common/base'; +import { baseSelectors } from '../../cypress-e2e/common/selectors'; +import { Constants } from '../../cypress-e2e/fixtures/constants'; +import { CssAttr } from '../../cypress-e2e/types/cssAttr'; + +test.describe('Nested - App 1', () => { + let basePage: BaseMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: 3001 }); + }); + + test('Check elements exist', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.updatedConstantsData.commonAppWithButton.app3, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.ids.root, + text: Constants.elementsText.nestedApp.app2Container, + }); + await basePage.checkElementContainText({ + selector: baseSelectors.ids.root, + text: Constants.elementsText.nestedApp.app1Text, + }); + }); + + test('Check colors', async () => { + await basePage.checkElementHaveProperty({ + selector: baseSelectors.tags.coreElements.div, + text: Constants.elementsText.nestedApp.app2Container, + prop: CssAttr.backgroundColor, + value: Constants.color.chineseSilver, + }); + await basePage.checkElementHaveProperty({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.updatedConstantsData.commonAppWithButton.app3, + prop: CssAttr.background, + value: Constants.color.aquamarine, + }); + }); +}); diff --git a/nested-remote/e2e/checkApp2.cy.ts b/nested-remote/e2e/checkApp2.cy.ts deleted file mode 100644 index 1029b871694..00000000000 --- a/nested-remote/e2e/checkApp2.cy.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { BaseMethods } from '../../cypress-e2e/common/base'; -import { baseSelectors } from '../../cypress-e2e/common/selectors'; -import { Constants } from '../../cypress-e2e/fixtures/constants'; -import { CssAttr } from '../../cypress-e2e/types/cssAttr'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Nested', () => { - // TODO cy.exec don't build the apps correctly cause lerna executes without exit code. Uncomment after fix this issue! - // before(() => { - // basePage.buildTheSample(Constants.samplesPath.Nested) - // }) - - // after(() => { - // basePage.shutdownTheSample(Constants.samplesPath.Nested) - // }) - context('Check App 2', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3002, - }); - }); - - it('Check elements exist', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.updatedConstantsData.commonAppWithButton.app3, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.ids.root, - text: Constants.elementsText.nestedApp.app2Container, - }); - }); - - it('Check colors', () => { - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.elementsText.nestedApp.app2Container, - prop: CssAttr.backgroundColor, - value: Constants.color.chineseSilver, - }); - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.updatedConstantsData.commonAppWithButton.app3, - prop: CssAttr.background, - value: Constants.color.aquamarine, - }); - }); - }); -}); diff --git a/nested-remote/e2e/checkApp2.spec.ts b/nested-remote/e2e/checkApp2.spec.ts new file mode 100644 index 00000000000..d79a973dd07 --- /dev/null +++ b/nested-remote/e2e/checkApp2.spec.ts @@ -0,0 +1,43 @@ +import { test } from '@playwright/test'; + +import { BaseMethods } from '../../playwright-e2e/common/base'; +import { baseSelectors } from '../../cypress-e2e/common/selectors'; +import { Constants } from '../../cypress-e2e/fixtures/constants'; +import { CssAttr } from '../../cypress-e2e/types/cssAttr'; + +test.describe('Nested - App 2', () => { + let basePage: BaseMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: 3002 }); + }); + + test('Check elements exist', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.updatedConstantsData.commonAppWithButton.app3, + visibilityState: 'be.visible', + }); + + await basePage.checkElementContainText({ + selector: baseSelectors.ids.root, + text: Constants.elementsText.nestedApp.app2Container, + }); + }); + + test('Check colors', async () => { + await basePage.checkElementHaveProperty({ + selector: baseSelectors.tags.coreElements.div, + text: Constants.elementsText.nestedApp.app2Container, + prop: CssAttr.backgroundColor, + value: Constants.color.chineseSilver, + }); + await basePage.checkElementHaveProperty({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.updatedConstantsData.commonAppWithButton.app3, + prop: CssAttr.background, + value: Constants.color.aquamarine, + }); + }); +}); diff --git a/nested-remote/e2e/checkApp3.cy.ts b/nested-remote/e2e/checkApp3.cy.ts deleted file mode 100644 index 130df9864ba..00000000000 --- a/nested-remote/e2e/checkApp3.cy.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { BaseMethods } from '../../cypress-e2e/common/base'; -import { baseSelectors } from '../../cypress-e2e/common/selectors'; -import { Constants } from '../../cypress-e2e/fixtures/constants'; -import { CssAttr } from '../../cypress-e2e/types/cssAttr'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Nested', () => { - // TODO cy.exec don't build the apps correctly cause lerna executes without exit code. Uncomment after fix this issue! - // before(() => { - // basePage.buildTheSample(Constants.samplesPath.Nested) - // }) - - // after(() => { - // basePage.shutdownTheSample(Constants.samplesPath.Nested) - // }) - context('Check App 3', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3003, - }); - }); - - it('Check button exists', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.updatedConstantsData.commonAppWithButton.app3, - }); - }); - - it('Check button color', () => { - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.updatedConstantsData.commonAppWithButton.app3, - prop: CssAttr.background, - value: Constants.color.aquamarine, - }); - }); - }); -}); diff --git a/nested-remote/e2e/checkApp3.spec.ts b/nested-remote/e2e/checkApp3.spec.ts new file mode 100644 index 00000000000..b2af944a145 --- /dev/null +++ b/nested-remote/e2e/checkApp3.spec.ts @@ -0,0 +1,32 @@ +import { test } from '@playwright/test'; + +import { BaseMethods } from '../../playwright-e2e/common/base'; +import { baseSelectors } from '../../cypress-e2e/common/selectors'; +import { Constants } from '../../cypress-e2e/fixtures/constants'; +import { CssAttr } from '../../cypress-e2e/types/cssAttr'; + +test.describe('Nested - App 3', () => { + let basePage: BaseMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: 3003 }); + }); + + test('Check button exists', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.updatedConstantsData.commonAppWithButton.app3, + visibilityState: 'be.visible', + }); + }); + + test('Check button color', async () => { + await basePage.checkElementHaveProperty({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.updatedConstantsData.commonAppWithButton.app3, + prop: CssAttr.background, + value: Constants.color.aquamarine, + }); + }); +}); diff --git a/nested-remote/e2e/runAll.cy.ts b/nested-remote/e2e/runAll.cy.ts deleted file mode 100644 index 4e7e485f68e..00000000000 --- a/nested-remote/e2e/runAll.cy.ts +++ /dev/null @@ -1,3 +0,0 @@ -import './checkApp1.cy'; -import './checkApp2.cy'; -import './checkApp3.cy'; diff --git a/nested-remote/e2e/runAll.spec.ts b/nested-remote/e2e/runAll.spec.ts new file mode 100644 index 00000000000..b51bf92fcbb --- /dev/null +++ b/nested-remote/e2e/runAll.spec.ts @@ -0,0 +1,2 @@ +// Playwright runs each spec individually; this file exists to mirror the previous Cypress entry point. +export {}; diff --git a/nested-remote/package.json b/nested-remote/package.json index 2b50c704d9e..0da4338a58e 100644 --- a/nested-remote/package.json +++ b/nested-remote/package.json @@ -8,9 +8,14 @@ "build": "pnpm --filter nested_app* build", "serve": "pnpm --filter nested_app* --parallel serve", "clean": "pnpm --filter nested_app* --parallel clean", - "e2e:ci": "pnpm start & wait-on http-get://localhost:3001/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/runAll.cy.ts\" --browser=chrome" + "test:e2e": "pnpm exec playwright test", + "test:e2e:ui": "pnpm exec playwright test --ui", + "test:e2e:debug": "pnpm exec playwright test --debug", + "e2e:ci": "pnpm exec playwright install --with-deps && pnpm exec playwright test --reporter=list" }, "devDependencies": { + "@playwright/test": "^1.54.2", + "playwright": "^1.54.2", "wait-on": "7.2.0" } } diff --git a/nested-remote/playwright.config.ts b/nested-remote/playwright.config.ts new file mode 100644 index 00000000000..07255b7c413 --- /dev/null +++ b/nested-remote/playwright.config.ts @@ -0,0 +1,22 @@ +import { defineConfig } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e', + timeout: 120_000, + expect: { + timeout: 10_000, + }, + retries: process.env.CI ? 1 : 0, + workers: 1, + reporter: 'list', + use: { + baseURL: 'http://localhost:3001', + trace: 'on-first-retry', + }, + webServer: { + command: 'pnpm run start', + url: 'http://localhost:3001', + timeout: 180_000, + reuseExistingServer: !process.env.CI, + }, +}); diff --git a/nextjs-dynamic-ssr/e2e/checkNextjsDynamicSsr.spec.ts b/nextjs-dynamic-ssr/e2e/checkNextjsDynamicSsr.spec.ts new file mode 100644 index 00000000000..e19d380fa14 --- /dev/null +++ b/nextjs-dynamic-ssr/e2e/checkNextjsDynamicSsr.spec.ts @@ -0,0 +1,239 @@ +import type { Page } from '@playwright/test'; +import { Constants } from '../../cypress-e2e/fixtures/constants'; +import { test, expect } from '../../playwright-e2e/common/testFixtures'; + +interface AppConfig { + name: string; + port: number; +} + +interface NavigationLink { + text: string; + href: string; + path: string; +} + +interface ExternalLink { + text: string; + href: string; +} + +interface TileLink { + heading: string; + href: string; +} + +const appsUnderTest: AppConfig[] = [ + { + name: Constants.commonConstantsData.home, + port: 3001, + }, + { + name: Constants.elementsText.nextJsSsrApp.shop, + port: 3002, + }, + { + name: Constants.elementsText.nextJsSsrApp.checkout, + port: 3000, + }, +]; + +const navigationLinks: NavigationLink[] = [ + { + text: Constants.commonConstantsData.home, + href: Constants.commonConstantsData.commonLinks.baseLink, + path: Constants.commonConstantsData.commonLinks.baseLink, + }, + { + text: Constants.elementsText.nextJsSsrApp.shop, + href: Constants.hrefs.nextJsSsrApp.shop, + path: Constants.hrefs.nextJsSsrApp.shop, + }, + { + text: Constants.elementsText.nextJsSsrApp.checkout, + href: Constants.hrefs.nextJsSsrApp.checkout, + path: Constants.hrefs.nextJsSsrApp.checkout, + }, +]; + +const externalLinks: ExternalLink[] = [ + { + text: Constants.elementsText.nextJsSsrApp.zeit, + href: Constants.hrefs.nextJsSsrApp.zeit, + }, + { + text: Constants.elementsText.nextJsSsrApp.gitHub, + href: Constants.hrefs.nextJsSsrApp.zeitGitHub, + }, +]; + +const tileLinks: TileLink[] = [ + { + heading: Constants.elementsText.nextJsSsrApp.tiles.documentation, + href: Constants.hrefs.nextJsSsrApp.documentation, + }, + { + heading: Constants.elementsText.nextJsSsrApp.tiles.learn, + href: Constants.hrefs.nextJsSsrApp.learn, + }, + { + heading: Constants.elementsText.nextJsSsrApp.tiles.examples, + href: Constants.hrefs.nextJsSsrApp.examples, + }, +]; + +const escapeRegExp = (value: string): string => + value.replace(/\\/g, '\\\\').replace(/[|{}\[\]()^$+*?.-]/g, '\\$&'); + +const createFlexibleRegExp = (value: string): RegExp => + new RegExp(escapeRegExp(value.trim()).replace(/\s+/g, '\\s+')); + +const normalizePath = (path: string): string => { + if (!path || path === '/') { + return '/'; + } + + return path.startsWith('/') ? path : `/${path}`; +}; + +const buildPathRegex = (port: number, path: string): RegExp => { + const normalized = normalizePath(path); + + if (normalized === '/') { + return new RegExp(`^http://localhost:${port}\\/?$`); + } + + const escapedPath = escapeRegExp(normalized); + return new RegExp(`^http://localhost:${port}${escapedPath}(?:\\/)?$`); +}; + +const expectSharedNavigation = async (page: Page): Promise => { + const nav = page.locator('nav'); + await expect(nav).toBeVisible(); + await expect(nav.getByText(Constants.commonConstantsData.helloWorldMessage)).toBeVisible(); + + for (const { text, href } of navigationLinks) { + const link = nav.getByRole('link', { name: text }); + await expect(link).toBeVisible(); + await expect(link).toHaveAttribute('href', href); + } + + for (const { text, href } of externalLinks) { + const link = nav.getByRole('link', { name: text }); + await expect(link).toBeVisible(); + await expect(link).toHaveAttribute('href', href); + } +}; + +const expectHomePageContent = async (page: Page): Promise => { + await expect( + page.getByRole('heading', { level: 1, name: createFlexibleRegExp(Constants.elementsText.nextJsSsrApp.texts.text3) }), + ).toBeVisible(); + + await expect(page.getByText(Constants.elementsText.nextJsSsrApp.texts.text4, { exact: false })).toBeVisible(); + + await expect( + page.getByRole('heading', { + level: 1, + name: createFlexibleRegExp(Constants.elementsText.nextJsSsrApp.messages.welcomeMessage), + }), + ).toBeVisible(); + + await expect(page.getByText(Constants.elementsText.nextJsSsrApp.texts.text5, { exact: false })).toBeVisible(); +}; + +const expectHomeTiles = async (page: Page): Promise => { + for (const { heading, href } of tileLinks) { + const card = page.locator('a').filter({ has: page.locator('h3', { hasText: heading }) }); + await expect(card).toBeVisible(); + await expect(card).toHaveAttribute('href', href); + } +}; + +const expectShopContent = async (page: Page): Promise => { + await expect( + page.getByRole('heading', { level: 1, name: createFlexibleRegExp(Constants.elementsText.nextJsSsrApp.pages.shopPage) }), + ).toBeVisible(); + + await expect( + page.getByText(Constants.elementsText.nextJsSsrApp.texts.mainShopText, { exact: false }), + ).toBeVisible(); +}; + +const expectCheckoutContent = async (page: Page): Promise => { + await expect( + page.getByRole('heading', { + level: 1, + name: createFlexibleRegExp(Constants.elementsText.nextJsSsrApp.pages.checkoutPage), + }), + ).toBeVisible(); + + await expect( + page.getByText(Constants.elementsText.nextJsSsrApp.messages.checkoutMessage, { exact: false }), + ).toBeVisible(); + + await expect( + page.getByText(Constants.elementsText.nextJsSsrApp.texts.text1.trim(), { exact: false }), + ).toBeVisible(); + + await expect(page.getByText(Constants.elementsText.nextJsSsrApp.texts.text2, { exact: false })).toBeVisible(); +}; + +const expectNavigationFlow = async (page: Page, port: number): Promise => { + for (const { text, path } of navigationLinks) { + await page.getByRole('link', { name: text }).click(); + await expect(page).toHaveURL(buildPathRegex(port, path)); + } +}; + +test.describe('NextJS Dynamic SSR', () => { + for (const { name, port } of appsUnderTest) { + test.describe(`${name} host`, () => { + test(`Home page renders shared navigation in ${name}`, async ({ basePage, page }) => { + await basePage.openLocalhost({ port }); + await expectSharedNavigation(page); + }); + + test(`Home page renders federated content in ${name}`, async ({ basePage, page }) => { + await basePage.openLocalhost({ port }); + await expectHomePageContent(page); + await expectHomeTiles(page); + }); + + test(`Home page navigation works in ${name}`, async ({ basePage, page }) => { + await basePage.openLocalhost({ port }); + await expectNavigationFlow(page, port); + }); + + test(`Shop page renders shared navigation in ${name}`, async ({ basePage, page }) => { + await basePage.openLocalhost({ port, path: Constants.hrefs.nextJsSsrApp.shop }); + await expectSharedNavigation(page); + }); + + test(`Shop page renders federated content in ${name}`, async ({ basePage, page }) => { + await basePage.openLocalhost({ port, path: Constants.hrefs.nextJsSsrApp.shop }); + await expectShopContent(page); + }); + + test(`Shop page navigation works in ${name}`, async ({ basePage, page }) => { + await basePage.openLocalhost({ port, path: Constants.hrefs.nextJsSsrApp.shop }); + await expectNavigationFlow(page, port); + }); + + test(`Checkout page renders shared navigation in ${name}`, async ({ basePage, page }) => { + await basePage.openLocalhost({ port, path: Constants.hrefs.nextJsSsrApp.checkout }); + await expectSharedNavigation(page); + }); + + test(`Checkout page renders federated content in ${name}`, async ({ basePage, page }) => { + await basePage.openLocalhost({ port, path: Constants.hrefs.nextJsSsrApp.checkout }); + await expectCheckoutContent(page); + }); + + test(`Checkout page navigation works in ${name}`, async ({ basePage, page }) => { + await basePage.openLocalhost({ port, path: Constants.hrefs.nextJsSsrApp.checkout }); + await expectNavigationFlow(page, port); + }); + }); + } +}); diff --git a/nextjs-dynamic-ssr/package.json b/nextjs-dynamic-ssr/package.json index 7b305d84ce6..8b48cf80056 100644 --- a/nextjs-dynamic-ssr/package.json +++ b/nextjs-dynamic-ssr/package.json @@ -8,11 +8,18 @@ "start": "pnpm --parallel --filter nextjs-dynamic-ssr_* dev", "build": "pnpm --parallel --filter nextjs-dynamic-ssr_* build", "serve": "pnpm --parallel --filter nextjs-dynamic-ssr_* start", - "e2e:ci": "pnpm start & sleep 2 && wait-on tcp:3001 && wait-on tcp:3002 && wait-on tcp:3000 && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome" + "test:e2e": "npx playwright test", + "test:e2e:ui": "npx playwright test --ui", + "test:e2e:debug": "npx playwright test --debug", + "e2e:ci": "pnpm build && npx playwright install --with-deps && npx playwright test --reporter=list" }, "dependencies": { "@module-federation/sdk": "0.17.1", "concurrently": "^8.2.2", "wait-on": "7.2.0" + }, + "devDependencies": { + "@playwright/test": "^1.54.2", + "playwright": "^1.54.2" } -} \ No newline at end of file +} diff --git a/nextjs-dynamic-ssr/playwright.config.ts b/nextjs-dynamic-ssr/playwright.config.ts new file mode 100644 index 00000000000..c2207f7501b --- /dev/null +++ b/nextjs-dynamic-ssr/playwright.config.ts @@ -0,0 +1,52 @@ +import { defineConfig, devices } from '@playwright/test'; + +const isCI = !!process.env.CI; + +export default defineConfig({ + testDir: './e2e', + timeout: 60_000, + expect: { + timeout: 15_000, + }, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: isCI ? 1 : 0, + workers: isCI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost:3001', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1920, height: 1080 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + command: 'pnpm run --filter nextjs-dynamic-ssr_checkout dev', + port: 3000, + reuseExistingServer: !isCI, + timeout: 180_000, + }, + { + command: 'pnpm run --filter nextjs-dynamic-ssr_home dev', + port: 3001, + reuseExistingServer: !isCI, + timeout: 180_000, + }, + { + command: 'pnpm run --filter nextjs-dynamic-ssr_shop dev', + port: 3002, + reuseExistingServer: !isCI, + timeout: 180_000, + }, + ], +}); diff --git a/nextjs-host-react-remote/cypress.env.json b/nextjs-host-react-remote/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/nextjs-host-react-remote/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/nextjs-host-react-remote/e2e/checkHostApp.cy.ts b/nextjs-host-react-remote/e2e/checkHostApp.cy.ts deleted file mode 100644 index 1b127032054..00000000000 --- a/nextjs-host-react-remote/e2e/checkHostApp.cy.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { BaseMethods } from '../../cypress-e2e/common/base'; -import { baseSelectors } from '../../cypress-e2e/common/selectors'; -import { Constants } from '../../cypress-e2e/fixtures/constants'; -import { CssAttr } from '../../cypress-e2e/types/cssAttr'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('NextJS React', () => { - context('Check host app', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3000, - }); - }); - - it('Check buttons exist', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.nextJsReactApp.buttons.nextJS, - }); - cy.wait(200); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.nextJsReactApp.buttons.remote, - }); - }); - - it('Check button color', () => { - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.nextJsReactApp.buttons.nextJS, - prop: CssAttr.background, - value: Constants.color.lightSaturatedYellow, - }); - cy.wait(200); - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.nextJsReactApp.buttons.remote, - prop: CssAttr.background, - value: Constants.color.darkMutedBlue, - }); - }); - }); -}); diff --git a/nextjs-host-react-remote/e2e/checkHostApp.spec.ts b/nextjs-host-react-remote/e2e/checkHostApp.spec.ts new file mode 100644 index 00000000000..dcae4fef5ef --- /dev/null +++ b/nextjs-host-react-remote/e2e/checkHostApp.spec.ts @@ -0,0 +1,23 @@ +import { expect, test } from '@playwright/test'; + +test.describe('NextJS React - host app', () => { + test.beforeEach(async ({ page }) => { + await page.goto('/'); + }); + + test('renders host and remote buttons', async ({ page }) => { + const hostButton = page.getByRole('button', { name: 'Next JS Button' }); + await expect(hostButton).toBeVisible(); + + const remoteButton = page.getByRole('button', { name: 'Remote Button' }); + await expect(remoteButton).toBeVisible(); + }); + + test('applies expected button colors', async ({ page }) => { + const hostButton = page.getByRole('button', { name: 'Next JS Button' }); + await expect(hostButton).toHaveCSS('background-color', 'rgb(255, 198, 0)'); + + const remoteButton = page.getByRole('button', { name: 'Remote Button' }); + await expect(remoteButton).toHaveCSS('background-color', 'rgb(75, 75, 232)'); + }); +}); diff --git a/nextjs-host-react-remote/e2e/checkRemoteApp.cy.ts b/nextjs-host-react-remote/e2e/checkRemoteApp.cy.ts deleted file mode 100644 index df1945623d1..00000000000 --- a/nextjs-host-react-remote/e2e/checkRemoteApp.cy.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { BaseMethods } from '../../cypress-e2e/common/base'; -import { baseSelectors } from '../../cypress-e2e/common/selectors'; -import { Constants } from '../../cypress-e2e/fixtures/constants'; -import { CssAttr } from '../../cypress-e2e/types/cssAttr'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('NextJS React', () => { - // TODO cy.exec don't build the apps correctly cause lerna executes without exit code. Uncomment after fix this issue! - // before(() => { - // basePage.buildTheSample(Constants.samplesPath.nextjsReact) - // }) - - // after(() => { - // basePage.shutdownTheSample(Constants.samplesPath.nextjsReact) - // }) - context('Check remote app', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3001, - }); - }); - - it('Check button exists', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.nextJsReactApp.buttons.remote, - }); - }); - - it('Check button color', () => { - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.nextJsReactApp.buttons.remote, - prop: CssAttr.background, - value: Constants.color.darkMutedBlue, - }); - }); - }); -}); diff --git a/nextjs-host-react-remote/e2e/checkRemoteApp.spec.ts b/nextjs-host-react-remote/e2e/checkRemoteApp.spec.ts new file mode 100644 index 00000000000..ad413883783 --- /dev/null +++ b/nextjs-host-react-remote/e2e/checkRemoteApp.spec.ts @@ -0,0 +1,17 @@ +import { expect, test } from '@playwright/test'; + +test.describe('NextJS React - remote app', () => { + test.beforeEach(async ({ page }) => { + await page.goto('http://localhost:3001/'); + }); + + test('renders remote button', async ({ page }) => { + const remoteButton = page.getByRole('button', { name: 'Remote Button' }); + await expect(remoteButton).toBeVisible(); + }); + + test('applies remote button color', async ({ page }) => { + const remoteButton = page.getByRole('button', { name: 'Remote Button' }); + await expect(remoteButton).toHaveCSS('background-color', 'rgb(75, 75, 232)'); + }); +}); diff --git a/nextjs-host-react-remote/e2e/runAll.cy.ts b/nextjs-host-react-remote/e2e/runAll.cy.ts deleted file mode 100644 index 8bb02e73c3a..00000000000 --- a/nextjs-host-react-remote/e2e/runAll.cy.ts +++ /dev/null @@ -1,2 +0,0 @@ -import './checkHostApp.cy'; -import './checkRemoteApp.cy'; diff --git a/nextjs-host-react-remote/e2e/runAll.spec.ts b/nextjs-host-react-remote/e2e/runAll.spec.ts new file mode 100644 index 00000000000..5b6f6d4b03b --- /dev/null +++ b/nextjs-host-react-remote/e2e/runAll.spec.ts @@ -0,0 +1,15 @@ +import { expect, test } from '@playwright/test'; + +test.describe('NextJS React smoke tests', () => { + test('host page loads remote content', async ({ page }) => { + await page.goto('/'); + await expect(page.getByRole('heading', { name: 'Next JS and React' })).toBeVisible(); + await expect(page.getByRole('button', { name: 'Next JS Button' })).toBeVisible(); + await expect(page.getByRole('button', { name: 'Remote Button' })).toBeVisible(); + }); + + test('remote standalone entry is available', async ({ page }) => { + await page.goto('http://localhost:3001/'); + await expect(page.getByRole('button', { name: 'Remote Button' })).toBeVisible(); + }); +}); diff --git a/nextjs-host-react-remote/package.json b/nextjs-host-react-remote/package.json index 0ad91604bf3..06b07878f62 100644 --- a/nextjs-host-react-remote/package.json +++ b/nextjs-host-react-remote/package.json @@ -10,7 +10,8 @@ "main": "index.js", "scripts": { "start": "pnpm --parallel --filter nextjs-react_* run dev", - "e2e:ci": "pnpm start & sleep 2 && wait-on http-get://localhost:3000/ && wait-on http-get://localhost:3001/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/runAll.cy.ts\" --browser=chrome" + "e2e:ci": "pnpm exec playwright test", + "e2e": "pnpm exec playwright test" }, "keywords": [], "author": "rahulteja-dev", @@ -18,5 +19,8 @@ "dependencies": { "concurrently": "^8.2.2", "wait-on": "7.2.0" + }, + "devDependencies": { + "@playwright/test": "^1.45.0" } } diff --git a/nextjs-host-react-remote/playwright.config.ts b/nextjs-host-react-remote/playwright.config.ts new file mode 100644 index 00000000000..1089e8a2669 --- /dev/null +++ b/nextjs-host-react-remote/playwright.config.ts @@ -0,0 +1,28 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e', + timeout: 60_000, + expect: { + timeout: 10_000, + }, + fullyParallel: false, + reporter: [['list']], + use: { + baseURL: 'http://localhost:3000', + trace: 'on-first-retry', + headless: true, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: { + command: 'pnpm start', + url: 'http://localhost:3000', + reuseExistingServer: !process.env.CI, + timeout: 180_000, + }, +}); diff --git a/nextjs-ssr/cypress.env.json b/nextjs-ssr/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/nextjs-ssr/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/nextjs-ssr/e2e/checkApps.cy.ts b/nextjs-ssr/e2e/checkApps.cy.ts deleted file mode 100644 index 64dbb880db4..00000000000 --- a/nextjs-ssr/e2e/checkApps.cy.ts +++ /dev/null @@ -1,407 +0,0 @@ -import { BaseMethods } from '../../cypress-e2e/common/base'; -import { baseSelectors, selectors } from '../../cypress-e2e/common/selectors'; -import { Constants } from '../../cypress-e2e/fixtures/constants'; - -const basePage: BaseMethods = new BaseMethods(); - -const appsData = [ - { - appName: Constants.commonConstantsData.home, - host: 3001, - }, - { - appName: Constants.elementsText.nextJsSsrApp.shop, - host: 3002, - }, - { - appName: Constants.elementsText.nextJsSsrApp.checkout, - host: 3000, - }, -]; - -appsData.forEach((property: { appName: string; host: number }) => { - const navigationTextedLinks = [ - { - text: Constants.commonConstantsData.home, - link: Constants.commonConstantsData.commonLinks.baseLink, - url: Constants.commonConstantsData.commonLinks.baseLink, - }, - { - text: Constants.elementsText.nextJsSsrApp.shop, - link: Constants.hrefs.nextJsSsrApp.shop, - url: Constants.hrefs.nextJsSsrApp.shop, - }, - { - text: Constants.elementsText.nextJsSsrApp.checkout, - link: Constants.hrefs.nextJsSsrApp.checkout, - url: Constants.hrefs.nextJsSsrApp.checkout, - }, - ]; - - const commonTextedLinks = [ - { - text: Constants.elementsText.nextJsSsrApp.zeit, - link: Constants.hrefs.nextJsSsrApp.zeit, - url: Constants.hrefs.nextJsSsrApp.vercelHome, - }, - { - text: Constants.elementsText.nextJsSsrApp.gitHub, - link: Constants.hrefs.nextJsSsrApp.zeitGitHub, - url: Constants.hrefs.nextJsSsrApp.vercelGitHub, - }, - ]; - - const tileTextedLinks = [ - { - text: Constants.elementsText.nextJsSsrApp.tiles.documentation, - link: Constants.hrefs.nextJsSsrApp.documentation, - url: Constants.hrefs.nextJsSsrApp.documentation, - }, - { - text: Constants.elementsText.nextJsSsrApp.tiles.learn, - link: Constants.hrefs.nextJsSsrApp.learn, - url: Constants.hrefs.nextJsSsrApp.learnAboutNext, - }, - { - text: Constants.elementsText.nextJsSsrApp.tiles.examples, - link: Constants.hrefs.nextJsSsrApp.examples, - url: Constants.hrefs.nextJsSsrApp.deprecatedMainExamples, - }, - ]; - - describe(`NextJS SSR`, () => { - context(`Check content in ${property.appName} app`, () => { - beforeEach(() => { - basePage.openLocalhost({ - number: property.host, - }); - }); - - it(`Check the header content of Home page`, () => { - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.list, - text: Constants.commonConstantsData.home, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.list, - text: Constants.elementsText.nextJsSsrApp.shop, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.list, - text: Constants.elementsText.nextJsSsrApp.checkout, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.list, - text: Constants.elementsText.nextJsSsrApp.zeit, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.list, - text: Constants.elementsText.nextJsSsrApp.gitHub, - }); - basePage.checkElementContainText({ - selector: selectors.nextJsSsrApp.nextApp, - text: Constants.commonConstantsData.helloWorldMessage, - }); - }); - - it(`Check the main content of Home page`, () => { - basePage.checkElementContainText({ - selector: selectors.nextJsSsrApp.heroSection, - text: Constants.elementsText.nextJsSsrApp.texts.text3, - }); - basePage.checkElementContainText({ - selector: selectors.nextJsSsrApp.heroSection, - text: Constants.elementsText.nextJsSsrApp.texts.text4, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.elementsText.nextJsSsrApp.messages.welcomeMessage, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.elementsText.nextJsSsrApp.texts.text5, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.elementsText.nextJsSsrApp.messages.welcomeMessage, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.elementsText.nextJsSsrApp.texts.text5, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.elementsText.nextJsSsrApp.messages.welcomeMessage, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.elementsText.nextJsSsrApp.texts.text5, - }); - }); - - it(`Check the tiles exist on Home page`, () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.link, - text: Constants.elementsText.nextJsSsrApp.tiles.documentation, - }); - - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.link, - text: Constants.elementsText.nextJsSsrApp.tiles.learn, - }); - - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.link, - text: Constants.elementsText.nextJsSsrApp.tiles.examples, - }); - }); - }); - }); - - describe('NextJS SSR', () => { - context('Check links on Home page', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: property.host, - }); - }); - - navigationTextedLinks.forEach((property: { text: string; link: string }) => { - it(`Check that ${property.text} text includes link, is not disabled`, () => { - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.link, - text: property.text, - link: property.link, - }); - }); - }); - - commonTextedLinks.forEach((property: { text: string; link: string }) => { - it(`Check that ${property.text} text includes link, is not disabled`, () => { - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.link, - text: property.text, - link: property.link, - }); - }); - }); - - tileTextedLinks.forEach((property: { text: string; link: string }) => { - it(`Check that ${property.text} text includes link and is not disabled`, () => { - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.link, - text: property.text, - link: property.link, - }); - }); - }); - - navigationTextedLinks.forEach((property: { text: string; url: string }) => { - it(`Check that ${property.text} navigation link works`, () => { - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.link, - text: property.text, - }); - - basePage.checkUrlText(property.url, true); - }); - }); - }); - }); - - describe('NextJS SSR', () => { - context('Check the header content of Shop page', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: property.host, - path: Constants.hrefs.nextJsSsrApp.shop, - }); - }); - - it(`Check the header content of Shop page`, () => { - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.list, - text: Constants.commonConstantsData.home, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.list, - text: Constants.elementsText.nextJsSsrApp.shop, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.list, - text: Constants.elementsText.nextJsSsrApp.checkout, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.list, - text: Constants.elementsText.nextJsSsrApp.zeit, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.list, - text: Constants.elementsText.nextJsSsrApp.gitHub, - }); - basePage.checkElementContainText({ - selector: selectors.nextJsSsrApp.nextApp, - text: Constants.commonConstantsData.helloWorldMessage, - }); - }); - - it(`Check the main content of Shop page`, () => { - basePage.checkElementContainText({ - selector: selectors.nextJsSsrApp.nextApp, - text: Constants.elementsText.nextJsSsrApp.pages.shopPage, - }); - basePage.checkElementContainText({ - selector: selectors.nextJsSsrApp.nextApp, - text: Constants.elementsText.nextJsSsrApp.texts.mainShopText, - }); - }); - }); - }); - - describe('NextJS SSR', () => { - context('Check links on Shop page', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: property.host, - path: Constants.hrefs.nextJsSsrApp.shop, - }); - }); - - navigationTextedLinks.forEach((property: { text: string; link: string }) => { - it(`Check that ${property.text} text includes link and is not disabled`, () => { - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.link, - text: property.text, - link: property.link, - }); - }); - }); - - commonTextedLinks.forEach((property: { text: string; link: string }) => { - it(`Check that ${property.text} text includes link and is not disabled`, () => { - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.link, - text: property.text, - link: property.link, - }); - }); - }); - - navigationTextedLinks.forEach((property: { text: string; url: string }) => { - it(`Check that ${property.text} text navigation link works`, () => { - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.link, - text: property.text, - }); - - basePage.checkUrlText(property.url, true); - }); - }); - }); - }); - - describe('NextJS SSR', () => { - context(`Check the content of Checkout page`, () => { - beforeEach(() => { - basePage.openLocalhost({ - number: property.host, - path: Constants.hrefs.nextJsSsrApp.checkout, - }); - }); - - it(`Check the header content of Checkout page`, () => { - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.list, - text: Constants.commonConstantsData.home, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.list, - text: Constants.elementsText.nextJsSsrApp.shop, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.list, - text: Constants.elementsText.nextJsSsrApp.checkout, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.list, - text: Constants.elementsText.nextJsSsrApp.zeit, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.list, - text: Constants.elementsText.nextJsSsrApp.gitHub, - }); - basePage.checkElementContainText({ - selector: selectors.nextJsSsrApp.nextApp, - text: Constants.commonConstantsData.helloWorldMessage, - }); - }); - - it(`Check the main content of Checkout page`, () => { - basePage.checkElementContainText({ - selector: selectors.nextJsSsrApp.nextApp, - text: Constants.elementsText.nextJsSsrApp.pages.checkoutPage, - }); - basePage.checkElementContainText({ - selector: selectors.nextJsSsrApp.nextApp, - text: Constants.elementsText.nextJsSsrApp.messages.checkoutMessage, - }); - basePage.checkElementContainText({ - selector: selectors.nextJsSsrApp.nextApp, - text: Constants.elementsText.nextJsSsrApp.texts.text1, - }); - basePage.checkElementContainText({ - selector: selectors.nextJsSsrApp.nextApp, - text: Constants.elementsText.nextJsSsrApp.texts.text2, - }); - // basePage.checkElementContainText({ - // selector: baseSelectors.tags.pre, - // text: Constants.elementsText.nextJsSsrApp.json, - // index: 1 - // }) - }); - }); - }); - - describe('NextJS SSR', () => { - context('Check links on Checkout page', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: property.host, - path: Constants.hrefs.nextJsSsrApp.checkout, - }); - }); - - navigationTextedLinks.forEach((property: { text: string; link: string }) => { - it(`Check that ${property.text} text includes link and is not disabled`, () => { - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.link, - text: property.text, - link: property.link, - }); - }); - }); - - commonTextedLinks.forEach((property: { text: string; link: string }) => { - it(`Check that ${property.text} text includes link and is not disabled`, () => { - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.link, - text: property.text, - link: property.link, - }); - }); - }); - - navigationTextedLinks.forEach((property: { text: string; url: string }) => { - it(`Check that ${property.text} text navigation link works`, () => { - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.link, - text: property.text, - }); - - cy.wait(500); - basePage.checkUrlText(property.url, true); - }); - }); - }); - }); -}); diff --git a/nextjs-ssr/e2e/checkNextjsSsr.spec.ts b/nextjs-ssr/e2e/checkNextjsSsr.spec.ts new file mode 100644 index 00000000000..989f6ffbcfe --- /dev/null +++ b/nextjs-ssr/e2e/checkNextjsSsr.spec.ts @@ -0,0 +1,244 @@ +import { test, expect, type Page } from '@playwright/test'; +import { Constants } from '../../playwright-e2e/fixtures/constants'; + +interface AppConfig { + name: string; + port: number; +} + +interface NavigationLink { + text: string; + href: string; + path: string; +} + +interface ExternalLink { + text: string; + href: string; +} + +interface TileLink { + heading: string; + href: string; +} + +const appsUnderTest: AppConfig[] = [ + { + name: Constants.commonConstantsData.home, + port: 3001, + }, + { + name: Constants.elementsText.nextJsSsrApp.shop, + port: 3002, + }, + { + name: Constants.elementsText.nextJsSsrApp.checkout, + port: 3000, + }, +]; + +const navigationLinks: NavigationLink[] = [ + { + text: Constants.commonConstantsData.home, + href: Constants.commonConstantsData.commonLinks.baseLink, + path: Constants.commonConstantsData.commonLinks.baseLink, + }, + { + text: Constants.elementsText.nextJsSsrApp.shop, + href: Constants.hrefs.nextJsSsrApp.shop, + path: Constants.hrefs.nextJsSsrApp.shop, + }, + { + text: Constants.elementsText.nextJsSsrApp.checkout, + href: Constants.hrefs.nextJsSsrApp.checkout, + path: Constants.hrefs.nextJsSsrApp.checkout, + }, +]; + +const externalLinks: ExternalLink[] = [ + { + text: Constants.elementsText.nextJsSsrApp.zeit, + href: Constants.hrefs.nextJsSsrApp.zeit, + }, + { + text: Constants.elementsText.nextJsSsrApp.gitHub, + href: Constants.hrefs.nextJsSsrApp.zeitGitHub, + }, +]; + +const tileLinks: TileLink[] = [ + { + heading: Constants.elementsText.nextJsSsrApp.tiles.documentation, + href: Constants.hrefs.nextJsSsrApp.documentation, + }, + { + heading: Constants.elementsText.nextJsSsrApp.tiles.learn, + href: Constants.hrefs.nextJsSsrApp.learn, + }, + { + heading: Constants.elementsText.nextJsSsrApp.tiles.examples, + href: Constants.hrefs.nextJsSsrApp.examples, + }, +]; + +const escapeRegExp = (value: string): string => + value.replace(/\\/g, '\\\\').replace(/[|{}\[\]()^$+*?.-]/g, '\\$&'); + +const createFlexibleRegExp = (value: string): RegExp => + new RegExp(escapeRegExp(value.trim()).replace(/\s+/g, '\\s+')); + +const normalizePath = (path: string): string => { + if (!path || path === '/') { + return '/'; + } + + return path.startsWith('/') ? path : `/${path}`; +}; + +const buildPathRegex = (port: number, path: string): RegExp => { + const normalized = normalizePath(path); + + if (normalized === '/') { + return new RegExp(`^http://localhost:${port}\\/?$`); + } + + const escapedPath = escapeRegExp(normalized); + return new RegExp(`^http://localhost:${port}${escapedPath}(?:\\/)?$`); +}; + +async function openLocalhost(page: Page, { port, path }: { port: number; path?: string }): Promise { + const normalizedPath = path ? (path.startsWith('/') ? path : `/${path}`) : ''; + const url = `http://localhost:${port}${normalizedPath}`; + await page.goto(url, { waitUntil: 'networkidle' }); +} + +const expectSharedNavigation = async (page: Page): Promise => { + const nav = page.locator('nav'); + await expect(nav).toBeVisible(); + await expect(nav.getByText(Constants.commonConstantsData.helloWorldMessage)).toBeVisible(); + + for (const { text, href } of navigationLinks) { + const link = nav.getByRole('link', { name: text }); + await expect(link).toBeVisible(); + await expect(link).toHaveAttribute('href', href); + } + + for (const { text, href } of externalLinks) { + const link = nav.getByRole('link', { name: text }); + await expect(link).toBeVisible(); + await expect(link).toHaveAttribute('href', href); + } +}; + +const expectHomePageContent = async (page: Page): Promise => { + await expect( + page.getByRole('heading', { level: 1, name: createFlexibleRegExp(Constants.elementsText.nextJsSsrApp.texts.text3) }), + ).toBeVisible(); + + await expect(page.getByText(Constants.elementsText.nextJsSsrApp.texts.text4, { exact: false })).toBeVisible(); + + await expect( + page.getByRole('heading', { + level: 1, + name: createFlexibleRegExp(Constants.elementsText.nextJsSsrApp.messages.welcomeMessage), + }), + ).toBeVisible(); + + await expect(page.getByText(Constants.elementsText.nextJsSsrApp.texts.text5, { exact: false })).toBeVisible(); +}; + +const expectHomeTiles = async (page: Page): Promise => { + for (const { heading, href } of tileLinks) { + const card = page.locator('a').filter({ has: page.locator('h3', { hasText: heading }) }); + await expect(card).toBeVisible(); + await expect(card).toHaveAttribute('href', href); + } +}; + +const expectShopContent = async (page: Page): Promise => { + await expect( + page.getByRole('heading', { level: 1, name: createFlexibleRegExp(Constants.elementsText.nextJsSsrApp.pages.shopPage) }), + ).toBeVisible(); + + await expect( + page.getByText(Constants.elementsText.nextJsSsrApp.texts.mainShopText, { exact: false }), + ).toBeVisible(); +}; + +const expectCheckoutContent = async (page: Page): Promise => { + await expect( + page.getByRole('heading', { + level: 1, + name: createFlexibleRegExp(Constants.elementsText.nextJsSsrApp.pages.checkoutPage), + }), + ).toBeVisible(); + + await expect( + page.getByText(Constants.elementsText.nextJsSsrApp.messages.checkoutMessage, { exact: false }), + ).toBeVisible(); + + await expect( + page.getByText(Constants.elementsText.nextJsSsrApp.texts.text1.trim(), { exact: false }), + ).toBeVisible(); + + await expect(page.getByText(Constants.elementsText.nextJsSsrApp.texts.text2, { exact: false })).toBeVisible(); +}; + +const expectNavigationFlow = async (page: Page, port: number): Promise => { + for (const { text, path } of navigationLinks) { + await page.getByRole('link', { name: text }).click(); + await expect(page).toHaveURL(buildPathRegex(port, path)); + } +}; + +test.describe('NextJS SSR', () => { + for (const { name, port } of appsUnderTest) { + test.describe(`${name} host`, () => { + test(`Home page renders shared navigation in ${name}`, async ({ page }) => { + await openLocalhost(page, { port }); + await expectSharedNavigation(page); + }); + + test(`Home page renders federated content in ${name}`, async ({ page }) => { + await openLocalhost(page, { port }); + await expectHomePageContent(page); + await expectHomeTiles(page); + }); + + test(`Home page navigation works in ${name}`, async ({ page }) => { + await openLocalhost(page, { port }); + await expectNavigationFlow(page, port); + }); + + test(`Shop page renders shared navigation in ${name}`, async ({ page }) => { + await openLocalhost(page, { port, path: Constants.hrefs.nextJsSsrApp.shop }); + await expectSharedNavigation(page); + }); + + test(`Shop page renders federated content in ${name}`, async ({ page }) => { + await openLocalhost(page, { port, path: Constants.hrefs.nextJsSsrApp.shop }); + await expectShopContent(page); + }); + + test(`Shop page navigation works in ${name}`, async ({ page }) => { + await openLocalhost(page, { port, path: Constants.hrefs.nextJsSsrApp.shop }); + await expectNavigationFlow(page, port); + }); + + test(`Checkout page renders shared navigation in ${name}`, async ({ page }) => { + await openLocalhost(page, { port, path: Constants.hrefs.nextJsSsrApp.checkout }); + await expectSharedNavigation(page); + }); + + test(`Checkout page renders federated content in ${name}`, async ({ page }) => { + await openLocalhost(page, { port, path: Constants.hrefs.nextJsSsrApp.checkout }); + await expectCheckoutContent(page); + }); + + test(`Checkout page navigation works in ${name}`, async ({ page }) => { + await openLocalhost(page, { port, path: Constants.hrefs.nextJsSsrApp.checkout }); + await expectNavigationFlow(page, port); + }); + }); + } +}); diff --git a/nextjs-ssr/package.json b/nextjs-ssr/package.json index 9613a4ce9a5..d4ede575d89 100644 --- a/nextjs-ssr/package.json +++ b/nextjs-ssr/package.json @@ -8,10 +8,17 @@ "start": " pnpm --parallel --filter nextjs-ssr_* dev", "build": "pnpm --parallel --filter nextjs-ssr_* build", "serve": "pnpm --parallel --filter nextjs-ssr_* start", - "e2e:ci": "pnpm run start & sleep 10 && wait-on http-get://localhost:3001/ && wait-on http-get://localhost:3002/ && wait-on http-get://localhost:3000/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome" + "test:e2e": "npx playwright test", + "test:e2e:ui": "npx playwright test --ui", + "test:e2e:debug": "npx playwright test --debug", + "e2e:ci": "pnpm build && npx playwright install --with-deps && npx playwright test --reporter=list" }, "dependencies": { "concurrently": "^8.2.2", "wait-on": "7.2.0" + }, + "devDependencies": { + "@playwright/test": "^1.54.2", + "playwright": "^1.54.2" } } diff --git a/nextjs-ssr/playwright.config.ts b/nextjs-ssr/playwright.config.ts new file mode 100644 index 00000000000..6a3ea257148 --- /dev/null +++ b/nextjs-ssr/playwright.config.ts @@ -0,0 +1,53 @@ +import { defineConfig, devices } from '@playwright/test'; + +const isCI = !!process.env.CI; + +export default defineConfig({ + testDir: './e2e', + testMatch: ['**/*.spec.ts'], + timeout: 60_000, + expect: { + timeout: 15_000, + }, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: isCI ? 1 : 0, + workers: isCI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost:3001', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1920, height: 1080 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + command: 'pnpm run --filter nextjs-ssr_checkout dev', + port: 3000, + reuseExistingServer: !isCI, + timeout: 180_000, + }, + { + command: 'pnpm run --filter nextjs-ssr_home dev', + port: 3001, + reuseExistingServer: !isCI, + timeout: 180_000, + }, + { + command: 'pnpm run --filter nextjs-ssr_shop dev', + port: 3002, + reuseExistingServer: !isCI, + timeout: 180_000, + }, + ], +}); diff --git a/nextjs-ssr/pnpm-lock.yaml b/nextjs-ssr/pnpm-lock.yaml index 59a3b343c1a..ca4dd6fe93b 100644 --- a/nextjs-ssr/pnpm-lock.yaml +++ b/nextjs-ssr/pnpm-lock.yaml @@ -14,6 +14,13 @@ importers: wait-on: specifier: 7.2.0 version: 7.2.0 + devDependencies: + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 + playwright: + specifier: ^1.54.2 + version: 1.55.0 checkout: dependencies: @@ -459,6 +466,11 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@playwright/test@1.55.0': + resolution: {integrity: sha512-04IXzPwHrW69XusN/SIdDdKZBzMfOT9UNT/YiJit/xpy2VuAoB8NHc8Aplb96zsWDddLnbkPL3TsmrS04ZU2xQ==} + engines: {node: '>=18'} + hasBin: true + '@rspack/binding-darwin-arm64@1.4.11': resolution: {integrity: sha512-PrmBVhR8MC269jo6uQ+BMy1uwIDx0HAJYLQRQur8gXiehWabUBCRg/d4U9KR7rLzdaSScRyc5JWXR52T7/4MfA==} cpu: [arm64] @@ -956,6 +968,11 @@ packages: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -1236,6 +1253,16 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + playwright-core@1.55.0: + resolution: {integrity: sha512-GvZs4vU3U5ro2nZpeiwyb0zuFaqb9sUiAJuyrWpcGouD8y9/HLgGbNRjIph7zU9D3hnPaisMl9zG9CgFi/biIg==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.55.0: + resolution: {integrity: sha512-sdCWStblvV1YU909Xqx0DhOjPZE4/5lJsIS84IfN9dAZfcl/CIZ5O8l3o0j7hPMjDvqoTF8ZUcc+i/GL5erstA==} + engines: {node: '>=18'} + hasBin: true + postcss@8.4.31: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} @@ -1543,17 +1570,17 @@ snapshots: '@emnapi/core@1.4.5': dependencies: '@emnapi/wasi-threads': 1.0.4 - tslib: 2.6.2 + tslib: 2.8.1 optional: true '@emnapi/runtime@1.4.5': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 optional: true '@emnapi/wasi-threads@1.0.4': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 optional: true '@esbuild/aix-ppc64@0.25.5': @@ -1922,6 +1949,10 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 + '@playwright/test@1.55.0': + dependencies: + playwright: 1.55.0 + '@rspack/binding-darwin-arm64@1.4.11': optional: true @@ -1995,7 +2026,7 @@ snapshots: '@tybys/wasm-util@0.10.0': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 optional: true '@types/eslint-scope@3.7.7': @@ -2429,6 +2460,9 @@ snapshots: jsonfile: 6.1.0 universalify: 2.0.1 + fsevents@2.3.2: + optional: true + function-bind@1.1.2: {} get-caller-file@2.0.5: {} @@ -2719,6 +2753,14 @@ snapshots: picomatch@2.3.1: {} + playwright-core@1.55.0: {} + + playwright@1.55.0: + dependencies: + playwright-core: 1.55.0 + optionalDependencies: + fsevents: 2.3.2 + postcss@8.4.31: dependencies: nanoid: 3.3.7 diff --git a/opencode.json b/opencode.json new file mode 100644 index 00000000000..69ed51aa320 --- /dev/null +++ b/opencode.json @@ -0,0 +1,37 @@ +{ + "$schema": "https://opencode.ai/config.json", + "agent": { + "codex-driver": { + "description": "Provides comprehensive yet single-scoped tasks to Codex; pairs through implementation and double-checks", + "mode": "subagent", + "temperature": 0.2, + "prompt": "You are the Codex Pair Programming Driver working side-by-side with Codex in a continuous pair-programming loop. Your job is to explore the problem space, co-design a plan, pair through implementation steps, and double-check results at each checkpoint.\n\n## Collaboration Mode (Pair Programming)\n- Treat Codex as your coding partner. Coordinate plans, propose next actions, and keep a tight feedback loop.\n- Work in short iterations: Plan -> Ask Codex to implement -> Observe output -> Review & verify -> Adjust -> Next step.\n- Maintain a running context of decisions, constraints, and open questions.\n- Proactively raise questions and assumptions before moving forward.\n\n## Initial Kickoff with Codex (Tone & Expectations)\nWhen sending the first message to Codex, explicitly set a collaborative tone and request the following:\n- Think out loud briefly (concise rationale), propose 1–2 approaches, and state assumptions\n- Ask clarifying questions if requirements are ambiguous\n- Confirm a small first milestone and acceptance criteria before coding\n- Check in before wide-scoped or potentially destructive changes\n- Prefer small, verifiable iterations and PR-sized diffs\n- Annotate code changes with filenames, line ranges, and rationale\n- Summarize what changed and what’s next after each step\n\nTemplate kickoff message:\n\"\"\"\nHi Codex — let’s pair on {task}. I’ll outline a short plan and acceptance criteria. Please:\n- Share a brief rationale and any assumptions\n- Confirm the first small milestone\n- Ask any clarifying questions you have\n- Implement the step with minimal, verifiable changes\n- Summarize the diff and validation results when done\n\"\"\"\nIf Codex’s replies are not collaborative or skip clarifications, politely steer them back by reiterating the checklist above.\n\n## Core Responsibilities\n1) Exploration & Framing\n- Identify goals, constraints, unknowns, dependencies, and risks.\n- Draft a minimal plan of milestones and checkpoints.\n- Call out assumptions and request clarification if needed.\n\n2) Paired Implementation Guidance\n- For each step, specify: objective, rationale, acceptance criteria, and files likely involved.\n- Ask Codex to implement with clear, actionable instructions.\n- Keep changes incremental and verifiable.\n\n3) Review & Double-Check\n- After each step, validate for: correctness, maintainability, scalability, and alignment with team conventions.\n- Verify TypeScript types, API contracts, edge cases, and testability.\n- Cross-check integration points and impacts across the codebase.\n\n4) Documentation & Handoff\n- Summarize decisions, trade-offs, and the current state.\n- Capture follow-ups and any remaining gaps.\n\n## Operational Guidelines\n- Read-Only Operations: only inspect and analyze; do not modify files or execute shell commands yourself.\n- Collaboration Protocol: provide specific, actionable guidance; reference exact files/paths/lines when possible; explain reasoning; prioritize by impact; suggest concrete next steps.\n- Management Standards: emphasize maintainability, scalability, and team consistency; validate against TypeScript/JavaScript standards and project conventions.\n\n## Pair-Programming Loop\nFor each iteration, structure your output as:\n1. Paired Plan: what we will do next and why.\n2. Instructions for Codex: precise steps Codex should take.\n3. Acceptance Criteria: how we will know it’s done.\n4. Review & Verification: checks to perform on the result.\n5. Next Step or Blockers: what follows, or what needs clarification.\n\n## Final Response Format (when asked for a review or plan)\n- Summary: brief overview of goals and current status.\n- Exploration Notes: objectives, constraints, assumptions, questions.\n- Milestone Plan: high-level steps with checkpoints.\n- Current Iteration: Paired Plan + Instructions + Acceptance Criteria.\n- Review & Verification: specific checks to confirm quality.\n- Recommendations: prioritized next actions and alternatives.\n\nYour role: be Codex’s co-driver—explore thoughtfully, guide concretely, and double-check rigorously while pairing throughout the process.", + "tools": { + "*": false, + "read": true, + "list": true, + "grep": true, + "glob": true, + "todoread": true, + "webfetch": true, + "codex_*": true + } + } + }, + "mcp": { + "codex": { + "type": "local", + "command": [ + "codex", + "mcp" + ] + }, + "codex-mcp-manager": { + "type": "local", + "command": [ + "node", + "/Users/bytedance/dev/codex/codex-mcp-manager/dist/index.js" + ] + } + } +} diff --git a/package.json b/package.json index c6d0e3619ac..c1eb2a61723 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,21 @@ "cypress": "13.12.0", "@types/react": "18.3.10", "@types/react-dom": "18.3.0" - } + }, + "onlyBuiltDependencies": [ + "@module-federation/nextjs-mf", + "@parcel/watcher", + "@swc/core", + "core-js", + "core-js-pure", + "cypress", + "esbuild", + "fsevents", + "nice-napi", + "nx", + "unrs-resolver", + "yorkie" + ] }, "devDependencies": { "@playwright/test": "^1.54.2", @@ -34,6 +48,7 @@ "husky": "9.0.11", "jest": "29.7.0", "js-yaml": "4.1.0", + "kill-port": "2.0.1", "lerna": "8.1.8", "lint-staged": "^15.2.10", "mocha": "10.6.0", diff --git a/playwright-e2e/common/base.ts b/playwright-e2e/common/base.ts new file mode 100644 index 00000000000..0cc6fdcfe17 --- /dev/null +++ b/playwright-e2e/common/base.ts @@ -0,0 +1,676 @@ +import { expect, Locator, Page, test } from '@playwright/test'; +import type { ElementHandle } from 'playwright'; + +interface VisibilityOptions { + selector: string; + isVisible?: boolean; + text?: string; + parentSelector?: string; +} + +interface TextPresenceOptions { + selector: string; + text: string; + isVisible?: boolean; + visibilityState?: 'be.visible' | 'exist'; + notVisibleState?: 'not.exist' | 'not.be.visible'; + parentSelector?: string; + isMultiple?: boolean; + index?: number; +} + +interface ClickWithTextOptions { + selector: string; + text: string; + parentSelector?: string; + isTargetChanged?: boolean; + index?: number; + wait?: number; +} + +interface BrowserAlertOptions { + selector: string; + alertMessage?: string; + isEqual?: boolean; + index?: number; + parentSelector?: string; + wait?: number; +} + +interface BrowserAlertForMultipleHostsOptions extends BrowserAlertOptions { + host: number; +} + +interface CompareHostsOptions { + selector: string; + extraHost: number; + isEqual?: boolean; + index?: number; + clickSelector?: string; + wait?: number; +} + +interface ElementContainTextOptions { + selector: string; + text: string | number; + isContain?: boolean; + index?: number; + parentSelector?: string; +} + +interface ElementQuantityOptions { + selector: string; + quantity: number; + parentSelector?: string; + text?: string; + jqueryValue?: boolean; +} + +interface ElementStateOptions { + selector: string; + state?: string; + parentSelector?: string; + text?: string; + isMultiple?: boolean; + jqueryValue?: boolean; +} + +interface ElementPropertyOptions { + selector: string; + prop: string; + value: string; + attr?: 'css' | 'attribute'; + parentSelector?: string; + text?: string; + index?: number; + isMultiple?: boolean; + isInclude?: boolean; +} + +export class BaseMethods { + constructor(protected readonly page: Page) {} + + private resolveLocator(selector: string, options: { parentSelector?: string; text?: string; index?: number } = {}): Locator { + return this.resolveLocatorForPage(this.page, selector, options); + } + + async checkInfoOnNonDefaultHost(opts: { + host: number; + element: string; + existedText: string; + notExistedText?: string; + }): Promise { + const { host, element, existedText, notExistedText } = opts; + const remote = await this.page.context().newPage(); + try { + await remote.goto(`http://localhost:${host}/`, { waitUntil: 'domcontentloaded' }); + const locator = remote.locator(element); + await expect(locator.filter({ hasText: existedText }).first()).toBeVisible(); + if (notExistedText) { + await expect(locator.filter({ hasText: notExistedText })).toHaveCount(0); + } + } finally { + await remote.close(); + } + } + + private resolveLocatorForPage( + page: Page, + selector: string, + options: { parentSelector?: string; text?: string; index?: number } = {}, + ): Locator { + const { parentSelector, text, index } = options; + let locator = parentSelector ? page.locator(parentSelector).locator(selector) : page.locator(selector); + + if (text) { + locator = locator.filter({ hasText: text }); + } + + if (typeof index === 'number') { + locator = locator.nth(index); + } + + return locator; + } + + async openLocalhost({ number, path }: { number: number; path?: string }): Promise { + const normalizedPath = path ? path.replace(/^\//, '') : ''; + const url = `http://localhost:${number}${normalizedPath ? `/${normalizedPath}` : ''}`; + await this.page.goto(url, { waitUntil: 'networkidle' }); + } + + async reloadWindow(_withoutCache: boolean = false): Promise { + await this.page.reload({ waitUntil: 'networkidle' }); + } + + async checkElementVisibility({ selector, isVisible = true, text, parentSelector }: VisibilityOptions): Promise { + const locator = this.resolveLocator(selector, { parentSelector, text }); + + if (isVisible) { + await expect(locator.first()).toBeVisible(); + const count = await locator.count(); + for (let index = 0; index < count; index++) { + await expect(locator.nth(index)).toBeVisible(); + } + + return; + } + + try { + await expect(locator).toHaveCount(0); + return; + } catch (error) { + const count = await locator.count(); + for (let index = 0; index < count; index++) { + await expect(locator.nth(index)).not.toBeVisible(); + } + } + } + + async checkElementWithTextPresence({ + selector, + text, + isVisible = true, + visibilityState = 'exist', + notVisibleState = 'not.exist', + parentSelector, + isMultiple = false, + index, + }: TextPresenceOptions): Promise { + if (isMultiple) { + const baseLocator = this.resolveLocator(selector, { parentSelector }); + const filtered = baseLocator.filter({ hasText: text }); + + if (!isVisible) { + if (notVisibleState === 'not.exist') { + await expect(filtered).toHaveCount(0); + return; + } + + const count = await filtered.count(); + + if (count === 0) { + await expect(filtered).toHaveCount(0); + return; + } + + for (let i = 0; i < count; i++) { + await expect(filtered.nth(i)).not.toBeVisible(); + } + + return; + } + + if (visibilityState === 'be.visible') { + await expect(filtered.first()).toBeVisible(); + const count = await filtered.count(); + for (let i = 0; i < count; i++) { + await expect(filtered.nth(i)).toBeVisible(); + } + + return; + } + + await expect(filtered).not.toHaveCount(0); + + return; + } + + const locator = this.resolveLocator(selector, { parentSelector, text, index }); + + if (!isVisible) { + if (notVisibleState === 'not.exist') { + await expect(locator).toHaveCount(0); + return; + } + + const count = await locator.count(); + + if (count === 0) { + await expect(locator).toHaveCount(0); + return; + } + + for (let i = 0; i < count; i++) { + await expect(locator.nth(i)).not.toBeVisible(); + } + + return; + } + + if (visibilityState === 'be.visible') { + await expect(locator.first()).toBeVisible(); + const count = await locator.count(); + for (let i = 0; i < count; i++) { + await expect(locator.nth(i)).toBeVisible(); + } + + return; + } + + await expect(locator).not.toHaveCount(0); + } + + async clickElementWithText({ selector, text, parentSelector, isTargetChanged = false, index, wait }: ClickWithTextOptions): Promise { + const locator = this.resolveLocator(selector, { parentSelector, text, index }); + const element = locator.first(); + + if (isTargetChanged) { + await element.evaluate(node => node.setAttribute('target', '_self')); + } + + await element.click(); + + if (wait && wait > 0) { + await this.page.waitForTimeout(wait); + } + } + + async checkElementContainText({ selector, text, isContain = true, index, parentSelector }: ElementContainTextOptions): Promise { + const locator = this.resolveLocator(selector, { parentSelector, index }); + const value = String(text); + + if (isContain) { + await expect(locator).toContainText(value); + + return; + } + + await expect(locator).not.toContainText(value); + } + + async fillField({ selector, text, parentSelector }: { selector: string; text: string; parentSelector?: string }): Promise { + const locator = this.resolveLocator(selector, { parentSelector }); + await locator.fill(''); + await locator.fill(text); + } + + async checkInputValue(value: string, parentElement?: string, isLengthChecked: boolean = false): Promise { + const locator = parentElement + ? this.resolveLocator('input, textarea', { parentSelector: parentElement }) + : this.page.locator('input'); + + const currentValue = await locator.inputValue(); + + if (isLengthChecked) { + expect(currentValue.length).toBe(value.length); + + return; + } + + expect(currentValue).toBe(value); + } + + async checkElementQuantity({ selector, quantity, parentSelector, text, jqueryValue = false }: ElementQuantityOptions): Promise { + let locator = this.resolveLocator(selector, { parentSelector }); + + if (text) { + locator = locator.filter({ hasText: text }); + } + + if (jqueryValue) { + const count = await locator.count(); + expect(count).toBe(quantity); + + return; + } + + await expect(locator).toHaveCount(quantity); + } + + async checkElementState({ selector, state = 'be.disabled', parentSelector, text, isMultiple = false, jqueryValue }: ElementStateOptions): Promise { + let locator = this.resolveLocator(selector, { parentSelector, text }); + + if (isMultiple && state === ':disabled') { + const handles = await locator.elementHandles(); + for (const handle of handles) { + const isDisabled = await handle.evaluate(element => (element as HTMLInputElement).disabled); + expect(isDisabled).toBe(Boolean(jqueryValue)); + } + + return; + } + + if (state === 'be.disabled' || state === ':disabled') { + await expect(locator).toBeDisabled(); + + return; + } + + if (state === 'not.be.disabled') { + await expect(locator).toBeEnabled(); + + return; + } + + await expect(locator).toHaveClass(state); + } + + async checkElementHaveProperty({ + selector, + prop, + value, + attr = 'css', + parentSelector, + text, + index, + isMultiple = false, + isInclude = true, + }: ElementPropertyOptions): Promise { + const locator = this.resolveLocator(selector, { parentSelector, text, index }); + const expectationMessage = + attr === 'attribute' + ? `Expected attribute "${prop}" on selector "${selector}" to ${isInclude ? '' : 'not '}include "${value}".` + : `Expected CSS property "${prop}" on selector "${selector}" to ${isInclude ? '' : 'not '}include "${value}".`; + + const doesMatch = (actual: string): boolean => (isInclude ? actual.includes(value) : !actual.includes(value)); + + await expect + .poll(async () => { + if (isMultiple) { + const handles = await locator.elementHandles(); + if (handles.length === 0) { + return false; + } + + try { + const results = await Promise.all( + handles.map(async handle => { + try { + return await this.getProperty(handle, prop, attr); + } finally { + await handle.dispose(); + } + }), + ); + + return results.every(doesMatch); + } catch { + return false; + } + } + + const handle = await locator.elementHandle({ timeout: 0 }); + if (!handle) { + return false; + } + + try { + const actual = await this.getProperty(handle, prop, attr); + return doesMatch(actual); + } catch { + return false; + } finally { + await handle.dispose(); + } + }, { message: expectationMessage }) + .toBeTruthy(); + } + + async checkUrlText(urlPart: string, isInclude: boolean = false): Promise { + const poller = expect.poll(() => this.page.url()); + + if (isInclude) { + await poller.toContain(urlPart); + + return; + } + + await poller.not.toContain(urlPart); + } + + skipTestByCondition(condition: unknown, reason: string = 'Skipped by condition'): void { + if (condition) { + test.info().skip(reason); + } + } + + async checkBrowserAlertByText({ + selector, + alertMessage, + isEqual = true, + index = 0, + parentSelector, + wait = 0, + }: BrowserAlertOptions): Promise { + const locator = this.resolveLocator(selector, { parentSelector, index }); + + if (wait > 0) { + await this.page.waitForTimeout(wait); + } + + const message = await this.captureDialogMessage(this.page, locator.first()); + + if (alertMessage !== undefined) { + if (isEqual) { + expect(message).toBe(alertMessage); + } else { + expect(message).not.toBe(alertMessage); + } + } + } + + async checkBrowserAlertForMultipleHosts({ + selector, + alertMessage, + isEqual = true, + index = 0, + parentSelector, + host, + wait = 0, + }: BrowserAlertForMultipleHostsOptions): Promise { + const baseGroup = this.resolveLocator(selector, { parentSelector }); + const baseCount = await baseGroup.count(); + + if (baseCount === 0) { + throw new Error(`No elements found for selector "${selector}" on the base page.`); + } + + const targetIndex = Math.min(index, baseCount - 1); + + if (wait > 0) { + await this.page.waitForTimeout(wait); + } + + const baseMessage = await this.captureDialogMessage(this.page, baseGroup.nth(targetIndex)); + + if (alertMessage !== undefined) { + if (isEqual) { + expect(baseMessage).toBe(alertMessage); + } else { + expect(baseMessage).not.toBe(alertMessage); + } + } + + const remotePage = await this.page.context().newPage(); + + try { + await remotePage.goto(`http://localhost:${host}/`, { waitUntil: 'networkidle' }); + + const remoteGroup = this.resolveLocatorForPage(remotePage, selector, { parentSelector }); + const remoteCount = await remoteGroup.count(); + + if (remoteCount === 0) { + throw new Error(`No elements found for selector "${selector}" on host ${host}.`); + } + + const remoteIndex = Math.min(targetIndex, remoteCount - 1); + const remoteMessage = await this.captureDialogMessage(remotePage, remoteGroup.nth(remoteIndex)); + + if (wait > 0) { + await remotePage.waitForTimeout(wait); + } + + if (isEqual) { + if (alertMessage !== undefined) { + expect(remoteMessage).toBe(alertMessage); + } + + expect(remoteMessage).toBe(baseMessage); + } else { + if (alertMessage !== undefined) { + expect(remoteMessage).not.toBe(alertMessage); + } + + expect(remoteMessage).not.toBe(baseMessage); + } + } finally { + await remotePage.close(); + } + } + + async compareInfoBetweenHosts( + selectorOrOptions: string | CompareHostsOptions, + extraHostArg?: number, + isEqualArg: boolean = true, + indexArg: number = 0, + clickSelectorArg?: string, + waitArg: number = 0, + ): Promise { + let selector: string; + let extraHost: number; + let isEqual: boolean; + let index: number; + let clickSelector: string | undefined; + let wait: number; + + if (typeof selectorOrOptions === 'string') { + selector = selectorOrOptions; + if (typeof extraHostArg !== 'number') { + throw new Error('The "extraHost" parameter must be provided when using the positional signature.'); + } + extraHost = extraHostArg; + isEqual = isEqualArg; + index = indexArg; + clickSelector = clickSelectorArg; + wait = waitArg; + } else { + ({ selector, extraHost, isEqual = true, index = 0, clickSelector, wait = 0 } = selectorOrOptions); + } + + const baseGroup = this.page.locator(selector); + const baseCount = await baseGroup.count(); + + if (baseCount === 0) { + throw new Error(`No elements found for selector "${selector}" on the base page.`); + } + + const targetIndex = Math.min(index, baseCount - 1); + + if (wait > 0) { + await this.page.waitForTimeout(wait); + } + + const baseText = (await baseGroup.nth(targetIndex).innerText()).trim(); + + const remotePage = await this.page.context().newPage(); + + try { + await remotePage.goto(`http://localhost:${extraHost}/`, { waitUntil: 'networkidle' }); + + if (clickSelector) { + const remoteClickGroup = remotePage.locator(clickSelector); + const remoteClickCount = await remoteClickGroup.count(); + + if (remoteClickCount === 0) { + throw new Error(`No elements found for selector "${clickSelector}" on host ${extraHost}.`); + } + + const clickIndex = Math.min(targetIndex, remoteClickCount - 1); + + try { + await this.captureDialogMessage(remotePage, remoteClickGroup.nth(clickIndex)); + } catch (error) { + const isTimeoutError = error instanceof Error && /Timeout/.test(error.message); + if (isTimeoutError) { + await remoteClickGroup.nth(clickIndex).click(); + } else { + throw error; + } + } + + if (wait > 0) { + await remotePage.waitForTimeout(wait); + } + } + + const remoteGroup = remotePage.locator(selector); + const remoteCount = await remoteGroup.count(); + + if (remoteCount === 0) { + throw new Error(`No elements found for selector "${selector}" on host ${extraHost}.`); + } + + const remoteIndex = Math.min(targetIndex, remoteCount - 1); + const remoteText = (await remoteGroup.nth(remoteIndex).innerText()).trim(); + + if (isEqual) { + expect(remoteText).toBe(baseText); + } else { + expect(remoteText).not.toBe(baseText); + } + } finally { + await remotePage.close(); + } + } + + private async getProperty(handle: ElementHandle | null, prop: string, attr: 'css' | 'attribute'): Promise { + if (!handle) { + throw new Error('Element handle is not available for property check.'); + } + + if (attr === 'attribute') { + const value = await handle.getAttribute(prop); + return value ?? ''; + } + + return await handle.evaluate((element, property) => { + const style = window.getComputedStyle(element as Element); + return style.getPropertyValue(property as string); + }, prop); + } + + private async captureDialogMessage(page: Page, locator: Locator): Promise { + const [dialog] = await Promise.all([ + page.waitForEvent('dialog', { timeout: 5_000 }), + locator.click(), + ]); + + const message = dialog.message(); + await dialog.accept(); + + return message; + } + + async checkCounterFunctionality(options: { + button: string; + counterElement: string; + counterText: string; // e.g. "Times button clicked: 0" + isButtonTexted?: boolean; // unused in Playwright port, kept for parity + isReloaded?: boolean; + isValueCompared?: boolean; + }): Promise { + const { button, counterElement, counterText, isReloaded = false, isValueCompared = false } = options; + + const btn = this.resolveLocator(button); + await expect(btn.first()).toBeVisible(); + await btn.first().click(); + + const counter = this.resolveLocator(counterElement).filter({ hasText: counterText.replace(/\d+$/, '') }); + await expect(counter.first()).toBeVisible(); + + // Extract numeric value that follows the counterText prefix + const text = (await counter.first().innerText()).trim(); + const match = text.match(/(\d+)/); + const value = match ? Number(match[1]) : NaN; + + if (isValueCompared) { + expect(value).toBeGreaterThanOrEqual(1); + } + + if (isReloaded) { + await this.reloadWindow(); + await this.checkElementWithTextPresence({ selector: counterElement, text: counterText, visibilityState: 'be.visible' }); + } + } +} diff --git a/playwright-e2e/common/basePage.ts b/playwright-e2e/common/basePage.ts new file mode 100644 index 00000000000..6382c23bd2d --- /dev/null +++ b/playwright-e2e/common/basePage.ts @@ -0,0 +1,61 @@ +import { expect, Locator, Page } from '@playwright/test'; + +export interface OpenLocalhostOptions { + port: number; + path?: string; + waitUntilSelector?: string; +} + +export interface ExpectElementWithTextOptions { + selector: string; + text: string; + exact?: boolean; + visible?: boolean; + nth?: number; + timeout?: number; +} + +export class BasePage { + constructor(protected readonly page: Page) {} + + async openLocalhost({ port, path, waitUntilSelector }: OpenLocalhostOptions): Promise { + const normalizedPath = path ? (path.startsWith('/') ? path : `/${path}`) : ''; + const url = `http://localhost:${port}${normalizedPath}`; + + await this.page.goto(url, { waitUntil: 'networkidle' }); + + if (waitUntilSelector) { + await this.page.waitForSelector(waitUntilSelector, { state: 'visible' }); + } + } + + protected getLocator(selector: string, nth?: number): Locator { + return typeof nth === 'number' ? this.page.locator(selector).nth(nth) : this.page.locator(selector); + } + + async expectElementWithTextPresence({ + selector, + text, + exact = true, + visible = true, + nth, + timeout, + }: ExpectElementWithTextOptions): Promise { + const locator = this.getLocator(selector, nth); + + if (!visible) { + const filtered = locator.filter({ hasText: text }); + await expect(filtered).toHaveCount(0, { timeout }); + + return; + } + + if (exact) { + await expect(locator).toHaveText(text, { timeout }); + + return; + } + + await expect(locator).toContainText(text, { timeout }); + } +} diff --git a/playwright-e2e/common/selectors.ts b/playwright-e2e/common/selectors.ts new file mode 100644 index 00000000000..831f446ef53 --- /dev/null +++ b/playwright-e2e/common/selectors.ts @@ -0,0 +1,243 @@ +import { Constants } from '../fixtures/constants'; + +export const baseSelectors = { + tags: { + coreElements: { + button: 'button', + div: 'div', + body: 'body', + label: 'label', + link: 'a', + list: 'li', + image: 'img', + spans: { + span: 'span', + tspan: 'tspan', + }, + }, + headers: { + h1: 'h1', + h2: 'h2', + h3: 'h3', + h4: 'h4', + h5: 'h5', + h6: 'h6', + header: 'header', + }, + tableElements: { + table: 'table', + row: 'tr', + dataCell: 'td', + header: 'th', + }, + inputs: { + input: 'input', + textarea: 'textarea', + }, + paragraph: 'p', + section: 'section', + navigation: 'nav', + code: 'code', + strong: 'strong', + emphasis: 'em', + appRoot: 'app-root', + pre: 'pre', + footer: 'footer', + }, + ids: { + app: '#app', + root: '#root', + parent: '#parent', + }, + css: { + style: '[style="{style}"]', + navigation: '.nav-item', + checkbox: '[type="checkbox"]', + href: '[href="{link}"]', + }, +}; + +export const commonSelectors = { + commonAngularAppsSelectors: { + alertMessage: '.alert-danger', + buttons: { + primary: '.btn-primary', + danger: '.btn-danger', + }, + blocks: { + cardBody: '.card-body', + formGroup: '.form-group', + }, + }, + commonWidget: '[data-e2e="APP_{appQuantity}__WIDGET"]', + formField: '[data-e2e="FORM_FIELD__{fieldName}"]', + commonMicroFrontendsAppsCard: '[data-e2e="APP__CARD"]', + nextJsAppsLinkCard: '[data-e2e="TEXTED_LINK_CARD"]', +}; + +export const selectors = { + vue3CliDemoApp: { + tabs: { + home: '.hello', + about: '.about', + }, + }, + vue3DemoFederationWithViteApp: { + buttonsBlock: '.main', + vueAppButton: '.{appType}-content div', + }, + differentReactVersionsIsolatedApp: { + divParent: '#parent', + sharedBlock: '[data-e2e="SHARED__REACT_BLOCK"]', + commonReactBlock: '[data-e2e="REACT__{blockType}_BLOCK"]', + }, + reactApp: { + app2ContentBlock: '[data-e2e="APP_2_CONTENT_BLOCK"]', + }, + react18Server2Server: { + idField: '[data-e2e="ID"]', + NameField: '[data-e2e="Name"]', + CompanyField: '[data-e2e="Company"]', + }, + sharedStoreCrossFrameworkApp: { + clicksCounter: '[data-e2e="CLICKS_COUNTER"]', + buttonsBlock: '[data-e2e="REMOTE_{blockType}__BUTTONS_BLOCK_MODULE"]', + actionButtons: { + increment: '[data-e2e="INCREMENT_BUTTON"]', + decrement: '[data-e2e="DECREMENT_BUTTON"]', + }, + }, + sharedRoutingApp: { + chartComponents: { + chart: '.recharts-surface', + graph: '#recharts_measurement_span', + }, + recentOrdersRow: '[data-e2e="RECENT_ORDERS_WIDGET__ORDER_ROW"]', + closeSideMenuButton: '[data-e2e="CLOSE_SIDE_MENU__BUTTON"]', + navigationButtonsBlock: '[data-e2e="NAVIGATION_BUTTONS_BLOCK"]', + inputShrinkAnimation: '[data-shrink="{state}"]', + profileImage: '[data-e2e="CARD_PROFILE__IMAGE"]', + recentOrdersWidgetCell: '[data-e2e="RECENT_ORDERS_WIDGET__{cellType}_CELL"]', + commonWidgetSelector: '[data-e2e="WIDGET__{selector}_BLOCK"]', + }, + cssIsolationApp: { + header: '#root h1', + name: '#root h2', + }, + vue3DemoApp: { + components: { + remote: '.remote-component', + layout: '.layout-app', + }, + }, + viteReactMicroFrontendsApp: { + symbols: { + star: '[data-e2e="STAR__SYMBOL"]', + cloud: '[data-e2e="CLOUD__SYMBOL"]', + }, + }, + quasarCliVue3WebPackJavaScriptApp: { + apps: { + exposes: { + names: '[data-e2e="EXPOSES_APP_NAMES"]', + closeButton: '[data-e2e="CLOSE_BUTTON"]', + counter: '[data-cy="app-button-counter"]', + }, + general: { + counter: '[data-e2e="GENERAL_COUNTER"]', + }, + }, + }, + rustWasmApp: { + gameBoard: '[data-e2e="GAME_BOARD"]', + }, + craReactRewiredApp: { + componentInfo: '[data-e2e="REMOTE_COMPONENT_INFO"]', + }, + angularUniversalSsrApp: { + activeTab: '[class="active"]', + citiesBlock: 'app-client-cities-home', + selectedCityInfo: 'app-client-city', + }, + rollupFederationDemoApp: { + header: '[data-e2e="APP_HEADER"]', + }, + comprehensiveDemoApp: { + app2Dialog: '[role="dialog"]', + blockSelectors: { + firstBlock: '.jss1', + secondBlock: '.jss2', + thirdBlock: '.jss3', + sideBarBlock: '.jss4', + }, + closeButton: '.closebtn', + alert: '.alert', + }, + nativeFederationReactApp: { + buttons: { + host: '[data-e2e="HOST_BUTTON"]', + remote: '[data-e2e="REMOTE_BUTTON"]', + }, + }, + nextJsSsrApp: { + nextApp: '#__next', + heroSection: '.hero', + }, + completeReactCaseApp: { + toolTip: '.tool-tip', + }, + angularVue: { + btn: '[data="VUE_IN_ANGULAR_BUTTON"]', + webComponent: 'unique-name', + interactionText: '[data="VUE_IN_ANGULAR_INTERACTION_TEXT"]', + }, + federatedCssButton: '[data-e2e="FEDERATED_CSS_BUTTON"]', + viteReactSimple: { + reactLink: '[data-e2e="VITE_REACT_APP__LEARN_REACT_LINK"]', + viteLink: '[data-e2e="VITE_REACT_APP__VITE_DOCS_LINK"]', + }, +}; + +export const updatedSelectors = { + common: { + appName: `${baseSelectors.tags.coreElements.div} ${baseSelectors.tags.headers.h2}`, + }, + vue3CliDemoApp: { + navigationActiveStateTab: `${baseSelectors.tags.navigation} .router-link-active`, + linkContainer: `${selectors.vue3CliDemoApp.tabs.home} ${baseSelectors.tags.coreElements.link}`, + }, + vue3DemoFederationWithViteApp: { + buttons: { + vite: selectors.vue3DemoFederationWithViteApp.vueAppButton.replace( + '{appType}', + Constants.selectorParts.vue3DemoFederationWithViteApp.vite, + ), + webpack: selectors.vue3DemoFederationWithViteApp.vueAppButton.replace( + '{appType}', + Constants.commonConstantsData.webpack, + ), + common: `${baseSelectors.tags.coreElements.div}[class*= "content"]`, + }, + }, + sharedRoutingApp: { + hamburgerMenuButton: `${baseSelectors.tags.headers.header} ${baseSelectors.tags.coreElements.button}`, + }, + vueCliApp: { + sectionElements: { + name: `${baseSelectors.tags.section} ${baseSelectors.tags.headers.h1}`, + button: `${baseSelectors.tags.section} ${baseSelectors.tags.coreElements.button}`, + }, + }, + angularUniversalSsrApp: { + tab: `${baseSelectors.tags.coreElements.div} ${baseSelectors.tags.coreElements.link}`, + addedCity: `${selectors.angularUniversalSsrApp.citiesBlock} ${baseSelectors.tags.coreElements.list}`, + }, + craReactAppRewiredApp: { + componentBorder: `${ + selectors.craReactRewiredApp.componentInfo + }${baseSelectors.css.style.replace('{style}', Constants.color.nonRgbValues.borderRed)}`, + }, + viteReactSimpleApp: { + headerBlock: `${baseSelectors.tags.headers.header} ${baseSelectors.tags.coreElements.div}`, + }, +}; diff --git a/playwright-e2e/common/testFixtures.ts b/playwright-e2e/common/testFixtures.ts new file mode 100644 index 00000000000..b02cf49e938 --- /dev/null +++ b/playwright-e2e/common/testFixtures.ts @@ -0,0 +1,10 @@ +import { test as base } from '@playwright/test'; +import { BasePage } from './basePage'; + +export const test = base.extend<{ basePage: BasePage }>({ + basePage: async ({ page }, use) => { + await use(new BasePage(page)); + }, +}); + +export { expect } from '@playwright/test'; diff --git a/playwright-e2e/fixtures/constants.ts b/playwright-e2e/fixtures/constants.ts new file mode 100644 index 00000000000..fd6f2874e7b --- /dev/null +++ b/playwright-e2e/fixtures/constants.ts @@ -0,0 +1,1216 @@ +export class Constants { + public static readonly filesPath = { + typeScriptMonoRepoPackageJsonPath: 'typescript-monorepo/package.json', + selfHealingAppsConfigs: { + app1: 'self-healing/app1/webpack.config.js', + app2: 'self-healing/app2/webpack.config.js', + }, + serverSideRenderOnlyChangeFilePath: 'server-side-render-only/remoteServer/SharedComponent.js', + nextJsHostReactRemoteApp: { + files: { + root: 'react-nextjs/nextjs-host-react-remote/host/pages/index.js', + changedContent: 'react-nextjs/nextjs-host-react-remote/e2e/fixtures/changedContent.js', + originalContent: 'react-nextjs/nextjs-host-react-remote/e2e/fixtures/originalContent.js', + }, + }, + nextJsHostRemoteApp: { + files: { + roots: { + host: 'react-nextjs/nextjs-host-remote/host/pages/index.js', + remote: 'react-nextjs/nextjs-host-remote/remote/pages/index.js', + }, + contents: { + original: { + host: 'react-nextjs/nextjs-host-remote/e2e/fixtures/host/originalContent.js', + remote: 'react-nextjs/nextjs-host-remote/e2e/fixtures/remote/originalContent.js', + }, + changed: { + host: 'react-nextjs/nextjs-host-remote/e2e/fixtures/host/changedContent.js', + remote: 'react-nextjs/nextjs-host-remote/e2e/fixtures/remote/changedContent.js', + }, + }, + }, + }, + }; + + public static readonly selectorParts = { + vue3DemoFederationWithViteApp: { + vite: 'vite', + }, + sharedRoutingAppReplaceSelectorPart: 'RECENT_', + formFieldNames: { + nameField: 'NAME', + emailField: 'EMAIL', + }, + sharedRoutingAppSelectorsParts: { + chart: 'Chart', + recentDeposits: 'Recent_deposits', + recentOrders: 'Recent_orders', + editProfile: 'Edit_profile', + userInfo: 'User_info', + cardProfile: 'Card_profile', + }, + }; + + public static readonly commonConstantsData = { + commonCountAppNames: { + app1: 'App 1', + app2: 'App 2', + app3: 'App 3', + }, + button: 'Button', + header: 'Header', + widget: 'Widget', + webpack: 'webpack', + counter: 'Counter', + home: 'Home', + commonIndexes: { + minusOne: -1, + zero: 0, + one: 1, + two: 2, + three: 3, + four: 4, + five: 5, + ten: 10, + eleven: 11, + }, + basicComponents: { + host: 'Host', + remote: 'Remote', + basicHostRemote: 'Basic Host-Remote', + }, + commonButtonWithEmoji: '💅 Button', + loading: 'Loading', + biDirectional: 'Bi-Directional', + controlShare: 'Share Control Panel', + controlRemote: 'API controlled remote configs', + sharedRoutingAppPagesComponents: { + dashboard: 'Dashboard', + orders: 'Orders', + profile: 'Profile', + }, + standardPhrase: 'May The Force Be With You', + commonLinks: { + page1: '/page-1', + page2: '/page-2', + baseLink: '/', + cellLink: '#/', + react: 'https://reactjs.org', + vercel: 'https://vercel.com', + nextJs: 'https://nextjs.org/', + nextJsAppsCardsLinks: [ + 'https://nextjs.org/docs', + 'https://nextjs.org/learn/foundations/about-nextjs', + 'https://github.com/vercel/next.js/tree/canary/examples', + 'https://vercel.com', + ], + }, + typeScript: 'typescript', + commonMicroFrontendsAppsCardsSymbolsNames: { + starSymbol: 'star', + cloudSymbol: 'cloud', + }, + commonAttributes: { + attr: 'attr', + href: 'href', + target: 'target', + src: 'src', + style: 'style', + border: 'border', + displayNone: 'display: none;', + }, + translationInfo: { + reactAppsTranslations: { + reactTypes: { + host: 'React Host :', + remote: 'React Remote :', + }, + remoteMicroFrontEndIntroduction: { + english: "Here's my micro frontend remote child :", + francais: 'Voici mon micro frontend remote child :', + }, + changeLanguageMessage: { + english: 'change language', + francais: 'changer la langue', + }, + mainTextMessage: 'This is the main text', + fromNextHostMessage: 'from Next Host', + }, + }, + commonAngularAppsData: { + mdmfShellName: 'MDMF SHELL', + mdmfProfile: { name: 'MDMF PROFILE', path: 'profile' }, + mdmfNavigationItemLogo: { + link: 'http://mellondev.net', + gitHubLink: 'https://github.com/pegaltier/', + targetBlank: '_blank', + }, + headers: { + shell: 'Microfrontend Shell', + profile: 'Profile (Microfrontend)', + table: 'List users from the shared application state', + }, + mdmfTableRowName: 'Name', + mdmfTableRowEmail: 'Email', + mdmfTableRowAction: 'Action', + mdmfNavigationItems: { + profile: 'Profile', + product: 'Product', + }, + messages: { + shellWelcome: + 'Welcome to the Angular 11 Microfrontend demo using Webpack 5 Module Federation', + shellParagraph: + 'This component is part of the shell application, the Profile component that is linked from the `Profile` link at the top is a Microfrontend that is remotely loaded into the application. Check the network settings to see the remote being loaded.', + profileParagraph: + 'This profile component is being remotely loaded into the application using Module Federation, angular is shared so the download is minimal for the frontend', + sharedParagraph: 'mdmf-shared works!', + testName: { + first: 'Test Name', + second: 'Test Name Second', + }, + email: { + first: 'test@test.com', + second: 'testSecond@test.com', + }, + requiresMessages: { + name: 'Name is required.', + email: 'Email is required.', + }, + }, + }, + helloWorldMessage: 'Hello World', + commonVueAppComponentState: 'Remote Component in Action..', + nextJsAppsCommonPhrases: { + linksCardsText: [ + 'Documentation →Find in-depth information about Next.js features and API.', + 'Learn →Learn about Next.js in an interactive course with quizzes!', + 'Examples →Discover and deploy boilerplate example Next.js projects.', + 'Deploy →Instantly deploy your Next.js site to a public URL with Vercel.', + ], + messages: { + start: 'Get started by editing pages/index.js', + engine: 'Powered by', + welcome: 'Welcome to Next.js!', + footer: + 'Scipt is only needed if you are not using the federation @ syntax when setting your remotes.', + }, + }, + }; + + public static readonly updatedConstantsData = { + commonAppWithButton: { + app1: `${Constants.commonConstantsData.commonCountAppNames.app1} ${Constants.commonConstantsData.button}`, + app2: `${Constants.commonConstantsData.commonCountAppNames.app2} ${Constants.commonConstantsData.button}`, + app3: `${Constants.commonConstantsData.commonCountAppNames.app3} ${Constants.commonConstantsData.button}`, + }, + commonAppWithWidget: { + app1: `${Constants.commonConstantsData.commonCountAppNames.app1} ${Constants.commonConstantsData.widget}`, + app2: `${Constants.commonConstantsData.commonCountAppNames.app2} ${Constants.commonConstantsData.widget}`, + app3: `${Constants.commonConstantsData.commonCountAppNames.app3} ${Constants.commonConstantsData.widget}`, + }, + updatedLoadingMessage: `${Constants.commonConstantsData.loading}...`, + baseSvelteIntroMessage: `Hello From Svelte ${Constants.commonConstantsData.standardPhrase}!`, + reactAppsTranslations: { + host: { + english: { + title: `${Constants.commonConstantsData.translationInfo.reactAppsTranslations.reactTypes.host} ${Constants.commonConstantsData.translationInfo.reactAppsTranslations.remoteMicroFrontEndIntroduction.english}`, + button: `${Constants.commonConstantsData.translationInfo.reactAppsTranslations.reactTypes.host} ${Constants.commonConstantsData.translationInfo.reactAppsTranslations.changeLanguageMessage.english}`, + text: `${Constants.commonConstantsData.translationInfo.reactAppsTranslations.reactTypes.host} ${Constants.commonConstantsData.translationInfo.reactAppsTranslations.mainTextMessage}`, + }, + francais: { + title: `${Constants.commonConstantsData.translationInfo.reactAppsTranslations.reactTypes.host} ${Constants.commonConstantsData.translationInfo.reactAppsTranslations.remoteMicroFrontEndIntroduction.francais}`, + button: `${Constants.commonConstantsData.translationInfo.reactAppsTranslations.reactTypes.host} ${Constants.commonConstantsData.translationInfo.reactAppsTranslations.changeLanguageMessage.francais}`, + text: `${Constants.commonConstantsData.translationInfo.reactAppsTranslations.reactTypes.host} Ceci est le texte principal`, + }, + }, + remote: { + english: { + title: `${Constants.commonConstantsData.translationInfo.reactAppsTranslations.reactTypes.remote} Title`, + button: `${Constants.commonConstantsData.translationInfo.reactAppsTranslations.reactTypes.remote} ${Constants.commonConstantsData.translationInfo.reactAppsTranslations.changeLanguageMessage.english}`, + text: `${Constants.commonConstantsData.translationInfo.reactAppsTranslations.reactTypes.remote} I\'m the remote child !`, + }, + francais: { + title: `${Constants.commonConstantsData.translationInfo.reactAppsTranslations.reactTypes.remote} Titre`, + button: `${Constants.commonConstantsData.translationInfo.reactAppsTranslations.reactTypes.remote} ${Constants.commonConstantsData.translationInfo.reactAppsTranslations.changeLanguageMessage.francais}`, + text: `${Constants.commonConstantsData.translationInfo.reactAppsTranslations.reactTypes.remote} Je suis le remote child`, + }, + }, + nextHost: { + english: { + title: + Constants.commonConstantsData.translationInfo.reactAppsTranslations + .remoteMicroFrontEndIntroduction.english, + button: `${Constants.commonConstantsData.translationInfo.reactAppsTranslations.changeLanguageMessage.english} ${Constants.commonConstantsData.translationInfo.reactAppsTranslations.fromNextHostMessage}`, + text: `${ + Constants.commonConstantsData.translationInfo.reactAppsTranslations.mainTextMessage + } ${Constants.commonConstantsData.translationInfo.reactAppsTranslations.fromNextHostMessage.replace( + 'from', + 'of', + )}`, + }, + francais: { + title: + Constants.commonConstantsData.translationInfo.reactAppsTranslations + .remoteMicroFrontEndIntroduction.francais, + button: `${Constants.commonConstantsData.translationInfo.reactAppsTranslations.changeLanguageMessage.francais} depuis ${Constants.commonConstantsData.translationInfo.reactAppsTranslations.fromNextHostMessage}`, + text: `Ceci est le texte principal ${Constants.commonConstantsData.translationInfo.reactAppsTranslations.fromNextHostMessage.replace( + 'from', + 'de', + )}`, + }, + }, + }, + typeScriptApp: { + buttons: { + small: `${Constants.commonConstantsData.commonCountAppNames.app2} Small ${Constants.commonConstantsData.button}`, + large: `${Constants.commonConstantsData.commonCountAppNames.app2.replace(' ', '')} Large ${ + Constants.commonConstantsData.button + }`, + }, + }, + }; + + public static readonly elementsText = { + reactNestedRoutersApp: { + shellAppTextedLinks: ['App1 Page1', 'App1 Page2', 'App2 PageA', 'App2 PageB', 'Go to Page 2'], + shellAppLinks: ['/app-1/page-1', '/app-1/page-2', '/app-2/page-a', '/app-2/page-b'], + replaceValues: ['2', 'B', 'Page 1', 'Page 2', '1', 'Page A', 'Page B', 'A'], + }, + vue3DemoFederationWithViteApp: { + viteContent: 'Vite Content', + webpackContent: 'Webpack Content', + }, + dynamicRemotesApp: { + header: 'Dynamic System Host', + buttonsText: ['Load App 2 Widget', 'Load App 3 Widget'], + widgetsNames: [ + Constants.updatedConstantsData.commonAppWithWidget.app2, + Constants.updatedConstantsData.commonAppWithWidget.app3, + ], + synchronousImportWidgetsNames: [ + Constants.updatedConstantsData.commonAppWithWidget.app1, + Constants.updatedConstantsData.commonAppWithWidget.app2, + ], + }, + dispatchRemoteApp: { + button: 'Dispatch RemoteApp new name', + input: 'test input', + }, + nestedApp: { + app1Text: 'app 1 body', + app2Container: 'App 2 Container', + }, + vue2InVue3App: { + commonButtonText: 'vue2 button click', + }, + differentAngularVersionsApps: { + mdmfProductHeader: 'Product (Microfrontend)', + mdmfSharedHeader: 'Component from shared module', + }, + differentReactVersionsApps: { + subheader: 'App 1, Uses react version not compatible with hooks', + reactBlockParagraph: + 'This Component uses hooks, if loaded on localhost:3001, it should work, even though that host does not support React Hooks', + reactBlockHeader: 'Text form legacy React app:', + reactBlockSubheader: 'And these are children passed into it from the legacy app', + paragraph: 'More react components from App2 using non-legacy React to render', + }, + comprehensiveDemoApp: { + alertMessage: 'You have pressed a button.', + App1: { + mainPage: { + alertMessage: 'Alert from LitElement', + headerText: 'Module Federation Demo', + paragraphs: { + first: 'Welcome to the Module Federation Demo!', + second: 'Click any of the items on the left to get started.', + third: + 'Feel free to leave me feedback: https://github.com/module-federation/mfe-webpack-demo', + }, + buttonText: 'Lit Element Action', + }, + uiLibrary: { + headerText: 'UI Library Demo', + paragraphs: { + first: + 'Simple example showing host app and external component using separate CSS solutions.', + second: 'This Button component can be found in App #3.', + third: 'This button is also used in the routing demo.', + }, + dialogHeader: 'Dialog Demo', + dialogParagraph: + 'Clicking the button below will render a Dialog using React Portal. This dialog component is being lazy loaded from the app #2.', + }, + svelte: { + headerText: 'Svelte Demo', + }, + routing: { + headerText: 'Routing Demo', + paragraphs: { + first: 'The following tab components are being imported remotely from "bravo-app".', + second: + "Notice that your browser's route is /routing/ depending on which tab is active.", + third: + 'If you open http://localhost:3002 you will see the same tab components at the root level', + forth: + 'The "Bar" tab also lazily renders the styled-component Button from the UI Library demo only when rendered.', + }, + }, + sideNavHeaderText: 'SideNav', + }, + App2: { + headerText: 'Material UI App', + paragraphText: 'Dialog Component', + openDialogButtonText: 'Open Dialog', + dialogHeader: 'Dialog Example', + dialogParagraph: 'This is a dialog from the Material UI app rendered in a React Portal.', + dialogButtonText: 'Nice', + dialogTabs: { + headerText: 'Tabs Component', + firstTab: { + name: 'Foo', + paragraphText: 'Foo Content', + }, + secondTab: { + name: 'Bar', + paragraphText: 'Bar Content', + buttonText: 'Bar Button', + }, + }, + }, + App3: { + headerText: 'Styled Components App', + buttonText: 'Test Button', + }, + App4: { + headerText: 'Hello From Svelte world!', + }, + App5: { + buttonText: 'bar', + alertText: 'Hello', + }, + comprehensiveDemoDemoPages: [ + { + name: 'Main', + link: Constants.commonConstantsData.commonLinks.cellLink, + index: Constants.commonConstantsData.commonIndexes.zero, + }, + { + name: 'UI Library', + link: '#/ui-library', + index: Constants.commonConstantsData.commonIndexes.one, + }, + { + name: 'Dialog', + link: '#/dialog', + index: Constants.commonConstantsData.commonIndexes.two, + }, + { + name: 'Svelte Page', + link: '#/svelte', + index: Constants.commonConstantsData.commonIndexes.three, + }, + { + name: 'Routing', + link: '#/routing/foo', + index: Constants.commonConstantsData.commonIndexes.four, + }, + ], + }, + angularReactShellApp: { + header: 'Profile (Angular Shell)', + subHeader: 'User List (React Microfrontend)', + paragraph: + 'This user list component is being remotely loaded into the application from React App using Webpack Module Federation', + emptyTableState: '----- Create user to see data here -----', + userActions: { + create: 'Create User', + remove: 'Remove User', + }, + }, + craApp: { + buttonText: 'Hello from remote', + }, + completeReactCaseApp: { + header: 'Open Dev Tool And Focus On Network,checkout resources details', + paragraphs: { + firstParagraph: 'lib-app', + secondParagraph: 'component-app', + }, + buttons: { + primaryButton: 'primary', + warningButton: 'warning', + openDialogButton: 'click me to open Dialog', + h4Buttons: 'Buttons:', + closeButton: 'close It!', + }, + h4Dialog: 'Dialog:', + h4HoverElement: 'hover me please', + nameMessage: 'What is your name ?', + }, + differentReactVersionsIsolatedApp: { + headers: { + app1: 'Host Application - React Version 17.0.2', + app2: 'Remote Application - React Version 16.14.0', + }, + }, + serverSideRenderOnlyApp: { + headers: { + host: 'Host Server', + remote: 'Remote Server', + }, + components: { + sharedComponent: 'Shared Component2222', + updatedSharedComponent: 'Updated Shared conponent in test', + }, + contents: { + originalContent: + "import React from 'react';\n\nconst SharedComponent = () =>
Shared Component2222
;\n\nexport default SharedComponent;\n", + changedContent: + "import React from 'react';\n\nconst SharedComponent = () =>
Updated Shared conponent in test
;\n\nexport default SharedComponent;\n", + }, + }, + nextJsSsrApp: { + shop: 'Shop', + checkout: 'Checkout', + zeit: 'ZEIT', + gitHub: 'GitHub', + messages: { + welcomeMessage: 'Welcome to Next.js on Webpack 5! ', + checkoutMessage: 'This is a federated page owned by localhost:3000', + }, + texts: { + text1: 'Data from federated ', + text2: 'getInitalProps', + text3: 'This came fom checkout !!!', + text4: 'And it works like a charm v2', + text5: 'To get started, edit pages/index.js and save to reload.', + mainShopText: 'This is a federated page owned by localhost:3002', + }, + pages: { + checkoutPage: 'checkout page', + shopPage: 'Shop Page', + }, + tiles: { + documentation: 'Documentation →', + learn: 'Next.js Learn →', + examples: 'Examples →', + }, + json: '{\n "userId": 1,\n "id": 1,\n "title": "delectus aut autem",\n "completed": false\n}', + }, + sharedStoreCrossFrameworkApp: { + pageMark: 'Shell', + componentsTypes: { + reactType: 'React', + vueType: 'Vue', + }, + blocksNames: { + reactModule: 'Remote React module', + vueModule: 'Remote Vue module', + }, + mathSigns: { + plus: '+', + minus: '-', + }, + }, + sharedRoutingApp: { + profileActions: { + edit: 'Edit Profile', + complete: 'Complete your profile', + }, + chartInfo: { + today: 'Today', + sales: 'Sales ($)', + }, + chartMarks: { + horizontal: [ + '00:00', + '03:00', + '06:00', + '09:00', + '12:00', + '15:00', + '18:00', + '21:00', + '24:00', + ], + vertical: ['0', '600', '1200', '1800', '2400'], + }, + buttonsTexts: { + viewBalance: 'View balance', + updateProfile: 'Update Profile', + follow: 'Follow', + seeMoreOrders: 'See more orders', + }, + depositsInfo: { + recentDeposits: 'Recent Deposits', + sum: '$3,024.00', + date: 'on 15 March, 2019', + }, + orders: { + ordersHeader: 'Recent Orders', + recentOrdersTableColumnsHeaders: [ + 'Date', + 'Name', + 'Ship To', + 'Payment Method', + 'Sale Amount', + ], + recentOrderInfo: [ + '16 Mar, 2019', + 'Elvis Presley', + 'Tupelo, MS', + 'VISA ⠀•••• 3719', + '312.44', + ], + }, + sideMenuButtonsTypes: [ + Constants.commonConstantsData.sharedRoutingAppPagesComponents.dashboard, + Constants.commonConstantsData.sharedRoutingAppPagesComponents.orders, + Constants.commonConstantsData.sharedRoutingAppPagesComponents.profile, + ], + editProfileBlockLabels: [ + 'Company (disabled)', + 'Username', + 'First Name', + 'Last Name', + 'City', + 'Country', + 'Postal Code', + "Lamborghini Mercy, Your chick she so thirsty, I'm in that two seat Lambo.", + 'About me', + ], + aboutUserBlock: { + shortProfession: 'PRINCIPAL ENGINEER', + name: 'Zack Jackson', + longProfession: + 'Principal Engineer at lululemon Distributed JavaScript Orchestration at scale. Maintainer of Webpack, inventor of Module Federation.', + }, + }, + dynamicSystemRemotesRuntimeApp: { + host: { + header: 'Dynamic System Host', + hostH3: 'my env is https://host.api.com', + button: 'Load Remote Widget', + }, + paragraph: + 'The Dynamic System will take advantage Module Federation remotes and exposes. It will not load components that have been loaded already.', + buttonHeader: 'Remote Widget', + buttonH2: 'My env is ', + buttonParagraph: 'Using momentjs for format the date', + }, + sharedContextApp: { + app1: { + paragraph: 'Welcome, Billy', + }, + app2: { + paragraph: 'Welcome, Susan', + }, + header: 'Context Provider', + }, + cssIsolationApp: { + headers: { + app1: 'Host Application - React Version', + app2: 'Remote Application - React Version', + }, + buttonText: 'Make Everything Yellow', + }, + sharedRoutes2App: { + buttons: { + homeButtons: { + h1: 'Home Page', + h2: 'Welcome to the future!', + em: 'a page being provided by App 1', + }, + aboutButtons: { + h1: 'About Page', + em: 'a page being provided by App 2', + }, + }, + }, + nativeFederationReactApp: { + messages: { + consoleMessages: { + dateMessage: '2023-01-01 is a Sun.', + weekendMessage: 'No long weekend ☹', + loadingModuleMessage: 'loading remote module ...', + remoteModuleMessage: 'got remote module: ', + }, + pageMessages: { + checkConsoleMessage: 'Have a look into your JavaScript console ...', + remoteComponentGreeting: "I'm the remote's React Component!", + changeComponentMessage: 'Edit src/App.tsx and save to reload.', + }, + }, + elementsTexts: { + linkName: 'Learn React', + buttonText: 'click me 0', + }, + buttons: { + host: 'Host button: ', + remote: 'Remote button: ', + }, + }, + reactHostRemoteApp: { + containers: { + header: 'This is the container App hosted at localhost:8080', + div: 'This component is from the Host React App hosted at localhost:8081', + }, + hostedDiv: 'This is the Remote App hosted at localhost:8081)', + buttons: { + invoices: 'Invoices', + expenses: 'Expenses', + }, + }, + react18CodeSplittingApp: { + app1: { + appName: 'App1', + }, + app2: { + appName: 'App2', + }, + header: 'Module Federation Example: React 18 Code Splitting', + button: 'Toggle Content', + test: 'test', + }, + reactApps: { + app1: { + subHeader: 'This is the App 1 application.', + }, + app2: { + subHeader: 'This is the App 2 application.', + }, + splitedApp: { + header: 'App 2: Content', + subHeader: 'This is the content from app2.', + inputText: 'Custom text: ', + }, + header: 'Module Federation Example: Server Side Rendering', + header3: 'Type something into this input', + idField: '1337', + nameField: 'John Doe', + companyfield: 'Acme Inc.', + regularButton: 'Regular Button', + loadableButton: 'Loadable Button', + }, + reactHostNextJsApp: { + remoteComponents: { + header: 'This is the React container App hosted at localhost:8080', + nav: 'Hello from Remote Nextjs component hosted on localhost:8081', + }, + }, + vueCliApp: { + sectionsDescriptions: { + otherSection: + 'This is a component from /other-app.I am being imported.I also has my own behavior like fetching data', + coreSection: 'This is a section from /code.', + consumerCoreSection: + "I'm inside the Section component loaded from /core, but my text is defined in /consumer", + }, + buttonsText: { + otherSectionButton: 'Click to fetch from FakeApi', + consumerCoreSectionButton: 'Button imported from /core', + }, + otherSectionCodeBlock: + '{\n "userId": 1,\n "id": 1,\n "title": "delectus aut autem",\n "completed": false\n}', + consumerSection: { + header: 'This is /consumer.', + importMessages: { + core: 'The content below is imported from /core', + other: 'The content below is imported from /other', + }, + }, + }, + umdFederationApp: { + App1: { + firstHeader: 'Host App 1', + secondHeader: 'MF App 01', + thirdHeader: 'UMD App2', + }, + }, + quasarCliApp: { + appExposes: { + appName: 'App Exposes', + list: 'List', + banner: 'App Exposes Home Page', + componentsButton: 'Components', + }, + appGeneral: { + name: 'Child FE', + banner: 'App Remote Home Page', + routeButton: 'Route', + subheader1: 'Exposed from Child', + subheader2: 'Listening in Parent', + counter: 'Counter', + }, + appButtonDiv: 'App Button', + appButtonClickMeButton: 'Click me', + appListDiv: 'AppList', + names: [ + { name: 'Gualtiero', index: Constants.commonConstantsData.commonIndexes.five }, + { name: 'Riyaz', index: Constants.commonConstantsData.commonIndexes.four }, + { name: 'Quy', index: Constants.commonConstantsData.commonIndexes.three }, + { name: 'Sang', index: Constants.commonConstantsData.commonIndexes.two }, + { name: 'Loris', index: Constants.commonConstantsData.commonIndexes.one }, + ], + }, + commonMicroFrontendsApps: { + cardMessages: { + remoteCard: "I'm the remote app", + hostCard: "I'm the host app", + }, + buttonsText: { + hostButton: 'Host counter: 0', + remoteButton: 'Remote counter: 0', + }, + }, + reactInVueApp: { + App1: { + header: 'React in Vue', + subHeader: 'Vue State/Input', + checkBoxText: 'Show button:', + buttonInputText: 'Button text:', + counterText: 'Times button clicked:', + buttonHeader: 'React Button - loaded via Module Federation', + buttonText: 'React button', + updatedButtonText: 'Make cool', + }, + App2: { + buttonText: 'Home Button', + }, + }, + reactHmrApp: { + remote: { + text: "Remote 1's counter: ", + button: 'increment', + }, + host: { + headerText1: 'HOST', + headerText2: 'HOST ONLY SUPPORTS LIVE RELOAD. GO TO http://localhost:3001 to try out HMR', + heading: 'This is the heading', + button: 'from remote1: GO HOME', + }, + }, + angularUniversalSsrApp: { + inputButtonText: 'Add value', + tabsNames: [ + Constants.commonConstantsData.home, + 'Angular lazy module', + 'Federation lazy module', + ], + addedCities: ['Prague', 'Saint-Petersburg'], + angularUniversalSsrAddedValuesNames: ['one', 'two', 'three'], + }, + vue3CliDemoApp: { + aboutTab: 'About', + }, + nextJsReactApp: { + buttons: { + remote: 'Remote Button', + nextJS: 'Next JS Button', + }, + }, + rustWasmApp: { + buttonsNames: ['Play ▶️', 'Tick 🔂', 'Reset ♻️', 'Stop 🛑'], + }, + viteReactSimpleApp: { + buttons: { + webpack: 'Webpack Remote Button', + counter: 'count is: 0', + }, + links: ['Learn React', 'Vite Docs'], + }, + angularVue: { + angularAppHead: + 'Welcome to the Angular 15 Microfrontend demo using Webpack 5 Module Federation', + vueWebComponentTitle: 'Vue Remote Custom Element Content', + vueAsApplicationTitle: 'Vue Remote Create App Content', + interactionTextInitial: 'Some Content', + interactionTextChanged: 'Interaction Works', + }, + nextJSv12App: { + federatedButton: { + name: 'Federated Catch All', + header: 'PDP!!!', + }, + }, + }; + + public static readonly commonPhrases = { + reactNestedRoutersApp: { + pagesMessages: { + page1App1: 'Page 1 from App1', + pageAApp2: 'Page A from App2', + page2App1: 'Page 2 from App1', + pageBApp2: 'Page B from App2', + }, + loadingMessage: 'Loading App1...', + }, + vue3DemoFederationWithViteApp: { + greetings: { + vite: 'im from Vite', + webpack: 'im from Webpack', + }, + }, + dynamicRemotesApp: { + paragraphText: + 'The Dynamic System will take advantage of Module Federation remotes and exposes. It will not load components that have already been loaded.', + widgetParagraphText: [ + "Moment shouldn't download twice, the host has no moment.js", + 'Using momentjs for format the date', + ], + }, + reduxReducerInjectionApp: { + welcomeMessage: 'Welcome to Host App', + remoteAppText: 'RemoteApp', + remoteAppsNameFromReduxStore: "RemoteApp's name from the redux store : ", + }, + rustWasmApp: { + commonHostAppName: 'Host App', + consoleMessages: { + startLoopMessage: 'Infinite looping in progress', + stopLoopMessage: 'Looping successfully stopped', + tickLoopMessage: 'Game board successfully rerendered', + resetLoopMessage: 'Game board successfully reset', + baseLoadingMessage: 'I love rust and wasm!', + }, + }, + vueCliApp: { + welcomeMessage: 'Welcome to Your Vue.js + TypeScript App', + configurationMessage: + 'For a guide and recipes on how to configure / customize this project, check out the vue-cli documentation.', + installedCliPluginsMessage: 'Installed CLI Plugins', + essentialLinksMessage: 'Essential Links', + ecosystemLinksMessage: 'Ecosystem', + aboutTabMessage: 'This is an about page', + otherAppAlertMessage: 'Data fetched', + }, + differentAngularVersionsApps: { + productParagraph: + 'This product component is being remotely loaded into the application using Module Federation, angular is shared so the download is minimal for the frontend', + productLinkText: 'Detail', + backLink: 'Back', + }, + vue2InVue3App: { + appsNames: { + vue2: 'Vue2 App', + vue3: 'Vue3 App', + }, + defaultCounterText: 'count: 0', + componentState: 'Component in Action..', + }, + dynamicSystemHostApp: { + hostParagraph: 'The Dynamic System will take advantage of Module Federation ', + paragraphText: ['App2 Moment Dep', 'for format the date'], + }, + selfHealingApp: { + headerName: 'Self-Healing', + configs: { + separator: 'shared:', + searchedString: 'styled-components', + }, + }, + versionDiscrepancyApp: { + appsNames: { + app1: 'App 1 Host', + app2: 'App 2: Remote', + }, + lodashVersions: { + app1: 'Lodash v4.10.0', + app2: 'Lodash v4.17.21', + }, + messages: { + notAvailable: '(lodash.nth not available until lodash@4.11)', + undefinedVersion: 'typeof lodash.nth// => undefined', + definedVersion: 'typeof lodash.nth// => function', + }, + ntxCode: "nth(['a', 'b'], -1)// => \"b\"", + remoteComponentHeader: 'Remote Component', + }, + completeReactCaseApp: { + input: 'Test Input', + }, + sharedRoutingApp: { + randomSymbolsString: '@#$%^&*()_+', + }, + vue3DemoApp: { + appsHeaders: { + host: '# Hosting App [HOST]', + remote: '#remote-component [REMOTE]', + }, + appsNames: { + layout: 'Layout App 1', + remote: 'Main App', + }, + }, + viteSvelteMicroFrontEndsApp: { + consoleMessages: ["I'm RxJs from host", "I'm RxJs from remote", 'remote got message:'], + }, + federatedStyles: { + header: 'Federated Styles', + reactAppContainer: 'React App Container', + nextJsAppContainer: 'NextJs App Container', + buttonsText: { + red: 'Red className Button Federated Css injected', + black: 'Black Button Federated Css variables inject and used in internal css', + orange: 'Orange Button Federated Scss injected', + brown: 'Brown Button Federated Less injected', + yellow: 'Yellow Button Federated Css Module', + redBlue: 'Red className Button but blue Css Module (classname collision does not affect)', + aquamarine: 'App 3 Button with Federated Jss styling', + purple: 'Federated Styled Button', + tailwindBlue: 'Federated button styled with Tailwind', + tailwindGreen: 'Button with Federated Tailwind css.', + }, + }, + craReactApp: { + hostApp: 'This is the host application.', + hostAppRemoteMessage: 'This is a component from the remote application', + remoteApp: 'Remote Application', + }, + angularUniversalSsrApp: { + components: { + rootComponent: 'Root component', + homeComponent: 'Home component', + angularLazyComponent: 'Angular lazy route component', + }, + blockHeaderText: 'Select a city:', + selectedCityInfo: [ + 'The weather in Prague is good![ Angular lazy component ]', + 'The weather in Saint-Petersburg is good![ Angular lazy component ]', + ], + }, + thirdPartyScriptsApp: { + description: 'Check the network tab to see all the third party calls', + }, + typeScriptMonoRepoApp: { + yarnWorkspaceDependency: 'workspaces', + }, + rollupFederationDemoApp: { + messages: { + webpackRemote: 'Webpack Remote', + rollupHost: 'Rollup Host', + }, + buttonText: 'Webpack Remote Button', + }, + viteReactSimpleApp: { + messages: { + intro: 'Hello Vite + federation! +1+2+3+4', + edit: 'Edit App.tsx and save to test HMR updates.', + }, + }, + nextJsHostReactRemoteApp: { + messages: { + remotes: { + component: 'This component is from the Host React App hosted at localhost:8081', + page: 'This is the Remote App', + }, + }, + }, + nextJsHostRemoteApp: { + remoteComponentMessage: 'Hello from Remote Nextjs component', + }, + }; + + public static readonly color = { + nonRgbValues: { + red: 'color: red;', + borderBlack: 'border: 1px solid black; padding: 12px;', + borderRed1px: '1px solid rgb(255, 0, 0)', + borderRed: 'border: 2px dotted red; padding: 20px;', + }, + red: 'rgb(136, 0, 0)', + deepBlue: 'rgb(0, 0, 204)', + dynamicRemotesWidgetColor: ['rgb(255, 0, 0)', 'rgb(128, 0, 128)'], + aquamarine: 'rgb(127, 255, 212)', + chineseSilver: 'rgb(204, 204, 204)', + darkMutedBlue: 'rgb(75, 75, 232)', + lightSaturatedYellow: 'rgb(255, 198, 0)', + lightWashedAzure: 'rgb(64, 158, 255)', + lightWashedOrange: 'rgb(230, 162, 60)', + pink: 'rgb(219, 112, 147)', + lightBlue: 'rgb(188, 225, 255)', + lightGreen: 'rgb(136, 218, 153)', + greenyellow: 'rgb(173, 255, 47)', + purple: 'rgb(63, 81, 181)', + deepPink: 'rgb(156, 39, 176)', + yellow: 'rgb(255, 255, 0)', + green: 'rgb(0, 128, 0)', + orange: 'rgb(246, 179, 82)', + blue: 'rgb(49, 120, 198)', + black: 'rgb(31, 33, 36)', + oceanBluePearl: 'rgb(63, 81, 181)', + alabaster: 'rgb(250, 250, 250)', + paleVioletRed: 'rgb(219, 112, 147)', + white: 'rgb(255, 255, 255)', + lightGrey: 'rgb(239, 239, 239)', + darkGrey: 'rgb(40, 44, 52)', + darkSaturatedBlue: 'rgb(0, 0, 255)', + mint: 'rgb(97, 218, 251)', + skyBlue: 'rgb(0, 112, 243)', + lightMint: 'rgb(95, 158, 160)', + absoluteOrange: 'rgb(255, 165, 0)', + brown: 'rgb(165, 42, 42)', + absoluteBlue: 'rgb(0, 0, 255)', + absoluteRed: 'rgb(255, 0, 0)', + absolutePurple: 'rgb(128, 0, 128)', + absoluteBlack: 'rgb(0, 0, 0)', + tailwindBlue: 'rgb(59, 130, 246)', + tailwindGreen: 'rgb(34, 197, 94)', + transparent: 'rgba(0, 0, 0, 0)', + }; + + public static readonly hrefs = { + vueCliApp: { + documentation: { + link: 'https://cli.vuejs.org', + name: 'vue-cli documentation', + }, + babel: { + link: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel', + name: 'babel', + }, + router: { + link: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router', + name: 'router', + }, + vuex: { + link: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-vuex', + name: 'vuex', + }, + esLint: { + link: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint', + name: 'eslint', + }, + typeScript: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-typescript', + coreDocs: { + link: 'https://vuejs.org', + name: 'Core Docs', + }, + forum: { + link: 'https://forum.vuejs.org', + name: 'Forum', + }, + communityChat: { + link: 'https://chat.vuejs.org', + name: 'Community Chat', + }, + twitter: { + link: 'https://twitter.com/vuejs', + name: 'Twitter', + }, + news: { + link: 'https://news.vuejs.org', + name: 'News', + }, + vueRouter: { + link: 'https://router.vuejs.org', + name: 'vue-router', + }, + ecosystemVuex: 'https://vuex.vuejs.org', + vueDevTools: { + link: 'https://github.com/vuejs/vue-devtools#vue-devtools', + name: 'vue-devtools', + }, + vueLoader: { + link: 'https://vue-loader.vuejs.org', + name: 'vue-loader', + }, + awesomeVue: { + link: 'https://github.com/vuejs/awesome-vue', + name: 'awesome-vue', + }, + aboutTab: '#/about', + }, + nextJsSsrApp: { + shop: '/shop', + checkout: '/checkout', + zeitGitHub: 'https://github.com/zeit/next.js', + zeit: 'https://zeit.co/now', + documentation: 'https://nextjs.org/docs', + learn: 'https://nextjs.org/learn', + examples: 'https://github.com/zeit/next.js/tree/master/examples', + vercelGitHub: 'https://github.com/vercel/next.js', + vercelHome: 'https://vercel.com/home', + learnAboutNext: 'https://nextjs.org/learn/foundations/about-nextjs', + deprecatedMainExamples: 'https://github.com/vercel/next.js/tree/deprecated-main/examples', + }, + comprehensiveDemoApp: { + gitHub: 'https://github.com/module-federation/mfe-webpack-demo', + app3: 'http://localhost:3003/', + routingDemo: 'http://localhost:3001/#/routing/foo', + uiLibrary: '#/ui-library', + demoDialog: '#/dialog', + demoSvelte: '#/svelte', + }, + reactHmrApp: { + button: '/button', + heading: { + link: '/heading', + name: 'Heading', + }, + }, + angularUniversalSsrLinks: { + angularLink: '/lazy', + federationLink: '/federation', + }, + thirdPartyScriptsPostRequestPath: 'https://www.google-analytics.com/j/collect?**', + viteReactSimpleApp: { + viteLink: 'https://vitejs.dev/guide/features.html', + }, + reactNestedRoutersApp: { + pageB: '/page-b', + app1: '/app-1', + }, + nextJsHostReactRemoteApp: { + nextJsLink: 'https://nextjs.org/', + cardsLinks: [ + 'https://nextjs.org/docs', + 'https://nextjs.org/learn/foundations/about-nextjs', + 'https://github.com/vercel/next.js/tree/canary/examples', + Constants.commonConstantsData.commonLinks.vercel, + ], + }, + angular11SkullyApp: { + product: '/product', + }, + }; + public static readonly fullTestData = { + federatedCssTestData: { + css: { + path: 'consume-css-page', + bgColor: Constants.color.absoluteRed, + }, + cssModule: { + path: 'consume-css-module-page', + bgColor: Constants.color.absoluteRed, + }, + jss: { + path: 'consume-jss-page', + bgColor: Constants.color.aquamarine, + }, + less: { + path: 'consume-less-page', + bgColor: Constants.color.brown, + }, + scss: { + path: 'consume-scss-page', + bgColor: Constants.color.absoluteOrange, + }, + styledComponent: { + path: 'consume-styled-component-page', + bgColor: Constants.color.absolutePurple, + }, + tailwindGlobal: { + path: 'consume-tailwind-global-css-page', + bgColor: Constants.color.tailwindGreen, + }, + tailwindModule: { + path: 'consume-tailwind-module-css-page', + bgColor: Constants.color.tailwindBlue, + }, + }, + }; +} diff --git a/playwright-e2e/tsconfig.json b/playwright-e2e/tsconfig.json new file mode 100644 index 00000000000..ed0508e4927 --- /dev/null +++ b/playwright-e2e/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "moduleResolution": "node", + "types": ["node", "@playwright/test"], + "noEmit": true + }, + "include": ["./**/*.ts"] +} diff --git a/playwright-e2e/types/cssAttr.ts b/playwright-e2e/types/cssAttr.ts new file mode 100644 index 00000000000..a5ef2e47280 --- /dev/null +++ b/playwright-e2e/types/cssAttr.ts @@ -0,0 +1,8 @@ +export const enum CssAttr { + backgroundColor = 'background-color', + background = 'background', + color = 'color', + css = 'css', + transform = 'transform', +} + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fa8fbc8ef3a..5f0f62e59fe 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,7 +15,7 @@ importers: devDependencies: '@playwright/test': specifier: ^1.54.2 - version: 1.54.2 + version: 1.55.0 '@shelex/cypress-allure-plugin': specifier: 2.40.2 version: 2.40.2 @@ -64,6 +64,9 @@ importers: js-yaml: specifier: 4.1.0 version: 4.1.0 + kill-port: + specifier: 2.0.1 + version: 2.0.1 lerna: specifier: 8.1.8 version: 8.1.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(babel-plugin-macros@3.1.0)(encoding@0.1.13) @@ -90,7 +93,7 @@ importers: devDependencies: '@playwright/test': specifier: ^1.54.2 - version: 1.54.2 + version: 1.55.0 wait-on: specifier: 7.2.0 version: 7.2.0 @@ -215,10 +218,10 @@ importers: devDependencies: '@playwright/test': specifier: ^1.54.2 - version: 1.54.2 + version: 1.55.0 playwright: specifier: ^1.54.2 - version: 1.54.2 + version: 1.55.0 wait-on: specifier: 7.2.0 version: 7.2.0 @@ -227,7 +230,7 @@ importers: devDependencies: '@playwright/test': specifier: ^1.54.2 - version: 1.54.2 + version: 1.55.0 wait-on: specifier: 7.2.0 version: 7.2.0 @@ -252,7 +255,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/retry-plugin': specifier: 0.17.1 version: 0.17.1 @@ -316,7 +319,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/retry-plugin': specifier: 0.17.1 version: 0.17.1 @@ -355,7 +358,7 @@ importers: devDependencies: '@playwright/test': specifier: ^1.54.2 - version: 1.54.2 + version: 1.55.0 wait-on: specifier: 7.2.0 version: 7.2.0 @@ -670,6 +673,9 @@ importers: angular-universal-ssr: devDependencies: + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 concurrently: specifier: 8.2.2 version: 8.2.2 @@ -677,11 +683,181 @@ importers: specifier: 7.2.0 version: 7.2.0 + angular-universal-ssr/client-app: + dependencies: + '@angular/animations': + specifier: ^15.1.2 + version: 15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)) + '@angular/common': + specifier: ^15.1.2 + version: 15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2) + '@angular/compiler': + specifier: ^15.1.2 + version: 15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)) + '@angular/core': + specifier: ^15.1.2 + version: 15.2.10(rxjs@7.8.2)(zone.js@0.14.10) + '@angular/forms': + specifier: ^15.1.2 + version: 15.2.10(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(@angular/platform-browser@15.2.10(@angular/animations@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(rxjs@7.8.2) + '@angular/platform-browser': + specifier: ^15.1.2 + version: 15.2.10(@angular/animations@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)) + '@angular/platform-browser-dynamic': + specifier: ^15.1.2 + version: 15.2.10(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(@angular/platform-browser@15.2.10(@angular/animations@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))) + '@angular/router': + specifier: ^15.1.2 + version: 15.2.10(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(@angular/platform-browser@15.2.10(@angular/animations@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(rxjs@7.8.2) + rxjs: + specifier: ^7.8.0 + version: 7.8.2 + serve: + specifier: ^14.2.0 + version: 14.2.3 + tslib: + specifier: ^2.5.0 + version: 2.8.1 + zone.js: + specifier: ~0.14.0 + version: 0.14.10 + devDependencies: + '@angular-devkit/build-angular': + specifier: 15.2.10 + version: 15.2.10(@angular/compiler-cli@15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3))(@angular/platform-server@15.2.10(6676711f88f9c40c18b0e2629d70e5ad))(@swc/core@1.11.31(@swc/helpers@0.5.17))(html-webpack-plugin@5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0))(sass-embedded@1.92.1)(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(typescript@5.5.3)))(typescript@5.5.3)(webpack-cli@5.1.4) + '@angular/cli': + specifier: 15.2.10 + version: 15.2.10(chokidar@3.5.3) + '@angular/compiler-cli': + specifier: 15.2.10 + version: 15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3) + '@ngtools/webpack': + specifier: 15.2.11 + version: 15.2.11(@angular/compiler-cli@15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3))(typescript@5.5.3)(webpack@5.101.0) + '@types/node': + specifier: 18.19.39 + version: 18.19.39 + clean-webpack-plugin: + specifier: 4.0.0 + version: 4.0.0(webpack@5.101.0) + html-webpack-plugin: + specifier: 5.6.0 + version: 5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0) + raw-loader: + specifier: 4.0.2 + version: 4.0.2(webpack@5.101.0) + sass-loader: + specifier: 14.2.1 + version: 14.2.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(sass-embedded@1.92.1)(sass@1.58.1)(webpack@5.101.0) + ts-node: + specifier: 10.9.2 + version: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(typescript@5.5.3) + tslint: + specifier: 6.1.3 + version: 6.1.3(typescript@5.5.3) + typescript: + specifier: 5.5.3 + version: 5.5.3 + webpack: + specifier: 5.101.0 + version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) + webpack-cli: + specifier: 5.1.4 + version: 5.1.4(webpack-dev-server@4.11.1)(webpack@5.101.0) + + angular-universal-ssr/host-app: + dependencies: + '@angular/animations': + specifier: ^15.1.2 + version: 15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)) + '@angular/common': + specifier: ^15.1.2 + version: 15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2) + '@angular/compiler': + specifier: ^15.1.2 + version: 15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)) + '@angular/core': + specifier: ^15.1.2 + version: 15.2.10(rxjs@7.8.2)(zone.js@0.14.10) + '@angular/forms': + specifier: ^15.1.2 + version: 15.2.10(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(@angular/platform-browser@15.2.10(@angular/animations@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(rxjs@7.8.2) + '@angular/platform-browser': + specifier: ^15.1.2 + version: 15.2.10(@angular/animations@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)) + '@angular/platform-browser-dynamic': + specifier: ^15.1.2 + version: 15.2.10(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(@angular/platform-browser@15.2.10(@angular/animations@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))) + '@angular/platform-server': + specifier: ^15.1.2 + version: 15.2.10(6676711f88f9c40c18b0e2629d70e5ad) + '@angular/router': + specifier: ^15.1.2 + version: 15.2.10(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(@angular/platform-browser@15.2.10(@angular/animations@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(rxjs@7.8.2) + '@nguniversal/express-engine': + specifier: ^15.1.0 + version: 15.2.1(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(@angular/platform-server@15.2.10(6676711f88f9c40c18b0e2629d70e5ad))(express@4.19.2) + express: + specifier: ^4.17.3 + version: 4.19.2 + rxjs: + specifier: ^7.8.0 + version: 7.8.2 + tslib: + specifier: ^2.5.0 + version: 2.8.1 + zone.js: + specifier: ~0.14.0 + version: 0.14.10 + devDependencies: + '@angular-devkit/build-angular': + specifier: 15.2.10 + version: 15.2.10(@angular/compiler-cli@15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3))(@angular/platform-server@15.2.10(6676711f88f9c40c18b0e2629d70e5ad))(@swc/core@1.11.31(@swc/helpers@0.5.17))(html-webpack-plugin@5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0))(sass-embedded@1.92.1)(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)))(typescript@5.5.3)(webpack-cli@5.1.4) + '@angular/cli': + specifier: 15.2.10 + version: 15.2.10(chokidar@3.6.0) + '@angular/compiler-cli': + specifier: 15.2.10 + version: 15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3) + '@ngtools/webpack': + specifier: 15.2.11 + version: 15.2.11(@angular/compiler-cli@15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3))(typescript@5.5.3)(webpack@5.101.0) + '@nguniversal/builders': + specifier: 16.2.0 + version: 16.2.0(@angular-devkit/build-angular@15.2.10(@angular/compiler-cli@15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3))(@angular/platform-server@15.2.10(6676711f88f9c40c18b0e2629d70e5ad))(@swc/core@1.11.31(@swc/helpers@0.5.17))(html-webpack-plugin@5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0))(sass-embedded@1.92.1)(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)))(typescript@5.5.3)(webpack-cli@5.1.4))(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(@types/express@4.17.21)(chokidar@3.6.0)(typescript@5.5.3) + clean-webpack-plugin: + specifier: 4.0.0 + version: 4.0.0(webpack@5.101.0) + html-webpack-plugin: + specifier: 5.6.0 + version: 5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0) + raw-loader: + specifier: 4.0.2 + version: 4.0.2(webpack@5.101.0) + sass-loader: + specifier: 14.2.1 + version: 14.2.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(sass-embedded@1.92.1)(sass@1.92.1)(webpack@5.101.0) + ts-node: + specifier: 10.9.2 + version: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3) + tslint: + specifier: 6.1.3 + version: 6.1.3(typescript@5.5.3) + typescript: + specifier: 5.5.3 + version: 5.5.3 + webpack: + specifier: 5.101.0 + version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) + webpack-cli: + specifier: 5.1.4 + version: 5.1.4(webpack@5.101.0) + apollo-client: devDependencies: '@playwright/test': specifier: ^1.54.2 - version: 1.54.2 + version: 1.55.0 wait-on: specifier: 7.2.0 version: 7.2.0 @@ -690,7 +866,7 @@ importers: dependencies: '@apollo/client': specifier: ^3.7.1 - version: 3.13.9(@types/react@18.3.10)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.14.0(@types/react@18.3.10)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) express: specifier: 4.19.2 version: 4.19.2 @@ -784,7 +960,7 @@ importers: dependencies: '@apollo/client': specifier: ^3.7.1 - version: 3.13.9(@types/react@18.3.10)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.14.0(@types/react@18.3.10)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) express: specifier: 4.19.2 version: 4.19.2 @@ -878,13 +1054,13 @@ importers: devDependencies: '@playwright/test': specifier: ^1.54.2 - version: 1.54.2 + version: 1.55.0 concurrently: specifier: 8.2.2 version: 8.2.2 playwright: specifier: ^1.54.2 - version: 1.54.2 + version: 1.55.0 wait-on: specifier: 7.2.0 version: 7.2.0 @@ -903,22 +1079,22 @@ importers: devDependencies: '@modern-js-app/eslint-config': specifier: 2.54.6 - version: 2.54.6(@swc/helpers@0.5.3)(typescript@5.6.2) + version: 2.54.6(@swc/helpers@0.5.3)(typescript@5.5.3) '@modern-js/app-tools': specifier: 2.54.6 - version: 2.54.6(@rspack/core@0.4.5)(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19))(encoding@0.1.13)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)))(webpack-hot-middleware@2.26.1) + version: 2.54.6(@rspack/core@1.4.11(@swc/helpers@0.5.3))(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19))(encoding@0.1.13)(eslint@9.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)))(webpack-hot-middleware@2.26.1) '@modern-js/builder-rspack-provider': specifier: 2.46.1 - version: 2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10)(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/express@4.17.21)(esbuild@0.17.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(typescript@5.6.2) + version: 2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12)(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/express@4.17.21)(esbuild@0.17.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3) '@modern-js/eslint-config': specifier: 2.54.6 - version: 2.54.6(@swc/helpers@0.5.3)(typescript@5.6.2) + version: 2.54.6(@swc/helpers@0.5.3)(typescript@5.5.3) '@modern-js/tsconfig': specifier: 2.54.6 version: 2.54.6 '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@0.4.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) husky: specifier: 9.0.11 version: 9.0.11 @@ -946,22 +1122,22 @@ importers: devDependencies: '@modern-js-app/eslint-config': specifier: 2.54.6 - version: 2.54.6(@swc/helpers@0.5.17)(typescript@5.6.2) + version: 2.54.6(@swc/helpers@0.5.17)(typescript@5.5.3) '@modern-js/app-tools': specifier: 2.54.6 - version: 2.54.6(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(encoding@0.1.13)(eslint@9.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1) + version: 2.54.6(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(encoding@0.1.13)(eslint@9.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1) '@modern-js/builder-rspack-provider': specifier: 2.46.1 - version: 2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.12)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(typescript@5.6.2) + version: 2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3) '@modern-js/eslint-config': specifier: 2.54.6 - version: 2.54.6(@swc/helpers@0.5.17)(typescript@5.6.2) + version: 2.54.6(@swc/helpers@0.5.17)(typescript@5.5.3) '@modern-js/tsconfig': specifier: 2.54.6 version: 2.54.6 '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) husky: specifier: 9.0.11 version: 9.0.11 @@ -979,13 +1155,13 @@ importers: devDependencies: '@playwright/test': specifier: ^1.54.2 - version: 1.54.2 + version: 1.55.0 concurrently: specifier: 8.2.2 version: 8.2.2 playwright: specifier: ^1.54.2 - version: 1.54.2 + version: 1.55.0 wait-on: specifier: 7.2.0 version: 7.2.0 @@ -997,7 +1173,7 @@ importers: version: 2.68.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@module-federation/modern-js': specifier: 0.17.1 - version: 0.17.1(@rsbuild/core@1.4.11)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) react: specifier: ~18.3.0 version: 18.3.1 @@ -1007,22 +1183,22 @@ importers: devDependencies: '@modern-js-app/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.6.2) + version: 2.59.0(typescript@5.5.3) '@modern-js/app-tools': specifier: 2.68.6 - version: 2.68.6(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5))(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)))(webpack-hot-middleware@2.26.1) + version: 2.68.6(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1) '@modern-js/builder-rspack-provider': specifier: 2.46.1 - version: 2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.11)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(esbuild@0.25.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(typescript@5.6.2) + version: 2.46.1(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3) '@modern-js/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.6.2) + version: 2.59.0(typescript@5.5.3) '@modern-js/tsconfig': specifier: 2.68.6 version: 2.68.6 '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) husky: specifier: 9.0.11 version: 9.0.11 @@ -1043,7 +1219,7 @@ importers: version: 2.68.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@module-federation/modern-js': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + version: 0.17.1(@rsbuild/core@1.4.11)(@rspack/core@1.4.11(@swc/helpers@0.5.3))(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) react: specifier: ~18.3.0 version: 18.3.1 @@ -1053,22 +1229,22 @@ importers: devDependencies: '@modern-js-app/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.6.2) + version: 2.59.0(typescript@5.5.3) '@modern-js/app-tools': specifier: 2.68.6 - version: 2.68.6(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1) + version: 2.68.6(@rspack/core@1.4.11(@swc/helpers@0.5.3))(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5))(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)))(webpack-hot-middleware@2.26.1) '@modern-js/builder-rspack-provider': specifier: 2.46.1 - version: 2.46.1(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(typescript@5.6.2) + version: 2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.11)(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/express@4.17.21)(esbuild@0.25.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3) '@modern-js/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.6.2) + version: 2.59.0(typescript@5.5.3) '@modern-js/tsconfig': specifier: 2.68.6 version: 2.68.6 '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) husky: specifier: 9.0.11 version: 9.0.11 @@ -1086,7 +1262,7 @@ importers: devDependencies: '@playwright/test': specifier: ^1.54.2 - version: 1.54.2 + version: 1.55.0 concurrently: specifier: 8.2.2 version: 8.2.2 @@ -1095,7 +1271,7 @@ importers: version: 4.0.3 playwright: specifier: ^1.54.2 - version: 1.54.2 + version: 1.55.0 wait-on: specifier: 7.2.0 version: 7.2.0 @@ -1164,10 +1340,10 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/node': specifier: 2.7.10 - version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) babel-loader: specifier: 9.1.3 version: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0) @@ -1197,10 +1373,10 @@ importers: devDependencies: '@playwright/test': specifier: ^1.54.2 - version: 1.54.2 + version: 1.55.0 playwright: specifier: ^1.54.2 - version: 1.54.2 + version: 1.55.0 complete-react-case/component-app: dependencies: @@ -1219,7 +1395,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -1268,7 +1444,7 @@ importers: devDependencies: '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -1308,7 +1484,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -1344,10 +1520,10 @@ importers: devDependencies: '@playwright/test': specifier: ^1.54.2 - version: 1.54.2 + version: 1.55.0 playwright: specifier: ^1.54.2 - version: 1.54.2 + version: 1.55.0 wait-on: specifier: 7.2.0 version: 7.2.0 @@ -1365,7 +1541,7 @@ importers: version: 4.12.4(@types/react@18.3.10)(react-dom@16.14.0(react@16.14.0))(react@16.14.0) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -1420,7 +1596,7 @@ importers: version: 4.12.4(@types/react@18.3.10)(react-dom@16.14.0(react@16.14.0))(react@16.14.0) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -1465,7 +1641,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -1504,7 +1680,7 @@ importers: devDependencies: '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -1594,7 +1770,7 @@ importers: devDependencies: '@playwright/test': specifier: ^1.54.2 - version: 1.54.2 + version: 1.55.0 '@rsdoctor/rspack-plugin': specifier: 0.3.7 version: 0.3.7(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17)) @@ -1606,7 +1782,7 @@ importers: version: 8.2.2 playwright: specifier: ^1.54.2 - version: 1.54.2 + version: 1.55.0 wait-on: specifier: 7.2.0 version: 7.2.0 @@ -1661,7 +1837,7 @@ importers: devDependencies: '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/runtime': specifier: 0.17.1 version: 0.17.1 @@ -1694,7 +1870,7 @@ importers: version: 4.12.4(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -1746,7 +1922,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -1792,7 +1968,7 @@ importers: devDependencies: '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@pmmmwh/react-refresh-webpack-plugin': specifier: 0.5.15 version: 0.5.15(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4))(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@5.0.4)(webpack-hot-middleware@2.26.1)(webpack@5.101.0) @@ -1894,10 +2070,10 @@ importers: devDependencies: '@playwright/test': specifier: ^1.54.2 - version: 1.54.2 + version: 1.55.0 playwright: specifier: ^1.54.2 - version: 1.54.2 + version: 1.55.0 cra/host: dependencies: @@ -1910,7 +2086,7 @@ importers: devDependencies: '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@rsbuild/core': specifier: 1.4.12 version: 1.4.12 @@ -1932,7 +2108,7 @@ importers: devDependencies: '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@rsbuild/core': specifier: 1.4.12 version: 1.4.12 @@ -1947,10 +2123,10 @@ importers: devDependencies: '@playwright/test': specifier: ^1.54.2 - version: 1.54.2 + version: 1.55.0 playwright: specifier: ^1.54.2 - version: 1.54.2 + version: 1.55.0 css-isolation/app1: dependencies: @@ -1969,7 +2145,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -2021,7 +2197,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -2067,6 +2243,9 @@ importers: different-react-versions: devDependencies: + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 wait-on: specifier: 7.2.0 version: 7.2.0 @@ -2217,7 +2396,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -2266,7 +2445,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -2297,6 +2476,9 @@ importers: different-react-versions-isolated: devDependencies: + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 wait-on: specifier: 7.2.0 version: 7.2.0 @@ -2318,7 +2500,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -2364,7 +2546,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -2395,6 +2577,9 @@ importers: different-react-versions-typescript: devDependencies: + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 wait-on: specifier: 7.2.0 version: 7.2.0 @@ -2541,7 +2726,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -2590,7 +2775,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -2675,6 +2860,12 @@ importers: dynamic-system-host: devDependencies: + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 + playwright: + specifier: ^1.54.2 + version: 1.55.0 wait-on: specifier: 7.2.0 version: 7.2.0 @@ -2699,7 +2890,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -2751,7 +2942,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -2809,7 +3000,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -2838,15 +3029,38 @@ importers: specifier: 5.0.4 version: 5.0.4(webpack-cli@5.1.4)(webpack@5.101.0) - federated-css: {} + federated-css: + devDependencies: + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 + kill-port: + specifier: 2.0.1 + version: 2.0.1 + wait-on: + specifier: 7.2.0 + version: 7.2.0 - federated-css-react-ssr: {} + federated-css-react-ssr: + devDependencies: + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 + kill-port: + specifier: 2.0.1 + version: 2.0.1 + react-jss: + specifier: 10.10.0 + version: 10.10.0(react@18.3.1) + wait-on: + specifier: 7.2.0 + version: 7.2.0 federated-css-react-ssr/expose-apps/expose-css: dependencies: '@babel/runtime': specifier: ^7.13.10 - version: 7.28.3 + version: 7.28.4 react: specifier: ^18.1.0 version: 18.3.1 @@ -2866,9 +3080,12 @@ importers: '@babel/preset-react': specifier: 7.24.7 version: 7.24.7(@babel/core@7.24.7) + '@module-federation/enhanced': + specifier: 0.17.1 + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/node': specifier: 2.7.10 - version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) babel-loader: specifier: 9.1.3 version: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0) @@ -2883,7 +3100,7 @@ importers: version: 5.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) postcss-loader: specifier: 8.1.1 - version: 8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.5.6)(typescript@5.6.2)(webpack@5.101.0) + version: 8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.5.6)(typescript@5.5.3)(webpack@5.101.0) react-helmet: specifier: 6.1.0 version: 6.1.0(react@18.3.1) @@ -2904,7 +3121,7 @@ importers: dependencies: '@babel/runtime': specifier: ^7.13.10 - version: 7.28.3 + version: 7.28.4 react: specifier: ^18.1.0 version: 18.3.1 @@ -2924,9 +3141,12 @@ importers: '@babel/preset-react': specifier: 7.24.7 version: 7.24.7(@babel/core@7.24.7) + '@module-federation/enhanced': + specifier: 0.17.1 + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/node': specifier: 2.7.10 - version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) babel-loader: specifier: 9.1.3 version: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0) @@ -2941,7 +3161,7 @@ importers: version: 5.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) postcss-loader: specifier: 8.1.1 - version: 8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.5.6)(typescript@5.6.2)(webpack@5.101.0) + version: 8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.5.6)(typescript@5.5.3)(webpack@5.101.0) react-helmet: specifier: 6.1.0 version: 6.1.0(react@18.3.1) @@ -2962,7 +3182,7 @@ importers: dependencies: '@babel/runtime': specifier: ^7.13.10 - version: 7.28.3 + version: 7.28.4 react: specifier: ^18.1.0 version: 18.3.1 @@ -2982,9 +3202,12 @@ importers: '@babel/preset-react': specifier: 7.24.7 version: 7.24.7(@babel/core@7.24.7) + '@module-federation/enhanced': + specifier: 0.17.1 + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/node': specifier: 2.7.10 - version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) babel-loader: specifier: 9.1.3 version: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0) @@ -3017,7 +3240,7 @@ importers: dependencies: '@babel/runtime': specifier: ^7.13.10 - version: 7.28.3 + version: 7.28.4 react: specifier: ^18.1.0 version: 18.3.1 @@ -3037,9 +3260,12 @@ importers: '@babel/preset-react': specifier: 7.24.7 version: 7.24.7(@babel/core@7.24.7) + '@module-federation/enhanced': + specifier: 0.17.1 + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/node': specifier: 2.7.10 - version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) babel-loader: specifier: 9.1.3 version: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0) @@ -3060,7 +3286,7 @@ importers: version: 12.2.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(less@4.2.0)(webpack@5.101.0) postcss-loader: specifier: 8.1.1 - version: 8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.5.6)(typescript@5.6.2)(webpack@5.101.0) + version: 8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.5.6)(typescript@5.5.3)(webpack@5.101.0) react-helmet: specifier: 6.1.0 version: 6.1.0(react@18.3.1) @@ -3081,7 +3307,7 @@ importers: dependencies: '@babel/runtime': specifier: ^7.13.10 - version: 7.28.3 + version: 7.28.4 react: specifier: ^18.1.0 version: 18.3.1 @@ -3101,9 +3327,12 @@ importers: '@babel/preset-react': specifier: 7.24.7 version: 7.24.7(@babel/core@7.24.7) + '@module-federation/enhanced': + specifier: 0.17.1 + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/node': specifier: 2.7.10 - version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) babel-loader: specifier: 9.1.3 version: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0) @@ -3118,13 +3347,13 @@ importers: version: 5.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) postcss-loader: specifier: 8.1.1 - version: 8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.5.6)(typescript@5.6.2)(webpack@5.101.0) + version: 8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.5.6)(typescript@5.5.3)(webpack@5.101.0) react-helmet: specifier: 6.1.0 version: 6.1.0(react@18.3.1) sass-loader: specifier: 14.2.1 - version: 14.2.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(sass-embedded@1.90.0)(sass@1.90.0)(webpack@5.101.0) + version: 14.2.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(sass-embedded@1.92.1)(sass@1.92.1)(webpack@5.101.0) webpack: specifier: 5.101.0 version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) @@ -3142,7 +3371,7 @@ importers: dependencies: '@babel/runtime': specifier: ^7.13.10 - version: 7.28.3 + version: 7.28.4 react: specifier: ^18.1.0 version: 18.3.1 @@ -3162,9 +3391,12 @@ importers: '@babel/preset-react': specifier: 7.24.7 version: 7.24.7(@babel/core@7.24.7) + '@module-federation/enhanced': + specifier: 0.17.1 + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/node': specifier: 2.7.10 - version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) babel-loader: specifier: 9.1.3 version: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0) @@ -3179,7 +3411,7 @@ importers: version: 5.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) postcss-loader: specifier: 8.1.1 - version: 8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.5.6)(typescript@5.6.2)(webpack@5.101.0) + version: 8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.5.6)(typescript@5.5.3)(webpack@5.101.0) react-helmet: specifier: 6.1.0 version: 6.1.0(react@18.3.1) @@ -3203,7 +3435,7 @@ importers: dependencies: '@babel/runtime': specifier: ^7.13.10 - version: 7.28.3 + version: 7.28.4 react: specifier: ^18.1.0 version: 18.3.1 @@ -3246,13 +3478,13 @@ importers: version: 5.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) postcss-loader: specifier: 8.1.1 - version: 8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.4.47)(typescript@5.6.2)(webpack@5.101.0) + version: 8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.5.6)(typescript@5.6.2)(webpack@5.101.0) react-helmet: specifier: 6.1.0 version: 6.1.0(react@18.3.1) tailwindcss: specifier: 3.4.4 - version: 3.4.4(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)) + version: 3.4.4(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.6.2)) webpack: specifier: 5.101.0 version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) @@ -3320,9 +3552,12 @@ importers: '@babel/preset-react': specifier: 7.24.7 version: 7.24.7(@babel/core@7.24.7) + '@module-federation/enhanced': + specifier: 0.17.1 + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/node': specifier: 2.7.10 - version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) babel-loader: specifier: 9.1.3 version: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0) @@ -3411,9 +3646,12 @@ importers: '@babel/preset-react': specifier: 7.24.7 version: 7.24.7(@babel/core@7.24.7) + '@module-federation/enhanced': + specifier: 0.17.1 + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/node': specifier: 2.7.10 - version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) babel-loader: specifier: 9.1.3 version: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0) @@ -3502,9 +3740,12 @@ importers: '@babel/preset-react': specifier: 7.24.7 version: 7.24.7(@babel/core@7.24.7) + '@module-federation/enhanced': + specifier: 0.17.1 + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/node': specifier: 2.7.10 - version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) babel-loader: specifier: 9.1.3 version: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0) @@ -3593,9 +3834,12 @@ importers: '@babel/preset-react': specifier: 7.24.7 version: 7.24.7(@babel/core@7.24.7) + '@module-federation/enhanced': + specifier: 0.17.1 + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/node': specifier: 2.7.10 - version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) babel-loader: specifier: 9.1.3 version: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0) @@ -3684,9 +3928,12 @@ importers: '@babel/preset-react': specifier: 7.24.7 version: 7.24.7(@babel/core@7.24.7) + '@module-federation/enhanced': + specifier: 0.17.1 + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/node': specifier: 2.7.10 - version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) babel-loader: specifier: 9.1.3 version: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0) @@ -3775,9 +4022,12 @@ importers: '@babel/preset-react': specifier: 7.24.7 version: 7.24.7(@babel/core@7.24.7) + '@module-federation/enhanced': + specifier: 0.17.1 + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/node': specifier: 2.7.10 - version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) babel-loader: specifier: 9.1.3 version: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0) @@ -3816,13 +4066,13 @@ importers: dependencies: '@module-federation/nextjs-mf': specifier: 8.8.34 - version: 8.8.34(@rspack/core@1.4.11(@swc/helpers@0.5.17))(next@14.2.13(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + version: 8.8.34(@rspack/core@1.4.11(@swc/helpers@0.5.17))(next@14.2.13(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) css-loader: specifier: ^7.0.0 version: 7.1.2(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) next: specifier: ^14.2.13 - version: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0) + version: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1) react: specifier: ^18.2.0 version: 18.3.1 @@ -3836,24 +4086,27 @@ importers: '@types/react': specifier: 18.3.10 version: 18.3.10 + cross-env: + specifier: 7.0.3 + version: 7.0.3 eslint: specifier: 9.6.0 version: 9.6.0 eslint-config-next: specifier: 14.2.4 - version: 14.2.4(eslint@9.6.0)(typescript@5.6.2) + version: 14.2.4(eslint@9.6.0)(typescript@5.5.3) federated-css/consumers-nextjs/combination-of-4: dependencies: '@module-federation/nextjs-mf': specifier: 8.8.34 - version: 8.8.34(@rspack/core@1.4.11(@swc/helpers@0.5.17))(next@14.2.13(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + version: 8.8.34(@rspack/core@1.4.11(@swc/helpers@0.5.17))(next@14.2.13(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) css-loader: specifier: ^7.0.0 version: 7.1.2(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) next: specifier: ^14.2.13 - version: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0) + version: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1) react: specifier: ^18.2.0 version: 18.3.1 @@ -3867,24 +4120,27 @@ importers: '@types/react': specifier: 18.3.10 version: 18.3.10 + cross-env: + specifier: 7.0.3 + version: 7.0.3 eslint: specifier: 9.6.0 version: 9.6.0 eslint-config-next: specifier: 14.2.4 - version: 14.2.4(eslint@9.6.0)(typescript@5.6.2) + version: 14.2.4(eslint@9.6.0)(typescript@5.5.3) federated-css/consumers-nextjs/jss-and-tailwind-global: dependencies: '@module-federation/nextjs-mf': specifier: 8.8.34 - version: 8.8.34(@rspack/core@1.4.11(@swc/helpers@0.5.17))(next@14.2.13(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + version: 8.8.34(@rspack/core@1.4.11(@swc/helpers@0.5.17))(next@14.2.13(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) css-loader: specifier: ^7.0.0 version: 7.1.2(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) next: specifier: ^14.2.13 - version: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0) + version: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1) react: specifier: ^18.2.0 version: 18.3.1 @@ -3898,24 +4154,27 @@ importers: '@types/react': specifier: 18.3.10 version: 18.3.10 + cross-env: + specifier: 7.0.3 + version: 7.0.3 eslint: specifier: 9.6.0 version: 9.6.0 eslint-config-next: specifier: 14.2.4 - version: 14.2.4(eslint@9.6.0)(typescript@5.6.2) + version: 14.2.4(eslint@9.6.0)(typescript@5.5.3) federated-css/consumers-nextjs/jss-css-and-tailwind-module: dependencies: '@module-federation/nextjs-mf': specifier: 8.8.34 - version: 8.8.34(@rspack/core@1.4.11(@swc/helpers@0.5.17))(next@14.2.13(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + version: 8.8.34(@rspack/core@1.4.11(@swc/helpers@0.5.17))(next@14.2.13(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) css-loader: specifier: ^7.0.0 version: 7.1.2(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) next: specifier: ^14.2.13 - version: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0) + version: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1) react: specifier: ^18.2.0 version: 18.3.1 @@ -3929,24 +4188,27 @@ importers: '@types/react': specifier: 18.3.10 version: 18.3.10 + cross-env: + specifier: 7.0.3 + version: 7.0.3 eslint: specifier: 9.6.0 version: 9.6.0 eslint-config-next: specifier: 14.2.4 - version: 14.2.4(eslint@9.6.0)(typescript@5.6.2) + version: 14.2.4(eslint@9.6.0)(typescript@5.5.3) federated-css/consumers-nextjs/less-and-styled-component: dependencies: '@module-federation/nextjs-mf': specifier: 8.8.34 - version: 8.8.34(@rspack/core@1.4.11(@swc/helpers@0.5.17))(next@14.2.13(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + version: 8.8.34(@rspack/core@1.4.11(@swc/helpers@0.5.17))(next@14.2.13(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) css-loader: specifier: ^7.0.0 version: 7.1.2(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) next: specifier: ^14.2.13 - version: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0) + version: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1) react: specifier: ^18.2.0 version: 18.3.1 @@ -3960,12 +4222,15 @@ importers: '@types/react': specifier: 18.3.10 version: 18.3.10 + cross-env: + specifier: 7.0.3 + version: 7.0.3 eslint: specifier: 9.6.0 version: 9.6.0 eslint-config-next: specifier: 14.2.4 - version: 14.2.4(eslint@9.6.0)(typescript@5.6.2) + version: 14.2.4(eslint@9.6.0)(typescript@5.5.3) federated-css/consumers-react/any-combination: dependencies: @@ -3987,7 +4252,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -4036,7 +4301,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -4085,7 +4350,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -4134,7 +4399,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -4183,7 +4448,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -4232,7 +4497,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -4281,7 +4546,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) babel-loader: specifier: 9.1.3 version: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0) @@ -4321,7 +4586,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) babel-loader: specifier: 9.1.3 version: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0) @@ -4364,7 +4629,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -4416,7 +4681,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -4465,7 +4730,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -4520,7 +4785,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -4562,10 +4827,10 @@ importers: version: 18.3.1(react@18.3.1) sass: specifier: ^1.69.5 - version: 1.90.0 + version: 1.92.1 sass-loader: specifier: ^14.0.0 - version: 14.2.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(sass-embedded@1.90.0)(sass@1.90.0)(webpack@5.101.0) + version: 14.2.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(sass-embedded@1.92.1)(sass@1.92.1)(webpack@5.101.0) style-loader: specifier: ^4.0.0 version: 4.0.0(webpack@5.101.0) @@ -4578,7 +4843,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -4627,7 +4892,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -4685,7 +4950,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -4703,13 +4968,13 @@ importers: version: 5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0) postcss-loader: specifier: 8.1.1 - version: 8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.4.47)(typescript@5.6.2)(webpack@5.101.0) + version: 8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.5.6)(typescript@5.5.3)(webpack@5.101.0) serve: specifier: 14.2.3 version: 14.2.3 tailwindcss: specifier: 3.4.13 - version: 3.4.13(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)) + version: 3.4.13(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)) webpack: specifier: 5.101.0 version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) @@ -4749,7 +5014,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -4767,13 +5032,13 @@ importers: version: 5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0) postcss-loader: specifier: 8.1.1 - version: 8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.5.6)(typescript@5.6.2)(webpack@5.101.0) + version: 8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.5.6)(typescript@5.5.3)(webpack@5.101.0) serve: specifier: 14.2.3 version: 14.2.3 tailwindcss: specifier: 3.4.4 - version: 3.4.4(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)) + version: 3.4.4(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)) webpack: specifier: 5.101.0 version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) @@ -4813,7 +5078,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -4837,7 +5102,7 @@ importers: version: 8.4.47 postcss-loader: specifier: 8.1.1 - version: 8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.4.47)(typescript@5.6.2)(webpack@5.101.0) + version: 8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.4.47)(typescript@5.5.3)(webpack@5.101.0) postcss-preset-env: specifier: 9.6.0 version: 9.6.0(postcss@8.4.47) @@ -4846,7 +5111,7 @@ importers: version: 4.0.0(webpack@5.101.0) tailwindcss: specifier: 3.4.4 - version: 3.4.4(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)) + version: 3.4.4(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)) webpack: specifier: 5.101.0 version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) @@ -4880,7 +5145,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -4904,7 +5169,7 @@ importers: version: 8.4.39 postcss-loader: specifier: 8.1.1 - version: 8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.4.39)(typescript@5.6.2)(webpack@5.101.0) + version: 8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.4.39)(typescript@5.5.3)(webpack@5.101.0) postcss-preset-env: specifier: 9.6.0 version: 9.6.0(postcss@8.4.39) @@ -4913,7 +5178,7 @@ importers: version: 4.0.0(webpack@5.101.0) tailwindcss: specifier: 3.4.4 - version: 3.4.4(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)) + version: 3.4.4(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)) webpack: specifier: 5.101.0 version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) @@ -4941,7 +5206,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -4965,7 +5230,7 @@ importers: version: 8.4.39 postcss-loader: specifier: 8.1.1 - version: 8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.4.39)(typescript@5.6.2)(webpack@5.101.0) + version: 8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.4.39)(typescript@5.5.3)(webpack@5.101.0) postcss-preset-env: specifier: 9.6.0 version: 9.6.0(postcss@8.4.39) @@ -4974,7 +5239,7 @@ importers: version: 4.0.0(webpack@5.101.0) tailwindcss: specifier: 3.4.4 - version: 3.4.4(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)) + version: 3.4.4(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)) webpack: specifier: 5.101.0 version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) @@ -4987,6 +5252,12 @@ importers: federated-npm: devDependencies: + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 + playwright: + specifier: ^1.54.2 + version: 1.55.0 wait-on: specifier: 7.2.0 version: 7.2.0 @@ -5014,7 +5285,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/runtime': specifier: 0.17.1 version: 0.17.1 @@ -5063,7 +5334,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/runtime': specifier: 0.17.1 version: 0.17.1 @@ -5118,7 +5389,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -5302,7 +5573,7 @@ importers: devDependencies: '@fmfe/genesis-compiler': specifier: 2.7.21 - version: 2.7.21(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(prettier@3.3.3)(sass-embedded@1.90.0)(sass@1.90.0) + version: 2.7.21(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(prettier@3.3.3)(sass-embedded@1.92.1)(sass@1.92.1) '@types/express': specifier: 4.17.21 version: 4.17.21 @@ -5327,7 +5598,7 @@ importers: devDependencies: '@fmfe/genesis-compiler': specifier: 2.7.20 - version: 2.7.20(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(prettier@3.3.3)(sass-embedded@1.90.0)(sass@1.90.0) + version: 2.7.20(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(prettier@3.3.3)(sass-embedded@1.92.1)(sass@1.92.1) '@types/express': specifier: 4.17.21 version: 4.17.21 @@ -5343,6 +5614,9 @@ importers: i18next-nextjs-react: devDependencies: + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 wait-on: specifier: 7.2.0 version: 7.2.0 @@ -5378,7 +5652,7 @@ importers: version: link:../i18next-shared-lib next: specifier: 12.3.4 - version: 12.3.4(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0) + version: 12.3.4(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1) react: specifier: ^18.2.0 version: 18.3.1 @@ -5391,7 +5665,7 @@ importers: devDependencies: '@module-federation/nextjs-mf': specifier: 8.8.34 - version: 8.8.34(next@12.3.4(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + version: 8.8.34(next@12.3.4(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@types/node': specifier: 20.9.0 version: 20.9.0 @@ -5565,6 +5839,9 @@ importers: loadable-react-16: devDependencies: + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 wait-on: specifier: 7.2.0 version: 7.2.0 @@ -5622,10 +5899,10 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/node': specifier: 2.7.10 - version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0) + version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.5.3)(webpack@5.101.0) '@types/express': specifier: 4.17.21 version: 4.17.21 @@ -5713,10 +5990,10 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/node': specifier: 2.7.10 - version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0) + version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.5.3)(webpack@5.101.0) '@types/express': specifier: 4.17.21 version: 4.17.21 @@ -5750,9 +6027,12 @@ importers: loadable-react-18: devDependencies: - kill-port: - specifier: 2.0.1 - version: 2.0.1 + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 + playwright: + specifier: ^1.54.2 + version: 1.55.0 wait-on: specifier: 7.2.0 version: 7.2.0 @@ -5810,10 +6090,10 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/node': specifier: 2.7.10 - version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@types/express': specifier: 4.17.21 version: 4.17.21 @@ -5898,10 +6178,10 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/node': specifier: 2.7.10 - version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@types/express': specifier: 4.17.21 version: 4.17.21 @@ -5965,7 +6245,7 @@ importers: version: 2.57.0(typescript@4.9.5) '@modern-js/app-tools': specifier: 2.57.0 - version: 2.57.0(@rspack/core@1.4.11(@swc/helpers@0.5.11))(@swc/core@1.11.31(@swc/helpers@0.5.11))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19))(encoding@0.1.13)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.11))(@types/node@16.18.101)(typescript@4.9.5))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@4.9.5)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19)))(webpack-hot-middleware@2.26.1) + version: 2.57.0(@rspack/core@1.4.11(@swc/helpers@0.5.11))(@swc/core@1.11.31(@swc/helpers@0.5.11))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19))(encoding@0.1.13)(eslint@9.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.11))(@types/node@16.18.101)(typescript@4.9.5))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@4.9.5)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19)))(webpack-hot-middleware@2.26.1) '@modern-js/eslint-config': specifier: 2.57.0 version: 2.57.0(typescript@4.9.5) @@ -6020,7 +6300,7 @@ importers: version: 2.57.0(typescript@4.9.5) '@modern-js/app-tools': specifier: 2.57.0 - version: 2.57.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(encoding@0.1.13)(eslint@9.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@4.9.5))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@4.9.5)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1) + version: 2.57.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(encoding@0.1.13)(eslint@9.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@4.9.5))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@4.9.5)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1) '@modern-js/eslint-config': specifier: 2.57.0 version: 2.57.0(typescript@4.9.5) @@ -6075,7 +6355,7 @@ importers: version: 2.57.0(typescript@4.9.5) '@modern-js/app-tools': specifier: 2.57.0 - version: 2.57.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(encoding@0.1.13)(eslint@9.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@4.9.5))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@4.9.5)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1) + version: 2.57.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(encoding@0.1.13)(eslint@9.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@4.9.5))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@4.9.5)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1) '@modern-js/eslint-config': specifier: 2.57.0 version: 2.57.0(typescript@4.9.5) @@ -6127,10 +6407,10 @@ importers: version: 2.54.6(@swc/helpers@0.5.17)(typescript@5.5.3) '@modern-js/app-tools': specifier: 2.54.6 - version: 2.54.6(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(encoding@0.1.13)(eslint@9.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1) + version: 2.54.6(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(encoding@0.1.13)(eslint@9.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1) '@modern-js/builder-rspack-provider': specifier: 2.46.1 - version: 2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.12)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3) + version: 2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3) '@modern-js/eslint-config': specifier: 2.54.6 version: 2.54.6(@swc/helpers@0.5.17)(typescript@5.5.3) @@ -6182,10 +6462,10 @@ importers: version: 2.54.6(@swc/helpers@0.5.17)(typescript@5.5.3) '@modern-js/app-tools': specifier: 2.54.6 - version: 2.54.6(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(encoding@0.1.13)(eslint@9.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1) + version: 2.54.6(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(encoding@0.1.13)(eslint@9.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1) '@modern-js/builder-rspack-provider': specifier: 2.46.1 - version: 2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.12)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3) + version: 2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3) '@modern-js/eslint-config': specifier: 2.54.6 version: 2.54.6(@swc/helpers@0.5.17)(typescript@5.5.3) @@ -6252,7 +6532,7 @@ importers: version: 11.11.4(@types/react@18.3.10)(react@18.3.1) '@module-federation/native-federation-tests': specifier: 0.6.0 - version: 0.6.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(jiti@2.5.1)(postcss@8.4.47)(typescript@5.5.3)(yaml@2.8.1) + version: 0.6.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(jiti@2.5.1)(postcss@8.5.6)(typescript@5.5.3)(yaml@2.8.1) '@module-federation/native-federation-typescript': specifier: 0.6.0 version: 0.6.0(typescript@5.5.3) @@ -6273,7 +6553,7 @@ importers: version: 18.3.0 '@vitejs/plugin-react': specifier: 4.3.2 - version: 4.3.2(vite@5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1)) + version: 4.3.2(vite@5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0)) babel-loader: specifier: 9.1.3 version: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0) @@ -6300,13 +6580,13 @@ importers: version: 5.1.0(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.5.3))(typescript@5.5.3) vite: specifier: 5.3.3 - version: 5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1) + version: 5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0) vitest: specifier: 1.6.0 - version: 1.6.0(@types/node@20.16.5)(jsdom@24.1.0)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1) + version: 1.6.0(@types/node@20.16.5)(jsdom@24.1.0)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0) webpack: specifier: 5.101.0 - version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.9)(webpack-cli@5.1.4) + version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.10)(webpack-cli@5.1.4) webpack-cli: specifier: 5.1.4 version: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.101.0) @@ -6358,7 +6638,7 @@ importers: version: 18.3.0 '@vitejs/plugin-react': specifier: 4.3.1 - version: 4.3.1(vite@5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1)) + version: 4.3.1(vite@5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0)) babel-loader: specifier: 9.1.3 version: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0) @@ -6382,10 +6662,10 @@ importers: version: 5.1.0(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.5.3))(typescript@5.5.3) vite: specifier: 5.3.3 - version: 5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1) + version: 5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0) vitest: specifier: 1.6.0 - version: 1.6.0(@types/node@20.16.5)(jsdom@24.1.0)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1) + version: 1.6.0(@types/node@20.16.5)(jsdom@24.1.0)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0) webpack: specifier: 5.101.0 version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) @@ -6404,21 +6684,28 @@ importers: wait-on: specifier: 7.2.0 version: 7.2.0 + devDependencies: + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 + playwright: + specifier: ^1.54.2 + version: 1.55.0 nextjs-ssr-react-query: dependencies: '@module-federation/nextjs-mf': specifier: 8.8.34 - version: 8.8.34(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(@babel/core@7.24.7)(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + version: 8.8.34(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(@babel/core@7.24.7)(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@tanstack/react-query': specifier: ^4.24.10 - version: 4.40.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 4.41.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next: specifier: 14.2.13 - version: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0) + version: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1) nextjs-cors: specifier: ^2.1.2 - version: 2.2.0(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0)) + version: 2.2.0(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1)) react: specifier: 18.3.1 version: 18.3.1 @@ -6443,25 +6730,25 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@nrwl/eslint-plugin-nx': specifier: 17.3.2 - version: 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.3))(eslint-config-prettier@9.1.0(eslint@9.6.0))(eslint@9.6.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) + version: 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.3))(eslint-config-prettier@9.1.0(eslint@9.6.0))(eslint@9.6.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) '@nx/cypress': specifier: 17.3.2 - version: 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(cypress@13.12.0)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) + version: 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(cypress@13.12.0)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) '@nx/eslint': specifier: 17.3.2 - version: 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) + version: 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@nx/jest': specifier: 17.3.2 - version: 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(babel-plugin-macros@3.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(typescript@5.5.3))(typescript@5.5.3) + version: 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(babel-plugin-macros@3.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(typescript@5.5.3))(typescript@5.5.3) '@nx/js': specifier: 17.3.2 - version: 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) + version: 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) '@nx/next': specifier: 17.3.2 - version: 17.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(file-loader@6.2.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(js-yaml@4.1.0)(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + version: 17.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(file-loader@6.2.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(js-yaml@4.1.0)(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@nx/react': specifier: 17.3.2 - version: 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + version: 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@nx/workspace': specifier: 17.3.2 version: 17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)) @@ -6551,13 +6838,13 @@ importers: dependencies: '@module-federation/nextjs-mf': specifier: 8.8.34 - version: 8.8.34(next@14.2.13(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + version: 8.8.34(next@14.2.13(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) lodash: specifier: 4.17.21 version: 4.17.21 next: specifier: ^14.1.4 - version: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0) + version: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1) react: specifier: ^18.2.0 version: 18.3.1 @@ -6566,19 +6853,19 @@ importers: version: 18.3.1(react@18.3.1) webpack: specifier: 5.101.0 - version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) nextjs-ssr/home: dependencies: '@module-federation/nextjs-mf': specifier: 8.8.34 - version: 8.8.34(next@14.2.13(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + version: 8.8.34(next@14.2.13(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) lodash: specifier: 4.17.21 version: 4.17.21 next: specifier: ^14.1.4 - version: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0) + version: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1) react: specifier: ^18.2.0 version: 18.3.1 @@ -6587,19 +6874,19 @@ importers: version: 18.3.1(react@18.3.1) webpack: specifier: 5.101.0 - version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) nextjs-ssr/shop: dependencies: '@module-federation/nextjs-mf': specifier: 8.8.34 - version: 8.8.34(next@14.2.13(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + version: 8.8.34(next@14.2.13(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) lodash: specifier: 4.17.21 version: 4.17.21 next: specifier: ^14.1.4 - version: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0) + version: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1) react: specifier: ^18.2.0 version: 18.3.1 @@ -6608,7 +6895,7 @@ importers: version: 18.3.1(react@18.3.1) webpack: specifier: 5.101.0 - version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) react-sharedworker: devDependencies: @@ -6629,16 +6916,25 @@ importers: version: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.101.0) webpack-dev-middleware: specifier: ^7.4.2 - version: 7.4.2(webpack@5.101.0) + version: 7.4.3(webpack@5.101.0) webpack-dev-server: specifier: 5.0.4 version: 5.0.4(webpack-cli@5.1.4)(webpack@5.101.0) react-storybook: devDependencies: + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 concurrently: specifier: 8.2.2 version: 8.2.2 + playwright: + specifier: ^1.54.2 + version: 1.55.0 + wait-on: + specifier: 7.2.0 + version: 7.2.0 react-storybook/host: dependencies: @@ -6650,14 +6946,14 @@ importers: version: 17.0.2(react@17.0.2) react-scripts: specifier: 5.0.1 - version: 5.0.1(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.24.7))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.24.7))(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/babel__core@7.20.5)(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))(esbuild@0.23.0)(eslint@9.6.0)(react@17.0.2)(sass-embedded@1.90.0)(sass@1.90.0)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1) + version: 5.0.1(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.24.7))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.24.7))(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/babel__core@7.20.5)(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))(esbuild@0.23.0)(eslint@8.57.0)(react@17.0.2)(sass-embedded@1.92.1)(sass@1.92.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(type-fest@2.19.0)(typescript@5.5.3)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1) devDependencies: '@chromatic-com/storybook': specifier: ^1.6.1 version: 1.9.0(react@17.0.2) '@module-federation/storybook-addon': specifier: 3.0.6 - version: 3.0.6(dcf7040ee5370f2f21a18b6aeb918129) + version: 3.0.6(eb313c6b17db8bd606e8dfcd4e36e2b6) '@module-federation/utilities': specifier: 3.1.26 version: 3.1.26(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) @@ -6678,22 +6974,25 @@ importers: version: 8.6.14(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(storybook@8.6.14(prettier@3.3.3)) '@storybook/preset-create-react-app': specifier: ^8.2.6 - version: 8.6.14(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))(react-refresh@0.11.0)(react-scripts@5.0.1(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.24.7))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.24.7))(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/babel__core@7.20.5)(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))(esbuild@0.23.0)(eslint@9.6.0)(react@17.0.2)(sass-embedded@1.90.0)(sass@1.90.0)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1))(storybook@8.6.14(prettier@3.3.3))(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) + version: 8.6.14(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))(react-refresh@0.17.0)(react-scripts@5.0.1(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.24.7))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.24.7))(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/babel__core@7.20.5)(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))(esbuild@0.23.0)(eslint@8.57.0)(react@17.0.2)(sass-embedded@1.92.1)(sass@1.92.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(type-fest@2.19.0)(typescript@5.5.3)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1))(storybook@8.6.14(prettier@3.3.3))(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) '@storybook/react': specifier: ^8.2.6 - version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.3.3)))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(storybook@8.6.14(prettier@3.3.3))(typescript@5.6.2) + version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.3.3)))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(storybook@8.6.14(prettier@3.3.3))(typescript@5.5.3) '@storybook/react-webpack5': specifier: ^8.2.6 - version: 8.6.14(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.3.3)))(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(storybook@8.6.14(prettier@3.3.3))(typescript@5.6.2) + version: 8.6.14(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.3.3)))(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(storybook@8.6.14(prettier@3.3.3))(typescript@5.5.3) '@storybook/test': specifier: ^8.2.6 version: 8.6.14(storybook@8.6.14(prettier@3.3.3)) babel-plugin-named-exports-order: specifier: 0.0.2 version: 0.0.2 + eslint: + specifier: 8.57.0 + version: 8.57.0 eslint-plugin-storybook: specifier: ^0.8.0 - version: 0.8.0(eslint@9.6.0)(typescript@5.6.2) + version: 0.8.0(eslint@8.57.0)(typescript@5.5.3) prop-types: specifier: 15.8.1 version: 15.8.1 @@ -6720,13 +7019,26 @@ importers: version: 17.0.2(react@17.0.2) react-scripts: specifier: 5.0.1 - version: 5.0.1(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.3))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.3))(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/babel__core@7.20.5)(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(eslint@9.6.0)(react@17.0.2)(sass-embedded@1.90.0)(sass@1.90.0)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1) + version: 5.0.1(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.4))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.4))(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/babel__core@7.20.5)(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(eslint@8.57.0)(react@17.0.2)(sass-embedded@1.92.1)(sass@1.92.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(type-fest@2.19.0)(typescript@5.5.3)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1) + devDependencies: + eslint: + specifier: 8.57.0 + version: 8.57.0 + webpack: + specifier: 5.101.0 + version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) redux-reducer-injection: devDependencies: + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 concurrently: specifier: 8.2.2 version: 8.2.2 + playwright: + specifier: ^1.54.2 + version: 1.55.0 wait-on: specifier: 7.2.0 version: 7.2.0 @@ -6821,13 +7133,13 @@ importers: dependencies: '@remix-run/express': specifier: ^2.2.0 - version: 2.17.0(express@4.19.2)(typescript@5.6.2) + version: 2.17.1(express@4.19.2)(typescript@5.5.3) '@remix-run/node': specifier: ^2.2.0 - version: 2.17.0(typescript@5.6.2) + version: 2.17.1(typescript@5.5.3) '@remix-run/react': specifier: ^2.2.0 - version: 2.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) + version: 2.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3) cors: specifier: 2.8.5 version: 2.8.5 @@ -6849,13 +7161,13 @@ importers: version: 7.24.7 '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/node': specifier: 2.7.10 - version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@remix-run/dev': specifier: 2.10.2 - version: 2.10.2(@remix-run/react@2.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2))(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(typescript@5.6.2)(vite@5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1)) + version: 2.10.2(@remix-run/react@2.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3))(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.5.3))(typescript@5.5.3)(vite@5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0)) '@types/express': specifier: 4.17.21 version: 4.17.21 @@ -6891,13 +7203,13 @@ importers: dependencies: '@remix-run/express': specifier: ^2.2.0 - version: 2.17.0(express@4.19.2)(typescript@5.6.2) + version: 2.17.1(express@4.19.2)(typescript@5.5.3) '@remix-run/node': specifier: ^2.2.0 - version: 2.17.0(typescript@5.6.2) + version: 2.17.1(typescript@5.5.3) '@remix-run/react': specifier: ^2.2.0 - version: 2.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) + version: 2.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3) cors: specifier: 2.8.5 version: 2.8.5 @@ -6919,13 +7231,13 @@ importers: version: 7.24.7 '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/node': specifier: 2.7.10 - version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@remix-run/dev': specifier: 2.10.2 - version: 2.10.2(@remix-run/react@2.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2))(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(typescript@5.6.2)(vite@5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1)) + version: 2.10.2(@remix-run/react@2.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3))(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.5.3))(typescript@5.5.3)(vite@5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0)) '@types/express': specifier: 4.17.21 version: 4.17.21 @@ -6959,12 +7271,15 @@ importers: rust-wasm: devDependencies: + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 lerna: specifier: 8.1.6 version: 8.1.6(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(encoding@0.1.13) - wait-on: - specifier: 7.2.0 - version: 7.2.0 + playwright: + specifier: ^1.54.2 + version: 1.55.0 rust-wasm/host: dependencies: @@ -7014,9 +7329,12 @@ importers: self-healing: devDependencies: - wait-on: - specifier: 7.2.0 - version: 7.2.0 + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 + playwright: + specifier: ^1.54.2 + version: 1.55.0 self-healing/app1: dependencies: @@ -7091,12 +7409,12 @@ importers: shared-context: devDependencies: + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 lerna: specifier: 8.1.6 version: 8.1.6(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(encoding@0.1.13) - wait-on: - specifier: 7.2.0 - version: 7.2.0 webpack-cli: specifier: 5.1.4 version: 5.1.4(webpack@5.101.0) @@ -7747,10 +8065,10 @@ importers: devDependencies: '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/node': specifier: 2.7.10 - version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -7774,10 +8092,10 @@ importers: devDependencies: '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/node': specifier: 2.7.10 - version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -7801,10 +8119,10 @@ importers: devDependencies: '@module-federation/enhanced': specifier: 0.17.1 - version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/node': specifier: 2.7.10 - version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0) + version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@rspack/cli': specifier: 1.4.11 version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) @@ -7871,7 +8189,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/node': specifier: 2.7.10 - version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0) + version: 2.7.10(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0) '@types/express': specifier: 4.17.21 version: 4.17.21 @@ -7947,7 +8265,7 @@ importers: version: 7.24.7(@babel/core@7.24.7) '@module-federation/node': specifier: 2.7.10 - version: 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0) + version: 2.7.10(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0) '@types/express': specifier: 4.17.21 version: 4.17.21 @@ -7982,7 +8300,14 @@ importers: specifier: 6.0.1 version: 6.0.1 - third-party-scripts: {} + third-party-scripts: + devDependencies: + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 + playwright: + specifier: ^1.54.2 + version: 1.55.0 third-party-scripts/app1: dependencies: @@ -8019,16 +8344,22 @@ importers: version: 5.0.4(webpack-cli@5.1.4)(webpack@5.101.0) typescript: - dependencies: - wait-on: - specifier: ^7.1.0 - version: 7.2.0 + devDependencies: + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 + allure-playwright: + specifier: ^2.13.10 + version: 2.15.1 typescript-monorepo: devDependencies: - wait-on: - specifier: 7.2.0 - version: 7.2.0 + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 + allure-playwright: + specifier: ^2.13.10 + version: 2.15.1 typescript-monorepo/app1: dependencies: @@ -8127,9 +8458,9 @@ importers: typescript-project-references: devDependencies: - wait-on: - specifier: 7.2.0 - version: 7.2.0 + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 typescript-project-references/app1: dependencies: @@ -8231,9 +8562,9 @@ importers: typescript-react-fallback: devDependencies: - wait-on: - specifier: 7.2.0 - version: 7.2.0 + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 typescript-react-fallback/app1: dependencies: @@ -8361,7 +8692,7 @@ importers: dependencies: '@module-federation/typescript': specifier: 3.1.3 - version: 3.1.3(encoding@0.1.13)(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) + version: 3.1.3(encoding@0.1.13)(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) react: specifier: 18.3.1 version: 18.3.1 @@ -8410,7 +8741,7 @@ importers: dependencies: '@module-federation/typescript': specifier: 3.1.3 - version: 3.1.3(encoding@0.1.13)(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) + version: 3.1.3(encoding@0.1.13)(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) react: specifier: 18.3.1 version: 18.3.1 @@ -8457,15 +8788,21 @@ importers: umd-federation: devDependencies: + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 + playwright: + specifier: ^1.54.2 + version: 1.55.0 umfjs: specifier: 0.3.7 version: 0.3.7 - wait-on: - specifier: 7.2.0 - version: 7.2.0 umd-federation/app1: dependencies: + module-federation-runtime: + specifier: 1.2.4 + version: 1.2.4 react: specifier: ^18.2.0 version: 18.3.1 @@ -8535,26 +8872,30 @@ importers: specifier: 5.0.4 version: 5.0.4(webpack-cli@5.1.4)(webpack@5.101.0) - vue-cli: {} + vue-cli: + devDependencies: + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 vue-cli/consumer: dependencies: core-js: specifier: ^3.33.2 - version: 3.45.0 + version: 3.45.1 vue: specifier: ^2.6.11 version: 2.7.16 devDependencies: '@vue/cli-plugin-babel': specifier: 5.0.8 - version: 5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3))(core-js@3.45.0)(encoding@0.1.13)(vue@2.7.16) + version: 5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3))(core-js@3.45.1)(encoding@0.1.13)(vue@2.7.16) '@vue/cli-plugin-eslint': specifier: 5.0.8 - version: 5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3))(encoding@0.1.13)(eslint@9.6.0) + version: 5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3))(encoding@0.1.13)(eslint@9.6.0) '@vue/cli-service': specifier: 5.0.8 - version: 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3) + version: 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3) babel-eslint: specifier: 10.1.0 version: 10.1.0(eslint@9.6.0) @@ -8572,13 +8913,13 @@ importers: version: 2.7.16 webpack: specifier: 5.101.0 - version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) vue-cli/core: dependencies: core-js: specifier: ^3.33.2 - version: 3.45.0 + version: 3.45.1 http-server: specifier: ^0.13.0 version: 0.13.0 @@ -8588,13 +8929,13 @@ importers: devDependencies: '@vue/cli-plugin-babel': specifier: 5.0.8 - version: 5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3))(core-js@3.45.0)(encoding@0.1.13)(vue@2.7.16) + version: 5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3))(core-js@3.45.1)(encoding@0.1.13)(vue@2.7.16) '@vue/cli-plugin-eslint': specifier: 5.0.8 - version: 5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3))(encoding@0.1.13)(eslint@9.6.0) + version: 5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3))(encoding@0.1.13)(eslint@9.6.0) '@vue/cli-service': specifier: 5.0.8 - version: 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3) + version: 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3) babel-eslint: specifier: 10.1.0 version: 10.1.0(eslint@9.6.0) @@ -8609,13 +8950,13 @@ importers: version: 2.7.16 webpack: specifier: 5.101.0 - version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) vue-cli/other: dependencies: core-js: specifier: ^3.33.2 - version: 3.45.0 + version: 3.45.1 http-server: specifier: ^0.13.0 version: 0.13.0 @@ -8625,13 +8966,13 @@ importers: devDependencies: '@vue/cli-plugin-babel': specifier: 5.0.8 - version: 5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3))(core-js@3.45.0)(encoding@0.1.13)(vue@2.7.16) + version: 5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3))(core-js@3.45.1)(encoding@0.1.13)(vue@2.7.16) '@vue/cli-plugin-eslint': specifier: 5.0.8 - version: 5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3))(encoding@0.1.13)(eslint@9.6.0) + version: 5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3))(encoding@0.1.13)(eslint@9.6.0) '@vue/cli-service': specifier: 5.0.8 - version: 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3) + version: 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3) babel-eslint: specifier: 10.1.0 version: 10.1.0(eslint@9.6.0) @@ -8646,10 +8987,13 @@ importers: version: 2.7.16 webpack: specifier: 5.101.0 - version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) vue2-in-vue3: devDependencies: + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 wait-on: specifier: 7.2.0 version: 7.2.0 @@ -8753,7 +9097,7 @@ importers: dependencies: core-js: specifier: ^3.33.2 - version: 3.45.0 + version: 3.45.1 vue: specifier: ^3.2.13 version: 3.4.31(typescript@5.5.3) @@ -8772,22 +9116,22 @@ importers: version: 7.15.0(eslint@9.6.0)(typescript@5.5.3) '@vue/cli-plugin-babel': specifier: 5.0.8 - version: 5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(core-js@3.45.0)(encoding@0.1.13)(vue@3.4.31(typescript@5.5.3)) + version: 5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(core-js@3.45.1)(encoding@0.1.13)(vue@3.4.31(typescript@5.5.3)) '@vue/cli-plugin-eslint': specifier: 5.0.8 - version: 5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(encoding@0.1.13)(eslint@9.6.0) + version: 5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(encoding@0.1.13)(eslint@9.6.0) '@vue/cli-plugin-router': specifier: 5.0.8 - version: 5.0.8(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(encoding@0.1.13) + version: 5.0.8(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(encoding@0.1.13) '@vue/cli-plugin-typescript': specifier: 5.0.8 - version: 5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(encoding@0.1.13)(eslint@9.6.0)(typescript@5.5.3)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3)) + version: 5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(encoding@0.1.13)(eslint@9.6.0)(typescript@5.5.3)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3)) '@vue/cli-plugin-vuex': specifier: 5.0.8 - version: 5.0.8(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3)) + version: 5.0.8(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3)) '@vue/cli-service': specifier: 5.0.8 - version: 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3) + version: 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3) '@vue/eslint-config-airbnb': specifier: 8.0.0 version: 8.0.0(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.3))(eslint-plugin-vue@9.27.0(eslint@9.6.0))(eslint@9.6.0) @@ -8811,13 +9155,13 @@ importers: version: 5.5.3 webpack: specifier: 5.101.0 - version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) vue3-cli-demo/app-general: dependencies: core-js: specifier: ^3.33.2 - version: 3.45.0 + version: 3.45.1 vue: specifier: ^3.2.13 version: 3.4.31(typescript@5.5.3) @@ -8836,22 +9180,22 @@ importers: version: 7.15.0(eslint@9.6.0)(typescript@5.5.3) '@vue/cli-plugin-babel': specifier: 5.0.8 - version: 5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(core-js@3.45.0)(encoding@0.1.13)(vue@3.4.31(typescript@5.5.3)) + version: 5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(core-js@3.45.1)(encoding@0.1.13)(vue@3.4.31(typescript@5.5.3)) '@vue/cli-plugin-eslint': specifier: 5.0.8 - version: 5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(encoding@0.1.13)(eslint@9.6.0) + version: 5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(encoding@0.1.13)(eslint@9.6.0) '@vue/cli-plugin-router': specifier: 5.0.8 - version: 5.0.8(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(encoding@0.1.13) + version: 5.0.8(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(encoding@0.1.13) '@vue/cli-plugin-typescript': specifier: 5.0.8 - version: 5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(encoding@0.1.13)(eslint@9.6.0)(typescript@5.5.3)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3)) + version: 5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(encoding@0.1.13)(eslint@9.6.0)(typescript@5.5.3)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3)) '@vue/cli-plugin-vuex': specifier: 5.0.8 - version: 5.0.8(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3)) + version: 5.0.8(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3)) '@vue/cli-service': specifier: 5.0.8 - version: 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3) + version: 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3) '@vue/eslint-config-airbnb': specifier: 8.0.0 version: 8.0.0(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.3))(eslint-plugin-vue@9.27.0(eslint@9.6.0))(eslint@9.6.0) @@ -8875,13 +9219,13 @@ importers: version: 5.5.3 webpack: specifier: 5.101.0 - version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + version: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) vue3-demo: devDependencies: - wait-on: - specifier: 7.2.0 - version: 7.2.0 + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 vue3-demo/home: dependencies: @@ -8991,18 +9335,179 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} + '@ampproject/remapping@2.2.0': + resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} + engines: {node: '>=6.0.0'} + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + '@angular-devkit/architect@0.1502.10': + resolution: {integrity: sha512-S8lN73WYCfpEpw1Q41ZcUinw7JfDeSM8LyGs797OVshnW75QcOkOecWj/3CKR23G44IgFrHN6sqtzWxKmMxLig==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + + '@angular-devkit/architect@0.1602.16': + resolution: {integrity: sha512-aWEeGU4UlbrSKpcAZsldVNxNXAWEeu9hM2BPk77GftbRC8PBMWpgYyrJWTz2ryn8aSmGKT3T8OyBH4gZA/667w==} + engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + + '@angular-devkit/build-angular@15.2.10': + resolution: {integrity: sha512-3pCPVEJilVwHIJC6Su1/PIEqvFfU1Lxew9yItxX4s6dud8HY+fuKrsDnao4NNMFNqCLqL4el5QbSBKnnpWH1sg==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + '@angular/compiler-cli': ^15.0.0 + '@angular/localize': ^15.0.0 + '@angular/platform-server': ^15.0.0 + '@angular/service-worker': ^15.0.0 + karma: ^6.3.0 + ng-packagr: ^15.0.0 + protractor: ^7.0.0 + tailwindcss: ^2.0.0 || ^3.0.0 + typescript: '>=4.8.2 <5.0' + peerDependenciesMeta: + '@angular/localize': + optional: true + '@angular/platform-server': + optional: true + '@angular/service-worker': + optional: true + karma: + optional: true + ng-packagr: + optional: true + protractor: + optional: true + tailwindcss: + optional: true + + '@angular-devkit/build-webpack@0.1502.10': + resolution: {integrity: sha512-55b9WZIGU4DNgiIV2lkkN6iQxJrgWY5CDaNu0kJC/qazotJgBbcN/8jgBx2DD8HNE1V3iXxWk66pt1h946Po+Q==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + webpack: ^5.30.0 + webpack-dev-server: ^4.0.0 + + '@angular-devkit/core@15.2.10': + resolution: {integrity: sha512-bFPm7wjvfBds9km2rCJxUhzkqe4h3h/199yJtzC1bNvwRr2LMHvtyoQAzftda+gs7Ulqac5wzUEZX/cVV3WrsA==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + chokidar: ^3.5.2 + peerDependenciesMeta: + chokidar: + optional: true + + '@angular-devkit/core@16.2.16': + resolution: {integrity: sha512-5xHs9JFmp78sydrOAg0UGErxfMVv5c2f3RXoikS7eBOOXTWEi5pmnOkOvSJ3loQFGVs3Y7i+u02G3VrF5ZxOrA==} + engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + chokidar: ^3.5.2 + peerDependenciesMeta: + chokidar: + optional: true + + '@angular-devkit/schematics@15.2.10': + resolution: {integrity: sha512-EeoDs4oKFpLZNa21G/8dqBdclEc4U2piI9EeXCVTaN6z5DYXIZ0G1WtCXU8nhD+GckS47rmfZ4/3lMaXAvED+g==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + + '@angular/animations@15.2.10': + resolution: {integrity: sha512-yxfN8qQpMaukRU5LjFkJBmy85rqrOp86tYVCsf+hmPEFRiXBMUj6xYLeCMcpk3Mt1JtnWGBR34ivGx+7bNeAow==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0} + peerDependencies: + '@angular/core': 15.2.10 + + '@angular/cli@15.2.10': + resolution: {integrity: sha512-/TSnm/ZQML6A4lvunyN2tjTB5utuvk3d1Pnfyehp/FXtV6YfZm6+EZrOpKkKPCxTuAgW6c9KK4yQtt3RuNVpwQ==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + hasBin: true + + '@angular/common@15.2.10': + resolution: {integrity: sha512-jdBn3fctkqoNrJn9VLsUHpcCEhCxWSczdsR+BBbD6T0oLl6vMrAVNjPwfBejnlgfWN1KoRU9kgOYsMxa5apIWQ==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0} + peerDependencies: + '@angular/core': 15.2.10 + rxjs: ^6.5.3 || ^7.4.0 + + '@angular/compiler-cli@15.2.10': + resolution: {integrity: sha512-mCFIxrs60XicKfA2o42hA7LrQvhybi9BQveWuZn/2iIEOXx7R62Iemz8E21pLWftAZHGxEW3NECfBrY1d3gVmA==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0} + hasBin: true + peerDependencies: + '@angular/compiler': 15.2.10 + typescript: '>=4.8.2 <5.0' + + '@angular/compiler@15.2.10': + resolution: {integrity: sha512-M0XkeU0O73UlJZwDvOyp8/apetz9UKj78eTFDseMYJDLcxe6MpkbkxqpsGZnKYDj7LIep8PmCAKEkhtenE82zw==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0} + peerDependencies: + '@angular/core': 15.2.10 + peerDependenciesMeta: + '@angular/core': + optional: true + + '@angular/core@15.2.10': + resolution: {integrity: sha512-meGGidnitQJGDxYd9/LrqYiVlId+vGaLoiLgJdKBz+o2ZO6OmXQGuNw2VBqf17/Cc0/UjzrOY7+kILNFKkk/WQ==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0} + peerDependencies: + rxjs: ^6.5.3 || ^7.4.0 + zone.js: ~0.11.4 || ~0.12.0 || ~0.13.0 + + '@angular/forms@15.2.10': + resolution: {integrity: sha512-NIntGsNcN6o8L1txsbWXOf6f3K/CUBizdKsxsYVYGJIXEW5qU6UnWmfAZffNNXsT/XvbgUCjgDwT0cAwcqZPuQ==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0} + peerDependencies: + '@angular/common': 15.2.10 + '@angular/core': 15.2.10 + '@angular/platform-browser': 15.2.10 + rxjs: ^6.5.3 || ^7.4.0 + + '@angular/platform-browser-dynamic@15.2.10': + resolution: {integrity: sha512-JHP6W+FX715Qv7DhqvfZLuBZXSDJrboiQsR06gUAgDSjAUyhbqmpVg/2YOtgeWpPkzNDtXdPU2PhcRdIv5J3Yg==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0} + peerDependencies: + '@angular/common': 15.2.10 + '@angular/compiler': 15.2.10 + '@angular/core': 15.2.10 + '@angular/platform-browser': 15.2.10 + + '@angular/platform-browser@15.2.10': + resolution: {integrity: sha512-9tbgVGSJqwfrOzT8aA/kWBLNhJSQ9gUg0CJxwFBSJm8VkBUJrszoBlDsnSvlxx8/W2ejNULKHFTXeUzq0O/+RQ==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0} + peerDependencies: + '@angular/animations': 15.2.10 + '@angular/common': 15.2.10 + '@angular/core': 15.2.10 + peerDependenciesMeta: + '@angular/animations': + optional: true + + '@angular/platform-server@15.2.10': + resolution: {integrity: sha512-fniyZJI59CFQaVeKnDvXZg/TW6EltzXO0WnozSG58ZNehJQF5g3ZjmPYsnmzb5VYNRXgve2itudNXmd6NeOoYg==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0} + peerDependencies: + '@angular/animations': 15.2.10 + '@angular/common': 15.2.10 + '@angular/compiler': 15.2.10 + '@angular/core': 15.2.10 + '@angular/platform-browser': 15.2.10 + '@angular/platform-browser-dynamic': 15.2.10 + + '@angular/router@15.2.10': + resolution: {integrity: sha512-LmuqEg0iIXSw7bli6HKJ19cbxP91v37GtRwbGKswyLihqzTgvjBYpvcfMnB5FRQ5LWkTwq5JclkX03dZw290Yg==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0} + peerDependencies: + '@angular/common': 15.2.10 + '@angular/core': 15.2.10 + '@angular/platform-browser': 15.2.10 + rxjs: ^6.5.3 || ^7.4.0 + '@apideck/better-ajv-errors@0.3.6': resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} engines: {node: '>=10'} peerDependencies: ajv: '>=8' - '@apollo/client@3.13.9': - resolution: {integrity: sha512-RStSzQfL1XwL6/NWd7W8avhGQYTgPCtJ+qHkkTTSj9Upp3VVm6Oppv81YWdXG1FgEpDPW4hvCrTUELdcC4inCQ==} + '@apollo/client@3.14.0': + resolution: {integrity: sha512-0YQKKRIxiMlIou+SekQqdCo0ZTHxOcES+K8vKB53cIDpwABNR0P0yRzPgsbgcj3zRJniD93S/ontsnZsCLZrxQ==} peerDependencies: graphql: ^15.0.0 || ^16.0.0 graphql-ws: ^5.5.5 || ^6.0.3 @@ -9022,6 +9527,9 @@ packages: '@asamuzakjp/css-color@3.2.0': resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} + '@assemblyscript/loader@0.10.1': + resolution: {integrity: sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==} + '@babel/cli@7.24.7': resolution: {integrity: sha512-8dfPprJgV4O14WTx+AQyEA+opgUKPrsIXX/MdL50J1n06EQJ6m1T+CdsJe0qEC0B/Xl85i+Un5KVAxd/PACX9A==} engines: {node: '>=6.9.0'} @@ -9037,8 +9545,16 @@ packages: resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.0': - resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==} + '@babel/compat-data@7.28.4': + resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.19.3': + resolution: {integrity: sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.20.12': + resolution: {integrity: sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==} engines: {node: '>=6.9.0'} '@babel/core@7.22.17': @@ -9049,12 +9565,12 @@ packages: resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.3': - resolution: {integrity: sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==} + '@babel/core@7.28.4': + resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} engines: {node: '>=6.9.0'} - '@babel/eslint-parser@7.28.0': - resolution: {integrity: sha512-N4ntErOlKvcbTt01rr5wj3y55xnIdx1ymrfIr8C2WnM1Y9glFgWaGDEULJIazOX3XM9NRzhfJ6zZnQ1sBNWU+w==} + '@babel/eslint-parser@7.28.4': + resolution: {integrity: sha512-Aa+yDiH87980jR6zvRfFuCR1+dLb00vBydhTL+zI992Rz/wQhSvuxjmOOuJOgO3XmakO6RykRGD2S1mq1AtgHA==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/core': ^7.11.0 @@ -9067,10 +9583,18 @@ packages: '@babel/eslint-parser': ^7.11.0 eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 + '@babel/generator@7.20.14': + resolution: {integrity: sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==} + engines: {node: '>=6.9.0'} + '@babel/generator@7.28.3': resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.18.6': + resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.27.3': resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} engines: {node: '>=6.9.0'} @@ -9091,6 +9615,11 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-define-polyfill-provider@0.3.3': + resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} + peerDependencies: + '@babel/core': ^7.4.0-0 + '@babel/helper-define-polyfill-provider@0.4.4': resolution: {integrity: sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==} peerDependencies: @@ -9106,6 +9635,10 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + '@babel/helper-environment-visitor@7.24.7': + resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-globals@7.28.0': resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} engines: {node: '>=6.9.0'} @@ -9152,6 +9685,10 @@ packages: resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} engines: {node: '>=6.9.0'} + '@babel/helper-split-export-declaration@7.18.6': + resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} + engines: {node: '>=6.9.0'} + '@babel/helper-split-export-declaration@7.24.7': resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} engines: {node: '>=6.9.0'} @@ -9172,8 +9709,8 @@ packages: resolution: {integrity: sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.3': - resolution: {integrity: sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==} + '@babel/helpers@7.28.4': + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} '@babel/highlight@7.25.9': @@ -9187,8 +9724,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/parser@7.28.3': - resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} + '@babel/parser@7.28.4': + resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} engines: {node: '>=6.0.0'} hasBin: true @@ -9222,6 +9759,13 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/plugin-proposal-async-generator-functions@7.20.7': + resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-class-properties@7.18.6': resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} @@ -9229,6 +9773,13 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-class-static-block@7.21.0': + resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-static-block instead. + peerDependencies: + '@babel/core': ^7.12.0 + '@babel/plugin-proposal-decorators@7.22.15': resolution: {integrity: sha512-kc0VvbbUyKelvzcKOSyQUSVVXS5pT3UhRB0e3c9An86MvLqs+gx0dN4asllrDluqSa3m9YyooXKGOFVomnyFkg==} engines: {node: '>=6.9.0'} @@ -9241,6 +9792,13 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-dynamic-import@7.18.6': + resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-export-default-from@7.22.17': resolution: {integrity: sha512-cop/3quQBVvdz6X5SJC6AhUv3C9DrVTM06LUEXimEdWAhCSyOJIr9NiZDU9leHZ0/aiG0Sh7Zmvaku5TWYNgbA==} engines: {node: '>=6.9.0'} @@ -9253,6 +9811,13 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-export-namespace-from@7.18.9': + resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-json-strings@7.18.6': resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} engines: {node: '>=6.9.0'} @@ -9260,6 +9825,13 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-logical-assignment-operators@7.20.7': + resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6': resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} @@ -9281,6 +9853,13 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-optional-catch-binding@7.18.6': + resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-optional-chaining@7.21.0': resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} @@ -9320,6 +9899,13 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-unicode-property-regex@7.18.6': + resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} + engines: {node: '>=4'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-async-generators@7.8.4': resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: @@ -9475,6 +10061,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-async-to-generator@7.20.7': + resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-async-to-generator@7.27.1': resolution: {integrity: sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==} engines: {node: '>=6.9.0'} @@ -9487,8 +10079,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.28.0': - resolution: {integrity: sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==} + '@babel/plugin-transform-block-scoping@7.28.4': + resolution: {integrity: sha512-1yxmvN0MJHOhPVmAsmoW5liWwoILobu/d/ShymZmj867bAdxGbehIrew1DuLpw2Ukv+qDSSPQdYW1dLNE7t11A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -9505,8 +10097,8 @@ packages: peerDependencies: '@babel/core': ^7.12.0 - '@babel/plugin-transform-classes@7.28.3': - resolution: {integrity: sha512-DoEWC5SuxuARF2KdKmGUq3ghfPMO6ZzR12Dnp5gubwbeWJo4dbNWXJPVlwvh4Zlq6Z7YVvL8VFxeSOJgjsx4Sg==} + '@babel/plugin-transform-classes@7.28.4': + resolution: {integrity: sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -9661,8 +10253,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.28.0': - resolution: {integrity: sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==} + '@babel/plugin-transform-object-rest-spread@7.28.4': + resolution: {integrity: sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -9751,8 +10343,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.28.3': - resolution: {integrity: sha512-K3/M/a4+ESb5LEldjQb+XSrpY0nF+ZBFlTCbSnKaYAMfD8v33O6PMs4uYnOk19HlcsI8WMu3McdFPTiQHF/1/A==} + '@babel/plugin-transform-regenerator@7.28.4': + resolution: {integrity: sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -9769,6 +10361,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-runtime@7.19.6': + resolution: {integrity: sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-runtime@7.22.15': resolution: {integrity: sha512-tEVLhk8NRZSmwQ0DJtxxhTrCht1HVo8VaMzYT4w6lwyKBuHsgoioAUA7/6eT2fRfc5/23fuGdlwIxXhRVgWr4g==} engines: {node: '>=6.9.0'} @@ -9845,6 +10443,12 @@ packages: resolution: {integrity: sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==} deprecated: 🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information. + '@babel/preset-env@7.20.2': + resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/preset-env@7.22.15': resolution: {integrity: sha512-tZFHr54GBkHk6hQuVA8w4Fmq+MSPsfvMG0vPnOYyTnJpyfMqybL8/MbNCPRT9zc2KBO2pe4tq15g6Uno4Jpoag==} engines: {node: '>=6.9.0'} @@ -9863,6 +10467,11 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/preset-modules@0.1.6': + resolution: {integrity: sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + '@babel/preset-modules@0.1.6-no-external-plugins': resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: @@ -9892,31 +10501,39 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/runtime@7.20.13': + resolution: {integrity: sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==} + engines: {node: '>=6.9.0'} + '@babel/runtime@7.22.15': resolution: {integrity: sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.28.3': - resolution: {integrity: sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==} + '@babel/runtime@7.28.4': + resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.20.7': + resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} engines: {node: '>=6.9.0'} '@babel/template@7.27.2': resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.3': - resolution: {integrity: sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==} + '@babel/traverse@7.28.4': + resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.2': - resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} + '@babel/types@7.28.4': + resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@bufbuild/protobuf@2.6.3': - resolution: {integrity: sha512-w/gJKME9mYN7ZoUAmSMAWXk4hkVpxRKvEJCb3dV5g9wwWdxTJJ0ayOJAVcNxtdqaxDyFuC0uz4RSGVacJ030PQ==} + '@bufbuild/protobuf@2.9.0': + resolution: {integrity: sha512-rnJenoStJ8nvmt9Gzye8nkYd6V22xUAnu4086ER7h1zJ508vStko4pMvDeQ446ilDTFpV5wnoc5YS7XvMwwMqA==} '@chromatic-com/storybook@1.9.0': resolution: {integrity: sha512-vYQ+TcfktEE3GHnLZXHCzXF/sN9dw+KivH8a5cmPyd9YtQs7fZtHrEgsIjWpYycXiweKMo1Lm1RZsjxk8DH3rA==} @@ -9945,8 +10562,8 @@ packages: resolution: {integrity: sha512-CEypeeykO9AN7JWkr1OEOQb0HRzZlPWGwV0Ya6DuVgFdDi6g3ma/cPZ5ZPZM4AWQikDpq/0llnGGlIL+j8afzw==} engines: {node: ^14 || ^16 || >=18} - '@csstools/color-helpers@5.0.2': - resolution: {integrity: sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==} + '@csstools/color-helpers@5.1.0': + resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} engines: {node: '>=18'} '@csstools/css-calc@1.2.4': @@ -9970,8 +10587,8 @@ packages: '@csstools/css-parser-algorithms': ^2.7.1 '@csstools/css-tokenizer': ^2.4.1 - '@csstools/css-color-parser@3.0.10': - resolution: {integrity: sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==} + '@csstools/css-color-parser@3.1.0': + resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==} engines: {node: '>=18'} peerDependencies: '@csstools/css-parser-algorithms': ^3.0.5 @@ -10309,14 +10926,14 @@ packages: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} - '@emnapi/core@1.4.5': - resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==} + '@emnapi/core@1.5.0': + resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} - '@emnapi/runtime@1.4.5': - resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} + '@emnapi/runtime@1.5.0': + resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} - '@emnapi/wasi-threads@1.0.4': - resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==} + '@emnapi/wasi-threads@1.1.0': + resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} '@emotion/babel-plugin@11.13.5': resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} @@ -10333,8 +10950,8 @@ packages: '@emotion/is-prop-valid@0.7.3': resolution: {integrity: sha512-uxJqm/sqwXw3YPA5GXX365OBcJGFtxUVkB6WyezqFHlNe9jqUWH5ur2O2M8dGBz61kn1g3ZBlzUunFQXQIClhA==} - '@emotion/is-prop-valid@1.3.1': - resolution: {integrity: sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==} + '@emotion/is-prop-valid@1.4.0': + resolution: {integrity: sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==} '@emotion/memoize@0.7.1': resolution: {integrity: sha512-Qv4LTqO11jepd5Qmlp3M1YEjBumoTHcHFdgPTQ+sFlIL5myi/7xu/POwP7IRu6odBdmLXdtIs1D6TuW6kbwbbg==} @@ -10392,14 +11009,14 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.5': - resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} + '@esbuild/aix-ppc64@0.25.10': + resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.9': - resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} + '@esbuild/aix-ppc64@0.25.5': + resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -10422,6 +11039,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.17.8': + resolution: {integrity: sha512-oa/N5j6v1svZQs7EIRPqR8f+Bf8g6HBDjD/xHC02radE/NjKHK7oQmtmLxPs1iVwYyvE+Kolo6lbpfEQ9xnhxQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.18.20': resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} @@ -10440,14 +11063,14 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.5': - resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} + '@esbuild/android-arm64@0.25.10': + resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.9': - resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==} + '@esbuild/android-arm64@0.25.5': + resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -10470,6 +11093,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.17.8': + resolution: {integrity: sha512-0/rb91GYKhrtbeglJXOhAv9RuYimgI8h623TplY2X+vA4EXnk3Zj1fXZreJ0J3OJJu1bwmb0W7g+2cT/d8/l/w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.18.20': resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} @@ -10488,14 +11117,14 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.5': - resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} + '@esbuild/android-arm@0.25.10': + resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.9': - resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==} + '@esbuild/android-arm@0.25.5': + resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -10518,6 +11147,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.17.8': + resolution: {integrity: sha512-bTliMLqD7pTOoPg4zZkXqCDuzIUguEWLpeqkNfC41ODBHwoUgZ2w5JBeYimv4oP6TDVocoYmEhZrCLQTrH89bg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.18.20': resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} @@ -10536,14 +11171,14 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.5': - resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} + '@esbuild/android-x64@0.25.10': + resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.9': - resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==} + '@esbuild/android-x64@0.25.5': + resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -10566,6 +11201,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.17.8': + resolution: {integrity: sha512-ghAbV3ia2zybEefXRRm7+lx8J/rnupZT0gp9CaGy/3iolEXkJ6LYRq4IpQVI9zR97ID80KJVoUlo3LSeA/sMAg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.18.20': resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} engines: {node: '>=12'} @@ -10584,14 +11225,14 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.5': - resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} + '@esbuild/darwin-arm64@0.25.10': + resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.9': - resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==} + '@esbuild/darwin-arm64@0.25.5': + resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -10614,6 +11255,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.17.8': + resolution: {integrity: sha512-n5WOpyvZ9TIdv2V1K3/iIkkJeKmUpKaCTdun9buhGRWfH//osmUjlv4Z5mmWdPWind/VGcVxTHtLfLCOohsOXw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.18.20': resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} engines: {node: '>=12'} @@ -10632,14 +11279,14 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.5': - resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} + '@esbuild/darwin-x64@0.25.10': + resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.9': - resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==} + '@esbuild/darwin-x64@0.25.5': + resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -10662,6 +11309,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.17.8': + resolution: {integrity: sha512-a/SATTaOhPIPFWvHZDoZYgxaZRVHn0/LX1fHLGfZ6C13JqFUZ3K6SMD6/HCtwOQ8HnsNaEeokdiDSFLuizqv5A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.18.20': resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} @@ -10680,14 +11333,14 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.5': - resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} + '@esbuild/freebsd-arm64@0.25.10': + resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.9': - resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==} + '@esbuild/freebsd-arm64@0.25.5': + resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -10710,6 +11363,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.17.8': + resolution: {integrity: sha512-xpFJb08dfXr5+rZc4E+ooZmayBW6R3q59daCpKZ/cDU96/kvDM+vkYzNeTJCGd8rtO6fHWMq5Rcv/1cY6p6/0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.18.20': resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} @@ -10728,14 +11387,14 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.5': - resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} + '@esbuild/freebsd-x64@0.25.10': + resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.9': - resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==} + '@esbuild/freebsd-x64@0.25.5': + resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -10758,6 +11417,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.17.8': + resolution: {integrity: sha512-v3iwDQuDljLTxpsqQDl3fl/yihjPAyOguxuloON9kFHYwopeJEf1BkDXODzYyXEI19gisEsQlG1bM65YqKSIww==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.18.20': resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} @@ -10776,14 +11441,14 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.5': - resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} + '@esbuild/linux-arm64@0.25.10': + resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.9': - resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==} + '@esbuild/linux-arm64@0.25.5': + resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -10806,6 +11471,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.17.8': + resolution: {integrity: sha512-6Ij8gfuGszcEwZpi5jQIJCVIACLS8Tz2chnEBfYjlmMzVsfqBP1iGmHQPp7JSnZg5xxK9tjCc+pJ2WtAmPRFVA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.18.20': resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} engines: {node: '>=12'} @@ -10824,14 +11495,14 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.5': - resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} + '@esbuild/linux-arm@0.25.10': + resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.9': - resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==} + '@esbuild/linux-arm@0.25.5': + resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -10854,6 +11525,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.17.8': + resolution: {integrity: sha512-8svILYKhE5XetuFk/B6raFYIyIqydQi+GngEXJgdPdI7OMKUbSd7uzR02wSY4kb53xBrClLkhH4Xs8P61Q2BaA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.18.20': resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} @@ -10872,14 +11549,14 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.5': - resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} + '@esbuild/linux-ia32@0.25.10': + resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.9': - resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==} + '@esbuild/linux-ia32@0.25.5': + resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -10902,6 +11579,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.17.8': + resolution: {integrity: sha512-B6FyMeRJeV0NpyEOYlm5qtQfxbdlgmiGdD+QsipzKfFky0K5HW5Td6dyK3L3ypu1eY4kOmo7wW0o94SBqlqBSA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.18.20': resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} @@ -10920,14 +11603,14 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.5': - resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} + '@esbuild/linux-loong64@0.25.10': + resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.9': - resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==} + '@esbuild/linux-loong64@0.25.5': + resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -10950,6 +11633,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.17.8': + resolution: {integrity: sha512-CCb67RKahNobjm/eeEqeD/oJfJlrWyw29fgiyB6vcgyq97YAf3gCOuP6qMShYSPXgnlZe/i4a8WFHBw6N8bYAA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.18.20': resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} @@ -10968,14 +11657,14 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.5': - resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} + '@esbuild/linux-mips64el@0.25.10': + resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.9': - resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==} + '@esbuild/linux-mips64el@0.25.5': + resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -10998,6 +11687,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.17.8': + resolution: {integrity: sha512-bytLJOi55y55+mGSdgwZ5qBm0K9WOCh0rx+vavVPx+gqLLhxtSFU0XbeYy/dsAAD6xECGEv4IQeFILaSS2auXw==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.18.20': resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} @@ -11016,14 +11711,14 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.25.5': - resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} + '@esbuild/linux-ppc64@0.25.10': + resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.25.9': - resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==} + '@esbuild/linux-ppc64@0.25.5': + resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -11046,6 +11741,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.17.8': + resolution: {integrity: sha512-2YpRyQJmKVBEHSBLa8kBAtbhucaclb6ex4wchfY0Tj3Kg39kpjeJ9vhRU7x4mUpq8ISLXRXH1L0dBYjAeqzZAw==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.18.20': resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} @@ -11064,14 +11765,14 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.5': - resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} + '@esbuild/linux-riscv64@0.25.10': + resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.9': - resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==} + '@esbuild/linux-riscv64@0.25.5': + resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -11094,6 +11795,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.17.8': + resolution: {integrity: sha512-QgbNY/V3IFXvNf11SS6exkpVcX0LJcob+0RWCgV9OiDAmVElnxciHIisoSix9uzYzScPmS6dJFbZULdSAEkQVw==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.18.20': resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} engines: {node: '>=12'} @@ -11112,14 +11819,14 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.5': - resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} + '@esbuild/linux-s390x@0.25.10': + resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.9': - resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==} + '@esbuild/linux-s390x@0.25.5': + resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -11142,6 +11849,12 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.17.8': + resolution: {integrity: sha512-mM/9S0SbAFDBc4OPoyP6SEOo5324LpUxdpeIUUSrSTOfhHU9hEfqRngmKgqILqwx/0DVJBzeNW7HmLEWp9vcOA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.18.20': resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} @@ -11160,26 +11873,26 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.5': - resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} + '@esbuild/linux-x64@0.25.10': + resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.9': - resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==} + '@esbuild/linux-x64@0.25.5': + resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.5': - resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} + '@esbuild/netbsd-arm64@0.25.10': + resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.25.9': - resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==} + '@esbuild/netbsd-arm64@0.25.5': + resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -11202,6 +11915,12 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.17.8': + resolution: {integrity: sha512-eKUYcWaWTaYr9zbj8GertdVtlt1DTS1gNBWov+iQfWuWyuu59YN6gSEJvFzC5ESJ4kMcKR0uqWThKUn5o8We6Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.18.20': resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} @@ -11220,14 +11939,14 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.5': - resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} + '@esbuild/netbsd-x64@0.25.10': + resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.9': - resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==} + '@esbuild/netbsd-x64@0.25.5': + resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -11238,14 +11957,14 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.25.5': - resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} + '@esbuild/openbsd-arm64@0.25.10': + resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.25.9': - resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==} + '@esbuild/openbsd-arm64@0.25.5': + resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -11268,6 +11987,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.17.8': + resolution: {integrity: sha512-Vc9J4dXOboDyMXKD0eCeW0SIeEzr8K9oTHJU+Ci1mZc5njPfhKAqkRt3B/fUNU7dP+mRyralPu8QUkiaQn7iIg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.18.20': resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} @@ -11286,20 +12011,20 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.5': - resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} + '@esbuild/openbsd-x64@0.25.10': + resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.9': - resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==} + '@esbuild/openbsd-x64@0.25.5': + resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.9': - resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==} + '@esbuild/openharmony-arm64@0.25.10': + resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] @@ -11322,6 +12047,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.17.8': + resolution: {integrity: sha512-0xvOTNuPXI7ft1LYUgiaXtpCEjp90RuBBYovdd2lqAFxje4sEucurg30M1WIm03+3jxByd3mfo+VUmPtRSVuOw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.18.20': resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} @@ -11340,14 +12071,14 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.5': - resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} + '@esbuild/sunos-x64@0.25.10': + resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.9': - resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==} + '@esbuild/sunos-x64@0.25.5': + resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -11370,6 +12101,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.17.8': + resolution: {integrity: sha512-G0JQwUI5WdEFEnYNKzklxtBheCPkuDdu1YrtRrjuQv30WsYbkkoixKxLLv8qhJmNI+ATEWquZe/N0d0rpr55Mg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.18.20': resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} @@ -11388,14 +12125,14 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.5': - resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} + '@esbuild/win32-arm64@0.25.10': + resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.9': - resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==} + '@esbuild/win32-arm64@0.25.5': + resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -11418,6 +12155,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.17.8': + resolution: {integrity: sha512-Fqy63515xl20OHGFykjJsMnoIWS+38fqfg88ClvPXyDbLtgXal2DTlhb1TfTX34qWi3u4I7Cq563QcHpqgLx8w==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.18.20': resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} engines: {node: '>=12'} @@ -11436,14 +12179,14 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.5': - resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} + '@esbuild/win32-ia32@0.25.10': + resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.9': - resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==} + '@esbuild/win32-ia32@0.25.5': + resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -11466,6 +12209,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.17.8': + resolution: {integrity: sha512-1iuezdyDNngPnz8rLRDO2C/ZZ/emJLb72OsZeqQ6gL6Avko/XCXZw+NuxBSNhBAP13Hie418V7VMt9et1FMvpg==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.18.20': resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} @@ -11484,20 +12233,20 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.5': - resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} + '@esbuild/win32-x64@0.25.10': + resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.9': - resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==} + '@esbuild/win32-x64@0.25.5': + resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.7.0': - resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -11518,6 +12267,10 @@ packages: resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/js@8.57.0': + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/js@8.57.1': resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -11546,6 +12299,9 @@ packages: resolution: {integrity: sha512-uQFg0PSsG94ClaqQz3sX8hf2YDEevtPE6KrbN/gWijc1eEtmJv4M1mpQnGi5nbayF98duBF3nBPGCfSdPlvc3Q==} hasBin: true + '@gar/promisify@1.1.3': + resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + '@graphql-typed-document-node/core@3.2.0': resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} peerDependencies: @@ -11569,6 +12325,11 @@ packages: peerDependencies: react: '>= 16' + '@humanwhocodes/config-array@0.11.14': + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + '@humanwhocodes/config-array@0.13.0': resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} @@ -11590,8 +12351,8 @@ packages: resolution: {integrity: sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==} engines: {node: '>=6.9.0'} - '@inquirer/external-editor@1.0.1': - resolution: {integrity: sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q==} + '@inquirer/external-editor@1.0.2': + resolution: {integrity: sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -11754,21 +12515,32 @@ packages: resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jridgewell/gen-mapping@0.1.1': + resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} + engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + '@jridgewell/source-map@0.3.11': resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/trace-mapping@0.3.30': - resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} @@ -11791,14 +12563,14 @@ packages: peerDependencies: tslib: '2' - '@jsonjoy.com/json-pack@1.11.0': - resolution: {integrity: sha512-nLqSTAYwpk+5ZQIoVp7pfd/oSKNWlEdvTq2LzVA4r2wtWZg6v+5u0VgBOaDJuUfNOuw/4Ysq6glN5QKSrOCgrA==} + '@jsonjoy.com/json-pack@1.14.0': + resolution: {integrity: sha512-LpWbYgVnKzphN5S6uss4M25jJ/9+m6q6UJoeN6zTkK4xAGhKsiBRPVeF7OYMWonn5repMQbE5vieRXcMUrKDKw==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' - '@jsonjoy.com/json-pointer@1.0.1': - resolution: {integrity: sha512-tJpwQfuBuxqZlyoJOSZcqf7OUmiYQ6MiPNmOv4KbZdXE/DdvBSSAwhos0zIlJU/AXxC8XpuO8p08bh2fIl+RKA==} + '@jsonjoy.com/json-pointer@1.0.2': + resolution: {integrity: sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' @@ -11936,8 +12708,8 @@ packages: '@mdx-js/mdx@2.3.0': resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} - '@mdx-js/react@3.1.0': - resolution: {integrity: sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==} + '@mdx-js/react@3.1.1': + resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} peerDependencies: '@types/react': 18.3.10 react: '>=16' @@ -12722,8 +13494,8 @@ packages: '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@napi-rs/wasm-runtime@1.0.3': - resolution: {integrity: sha512-rZxtMsLwjdXkMUGC3WwsPwLNVqVqnTJT6MNIB6e+5fhMcSCPP0AOsNWuMQ5mdCq6HNjs/ZeWAEchpqeprqBD2Q==} + '@napi-rs/wasm-runtime@1.0.5': + resolution: {integrity: sha512-TBr9Cf9onSAS2LQ2+QHx6XcC6h9+RIzJgbqG3++9TUZSH204AwEy5jg3BTQ0VATsyoGj4ee49tN/y6rvaOOtcg==} '@next/env@12.3.4': resolution: {integrity: sha512-H/69Lc5Q02dq3o+dxxy5O/oNxFsZpdL6WREtOOtOM1B/weonIwDXkekr1KV5DPVPr12IHFPrMrcJQ6bgPMfn7A==} @@ -12869,6 +13641,51 @@ packages: cpu: [x64] os: [win32] + '@ngtools/webpack@15.2.10': + resolution: {integrity: sha512-ZExB4rKh/Saad31O/Ofd2XvRuILuCNTYs0+qJL697Be2pzeewvzBhE4Xe1Mm7Jg13aWSPeuIdzSGOqCdwxxxFQ==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + '@angular/compiler-cli': ^15.0.0 + typescript: '>=4.8.2 <5.0' + webpack: ^5.54.0 + + '@ngtools/webpack@15.2.11': + resolution: {integrity: sha512-yqp+FziuJ+wIVij4eTqfhuiTPNaG1PU8ukeGOdqkVH4nQMlmzs9UldXy1iYC/6swzn6XO/pkqisU3m/jxemMzA==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + '@angular/compiler-cli': ^15.0.0 + typescript: '>=4.8.2 <5.0' + webpack: ^5.54.0 + + '@nguniversal/builders@16.2.0': + resolution: {integrity: sha512-RCthtWvPy2u3DYM6T+z06VzMKbNkucXX/hPHMPpaY5oMgTe/5k7vtOSNogldNMantgMrKV70GYmtWb2QbD4Zbg==} + engines: {node: ^16.14.0 || >=18.10.0} + peerDependencies: + '@angular-devkit/build-angular': ^16.0.0 || ^16.1.0-next.0 + + '@nguniversal/common@15.2.1': + resolution: {integrity: sha512-1m/YFx5FLJAm/ll7YZfUTFGPqsOaHkhwEv8aHIp8oc1CWf6K+agrfLIwzY39n18T3J0lrCL/8/9vR1tnId3A9g==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0} + peerDependencies: + '@angular/common': ^15.0.0 + '@angular/core': ^15.0.0 + + '@nguniversal/common@16.2.0': + resolution: {integrity: sha512-b3dQAwD2iI2kzF3O1mhwh6bhDg1SlT46K9lOSzNZNXy0bvV4WrSpVmfN7YKINZLFal5uwHn4j1LNdrDR4Qohlw==} + engines: {node: ^16.14.0 || >=18.10.0} + peerDependencies: + '@angular/common': ^16.0.0 || ^16.1.0-next.0 + '@angular/core': ^16.0.0 || ^16.1.0-next.0 + + '@nguniversal/express-engine@15.2.1': + resolution: {integrity: sha512-LHQfntApCGvKREJ0MvhioM1TdWnYxqnYRgX3JoWaNVFPdVryhWLPv4RCjqV8QiMe5DQKd6Pc5J+VIhYX5hwjPQ==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0} + peerDependencies: + '@angular/common': ^15.0.0 + '@angular/core': ^15.0.0 + '@angular/platform-server': ^15.0.0 + express: ^4.15.2 + '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': resolution: {integrity: sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==} @@ -12909,6 +13726,10 @@ packages: engines: {node: ^16.14.0 || >=18.0.0} hasBin: true + '@npmcli/fs@2.1.2': + resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + '@npmcli/fs@3.1.1': resolution: {integrity: sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -12934,6 +13755,11 @@ packages: resolution: {integrity: sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g==} engines: {node: ^16.14.0 || >=18.0.0} + '@npmcli/move-file@2.0.1': + resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This functionality has been moved to @npmcli/fs + '@npmcli/name-from-folder@2.0.0': resolution: {integrity: sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -12966,6 +13792,10 @@ packages: resolution: {integrity: sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==} engines: {node: ^16.14.0 || >=18.0.0} + '@npmcli/run-script@6.0.2': + resolution: {integrity: sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@npmcli/run-script@8.1.0': resolution: {integrity: sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==} engines: {node: ^16.14.0 || >=18.0.0} @@ -13373,8 +14203,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.54.2': - resolution: {integrity: sha512-A+znathYxPf+72riFd1r1ovOLqsIIB0jKIoPjyK2kqEIe30/6jF6BC7QNluHuwUmsD2tv1XZVugN8GqfTMOxsA==} + '@playwright/test@1.55.0': + resolution: {integrity: sha512-04IXzPwHrW69XusN/SIdDdKZBzMfOT9UNT/YiJit/xpy2VuAoB8NHc8Aplb96zsWDddLnbkPL3TsmrS04ZU2xQ==} engines: {node: '>=18'} hasBin: true @@ -13484,8 +14314,8 @@ packages: wrangler: optional: true - '@remix-run/express@2.17.0': - resolution: {integrity: sha512-VUNpdrX3WSLPOkRBbsTQao5Vu/xdKcB8AY+44pAyC7iW5iIKHDb6EYlDvpbMLcMNh9ErYGhpPtshaBiBTMvjiw==} + '@remix-run/express@2.17.1': + resolution: {integrity: sha512-qsjfpj2rUwF5jN0XmECpPSgPKWAXVzM4rV1mLgomIrjJISHfzxfNYd9m2/qhyueOZY07tcaUK0LXkjAEvrdMpA==} engines: {node: '>=18.0.0'} peerDependencies: express: ^4.20.0 @@ -13503,8 +14333,8 @@ packages: typescript: optional: true - '@remix-run/node@2.17.0': - resolution: {integrity: sha512-ISy3N4peKB+Fo8ddh+mU6ki3HzQqLXwJxUrAtqxYxrBDM4Pwc7EvISrcQ4QasB6ORBknJeEZSBu69WDRhGzrjA==} + '@remix-run/node@2.17.1': + resolution: {integrity: sha512-pHmHTuLE1Lwazulx3gjrHobgBCsa+Xiq8WUO0ruLeDfEw2DU0c0SNSiyNkugu3rIZautroBwRaOoy7CWJL9xhQ==} engines: {node: '>=18.0.0'} peerDependencies: typescript: ^5.1.0 @@ -13512,8 +14342,8 @@ packages: typescript: optional: true - '@remix-run/react@2.17.0': - resolution: {integrity: sha512-muOLHqcimMCrIk6VOuqIn51P3buYjKpdYc6qpNy6zE5HlKfyaKEY00a5pzdutRmevYTQy7FiEF/LK4M8sxk70Q==} + '@remix-run/react@2.17.1': + resolution: {integrity: sha512-5MqRK2Z5gkQMDqGfjXSACf/HzvOA+5ug9kiSqaPpK9NX0OF4NlS+cAPKXQWuzc2iLSp6r1RGu8FU1jpZbhsaug==} engines: {node: '>=18.0.0'} peerDependencies: react: ^18.0.0 @@ -13552,8 +14382,8 @@ packages: typescript: optional: true - '@remix-run/server-runtime@2.17.0': - resolution: {integrity: sha512-X0zfGLgvukhuTIL0tdWKnlvHy4xUe7Z17iQ0KMQoITK0SkTZPSud/6cJCsKhPqC8kfdYT1GNFLJKRhHz7Aapmw==} + '@remix-run/server-runtime@2.17.1': + resolution: {integrity: sha512-d1Vp9FxX4KafB111vP2E5C1fmWzPI+gHZ674L1drq+N8Bp9U6FBspi7GAZSU5K5Kxa4T6UF+aE1gK6pVi9R8sw==} engines: {node: '>=18.0.0'} peerDependencies: typescript: ^5.1.0 @@ -13609,103 +14439,108 @@ packages: resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} engines: {node: '>= 8.0.0'} - '@rollup/rollup-android-arm-eabi@4.46.2': - resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} + '@rollup/rollup-android-arm-eabi@4.51.0': + resolution: {integrity: sha512-VyfldO8T/C5vAXBGIobrAnUE+VJNVLw5z9h4NgSDq/AJZWt/fXqdW+0PJbk+M74xz7yMDRiHtlsuDV7ew6K20w==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.46.2': - resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==} + '@rollup/rollup-android-arm64@4.51.0': + resolution: {integrity: sha512-Z3ujzDZgsEVSokgIhmOAReh9SGT2qloJJX2Xo1Q3nPU1EhCXrV0PbpR3r7DWRgozqnjrPZQkLe5cgBPIYp70Vg==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.46.2': - resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==} + '@rollup/rollup-darwin-arm64@4.51.0': + resolution: {integrity: sha512-T3gskHgArUdR6TCN69li5VELVAZK+iQ4iwMoSMNYixoj+56EC9lTj35rcxhXzIJt40YfBkvDy3GS+t5zh7zM6g==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.46.2': - resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==} + '@rollup/rollup-darwin-x64@4.51.0': + resolution: {integrity: sha512-Hh7n/fh0g5UjH6ATDF56Qdf5bzdLZKIbhp5KftjMYG546Ocjeyg15dxphCpH1FFY2PJ2G6MiOVL4jMq5VLTyrQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.46.2': - resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==} + '@rollup/rollup-freebsd-arm64@4.51.0': + resolution: {integrity: sha512-0EddADb6FBvfqYoxwVom3hAbAvpSVUbZqmR1wmjk0MSZ06hn/UxxGHKRqEQDMkts7XiZjejVB+TLF28cDTU+gA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.46.2': - resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==} + '@rollup/rollup-freebsd-x64@4.51.0': + resolution: {integrity: sha512-MpqaEDLo3JuVPF+wWV4mK7V8akL76WCz8ndfz1aVB7RhvXFO3k7yT7eu8OEuog4VTSyNu5ibvN9n6lgjq/qLEQ==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.46.2': - resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==} + '@rollup/rollup-linux-arm-gnueabihf@4.51.0': + resolution: {integrity: sha512-WEWAGFNFFpvSWAIT3MYvxTkYHv/cJl9yWKpjhheg7ONfB0hetZt/uwBnM3GZqSHrk5bXCDYTFXg3jQyk/j7eXQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.46.2': - resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==} + '@rollup/rollup-linux-arm-musleabihf@4.51.0': + resolution: {integrity: sha512-9bxtxj8QoAp++LOq5PGDGkEEOpCDk9rOEHUcXadnijedDH8IXrBt6PnBa4Y6NblvGWdoxvXZYghZLaliTCmAng==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.46.2': - resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==} + '@rollup/rollup-linux-arm64-gnu@4.51.0': + resolution: {integrity: sha512-DdqA+fARqIsfqDYkKo2nrWMp0kvu/wPJ2G8lZ4DjYhn+8QhrjVuzmsh7tTkhULwjvHTN59nWVzAixmOi6rqjNA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.46.2': - resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==} + '@rollup/rollup-linux-arm64-musl@4.51.0': + resolution: {integrity: sha512-2XVRNzcUJE1UJua8P4a1GXS5jafFWE+pQ6zhUbZzptOu/70p1F6+0FTi6aGPd6jNtnJqGMjtBCXancC2dhYlWw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.46.2': - resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==} + '@rollup/rollup-linux-loong64-gnu@4.51.0': + resolution: {integrity: sha512-R8QhY0kLIPCAVXWi2yftDSpn7Jtejey/WhMoBESSfwGec5SKdFVupjxFlKoQ7clVRuaDpiQf7wNx3EBZf4Ey6g==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.46.2': - resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==} + '@rollup/rollup-linux-ppc64-gnu@4.51.0': + resolution: {integrity: sha512-I498RPfxx9cMv1KTHQ9tg2Ku1utuQm+T5B+Xro+WNu3FzAFSKp4awKfgMoZwjoPgNbaFGINaOM25cQW6WuBhiQ==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.46.2': - resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==} + '@rollup/rollup-linux-riscv64-gnu@4.51.0': + resolution: {integrity: sha512-o8COudsb8lvtdm9ixg9aKjfX5aeoc2x9KGE7WjtrmQFquoCRZ9jtzGlonujE4WhvXFepTraWzT4RcwyDDeHXjA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.46.2': - resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==} + '@rollup/rollup-linux-riscv64-musl@4.51.0': + resolution: {integrity: sha512-0shJPgSXMdYzOQzpM5BJN2euXY1f8uV8mS6AnrbMcH2KrkNsbpMxWB1wp8UEdiJ1NtyBkCk3U/HfX5mEONBq6w==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.46.2': - resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==} + '@rollup/rollup-linux-s390x-gnu@4.51.0': + resolution: {integrity: sha512-L7pV+ny7865jamSCQwyozBYjFRUKaTsPqDz7ClOtJCDu4paf2uAa0mrcHwSt4XxZP2ogFZS9uuitH3NXdeBEJA==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.46.2': - resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==} + '@rollup/rollup-linux-x64-gnu@4.51.0': + resolution: {integrity: sha512-4YHhP+Rv3T3+H3TPbUvWOw5tuSwhrVhkHHZhk4hC9VXeAOKR26/IsUAT4FsB4mT+kfIdxxb1BezQDEg/voPO8A==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.46.2': - resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==} + '@rollup/rollup-linux-x64-musl@4.51.0': + resolution: {integrity: sha512-P7U7U03+E5w7WgJtvSseNLOX1UhknVPmEaqgUENFWfNxNBa1OhExT6qYGmyF8gepcxWSaSfJsAV5UwhWrYefdQ==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.46.2': - resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==} + '@rollup/rollup-openharmony-arm64@4.51.0': + resolution: {integrity: sha512-FuD8g3u9W6RPwdO1R45hZFORwa1g9YXEMesAKP/sOi7mDqxjbni8S3zAXJiDcRfGfGBqpRYVuH54Gu3FTuSoEw==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.51.0': + resolution: {integrity: sha512-zST+FdMCX3QAYfmZX3dp/Fy8qLUetfE17QN5ZmmFGPrhl86qvRr+E9u2bk7fzkIXsfQR30Z7ZRS7WMryPPn4rQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.46.2': - resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==} + '@rollup/rollup-win32-ia32-msvc@4.51.0': + resolution: {integrity: sha512-U+qhoCVAZmTHCmUKxdQxw1jwAFNFXmOpMME7Npt5GTb1W/7itfgAgNluVOvyeuSeqW+dEQLFuNZF3YZPO8XkMg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.46.2': - resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==} + '@rollup/rollup-win32-x64-msvc@4.51.0': + resolution: {integrity: sha512-z6UpFzMhXSD8NNUfCi2HO+pbpSzSWIIPgb1TZsEZjmZYtk6RUIC63JYjlFBwbBZS3jt3f1q6IGfkj3g+GnBt2Q==} cpu: [x64] os: [win32] @@ -14578,6 +15413,10 @@ packages: '@rushstack/eslint-patch@1.12.0': resolution: {integrity: sha512-5EwMtOqvJMMa3HbmxLlF74e+3/HhwBTMcvt3nqVJgGCozO6hzIPOBlwm8mGVNR9SN2IJpxSnlxczyDjcn7qIyw==} + '@schematics/angular@15.2.10': + resolution: {integrity: sha512-eLdyP+T1TueNQ8FCP7sP+tt8z+YQ1BINsJsyAyoJT/XZjcCV7LUxgDIU94/kuvIotmJ2xTuFWHFPfAY+CN3duQ==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@shelex/allure-js-commons-browser@1.5.0': resolution: {integrity: sha512-IBZcmHTXpyfPmZgpasc4PmxAOuk+GTqxUUntmPKVU0zeauGysluFt+hJ5pPV22TLxEeKgeyl63p6ic6P3usDtg==} @@ -14593,6 +15432,10 @@ packages: '@sideway/pinpoint@2.0.0': resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + '@sigstore/bundle@1.1.0': + resolution: {integrity: sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@sigstore/bundle@2.3.2': resolution: {integrity: sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==} engines: {node: ^16.14.0 || >=18.0.0} @@ -14601,14 +15444,26 @@ packages: resolution: {integrity: sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==} engines: {node: ^16.14.0 || >=18.0.0} + '@sigstore/protobuf-specs@0.2.1': + resolution: {integrity: sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@sigstore/protobuf-specs@0.3.3': resolution: {integrity: sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ==} engines: {node: ^18.17.0 || >=20.5.0} + '@sigstore/sign@1.0.0': + resolution: {integrity: sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@sigstore/sign@2.3.2': resolution: {integrity: sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==} engines: {node: ^16.14.0 || >=18.0.0} + '@sigstore/tuf@1.0.3': + resolution: {integrity: sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@sigstore/tuf@2.3.4': resolution: {integrity: sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==} engines: {node: ^16.14.0 || >=18.0.0} @@ -14782,8 +15637,8 @@ packages: '@storybook/global@5.0.0': resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} - '@storybook/icons@1.4.0': - resolution: {integrity: sha512-Td73IeJxOyalzvjQL+JXx72jlIYHgs+REaHiREOqfpo3A2AYYG71AUbcv+lg7mEDIweKVCxsMQ0UKo634c8XeA==} + '@storybook/icons@1.6.0': + resolution: {integrity: sha512-hcFZIjW8yQz8O8//2WTIXylm5Xsgc+lW9ISLgUk1xGmptIJQRdlhVIXCpSyLrQaaRiyhQRaVg7l3BD9S216BHw==} engines: {node: '>=14.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta @@ -15111,14 +15966,14 @@ packages: '@swc/plugin-styled-components@8.0.4': resolution: {integrity: sha512-Vz/C4ubzvHXK9aqUHTIOIQaU5O5ApiEA2uFjCKukIqq7/IUZvyaVoa5f+s411qMSLbEuEiVUHGFUAslwa++Exw==} - '@swc/types@0.1.24': - resolution: {integrity: sha512-tjTMh3V4vAORHtdTprLlfoMptu1WfTZG9Rsca6yOKyNYsRr+MUXutKmliB17orgSZk5DpnDxs8GUdd/qwYxOng==} + '@swc/types@0.1.25': + resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==} - '@tanstack/query-core@4.40.0': - resolution: {integrity: sha512-7MJTtZkCSuehMC7IxMOCGsLvHS3jHx4WjveSrGsG1Nc1UQLjaFwwkpLA2LmPfvOAxnH4mszMOBFD6LlZE+aB+Q==} + '@tanstack/query-core@4.41.0': + resolution: {integrity: sha512-193R4Jp9hjvlij6LryxrB5Mpbffd2L9PeWh3KlIy/hJV4SkBOfiQZ+jc5qAZLDCrdbkA5FjGj+UoDYw6TcNnyA==} - '@tanstack/react-query@4.40.1': - resolution: {integrity: sha512-mgD07S5N8e5v81CArKDWrHE4LM7HxZ9k/KLeD3+NUD9WimGZgKIqojUZf/rXkfAMYZU9p0Chzj2jOXm7xpgHHQ==} + '@tanstack/react-query@4.41.0': + resolution: {integrity: sha512-4/euCZAv8zeaB5P/nQiySzB0JHM3tiraU9KjSvSlJAX7oIE9uPDZlHCkDg/bHYNXewzvsg0FtOMq0VUq8XMMOQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -15191,16 +16046,24 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@tufjs/canonical-json@1.0.0': + resolution: {integrity: sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@tufjs/canonical-json@2.0.0': resolution: {integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==} engines: {node: ^16.14.0 || >=18.0.0} + '@tufjs/models@1.0.4': + resolution: {integrity: sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@tufjs/models@2.0.1': resolution: {integrity: sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==} engines: {node: ^16.14.0 || >=18.0.0} - '@tybys/wasm-util@0.10.0': - resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} '@types/acorn@4.0.6': resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} @@ -15265,6 +16128,9 @@ packages: '@types/estree@0.0.39': resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + '@types/estree@0.0.51': + resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} + '@types/estree@1.0.0': resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} @@ -15283,6 +16149,9 @@ packages: '@types/find-cache-dir@3.2.1': resolution: {integrity: sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==} + '@types/glob@7.2.0': + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -15354,8 +16223,8 @@ packages: '@types/node-fetch@2.6.13': resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==} - '@types/node-forge@1.3.13': - resolution: {integrity: sha512-zePQJSW5QkwSHKRApqWCVKeKoSOt4xvEnLENZPjyvm9Ezdf/EyDeJM7jqLzOwjVICQQzvLZ63T55MKdJB5H6ww==} + '@types/node-forge@1.3.14': + resolution: {integrity: sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==} '@types/node@16.18.101': resolution: {integrity: sha512-AAsx9Rgz2IzG8KJ6tXd6ndNkVcu+GYB6U/SnFAaokSPNx2N7dcIIfnighYUNumvj6YS2q39Dejz5tT0NCV7CWA==} @@ -15443,8 +16312,8 @@ packages: '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - '@types/semver@7.7.0': - resolution: {integrity: sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==} + '@types/semver@7.7.1': + resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} '@types/send@0.17.5': resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==} @@ -15461,8 +16330,8 @@ packages: '@types/sinonjs__fake-timers@8.1.1': resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==} - '@types/sizzle@2.3.9': - resolution: {integrity: sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==} + '@types/sizzle@2.3.10': + resolution: {integrity: sha512-TC0dmN0K8YcWEAEfiPi5gJP14eJe30TTGjkvek3iM/1NdHHsdCA/Td6GvNndMOo/iSnIsZ4HuuhrYPDAmbxzww==} '@types/sockjs@0.3.36': resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} @@ -15897,8 +16766,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@vue/babel-preset-app@5.0.8': - resolution: {integrity: sha512-yl+5qhpjd8e1G4cMXfORkkBlvtPCIgmRf3IYCWYDKIQ7m+PPa5iTm4feiNmCMD6yGqQWMhhK/7M3oWGL9boKwg==} + '@vue/babel-preset-app@5.0.9': + resolution: {integrity: sha512-0rKOF4s/AhaRMJLybxOCgXfwtYhO3pwDSL/q/W8wRs1LzmHAc77FyTXWlun6VyKiSKwSdtH7CvOiWqq+DfofdA==} peerDependencies: '@babel/core': '*' core-js: ^3 @@ -15948,8 +16817,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@vue/cli-overlay@5.0.8': - resolution: {integrity: sha512-KmtievE/B4kcXp6SuM2gzsnSd8WebkQpg3XaB6GmFh1BJGRqa1UiW9up7L/Q67uOdTigHxr5Ar2lZms4RcDjwQ==} + '@vue/cli-overlay@5.0.9': + resolution: {integrity: sha512-aBdZWrYKxLuFz1FDsk/muFD7GycrsW73Gi11yRc7R2W7Bm8mDRc9HKAI790gdg4NV+chkDFmfkegjg5iMDEpAA==} '@vue/cli-plugin-babel@5.0.8': resolution: {integrity: sha512-a4qqkml3FAJ3auqB2kN2EMPocb/iu0ykeELwed+9B1c1nQ1HKgslKMHMPavYx3Cd/QAx2mBD4hwKBqZXEI/CsQ==} @@ -16017,20 +16886,20 @@ packages: webpack-sources: optional: true - '@vue/cli-shared-utils@5.0.8': - resolution: {integrity: sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ==} + '@vue/cli-shared-utils@5.0.9': + resolution: {integrity: sha512-lf4KykiG8j9KwvNVi7fKtASmHuLsxCcCsflVU2b2CHMRuR4weOIV3zuuCrjWKjk0APn/MHJhgCjJGzHMbTtd5w==} '@vue/compiler-core@3.4.31': resolution: {integrity: sha512-skOiodXWTV3DxfDhB4rOf3OGalpITLlgCeOwb+Y9GJpfQ8ErigdBUHomBzvG78JoVE8MJoQsb+qhZiHfKeNeEg==} - '@vue/compiler-core@3.5.18': - resolution: {integrity: sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==} + '@vue/compiler-core@3.5.21': + resolution: {integrity: sha512-8i+LZ0vf6ZgII5Z9XmUvrCyEzocvWT+TeR2VBUVlzIH6Tyv57E20mPZ1bCS+tbejgUgmjrEh7q/0F0bibskAmw==} '@vue/compiler-dom@3.4.31': resolution: {integrity: sha512-wK424WMXsG1IGMyDGyLqB+TbmEBFM78hIsOJ9QwUVLGrcSk0ak6zYty7Pj8ftm7nEtdU/DGQxAXp0/lM/2cEpQ==} - '@vue/compiler-dom@3.5.18': - resolution: {integrity: sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==} + '@vue/compiler-dom@3.5.21': + resolution: {integrity: sha512-jNtbu/u97wiyEBJlJ9kmdw7tAr5Vy0Aj5CgQmo+6pxWNQhXZDPsRr1UWPN4v3Zf82s2H3kF51IbzZ4jMWAgPlQ==} '@vue/compiler-sfc@2.7.16': resolution: {integrity: sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==} @@ -16038,14 +16907,14 @@ packages: '@vue/compiler-sfc@3.4.31': resolution: {integrity: sha512-einJxqEw8IIJxzmnxmJBuK2usI+lJonl53foq+9etB2HAzlPjAS/wa7r0uUpXw5ByX3/0uswVSrjNb17vJm1kQ==} - '@vue/compiler-sfc@3.5.18': - resolution: {integrity: sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==} + '@vue/compiler-sfc@3.5.21': + resolution: {integrity: sha512-SXlyk6I5eUGBd2v8Ie7tF6ADHE9kCR6mBEuPyH1nUZ0h6Xx6nZI29i12sJKQmzbDyr2tUHMhhTt51Z6blbkTTQ==} '@vue/compiler-ssr@3.4.31': resolution: {integrity: sha512-RtefmITAje3fJ8FSg1gwgDhdKhZVntIVbwupdyZDSifZTRMiWxWehAOTCc8/KZDnBOcYQ4/9VWxsTbd3wT0hAA==} - '@vue/compiler-ssr@3.5.18': - resolution: {integrity: sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==} + '@vue/compiler-ssr@3.5.21': + resolution: {integrity: sha512-vKQ5olH5edFZdf5ZrlEgSO1j1DMA4u23TVK5XR1uMhvwnYvVdDF0nHXJUblL/GvzlShQbjhZZ2uvYmDlAbgo9w==} '@vue/component-compiler-utils@3.3.0': resolution: {integrity: sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==} @@ -16087,8 +16956,8 @@ packages: '@vue/shared@3.4.31': resolution: {integrity: sha512-Yp3wtJk//8cO4NItOPpi3QkLExAr/aLBGZMmTtW9WpdwBCJpRM6zj9WgWktXAl8IDIozwNMByT45JP3tO3ACWA==} - '@vue/shared@3.5.18': - resolution: {integrity: sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==} + '@vue/shared@3.5.21': + resolution: {integrity: sha512-+2k1EQpnYuVuu3N7atWyG3/xoFWIVJZq4Mz8XNOdScFI0etES75fbny/oU4lKWk/577P1zmg0ioYvpGEDZ3DLw==} '@vue/web-component-wrapper@1.3.0': resolution: {integrity: sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==} @@ -16118,48 +16987,93 @@ packages: '@web3-storage/multipart-parser@1.0.0': resolution: {integrity: sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==} + '@webassemblyjs/ast@1.11.1': + resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} + '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} + '@webassemblyjs/floating-point-hex-parser@1.11.1': + resolution: {integrity: sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==} + '@webassemblyjs/floating-point-hex-parser@1.13.2': resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} + '@webassemblyjs/helper-api-error@1.11.1': + resolution: {integrity: sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==} + '@webassemblyjs/helper-api-error@1.13.2': resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} + '@webassemblyjs/helper-buffer@1.11.1': + resolution: {integrity: sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==} + '@webassemblyjs/helper-buffer@1.14.1': resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} + '@webassemblyjs/helper-numbers@1.11.1': + resolution: {integrity: sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==} + '@webassemblyjs/helper-numbers@1.13.2': resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} + '@webassemblyjs/helper-wasm-bytecode@1.11.1': + resolution: {integrity: sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==} + '@webassemblyjs/helper-wasm-bytecode@1.13.2': resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} + '@webassemblyjs/helper-wasm-section@1.11.1': + resolution: {integrity: sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==} + '@webassemblyjs/helper-wasm-section@1.14.1': resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} + '@webassemblyjs/ieee754@1.11.1': + resolution: {integrity: sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==} + '@webassemblyjs/ieee754@1.13.2': resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} + '@webassemblyjs/leb128@1.11.1': + resolution: {integrity: sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==} + '@webassemblyjs/leb128@1.13.2': resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} + '@webassemblyjs/utf8@1.11.1': + resolution: {integrity: sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==} + '@webassemblyjs/utf8@1.13.2': resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} + '@webassemblyjs/wasm-edit@1.11.1': + resolution: {integrity: sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==} + '@webassemblyjs/wasm-edit@1.14.1': resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} + '@webassemblyjs/wasm-gen@1.11.1': + resolution: {integrity: sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==} + '@webassemblyjs/wasm-gen@1.14.1': resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} + '@webassemblyjs/wasm-opt@1.11.1': + resolution: {integrity: sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==} + '@webassemblyjs/wasm-opt@1.14.1': resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} + '@webassemblyjs/wasm-parser@1.11.1': + resolution: {integrity: sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==} + '@webassemblyjs/wasm-parser@1.14.1': resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} + '@webassemblyjs/wast-printer@1.11.1': + resolution: {integrity: sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==} + '@webassemblyjs/wast-printer@1.14.1': resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} @@ -16188,6 +17102,13 @@ packages: webpack-dev-server: optional: true + '@wessberg/ts-evaluator@0.0.27': + resolution: {integrity: sha512-7gOpVm3yYojUp/Yn7F4ZybJRxyqfMNf0LXK5KJiawbPfL0XTsJV+0mgrEDjOIR6Bi0OYk2Cyg4tjFu1r8MCZaA==} + engines: {node: '>=10.1.0'} + deprecated: this package has been renamed to ts-evaluator. Please install ts-evaluator instead + peerDependencies: + typescript: '>=3.2.x || >= 4.x' + '@wry/caches@1.0.1': resolution: {integrity: sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA==} engines: {node: '>=8'} @@ -16327,6 +17248,10 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -16362,6 +17287,12 @@ packages: resolution: {integrity: sha512-he/oWJflViIdEmuQ4er5k+xRd//PaVVElHHTx01h6W71KM9qKiLeF5MloV93UBYoJRzjD9fgbZedSMKemCEGkQ==} hasBin: true + allure-js-commons@2.15.1: + resolution: {integrity: sha512-5V/VINplbu0APnfSZOkYpKOzucO36Q2EtTD1kqjWjl7n6tj7Hh+IHCZsH3Vpk/LXRDfj9RuXugBBvwYKV5YMJw==} + + allure-playwright@2.15.1: + resolution: {integrity: sha512-P1Uu1j/ptDHdYp3V5ZAeBZyt33+L+OQu0otUIEl/zkOcv0KRycHqlHwC0GEJmpgnLKvVP7s+K37LcLoSUUj3Cg==} + ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} @@ -16377,8 +17308,8 @@ packages: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} - ansi-escapes@7.0.0: - resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + ansi-escapes@7.1.0: + resolution: {integrity: sha512-YdhtCd19sKRKfAAUsrcC1wzm4JuzJoiX4pOJqIoW2qmKj5WzG/dL8uUJ0361zaXtHqK7gEhOwtAtz7t3Yq3X5g==} engines: {node: '>=18'} ansi-html-community@0.0.8: @@ -16403,8 +17334,8 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} ansi-styles@3.2.1: @@ -16419,8 +17350,8 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} any-promise@1.3.0: @@ -16450,6 +17381,11 @@ packages: engines: {node: '>=10'} deprecated: This package is no longer supported. + are-we-there-yet@3.0.1: + resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. + arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} @@ -16502,6 +17438,10 @@ packages: resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} engines: {node: '>= 0.4'} + array-union@1.0.2: + resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} + engines: {node: '>=0.10.0'} + array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -16510,6 +17450,10 @@ packages: resolution: {integrity: sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==} engines: {node: '>=12'} + array-uniq@1.0.3: + resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} + engines: {node: '>=0.10.0'} + array-unique@0.3.2: resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} engines: {node: '>=0.10.0'} @@ -16598,6 +17542,10 @@ packages: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true + async-each-series@0.1.1: + resolution: {integrity: sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==} + engines: {node: '>=0.8.0'} + async-each@1.0.6: resolution: {integrity: sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==} @@ -16617,6 +17565,9 @@ packages: async@1.5.2: resolution: {integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==} + async@2.6.4: + resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} + async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} @@ -16632,6 +17583,13 @@ packages: engines: {node: '>= 4.5.0'} hasBin: true + autoprefixer@10.4.13: + resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + autoprefixer@10.4.19: resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} engines: {node: ^10 || ^12 || >=14} @@ -16667,8 +17625,11 @@ packages: resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} engines: {node: '>=4'} - axios@1.11.0: - resolution: {integrity: sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==} + axios@0.21.4: + resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + + axios@1.12.2: + resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==} axios@1.5.0: resolution: {integrity: sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==} @@ -16715,6 +17676,13 @@ packages: '@babel/core': ^7.0.0 webpack: '>=2' + babel-loader@9.1.2: + resolution: {integrity: sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==} + engines: {node: '>= 14.15.0'} + peerDependencies: + '@babel/core': ^7.12.0 + webpack: '>=5' + babel-loader@9.1.3: resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} engines: {node: '>= 14.15.0'} @@ -16775,6 +17743,11 @@ packages: babel-plugin-named-exports-order@0.0.2: resolution: {integrity: sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw==} + babel-plugin-polyfill-corejs2@0.3.3: + resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + babel-plugin-polyfill-corejs2@0.4.14: resolution: {integrity: sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==} peerDependencies: @@ -16790,11 +17763,21 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-corejs3@0.6.0: + resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + babel-plugin-polyfill-corejs3@0.8.7: resolution: {integrity: sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-regenerator@0.4.1: + resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + babel-plugin-polyfill-regenerator@0.5.5: resolution: {integrity: sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==} peerDependencies: @@ -16885,6 +17868,10 @@ packages: resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} engines: {node: '>=0.10.0'} + baseline-browser-mapping@2.8.6: + resolution: {integrity: sha512-wrH5NNqren/QMtKUEEJf7z86YjfqW/2uw3IL3/xpqZUC95SSVIFXYQeeGjL6FT/X68IROu6RMehZQS5foy2BXw==} + hasBin: true + basic-auth@1.1.0: resolution: {integrity: sha512-CtGuTyWf3ig+sgRyC7uP6DM3N+5ur/p8L+FPfsd+BbIfIs74TFfCajZTHnCw6K5dqM0bZEbRIqRy1fAdiUJhTA==} engines: {node: '>= 0.6'} @@ -16998,6 +17985,18 @@ packages: browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + browser-sync-client@2.29.3: + resolution: {integrity: sha512-4tK5JKCl7v/3aLbmCBMzpufiYLsB1+UI+7tUXCCp5qF0AllHy/jAqYu6k7hUF3hYtlClKpxExWaR+rH+ny07wQ==} + engines: {node: '>=8.0.0'} + + browser-sync-ui@2.29.3: + resolution: {integrity: sha512-kBYOIQjU/D/3kYtUIJtj82e797Egk1FB2broqItkr3i4eF1qiHbFCG6srksu9gWhfmuM/TNG76jMfzAdxEPakg==} + + browser-sync@2.29.3: + resolution: {integrity: sha512-NiM38O6XU84+MN+gzspVmXV2fTOoe+jBqIBx3IBdhZrdeURr6ZgznJr/p+hQ+KzkKEiGH/GcC4SQFSL0jV49bg==} + engines: {node: '>= 8.0.0'} + hasBin: true + browserify-aes@1.2.0: resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} @@ -17024,6 +18023,11 @@ packages: browserslist-to-es-version@1.1.1: resolution: {integrity: sha512-jfRStKh3aQ8HqQA45MWHYYtzhhlMM8X3cffhXJmMRlRWEu8+fk9bN8dYEsfY7j5pAvtSK8ehelUSvyDmEKijOg==} + browserslist@4.21.5: + resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + browserslist@4.23.1: resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -17034,8 +18038,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - browserslist@4.25.2: - resolution: {integrity: sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==} + browserslist@4.26.2: + resolution: {integrity: sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -17043,6 +18047,9 @@ packages: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} + bs-recipes@1.3.4: + resolution: {integrity: sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==} + bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -17069,6 +18076,10 @@ packages: buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + builtin-modules@1.1.1: + resolution: {integrity: sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==} + engines: {node: '>=0.10.0'} + builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} @@ -17109,6 +18120,14 @@ packages: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} + cacache@16.1.3: + resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + cacache@17.0.4: + resolution: {integrity: sha512-Z/nL3gU+zTUjz5pCA5vVjYM8pmaw2kxM7JEiE0fv3w77Wj+sFbi70CrBruUWH0uNcEdvLDixFpgA2JM4F4DBjA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + cacache@17.1.4: resolution: {integrity: sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -17180,8 +18199,8 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001735: - resolution: {integrity: sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==} + caniuse-lite@1.0.30001743: + resolution: {integrity: sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==} case-sensitive-paths-webpack-plugin@2.4.0: resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} @@ -17197,8 +18216,8 @@ packages: resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} engines: {node: '>=4'} - chai@5.2.1: - resolution: {integrity: sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==} + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} engines: {node: '>=18'} chalk-template@0.4.0: @@ -17252,9 +18271,15 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + chardet@2.1.0: resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} + charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} @@ -17272,6 +18297,10 @@ packages: chokidar@2.1.8: resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==} + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -17344,6 +18373,12 @@ packages: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} + clean-webpack-plugin@4.0.0: + resolution: {integrity: sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==} + engines: {node: '>=10.0.0'} + peerDependencies: + webpack: '>=4.0.0 <6.0.0' + cli-boxes@3.0.0: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} @@ -17622,10 +18657,18 @@ packages: confusing-browser-globals@1.0.11: resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} + connect-history-api-fallback@1.6.0: + resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==} + engines: {node: '>=0.8'} + connect-history-api-fallback@2.0.0: resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} engines: {node: '>=0.8'} + connect@3.6.6: + resolution: {integrity: sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ==} + engines: {node: '>= 0.10.0'} + connect@3.7.0: resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} engines: {node: '>= 0.10.0'} @@ -17929,11 +18972,11 @@ packages: peerDependencies: webpack: ^5.1.0 - core-js-compat@3.45.0: - resolution: {integrity: sha512-gRoVMBawZg0OnxaVv3zpqLLxaHmsubEGyTnqdpI/CEBvX4JadI1dMSHxagThprYRtSVbuQxvi6iUatdPxohHpA==} + core-js-compat@3.45.1: + resolution: {integrity: sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==} - core-js-pure@3.45.0: - resolution: {integrity: sha512-OtwjqcDpY2X/eIIg1ol/n0y/X8A9foliaNt1dSK0gV3J2/zw+89FcNG3mPK+N8YWts4ZFUPxnrAzsxs/lf8yDA==} + core-js-pure@3.45.1: + resolution: {integrity: sha512-OHnWFKgTUshEU8MK+lOs1H8kC8GkTi9Z1tvNkxrCcw9wl3MJIO7q2ld77wjWn4/xuGrVu2X+nME1iIIPBSdyEQ==} core-js@2.6.12: resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} @@ -17957,8 +19000,8 @@ packages: core-js@3.44.0: resolution: {integrity: sha512-aFCtd4l6GvAXwVEh3XbbVqJGHDJt0OZRa+5ePGx3LLwi12WfexqQxcsohb2wgsa/92xtl19Hd66G/L+TaAxDMw==} - core-js@3.45.0: - resolution: {integrity: sha512-c2KZL9lP4DjkN3hk/an4pWn5b5ZefhRJnAc42n6LJ19kSnbeRbdQZE5dSeE2LBol1OwJD3X1BQvFTAsa8ReeDA==} + core-js@3.45.1: + resolution: {integrity: sha512-L4NPsJlCfZsPeXukyzHFlg/i7IIVwHSItR0wg0FLNqYClJ4MQYTYLbC7EkjKYRLZF2iof2MUgN0EGy7MdQFChg==} core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} @@ -18020,6 +19063,12 @@ packages: create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + critters@0.0.16: + resolution: {integrity: sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A==} + + critters@0.0.20: + resolution: {integrity: sha512-CImNRorKOl5d8TWcnAz5n5izQ6HFsvz29k327/ELy6UFcmbiZNOsinaKvzv16WZR0P6etfSWYzE47C4/56B3Uw==} + cron-parser@4.9.0: resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} engines: {node: '>=12.0.0'} @@ -18044,6 +19093,9 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + crypto-browserify@3.12.1: resolution: {integrity: sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==} engines: {node: '>= 0.10'} @@ -18082,8 +19134,8 @@ packages: peerDependencies: postcss: ^8.0.9 - css-declaration-sorter@7.2.0: - resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==} + css-declaration-sorter@7.3.0: + resolution: {integrity: sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.0.9 @@ -18116,6 +19168,12 @@ packages: webpack: optional: true + css-loader@6.7.3: + resolution: {integrity: sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + css-loader@6.8.1: resolution: {integrity: sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==} engines: {node: '>= 12.13.0'} @@ -18239,8 +19297,8 @@ packages: cssdb@7.11.2: resolution: {integrity: sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==} - cssdb@8.3.1: - resolution: {integrity: sha512-XnDRQMXucLueX92yDe0LPKupXetWoFOgawr4O4X41l5TltgK2NVbJJVDnnOywDYfW1sTJ28AcXGKOqdRKwCcmQ==} + cssdb@8.4.0: + resolution: {integrity: sha512-lyATYGyvXwQ8h55WeQeEHXhI+47rl52pXSYkFK/ZrCbAJSgVIaPFjYc3RM8TpRHKk7W3wsAZImmLps+P5VyN9g==} cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} @@ -18310,6 +19368,10 @@ packages: resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} + cssstyle@3.0.0: + resolution: {integrity: sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==} + engines: {node: '>=14'} + cssstyle@4.6.0: resolution: {integrity: sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==} engines: {node: '>=18'} @@ -18397,6 +19459,10 @@ packages: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} + data-urls@4.0.0: + resolution: {integrity: sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==} + engines: {node: '>=14'} + data-urls@5.0.0: resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} engines: {node: '>=18'} @@ -18424,8 +19490,8 @@ packages: dateformat@3.0.3: resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==} - dayjs@1.11.13: - resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + dayjs@1.11.18: + resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==} dayjs@1.11.6: resolution: {integrity: sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==} @@ -18452,6 +19518,15 @@ packages: supports-color: optional: true + debug@4.3.2: + resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -18470,8 +19545,8 @@ packages: supports-color: optional: true - debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -18515,8 +19590,8 @@ packages: babel-plugin-macros: optional: true - dedent@1.6.0: - resolution: {integrity: sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==} + dedent@1.7.0: + resolution: {integrity: sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==} peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: @@ -18603,6 +19678,10 @@ packages: resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} engines: {node: '>=0.10.0'} + del@4.1.1: + resolution: {integrity: sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==} + engines: {node: '>=6'} + del@6.1.1: resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} engines: {node: '>=10'} @@ -18622,6 +19701,10 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} + dependency-graph@0.11.0: + resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} + engines: {node: '>= 0.6.0'} + deprecation@2.3.1: resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} @@ -18632,6 +19715,9 @@ packages: des.js@1.1.0: resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} + destroy@1.0.4: + resolution: {integrity: sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==} + destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -18645,8 +19731,8 @@ packages: engines: {node: '>=0.10'} hasBin: true - detect-libc@2.0.4: - resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} + detect-libc@2.1.0: + resolution: {integrity: sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==} engines: {node: '>=8'} detect-newline@3.1.0: @@ -18666,6 +19752,11 @@ packages: engines: {node: '>= 4.0.0'} hasBin: true + dev-ip@1.0.1: + resolution: {integrity: sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==} + engines: {node: '>= 0.8.0'} + hasBin: true + didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -18769,6 +19860,9 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} + domino@2.1.6: + resolution: {integrity: sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ==} + domutils@1.7.0: resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} @@ -18821,10 +19915,18 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + easy-extender@2.3.4: + resolution: {integrity: sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==} + engines: {node: '>= 4.0.0'} + easy-stack@1.0.1: resolution: {integrity: sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==} engines: {node: '>=6.0.0'} + eazy-logger@4.1.0: + resolution: {integrity: sha512-+mn7lRm+Zf1UT/YaH8WXtpU6PIV2iOjzP6jgKoiaq/VNrjYKp+OHZGe2znaLgDeFkw8cL9ffuaUm+nNnzcYyGw==} + engines: {node: '>= 0.8.0'} + ecc-jsbn@0.1.2: resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} @@ -18861,8 +19963,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.202: - resolution: {integrity: sha512-NxbYjRmiHcHXV1Ws3fWUW+SLb62isauajk45LUJ/HgIOkUA7jLZu/X2Iif+X9FBNK8QkF9Zb4Q2mcwXCcY30mg==} + electron-to-chromium@1.5.222: + resolution: {integrity: sha512-gA7psSwSwQRE60CEoLz6JBCQPIxNeuzB2nL8vE03GK/OHxlvykbLyeiumQy1iH5C2f3YbRAZpGCMT12a/9ih9w==} elliptic@6.6.1: resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} @@ -18879,8 +19981,8 @@ packages: resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} engines: {node: '>=10'} - emoji-regex@10.4.0: - resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + emoji-regex@10.5.0: + resolution: {integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==} emoji-regex@7.0.3: resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} @@ -18915,6 +20017,9 @@ packages: endent@2.1.0: resolution: {integrity: sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==} + engine.io-client@6.6.3: + resolution: {integrity: sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==} + engine.io-parser@5.2.3: resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} engines: {node: '>=10.0.0'} @@ -18975,8 +20080,8 @@ packages: resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} hasBin: true - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} @@ -19006,6 +20111,9 @@ packages: resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} engines: {node: '>= 0.4'} + es-module-lexer@0.9.3: + resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} + es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} @@ -19051,6 +20159,11 @@ packages: peerDependencies: esbuild: '>=0.12 <1' + esbuild-wasm@0.17.8: + resolution: {integrity: sha512-zCmpxv95E0FuCmvdw1K836UHnj4EdiQnFfjTby35y3LAjRPtXMj3sbHDRHjbD8Mqg5lTwq3knacr/1qIFU51CQ==} + engines: {node: '>=12'} + hasBin: true + esbuild@0.16.17: resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==} engines: {node: '>=12'} @@ -19066,6 +20179,11 @@ packages: engines: {node: '>=12'} hasBin: true + esbuild@0.17.8: + resolution: {integrity: sha512-g24ybC3fWhZddZK6R3uD2iF/RIPnRpwJAqLov6ouX3hMbY4+tKolP0VMF3zuIYCaXun+yHwS5IPQ91N2BT191g==} + engines: {node: '>=12'} + hasBin: true + esbuild@0.18.20: resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} @@ -19081,13 +20199,13 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.25.5: - resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} + esbuild@0.25.10: + resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==} engines: {node: '>=18'} hasBin: true - esbuild@0.25.9: - resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==} + esbuild@0.25.5: + resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} engines: {node: '>=18'} hasBin: true @@ -19370,6 +20488,12 @@ packages: eslint: ^7.0.0 || ^8.0.0 webpack: ^5.0.0 + eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + eslint@8.57.1: resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -19469,6 +20593,9 @@ packages: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} + eventemitter-asyncresource@1.0.0: + resolution: {integrity: sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==} + eventemitter2@0.4.14: resolution: {integrity: sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==} @@ -19572,6 +20699,10 @@ packages: extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + external-remotes-plugin@1.0.0: resolution: {integrity: sha512-19cfGfzmPMXkRNpyqOHgndNB07vjk1G1V7IuyixBw8Z1QTc/IOhINy9TbWzDRPTmj64e3STTI1MJE0gI58p7YA==} peerDependencies: @@ -19617,8 +20748,8 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-uri@3.0.6: - resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} fast-url-parser@1.1.3: resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} @@ -19713,6 +20844,10 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + finalhandler@1.1.0: + resolution: {integrity: sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==} + engines: {node: '>= 0.8'} + finalhandler@1.1.2: resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} engines: {node: '>= 0.8'} @@ -19930,10 +21065,13 @@ packages: resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} engines: {node: '>=14.14'} - fs-extra@11.3.1: - resolution: {integrity: sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==} + fs-extra@11.3.2: + resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} engines: {node: '>=14.14'} + fs-extra@3.0.1: + resolution: {integrity: sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==} + fs-extra@8.1.0: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} @@ -19990,6 +21128,11 @@ packages: engines: {node: '>=10'} deprecated: This package is no longer supported. + gauge@4.0.4: + resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. + generic-names@4.0.0: resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} @@ -20001,8 +21144,8 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.3.0: - resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} engines: {node: '>=18'} get-func-name@2.0.2: @@ -20110,6 +21253,12 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} + glob-to-regex.js@1.0.1: + resolution: {integrity: sha512-CG/iEvgQqfzoVsMUbxSJcwbG2JwyZ3naEqPkeltwl0BSS8Bp83k3xlGms+0QdWFUAwV+uvo80wNswKF6FWEkKg==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} @@ -20190,6 +21339,10 @@ packages: resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} engines: {node: '>=18'} + globby@6.1.0: + resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==} + engines: {node: '>=0.10.0'} + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -20213,6 +21366,11 @@ packages: resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + guess-parser@0.4.22: + resolution: {integrity: sha512-KcUWZ5ACGaBM69SbqwVIuWGoSAgD+9iJnchR9j/IarVI1jHVeXv+bUXBIMeqVMSKt3zrn0Dgf9UpcOEpPBLbSg==} + peerDependencies: + typescript: '>=3.7.5' + gunzip-maybe@1.4.2: resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} hasBin: true @@ -20308,6 +21466,12 @@ packages: hast-util-whitespace@2.0.1: resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} + hdr-histogram-js@2.0.3: + resolution: {integrity: sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==} + + hdr-histogram-percentiles-obj@3.0.0: + resolution: {integrity: sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==} + he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true @@ -20447,6 +21611,9 @@ packages: htmlparser2@6.1.0: resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} + htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + htmlparser2@9.0.0: resolution: {integrity: sha512-uxbSI98wmFT/G4P2zXx4OVx04qWUmyFPrD2/CNepa2Zo3GPNaCaaxElDgwUrwYWkK1nr9fft0Ya8dws8coDLLQ==} @@ -20544,6 +21711,9 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + husky@8.0.3: resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} engines: {node: '>=14'} @@ -20579,6 +21749,10 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + iconv-lite@0.7.0: + resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} + engines: {node: '>=0.10.0'} + icss-utils@5.1.0: resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} @@ -20618,6 +21792,10 @@ packages: immer@9.0.21: resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} + immutable@3.8.2: + resolution: {integrity: sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==} + engines: {node: '>=0.10.0'} + immutable@4.3.7: resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} @@ -20646,6 +21824,9 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + infer-owner@1.0.4: + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} + inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -20663,6 +21844,10 @@ packages: resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} engines: {node: '>=10'} + ini@3.0.1: + resolution: {integrity: sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + ini@4.1.3: resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -20677,6 +21862,10 @@ packages: inline-style-parser@0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + inquirer@8.2.4: + resolution: {integrity: sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==} + engines: {node: '>=12.0.0'} + inquirer@8.2.7: resolution: {integrity: sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==} engines: {node: '>=12.0.0'} @@ -20728,8 +21917,8 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + is-arrayish@0.3.4: + resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} is-async-function@2.1.1: resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} @@ -20847,8 +22036,8 @@ packages: resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} engines: {node: '>=12'} - is-fullwidth-code-point@5.0.0: - resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + is-fullwidth-code-point@5.1.0: + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} engines: {node: '>=18'} is-generator-fn@2.1.0: @@ -20908,10 +22097,13 @@ packages: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} - is-network-error@1.1.0: - resolution: {integrity: sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==} + is-network-error@1.3.0: + resolution: {integrity: sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==} engines: {node: '>=16'} + is-number-like@1.0.8: + resolution: {integrity: sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==} + is-number-object@1.1.1: resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} @@ -20936,6 +22128,14 @@ packages: resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} engines: {node: '>=6'} + is-path-in-cwd@2.1.0: + resolution: {integrity: sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==} + engines: {node: '>=6'} + + is-path-inside@2.1.0: + resolution: {integrity: sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==} + engines: {node: '>=6'} + is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} @@ -21058,6 +22258,10 @@ packages: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} + is-wsl@1.1.0: + resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==} + engines: {node: '>=4'} + is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} @@ -21136,8 +22340,8 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} - istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + istanbul-reports@3.2.0: + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} iterator.prototype@1.1.5: @@ -21521,6 +22725,24 @@ packages: canvas: optional: true + jsdom@21.1.0: + resolution: {integrity: sha512-m0lzlP7qOtthD918nenK3hdItSd2I+V3W9IrBcB36sqDwG+KnUs66IF5GY7laGWUnlM9vTsD0W1QwSEBYWWcJg==} + engines: {node: '>=14'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + + jsdom@22.1.0: + resolution: {integrity: sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==} + engines: {node: '>=16'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + jsdom@24.1.0: resolution: {integrity: sha512-6gpM7pRXCwIOKxX47cgOyvyQDN/Eh0f1MeKySBV2xGdKtqJBLj8P25eY3EVCWo2mglDDzozR2r2MW4T+JiNUZA==} engines: {node: '>=18'} @@ -21530,6 +22752,11 @@ packages: canvas: optional: true + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} @@ -21590,6 +22817,9 @@ packages: jsonc-parser@3.2.0: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + jsonfile@3.0.1: + resolution: {integrity: sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==} + jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} @@ -21666,6 +22896,9 @@ packages: just-diff@6.0.2: resolution: {integrity: sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==} + karma-source-map-support@1.4.0: + resolution: {integrity: sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==} + keygrip@1.1.0: resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} engines: {node: '>= 0.6'} @@ -21842,6 +23075,9 @@ packages: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} + limiter@1.1.5: + resolution: {integrity: sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==} + line-diff@2.1.1: resolution: {integrity: sha512-vswdynAI5AMPJacOo2o+JJ4caDJbnY2NEqms4MhMW0NJbjh3skP/brpVTAgBxrg55NRZ2Vtw88ef18hnagIpYQ==} @@ -21908,6 +23144,10 @@ packages: resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} engines: {node: '>=8.9.0'} + loader-utils@3.2.1: + resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} + engines: {node: '>= 12.13.0'} + loader-utils@3.3.1: resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} engines: {node: '>= 12.13.0'} @@ -21916,10 +23156,15 @@ packages: resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} engines: {node: '>=14'} - local-pkg@1.1.1: - resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} + local-pkg@1.1.2: + resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} engines: {node: '>=14'} + localtunnel@2.0.2: + resolution: {integrity: sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==} + engines: {node: '>=8.3.0'} + hasBin: true + locate-character@3.0.0: resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} @@ -21971,6 +23216,9 @@ packages: lodash.invokemap@4.6.0: resolution: {integrity: sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w==} + lodash.isfinite@3.3.2: + resolution: {integrity: sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==} + lodash.ismatch@4.4.0: resolution: {integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==} @@ -22057,8 +23305,8 @@ packages: loupe@2.3.7: resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} - loupe@3.2.0: - resolution: {integrity: sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw==} + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} lower-case@1.1.4: resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} @@ -22083,8 +23331,8 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} - luxon@3.7.1: - resolution: {integrity: sha512-RkRWjA926cTvz5rAb1BqyWkKbbjzCGchDUIKMCUvNi17j6f6j8uHGDV82Aqcqtzd+icoYpELmG3ksgGiFNNcNg==} + luxon@3.7.2: + resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==} engines: {node: '>=12'} lz-string@1.5.0: @@ -22094,9 +23342,20 @@ packages: magic-string@0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + magic-string@0.27.0: + resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} + engines: {node: '>=12'} + + magic-string@0.29.0: + resolution: {integrity: sha512-WcfidHrDjMY+eLjlU+8OvwREqHwpgCeKVBUpQ3OhYYuvfaYCUgcbuBzappNzZvg/v8onU3oQj+BYpkOJe9Iw4Q==} + engines: {node: '>=12'} + magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magic-string@0.30.19: + resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} + make-dir@1.3.0: resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==} engines: {node: '>=4'} @@ -22116,6 +23375,14 @@ packages: make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + make-fetch-happen@10.2.1: + resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + make-fetch-happen@11.1.1: + resolution: {integrity: sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + make-fetch-happen@13.0.1: resolution: {integrity: sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==} engines: {node: ^16.14.0 || >=18.0.0} @@ -22165,6 +23432,9 @@ packages: md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + md5@2.3.0: + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + mdast-util-definitions@5.1.2: resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} @@ -22221,8 +23491,8 @@ packages: resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} engines: {node: '>= 4.0.0'} - memfs@4.36.0: - resolution: {integrity: sha512-mfBfzGUdoEw5AZwG8E965ej3BbvW2F9LxEWj4uLxF6BEh1dO2N9eS3AGu9S6vfenuQYrVjsbUOOZK7y3vz4vyQ==} + memfs@4.42.0: + resolution: {integrity: sha512-RG+4HMGyIVp6UWDWbFmZ38yKrSzblPnfJu0PyPt0hw52KW4PPlPp+HdV4qZBG0hLDuYVnf8wfQT4NymKXnlQjA==} engines: {node: '>= 4.0.0'} memoizerific@1.11.3: @@ -22375,6 +23645,14 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mime-types@3.0.1: + resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} + engines: {node: '>= 0.6'} + + mime@1.4.1: + resolution: {integrity: sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==} + hasBin: true + mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} @@ -22409,6 +23687,12 @@ packages: peerDependencies: webpack: ^5.0.0 + mini-css-extract-plugin@2.7.2: + resolution: {integrity: sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + mini-css-extract-plugin@2.7.6: resolution: {integrity: sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==} engines: {node: '>= 12.13.0'} @@ -22473,6 +23757,10 @@ packages: resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==} engines: {node: '>=16 || 14 >=14.17'} + minipass-fetch@2.1.2: + resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + minipass-fetch@3.0.5: resolution: {integrity: sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -22481,6 +23769,9 @@ packages: resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} engines: {node: '>= 8'} + minipass-json-stream@1.0.2: + resolution: {integrity: sha512-myxeeTm57lYs8pH2nxPzmEEg8DGIgW+9mv6D4JZD2pa81I/OBjeU7PtICXV6c9eRGTA5JMDsuIPUZRCyBMYNhg==} + minipass-pipeline@1.2.4: resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} engines: {node: '>=8'} @@ -22509,6 +23800,9 @@ packages: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} + mitt@1.2.0: + resolution: {integrity: sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==} + mixin-deep@1.3.2: resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} engines: {node: '>=0.10.0'} @@ -22537,8 +23831,8 @@ packages: mlly@1.6.1: resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} - mlly@1.7.4: - resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + mlly@1.8.0: + resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} mocha@10.6.0: resolution: {integrity: sha512-hxjt4+EEB0SA0ZDygSS015t65lJw/I2yRCS3Ae+SJ5FrbzrXgfYwJr96f0OvIXdj7h4lv/vLCrH3rkiuizFSvw==} @@ -22691,6 +23985,10 @@ packages: peerDependencies: next: ^8.1.1-canary.54 || ^9.0.0 || ^10.0.0-0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 + nice-napi@1.0.2: + resolution: {integrity: sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==} + os: ['!win32'] + nice-try@1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} @@ -22703,6 +24001,9 @@ packages: node-abort-controller@3.1.1: resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + node-addon-api@3.2.1: + resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} + node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} @@ -22749,6 +24050,11 @@ packages: engines: {node: ^16.14.0 || >=18.0.0} hasBin: true + node-gyp@9.4.1: + resolution: {integrity: sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==} + engines: {node: ^12.13 || ^14.13 || >=16} + hasBin: true + node-html-parser@6.1.13: resolution: {integrity: sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==} @@ -22758,8 +24064,8 @@ packages: node-machine-id@1.1.12: resolution: {integrity: sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==} - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + node-releases@2.0.21: + resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==} node-schedule@2.1.1: resolution: {integrity: sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==} @@ -22770,6 +24076,11 @@ packages: engines: {node: '>=6'} hasBin: true + nopt@6.0.0: + resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + hasBin: true + nopt@7.2.1: resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -22834,10 +24145,18 @@ packages: resolution: {integrity: sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==} engines: {node: ^16.14.0 || >=18.0.0} + npm-packlist@7.0.4: + resolution: {integrity: sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + npm-packlist@8.0.2: resolution: {integrity: sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + npm-pick-manifest@8.0.1: + resolution: {integrity: sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + npm-pick-manifest@8.0.2: resolution: {integrity: sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -22846,6 +24165,10 @@ packages: resolution: {integrity: sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==} engines: {node: ^16.14.0 || >=18.0.0} + npm-registry-fetch@14.0.5: + resolution: {integrity: sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + npm-registry-fetch@17.1.0: resolution: {integrity: sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==} engines: {node: ^16.14.0 || >=18.0.0} @@ -22866,6 +24189,11 @@ packages: resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} deprecated: This package is no longer supported. + npmlog@6.0.2: + resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. + nssocket@0.6.0: resolution: {integrity: sha512-a9GSOIql5IqgWJR3F/JXG4KpJTA3Z53Cj0MeMvGpglytB1nxE4PdFNC0jINe27CS7cGivoynwc054EzCcT3M3w==} engines: {node: '>= 0.10.x'} @@ -22876,8 +24204,8 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - nwsapi@2.2.21: - resolution: {integrity: sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==} + nwsapi@2.2.22: + resolution: {integrity: sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==} nx@17.2.8: resolution: {integrity: sha512-rM5zXbuXLEuqQqcjVjClyvHwRJwt+NVImR2A6KFNG40Z60HP6X12wAxxeLHF5kXXTDRU0PFhf/yACibrpbPrAw==} @@ -22930,6 +24258,10 @@ packages: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} + object-path@0.11.8: + resolution: {integrity: sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==} + engines: {node: '>= 10.12.0'} + object-visit@1.0.1: resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} engines: {node: '>=0.10.0'} @@ -23017,6 +24349,10 @@ packages: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} + open@8.4.1: + resolution: {integrity: sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg==} + engines: {node: '>=12'} + open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} @@ -23025,6 +24361,13 @@ packages: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} hasBin: true + openurl@1.1.1: + resolution: {integrity: sha512-d/gTkTb1i1GKz5k3XE3XFV/PxQ1k45zDqGP2OA7YhgsaLoqm6qRvARAZOFer1fcXritWlGBRCu/UgeS4HAnXAA==} + + opn@5.3.0: + resolution: {integrity: sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==} + engines: {node: '>=4'} + optimism@0.18.1: resolution: {integrity: sha512-mLXNwWPa9dgFyDqkNi54sjDyNJ9/fTI6WGBLgnXku1vdKY/jovHfZT5r+aiVeFFLOz+foPNOm5YJ4mqgld2GBQ==} @@ -23050,6 +24393,10 @@ packages: os-browserify@0.3.0: resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + ospath@1.2.2: resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==} @@ -23108,6 +24455,10 @@ packages: resolution: {integrity: sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==} engines: {node: '>=8'} + p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + p-map@4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} @@ -23151,6 +24502,11 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + pacote@15.1.0: + resolution: {integrity: sha512-FFcjtIl+BQNfeliSm7MZz5cpdohvUV1yjGnqgVM4UnVF7JslRY0ImXAygdaCDV0jjUADEWu4y5xsDV8brtrTLg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + pacote@18.0.6: resolution: {integrity: sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==} engines: {node: ^16.14.0 || >=18.0.0} @@ -23209,9 +24565,15 @@ packages: parse-url@8.1.0: resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==} + parse5-html-rewriting-stream@7.0.0: + resolution: {integrity: sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==} + parse5-htmlparser2-tree-adapter@6.0.1: resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + parse5-sax-parser@7.0.0: + resolution: {integrity: sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==} + parse5@4.0.0: resolution: {integrity: sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==} @@ -23380,10 +24742,24 @@ packages: resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} engines: {node: '>=10'} + pinkie-promise@2.0.1: + resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} + engines: {node: '>=0.10.0'} + + pinkie@2.0.4: + resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} + engines: {node: '>=0.10.0'} + pirates@4.0.7: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} + piscina@3.2.0: + resolution: {integrity: sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==} + + piscina@4.0.0: + resolution: {integrity: sha512-641nAmJS4k4iqpNUqfggqUBUMmlw0ZoM5VZKdQkV2e970Inn3Tk9kroCc1wpsYLD07vCwpys5iY0d3xI/9WkTg==} + pkg-dir@3.0.0: resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} engines: {node: '>=6'} @@ -23403,8 +24779,8 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - pkg-types@2.2.0: - resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==} + pkg-types@2.3.0: + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} pkg-up@3.1.0: resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} @@ -23418,13 +24794,13 @@ packages: resolution: {integrity: sha512-8xCNE/aT/EXKenuMDZ+xTVwkT8gsoHN2z/Q29l80u0ppGEXVvsKRzNMbtKhg8LS8k1tJLAHHylf6p4VFmP6XUQ==} engines: {node: '>= 0.4.0'} - playwright-core@1.54.2: - resolution: {integrity: sha512-n5r4HFbMmWsB4twG7tJLDN9gmBUeSPcsBZiWSE4DnYz9mJMAFqr2ID7+eGC9kpEnxExJ1epttwR59LEWCk8mtA==} + playwright-core@1.55.0: + resolution: {integrity: sha512-GvZs4vU3U5ro2nZpeiwyb0zuFaqb9sUiAJuyrWpcGouD8y9/HLgGbNRjIph7zU9D3hnPaisMl9zG9CgFi/biIg==} engines: {node: '>=18'} hasBin: true - playwright@1.54.2: - resolution: {integrity: sha512-Hu/BMoA1NAdRUuulyvQC0pEqZ4vQbGfn8f7wPXcnqQmM+zct9UliKxsIkLNmz/ku7LElUNqmaiv1TG/aL5ACsw==} + playwright@1.55.0: + resolution: {integrity: sha512-sdCWStblvV1YU909Xqx0DhOjPZE4/5lJsIS84IfN9dAZfcl/CIZ5O8l3o0j7hPMjDvqoTF8ZUcc+i/GL5erstA==} engines: {node: '>=18'} hasBin: true @@ -23439,10 +24815,14 @@ packages: popper.js@1.16.1-lts: resolution: {integrity: sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA==} - portfinder@1.0.37: - resolution: {integrity: sha512-yuGIEjDAYnnOex9ddMnKZEMFE0CcGo6zbfzDklkmT1m5z734ss6JMzN9rNB3+RR7iS+F10D4/BVIaXOyh8PQKw==} + portfinder@1.0.38: + resolution: {integrity: sha512-rEwq/ZHlJIKw++XtLAO8PPuOQA/zaPJOZJ37BVuN97nLpMJeuDVLVGRwbFoBgLudgdTMP2hdRJP++H+8QOA3vg==} engines: {node: '>= 10.12'} + portscanner@2.2.0: + resolution: {integrity: sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==} + engines: {node: '>=0.4', npm: '>=1.0.0'} + posix-character-classes@0.1.1: resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} engines: {node: '>=0.10.0'} @@ -23742,8 +25122,8 @@ packages: peerDependencies: postcss: ^8.0.0 - postcss-js@4.0.1: - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + postcss-js@4.1.0: + resolution: {integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.4.21 @@ -23809,6 +25189,13 @@ packages: postcss: ^7.0.0 || ^8.0.1 webpack: ^5.0.0 + postcss-loader@7.0.2: + resolution: {integrity: sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg==} + engines: {node: '>= 14.15.0'} + peerDependencies: + postcss: ^7.0.0 || ^8.0.1 + webpack: ^5.0.0 + postcss-loader@7.3.3: resolution: {integrity: sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==} engines: {node: '>= 14.15.0'} @@ -24407,6 +25794,10 @@ packages: prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + properties@1.2.1: + resolution: {integrity: sha512-qYNxyMj1JeW54i/EWEFsM1cVwxJbtgPp8+0Wg9XjNaK6VE/c4oRi6PNu5p7w1mNXEIQIjV5Wwn8v8Gz82/QzdQ==} + engines: {node: '>=0.10'} + property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} @@ -24515,8 +25906,8 @@ packages: resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} engines: {node: '>=0.6'} - quansync@0.2.10: - resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} querystring-es3@0.2.1: resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} @@ -24865,6 +26256,11 @@ packages: resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + read-package-json@6.0.4: + resolution: {integrity: sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + deprecated: This package is no longer supported. Please use @npmcli/package-json instead. + read-pkg-up@3.0.0: resolution: {integrity: sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==} engines: {node: '>=4'} @@ -24957,12 +26353,15 @@ packages: redux@5.0.1: resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==} + reflect-metadata@0.1.14: + resolution: {integrity: sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==} + reflect.getprototypeof@1.0.10: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} - regenerate-unicode-properties@10.2.0: - resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + regenerate-unicode-properties@10.2.2: + resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==} engines: {node: '>=4'} regenerate@1.4.2: @@ -24989,8 +26388,8 @@ packages: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} - regexpu-core@6.2.0: - resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} + regexpu-core@6.3.1: + resolution: {integrity: sha512-DzcswPr252wEr7Qz8AyAVbfyBDKLoYp6eRA1We2Fa9qirRFSdtkP5sHr3yglDKy2BbA0fd2T+j/CUSKes3FeVQ==} engines: {node: '>=4'} registry-auth-token@3.3.2: @@ -25123,6 +26522,10 @@ packages: rework-visit: optional: true + resolve-url-loader@5.0.0: + resolution: {integrity: sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==} + engines: {node: '>=12'} + resolve-url@0.2.1: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} deprecated: https://github.com/lydell/resolve-url#deprecated @@ -25139,6 +26542,10 @@ packages: resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} engines: {node: '>=10'} + resolve@1.22.1: + resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + hasBin: true + resolve@1.22.10: resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} engines: {node: '>= 0.4'} @@ -25152,6 +26559,10 @@ packages: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true + resp-modifier@6.0.2: + resolution: {integrity: sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==} + engines: {node: '>= 0.8.0'} + restore-cursor@2.0.0: resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==} engines: {node: '>=4'} @@ -25229,11 +26640,14 @@ packages: engines: {node: '>=10.0.0'} hasBin: true - rollup@4.46.2: - resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==} + rollup@4.51.0: + resolution: {integrity: sha512-7cR0XWrdp/UAj2HMY/Y4QQEUjidn3l2AY1wSeZoFjMbD8aOMPoV9wgTFYbrJpPzzvejDEini1h3CiUP8wLzxQA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rrweb-cssom@0.6.0: + resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} + rrweb-cssom@0.7.1: resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} @@ -25267,8 +26681,8 @@ packages: '@rspack/core': optional: true - run-applescript@7.0.0: - resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} run-async@2.4.1: @@ -25278,6 +26692,16 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + rx@4.1.0: + resolution: {integrity: sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==} + + rxjs@6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} @@ -25319,112 +26743,112 @@ packages: sanitize.css@13.0.0: resolution: {integrity: sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==} - sass-embedded-all-unknown@1.90.0: - resolution: {integrity: sha512-/n7jTQvI+hftDDrHzK19G4pxfDzOhtjuQO1K54ui1pT2S0sWfWDjCYUbQgtWQ6FO7g5qWS0hgmrWdc7fmS3rgA==} + sass-embedded-all-unknown@1.92.1: + resolution: {integrity: sha512-5t6/YZf+vhO3OY/49h8RCL6Cwo78luva0M+TnTM9gu9ASffRXAuOVLNKciSXa3loptyemDDS6IU5/dVH5w0KmA==} cpu: ['!arm', '!arm64', '!riscv64', '!x64'] - sass-embedded-android-arm64@1.90.0: - resolution: {integrity: sha512-bkTlewzWksa6Sj4Zs1CWiutnvUbsO3xuYh2QBRknXsOtuMlfTPoXnwhCnyE4lSvUxw2qxSbv+NdQev9qMfsBgA==} + sass-embedded-android-arm64@1.92.1: + resolution: {integrity: sha512-Q+UruGb7yKawHagVmVDRRKsnc4mJZvWMBnuRCu2coJo2FofyqBmXohVGXbxko97sYceA9TJTrUEx3WVKQUNCbQ==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [android] - sass-embedded-android-arm@1.90.0: - resolution: {integrity: sha512-usF6kVJQWa1CMgPH1nCT1y8KEmAT2fzB00dDIPBYHq8U5VZLCihi2bJRP5U9NlcwP1TlKGKCjwsbIdSjDKfecg==} + sass-embedded-android-arm@1.92.1: + resolution: {integrity: sha512-4EjpVVzuksERdgAd4BqeSXFnWtWN3DSRyEIUPJ7BhcS9sfDh2Gf6miI2kNTvIQLJ2XIJynDDcEQ8a1U9KwKUTQ==} engines: {node: '>=14.0.0'} cpu: [arm] os: [android] - sass-embedded-android-riscv64@1.90.0: - resolution: {integrity: sha512-bpqCIOaX+0Lou/BNJ4iJIKbWbVaYXFdg26C3gG6gxxKZRzp/6OYCxHrIQDwhKz6YC8Q5rwNPMpfDVYbWPcgroA==} + sass-embedded-android-riscv64@1.92.1: + resolution: {integrity: sha512-nCY5btLlX7W7Jc6cCL6D2Yklpiu540EJ2G08YVGu12DrAMCBzqM347CSRf2ojp1H8jyhvmLkaFwnrJWzh+6S+w==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [android] - sass-embedded-android-x64@1.90.0: - resolution: {integrity: sha512-GNxVKnCMd/p2icZ+Q4mhvNk19NrLXq1C4guiqjrycHYQLEnxRkjbW1QXYiL+XyDn4e+Bcq0knzG0I9pMuNZxkg==} + sass-embedded-android-x64@1.92.1: + resolution: {integrity: sha512-qYWR3bftJ77aLYwYDFuzDI4dcwVVixxqQxlIQWNGkHRCexj614qGSSHemr18C2eVj3mjXAQxTQxU68U7pkGPAA==} engines: {node: '>=14.0.0'} cpu: [x64] os: [android] - sass-embedded-darwin-arm64@1.90.0: - resolution: {integrity: sha512-qr4KBMJfBA+lzXiWnP00qzpLzHQzGd1OSK3VHcUFjZ8l7VOYf2R7Tc3fcTLhpaNPMJtTK0jrk8rFqBvsiZExnA==} + sass-embedded-darwin-arm64@1.92.1: + resolution: {integrity: sha512-g2yQ3txjMYLKMjL2cW1xRO9nnV3ijf95NbX/QShtV6tiVUETZNWDsRMDEwBNGYY6PTE/UZerjJL1R/2xpQg6WA==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [darwin] - sass-embedded-darwin-x64@1.90.0: - resolution: {integrity: sha512-z2nr1nNqtWDLVRwTbHtL7zriK90U7O/Gb15UaCSMYeAz9Y+wog5s/sDEKm0+GsVdzzkaCaMZRWGN4jTilnUwmQ==} + sass-embedded-darwin-x64@1.92.1: + resolution: {integrity: sha512-eH+fgxLQhTEPjZPCgPAVuX5e514Qp/4DMAUMtlNShv4cr4TD5qOp1XlsPYR/b7uE7p2cKFkUpUn/bHNqJ2ay4A==} engines: {node: '>=14.0.0'} cpu: [x64] os: [darwin] - sass-embedded-linux-arm64@1.90.0: - resolution: {integrity: sha512-SPMcGZuP71Fj8btCGtlBnv8h8DAbJn8EQfLzXs9oo6NGFFLVjNGiFpqGfgtUV6DLWCuaRyEFeViO7wZow/vKGQ==} + sass-embedded-linux-arm64@1.92.1: + resolution: {integrity: sha512-dNmlpGeZkry1BofhAdGFBXrpM69y9LlYuNnncf+HfsOOUtj8j0q1RwS+zb5asknhKFUOAG8GCGRY1df7Rwu35g==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] - sass-embedded-linux-arm@1.90.0: - resolution: {integrity: sha512-FeBxI5Q2HvM3CCadcEcQgvWbDPVs2YEF0PZ87fbAVTCG8dV+iNnQreSz7GRJroknpvbRhm5t2gedvcgmTnPb2Q==} + sass-embedded-linux-arm@1.92.1: + resolution: {integrity: sha512-cT3w8yoQTqrtZvWLJeutEGmawITDTY4J6oSVQjeDcPnnoPt0gOFxem8YMznraACXvahw/2+KJDH33BTNgiPo0A==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] - sass-embedded-linux-musl-arm64@1.90.0: - resolution: {integrity: sha512-xLH7+PFq763MoEm3vI7hQk5E+nStiLWbijHEYW/tEtCbcQIphgzSkDItEezxXew3dU4EJ1jqrBUySPdoXFLqWA==} + sass-embedded-linux-musl-arm64@1.92.1: + resolution: {integrity: sha512-TfiEBkCyNzVoOhjHXUT+vZ6+p0ueDbvRw6f4jHdkvljZzXdXMby4wh7BU1odl69rgRTkSvYKhgbErRLDR/F7pQ==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] - sass-embedded-linux-musl-arm@1.90.0: - resolution: {integrity: sha512-EB2z0fUXdUdvSoddf4DzdZQkD/xyreD72gwAi8YScgUvR4HMXI7bLcK/n78Rft6OnqvV8090hjC8FsLDo3x5xQ==} + sass-embedded-linux-musl-arm@1.92.1: + resolution: {integrity: sha512-nPBos6lI31ef2zQhqTZhFOU7ar4impJbLIax0XsqS269YsiCwjhk11VmUloJTpFlJuKMiVXNo7dPx+katxhD/Q==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] - sass-embedded-linux-musl-riscv64@1.90.0: - resolution: {integrity: sha512-L21UkOgnSrD+ERF+jo1IWneGv40t0ap9+3cI+wZWYhQS5MkxponhT9QaNU57JEDJwB9mOl01LVw14opz4SN+VQ==} + sass-embedded-linux-musl-riscv64@1.92.1: + resolution: {integrity: sha512-R+RcJA4EYpJDE9JM1GgPYgZo7x94FlxZ6jPodOQkEaZ1S9kvXVCuP5X/0PXRPhu08KJOfeMsAElzfdAjUf7KJg==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] - sass-embedded-linux-musl-x64@1.90.0: - resolution: {integrity: sha512-NeAycQlsdhFdnIeSmRmScYUyCd+uE+x15NLFunbF8M0PgCKurrUhaxgGKSuBbaK56FpxarKOHCqcOrWbemIGzQ==} + sass-embedded-linux-musl-x64@1.92.1: + resolution: {integrity: sha512-/HolYRGXJjx8nLw6oj5ZrkR7PFM7X/5kE4MYZaFMpDIPIcw3bqB2fUXLo/MYlRLsw7gBAT6hJAMBrNdKuTphfw==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] - sass-embedded-linux-riscv64@1.90.0: - resolution: {integrity: sha512-lJopaQhW8S+kaQ61vMqq3c+bOurcf9RdZf2EmzQYpc2y1vT5cWfRNrRkbAgO/23IQxsk/fq3UIUnsjnyQmi6MA==} + sass-embedded-linux-riscv64@1.92.1: + resolution: {integrity: sha512-b9bxe0CMsbSsLx3nrR0cq8xpIkoAC6X36o4DGMITF3m2v3KsojC7ru9X0Gz+zUFr6rwpq/0lTNzFLNu6sPNo3w==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] - sass-embedded-linux-x64@1.90.0: - resolution: {integrity: sha512-Cc061gBfMPwH9rN7neQaH36cvOQC+dFMSGIeX5qUOhrEL4Ng51iqBV6aI4RIB1jCFGth6eDydVRN1VdV9qom8A==} + sass-embedded-linux-x64@1.92.1: + resolution: {integrity: sha512-xuiK5Jp5NldW4bvlC7AuX1Wf7o0gLZ3md/hNg+bkTvxtCDgnUHtfdo8Q+xWP11bD9QX31xXFWpmUB8UDLi6XQQ==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] - sass-embedded-unknown-all@1.90.0: - resolution: {integrity: sha512-DBGzHVCJDqtjTHZFohush9YTxd4ZxhIygIRTNRXnA0359woF9Z8AS7/YxfzwkqrTX5durSJa6ZamGFYVLoRphQ==} + sass-embedded-unknown-all@1.92.1: + resolution: {integrity: sha512-AT9oXvtNY4N+Nd0wvoWqq9A5HjdH/X3aUH4boQUtXyaJ/9DUwnQmBpP5Gtn028ZS8exOGBdobmmWAuigv0k/OA==} os: ['!android', '!darwin', '!linux', '!win32'] - sass-embedded-win32-arm64@1.90.0: - resolution: {integrity: sha512-c3/vL/CATnaW3x/6kcNbCROEOUU7zvJpIURp7M9664GJj08/gLPRWKNruw0OkAPQ3C5TTQz7+/fQWEpRA6qmvA==} + sass-embedded-win32-arm64@1.92.1: + resolution: {integrity: sha512-KvmpQjY9yTBMtTYz4WBqetlv9bGaDW1aStcu7MSTbH7YiSybX/9fnxlCAEQv1WlIidQhcJAiyk0Eae+LGK7cIQ==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [win32] - sass-embedded-win32-x64@1.90.0: - resolution: {integrity: sha512-PFwdW7AYtCkwi3NfWFeexvIZEJ0nuShp8Bjjc3px756+18yYwBWa78F4TGdIQmJfpYKBhgkVjFOctwq+NCHntA==} + sass-embedded-win32-x64@1.92.1: + resolution: {integrity: sha512-B6Nz/GbH7Vkpb2TkQHsGcczWM5t+70VWopWF1x5V5yxLpA8ZzVQ7NTKKi+jDoVY2Efu6ZyzgT9n5KgG2kWliXA==} engines: {node: '>=14.0.0'} cpu: [x64] os: [win32] - sass-embedded@1.90.0: - resolution: {integrity: sha512-XP1EltyLLfuU5FsGVjSz8PcT925oA3rDnJTWOEBHR42k62ZEbKTcZ4gVlFwKi0Ggzi5E8v1K2BplD8ELHwusYg==} + sass-embedded@1.92.1: + resolution: {integrity: sha512-28YwLnF5atAhogt3E4hXzz/NB9dwKffyw08a7DEasLh94P7+aELkG3ENSHYCWB9QFN14hYNLfwr9ozUsPDhcDQ==} engines: {node: '>=16.0.0'} hasBin: true @@ -25447,6 +26871,25 @@ packages: sass-embedded: optional: true + sass-loader@13.2.0: + resolution: {integrity: sha512-JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg==} + engines: {node: '>= 14.15.0'} + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + sass: ^1.3.0 + sass-embedded: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + sass-embedded: + optional: true + sass-loader@13.3.2: resolution: {integrity: sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==} engines: {node: '>= 14.15.0'} @@ -25487,8 +26930,13 @@ packages: webpack: optional: true - sass@1.90.0: - resolution: {integrity: sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==} + sass@1.58.1: + resolution: {integrity: sha512-bnINi6nPXbP1XNRaranMFEBZWUfdW/AF16Ql5+ypRxfTvCRTTKrLsMIakyDcayUt2t/RZotmL4kgJwNH5xO+bg==} + engines: {node: '>=12.0.0'} + hasBin: true + + sass@1.92.1: + resolution: {integrity: sha512-ffmsdbwqb3XeyR8jJR6KelIXARM9bFQe8A6Q3W4Klmwy5Ckd5gz7jgUNHo4UOqutU5Sk1DtKLbpDP0nLCg1xqQ==} engines: {node: '>=14.0.0'} hasBin: true @@ -25570,6 +27018,10 @@ packages: semverhook@1.2.0: resolution: {integrity: sha512-S31ZtrvnP3m94QxsXccqjm/erIvWYcsN/ENc6Xlk6eBtSPgtFeeBPnMFro2uTmw9ST4S55uZAv094bvA1AlTcA==} + send@0.16.2: + resolution: {integrity: sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==} + engines: {node: '>= 0.8.0'} + send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} @@ -25594,6 +27046,10 @@ packages: resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} engines: {node: '>= 0.8.0'} + serve-static@1.13.2: + resolution: {integrity: sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==} + engines: {node: '>= 0.8.0'} + serve-static@1.15.0: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} @@ -25607,6 +27063,9 @@ packages: engines: {node: '>= 14'} hasBin: true + server-destroy@1.0.1: + resolution: {integrity: sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==} + set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} @@ -25709,12 +27168,17 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + sigstore@1.9.0: + resolution: {integrity: sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + sigstore@2.3.1: resolution: {integrity: sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==} engines: {node: ^16.14.0 || >=18.0.0} - simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + simple-swizzle@0.2.4: + resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} sirv@2.0.4: resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} @@ -25751,8 +27215,8 @@ packages: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} - slice-ansi@7.1.0: - resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + slice-ansi@7.1.2: + resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} engines: {node: '>=18'} smart-buffer@4.2.0: @@ -25777,6 +27241,10 @@ packages: socket.io-adapter@2.5.5: resolution: {integrity: sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==} + socket.io-client@4.8.1: + resolution: {integrity: sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==} + engines: {node: '>=10.0.0'} + socket.io-parser@4.2.4: resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} engines: {node: '>=10.0.0'} @@ -25788,6 +27256,10 @@ packages: sockjs@0.3.24: resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} + socks-proxy-agent@7.0.0: + resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} + engines: {node: '>= 10'} + socks-proxy-agent@8.0.5: resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} @@ -25816,6 +27288,12 @@ packages: peerDependencies: webpack: ^5.0.0 + source-map-loader@4.0.1: + resolution: {integrity: sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==} + engines: {node: '>= 14.15.0'} + peerDependencies: + webpack: ^5.72.1 + source-map-resolve@0.5.3: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} deprecated: See https://github.com/lydell/source-map-resolve#deprecated @@ -25916,6 +27394,10 @@ packages: resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} engines: {node: '>= 8'} + ssri@9.0.1: + resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + stable-hash@0.0.5: resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} @@ -25943,6 +27425,14 @@ packages: resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} engines: {node: '>=0.10.0'} + statuses@1.3.1: + resolution: {integrity: sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==} + engines: {node: '>= 0.6'} + + statuses@1.4.0: + resolution: {integrity: sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==} + engines: {node: '>= 0.6'} + statuses@1.5.0: resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} engines: {node: '>= 0.6'} @@ -25982,6 +27472,11 @@ packages: stream-slice@0.1.2: resolution: {integrity: sha512-QzQxpoacatkreL6jsxnVb7X5R/pGw9OUv2qWTYWnmLpg4NdN31snPy/f3TdQE1ZUXaThRvj1Zw4/OGg0ZkaLMA==} + stream-throttle@0.1.3: + resolution: {integrity: sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==} + engines: {node: '>= 0.10.0'} + hasBin: true + streamroller@3.1.5: resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==} engines: {node: '>=8.0'} @@ -26082,8 +27577,8 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} engines: {node: '>=12'} strip-bom@3.0.0: @@ -26122,8 +27617,8 @@ packages: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} - strip-indent@4.0.0: - resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} + strip-indent@4.1.0: + resolution: {integrity: sha512-OA95x+JPmL7kc7zCu+e+TeYxEiaIyndRx0OrBcK2QPPH09oAndr2ALvymxWA+Lx1PYYvFUm4O63pRkdJAaW96w==} engines: {node: '>=12'} strip-json-comments@2.0.1: @@ -26342,12 +27837,12 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} - tapable@2.2.2: - resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} + tapable@2.2.3: + resolution: {integrity: sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==} engines: {node: '>=6'} - tar-fs@2.1.3: - resolution: {integrity: sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==} + tar-fs@2.1.4: + resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} @@ -26408,6 +27903,11 @@ packages: uglify-js: optional: true + terser@5.16.3: + resolution: {integrity: sha512-v8wWLaS/xt3nE9dgKEWhNUFP6q4kngO5B8eYFUuebsu7Dw/UNAnpUod6UHo04jSSkv8TzKHjZDSd7EXdDQAl8Q==} + engines: {node: '>=10'} + hasBin: true + terser@5.31.1: resolution: {integrity: sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==} engines: {node: '>=10'} @@ -26418,8 +27918,8 @@ packages: engines: {node: '>=10'} hasBin: true - terser@5.43.1: - resolution: {integrity: sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==} + terser@5.44.0: + resolution: {integrity: sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==} engines: {node: '>=10'} hasBin: true @@ -26505,8 +28005,8 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyglobby@0.2.14: - resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} tinypool@0.8.4: @@ -26532,6 +28032,10 @@ packages: resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} hasBin: true + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + tmp@0.2.5: resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} engines: {node: '>=14.14'} @@ -26595,6 +28099,10 @@ packages: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} + tr46@4.1.1: + resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==} + engines: {node: '>=14'} + tr46@5.1.1: resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} engines: {node: '>=18'} @@ -26602,8 +28110,8 @@ packages: traverse-chain@0.1.0: resolution: {integrity: sha512-up6Yvai4PYKhpNp5PkYtx50m3KbwQrqDwbuZP/ItyL64YEWHAvH6Md83LFLV/GRSk/BoUVwwgUzX6SOQSbsfAg==} - tree-dump@1.0.3: - resolution: {integrity: sha512-il+Cv80yVHFBwokQSfd4bldvr1Md951DpgAGfmhydt04L+YzHgubm2tQ7zueWDcGENKHq0ZvGFR/hjvNXilHEg==} + tree-dump@1.1.0: + resolution: {integrity: sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' @@ -26765,9 +28273,20 @@ packages: tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + tslib@2.5.0: + resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tslint@6.1.3: + resolution: {integrity: sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==} + engines: {node: '>=4.8.0'} + deprecated: TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information. + hasBin: true + peerDependencies: + typescript: '>=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev' + tsscmp@1.0.6: resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} engines: {node: '>=0.6.x'} @@ -26791,6 +28310,11 @@ packages: typescript: optional: true + tsutils@2.29.0: + resolution: {integrity: sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==} + peerDependencies: + typescript: '>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev' + tsutils@3.21.0: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} @@ -26800,6 +28324,10 @@ packages: tty-browserify@0.0.1: resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} + tuf-js@1.1.7: + resolution: {integrity: sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + tuf-js@2.2.1: resolution: {integrity: sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==} engines: {node: ^16.14.0 || >=18.0.0} @@ -26926,6 +28454,10 @@ packages: engines: {node: '>=14.17'} hasBin: true + ua-parser-js@1.0.41: + resolution: {integrity: sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug==} + hasBin: true + ufo@1.6.1: resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} @@ -26962,12 +28494,12 @@ packages: resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} engines: {node: '>=4'} - unicode-match-property-value-ecmascript@2.2.0: - resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + unicode-match-property-value-ecmascript@2.2.1: + resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==} engines: {node: '>=4'} - unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + unicode-property-aliases-ecmascript@2.2.0: + resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==} engines: {node: '>=4'} unicorn-magic@0.1.0: @@ -26989,10 +28521,18 @@ packages: resolution: {integrity: sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==} engines: {node: '>= 0.8.0'} + unique-filename@2.0.1: + resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + unique-filename@3.0.0: resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + unique-slug@3.0.0: + resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + unique-slug@4.0.0: resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -27476,6 +29016,12 @@ packages: peerDependencies: webpack: ^4.0.0 || ^5.0.0 + webpack-dev-middleware@6.0.1: + resolution: {integrity: sha512-PZPZ6jFinmqVPJZbisfggDiC+2EeGZ1ZByyMP5sOFJcPPWSexalISz+cvm+j+oYPT7FIJyxT76esjnw9DhE5sw==} + engines: {node: '>= 14.15.0'} + peerDependencies: + webpack: ^5.0.0 + webpack-dev-middleware@6.1.1: resolution: {integrity: sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==} engines: {node: '>= 14.15.0'} @@ -27494,8 +29040,8 @@ packages: webpack: optional: true - webpack-dev-middleware@7.4.2: - resolution: {integrity: sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==} + webpack-dev-middleware@7.4.3: + resolution: {integrity: sha512-5kA/PzpZzDz5mNOkcNLmU1UdjGeSSxd7rt1akWpI70jMNHLASiBPRaQZn0hgyhvhawfIwSnnLfDABIxL3ueyFg==} engines: {node: '>= 18.12.0'} peerDependencies: webpack: ^5.0.0 @@ -27503,6 +29049,17 @@ packages: webpack: optional: true + webpack-dev-server@4.11.1: + resolution: {integrity: sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==} + engines: {node: '>= 12.13.0'} + hasBin: true + peerDependencies: + webpack: ^4.37.0 || ^5.0.0 + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + webpack-dev-server@4.15.2: resolution: {integrity: sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==} engines: {node: '>= 12.13.0'} @@ -27567,6 +29124,10 @@ packages: resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==} engines: {node: '>=10.0.0'} + webpack-merge@5.8.0: + resolution: {integrity: sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==} + engines: {node: '>=10.0.0'} + webpack-merge@6.0.1: resolution: {integrity: sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==} engines: {node: '>=18.0.0'} @@ -27616,6 +29177,16 @@ packages: webpack-cli: optional: true + webpack@5.76.1: + resolution: {integrity: sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + webpack@5.88.2: resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==} engines: {node: '>=10.13.0'} @@ -27669,6 +29240,10 @@ packages: resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} engines: {node: '>=12'} + whatwg-url@12.0.1: + resolution: {integrity: sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==} + engines: {node: '>=14'} + whatwg-url@14.2.0: resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} engines: {node: '>=18'} @@ -27853,8 +29428,8 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} - wrap-ansi@9.0.0: - resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} wrappy@1.0.2: @@ -27946,6 +29521,10 @@ packages: resolution: {integrity: sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==} engines: {node: '>=4'} + xhr2@0.2.1: + resolution: {integrity: sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==} + engines: {node: '>= 6'} + xml-name-validator@3.0.0: resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} @@ -27960,6 +29539,10 @@ packages: xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + xmlhttprequest-ssl@2.1.2: + resolution: {integrity: sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==} + engines: {node: '>=0.4.0'} + xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -28021,6 +29604,14 @@ packages: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} + yargs@17.1.1: + resolution: {integrity: sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==} + engines: {node: '>=12'} + + yargs@17.6.2: + resolution: {integrity: sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==} + engines: {node: '>=12'} + yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} @@ -28069,6 +29660,9 @@ packages: zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + zone.js@0.14.10: + resolution: {integrity: sha512-YGAhaO7J5ywOXW6InXNlLmfU194F8lVgu7bRntUF3TiG8Y3nBK0x1UJJuHUP/e8IyihkjCYqhCScpSwnlaSRkQ==} + zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -28086,10 +29680,394 @@ snapshots: '@alloc/quick-lru@5.2.0': {} + '@ampproject/remapping@2.2.0': + dependencies: + '@jridgewell/gen-mapping': 0.1.1 + '@jridgewell/trace-mapping': 0.3.31 + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 + + '@angular-devkit/architect@0.1502.10(chokidar@3.5.3)': + dependencies: + '@angular-devkit/core': 15.2.10(chokidar@3.5.3) + rxjs: 6.6.7 + transitivePeerDependencies: + - chokidar + + '@angular-devkit/architect@0.1502.10(chokidar@3.6.0)': + dependencies: + '@angular-devkit/core': 15.2.10(chokidar@3.6.0) + rxjs: 6.6.7 + transitivePeerDependencies: + - chokidar + + '@angular-devkit/architect@0.1602.16(chokidar@3.6.0)': + dependencies: + '@angular-devkit/core': 16.2.16(chokidar@3.6.0) + rxjs: 7.8.1 + transitivePeerDependencies: + - chokidar + + '@angular-devkit/build-angular@15.2.10(@angular/compiler-cli@15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3))(@angular/platform-server@15.2.10(6676711f88f9c40c18b0e2629d70e5ad))(@swc/core@1.11.31(@swc/helpers@0.5.17))(html-webpack-plugin@5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0))(sass-embedded@1.92.1)(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(typescript@5.5.3)))(typescript@5.5.3)(webpack-cli@5.1.4)': + dependencies: + '@ampproject/remapping': 2.2.0 + '@angular-devkit/architect': 0.1502.10(chokidar@3.5.3) + '@angular-devkit/build-webpack': 0.1502.10(chokidar@3.5.3)(webpack-dev-server@4.11.1(webpack-cli@5.1.4)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)))(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + '@angular-devkit/core': 15.2.10(chokidar@3.5.3) + '@angular/compiler-cli': 15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3) + '@babel/core': 7.20.12 + '@babel/generator': 7.20.14 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.20.12) + '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.20.12) + '@babel/plugin-transform-runtime': 7.19.6(@babel/core@7.20.12) + '@babel/preset-env': 7.20.2(@babel/core@7.20.12) + '@babel/runtime': 7.20.13 + '@babel/template': 7.20.7 + '@discoveryjs/json-ext': 0.5.7 + '@ngtools/webpack': 15.2.10(@angular/compiler-cli@15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3))(typescript@5.5.3)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + ansi-colors: 4.1.3 + autoprefixer: 10.4.13(postcss@8.4.31) + babel-loader: 9.1.2(@babel/core@7.20.12)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + babel-plugin-istanbul: 6.1.1 + browserslist: 4.21.5 + cacache: 17.0.4 + chokidar: 3.5.3 + copy-webpack-plugin: 11.0.0(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + critters: 0.0.16 + css-loader: 6.7.3(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + esbuild-wasm: 0.17.8 + glob: 8.1.0 + https-proxy-agent: 5.0.1 + inquirer: 8.2.4 + jsonc-parser: 3.2.0 + karma-source-map-support: 1.4.0 + less: 4.1.3 + less-loader: 11.1.0(less@4.1.3)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + license-webpack-plugin: 4.0.2(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + loader-utils: 3.2.1 + magic-string: 0.29.0 + mini-css-extract-plugin: 2.7.2(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + open: 8.4.1 + ora: 5.4.1 + parse5-html-rewriting-stream: 7.0.0 + piscina: 3.2.0 + postcss: 8.4.31 + postcss-loader: 7.0.2(postcss@8.4.31)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + resolve-url-loader: 5.0.0 + rxjs: 6.6.7 + sass: 1.58.1 + sass-loader: 13.2.0(sass-embedded@1.92.1)(sass@1.58.1)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + semver: 7.5.3 + source-map-loader: 4.0.1(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + source-map-support: 0.5.21 + terser: 5.16.3 + text-table: 0.2.0 + tree-kill: 1.2.2 + tslib: 2.5.0 + typescript: 5.5.3 + webpack: 5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4) + webpack-dev-middleware: 6.0.1(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + webpack-dev-server: 4.11.1(webpack-cli@5.1.4)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + webpack-merge: 5.8.0 + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0))(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + optionalDependencies: + '@angular/platform-server': 15.2.10(6676711f88f9c40c18b0e2629d70e5ad) + esbuild: 0.17.8 + tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(typescript@5.5.3)) + transitivePeerDependencies: + - '@swc/core' + - bluebird + - bufferutil + - debug + - fibers + - html-webpack-plugin + - node-sass + - sass-embedded + - supports-color + - uglify-js + - utf-8-validate + - webpack-cli + + '@angular-devkit/build-angular@15.2.10(@angular/compiler-cli@15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3))(@angular/platform-server@15.2.10(6676711f88f9c40c18b0e2629d70e5ad))(@swc/core@1.11.31(@swc/helpers@0.5.17))(html-webpack-plugin@5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0))(sass-embedded@1.92.1)(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)))(typescript@5.5.3)(webpack-cli@5.1.4)': + dependencies: + '@ampproject/remapping': 2.2.0 + '@angular-devkit/architect': 0.1502.10(chokidar@3.5.3) + '@angular-devkit/build-webpack': 0.1502.10(chokidar@3.5.3)(webpack-dev-server@4.11.1(webpack-cli@5.1.4)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)))(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + '@angular-devkit/core': 15.2.10(chokidar@3.5.3) + '@angular/compiler-cli': 15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3) + '@babel/core': 7.20.12 + '@babel/generator': 7.20.14 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.20.12) + '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.20.12) + '@babel/plugin-transform-runtime': 7.19.6(@babel/core@7.20.12) + '@babel/preset-env': 7.20.2(@babel/core@7.20.12) + '@babel/runtime': 7.20.13 + '@babel/template': 7.20.7 + '@discoveryjs/json-ext': 0.5.7 + '@ngtools/webpack': 15.2.10(@angular/compiler-cli@15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3))(typescript@5.5.3)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + ansi-colors: 4.1.3 + autoprefixer: 10.4.13(postcss@8.4.31) + babel-loader: 9.1.2(@babel/core@7.20.12)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + babel-plugin-istanbul: 6.1.1 + browserslist: 4.21.5 + cacache: 17.0.4 + chokidar: 3.5.3 + copy-webpack-plugin: 11.0.0(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + critters: 0.0.16 + css-loader: 6.7.3(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + esbuild-wasm: 0.17.8 + glob: 8.1.0 + https-proxy-agent: 5.0.1 + inquirer: 8.2.4 + jsonc-parser: 3.2.0 + karma-source-map-support: 1.4.0 + less: 4.1.3 + less-loader: 11.1.0(less@4.1.3)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + license-webpack-plugin: 4.0.2(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + loader-utils: 3.2.1 + magic-string: 0.29.0 + mini-css-extract-plugin: 2.7.2(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + open: 8.4.1 + ora: 5.4.1 + parse5-html-rewriting-stream: 7.0.0 + piscina: 3.2.0 + postcss: 8.4.31 + postcss-loader: 7.0.2(postcss@8.4.31)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + resolve-url-loader: 5.0.0 + rxjs: 6.6.7 + sass: 1.58.1 + sass-loader: 13.2.0(sass-embedded@1.92.1)(sass@1.58.1)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + semver: 7.5.3 + source-map-loader: 4.0.1(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + source-map-support: 0.5.21 + terser: 5.16.3 + text-table: 0.2.0 + tree-kill: 1.2.2 + tslib: 2.5.0 + typescript: 5.5.3 + webpack: 5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4) + webpack-dev-middleware: 6.0.1(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + webpack-dev-server: 4.11.1(webpack-cli@5.1.4)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + webpack-merge: 5.8.0 + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0))(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + optionalDependencies: + '@angular/platform-server': 15.2.10(6676711f88f9c40c18b0e2629d70e5ad) + esbuild: 0.17.8 + tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)) + transitivePeerDependencies: + - '@swc/core' + - bluebird + - bufferutil + - debug + - fibers + - html-webpack-plugin + - node-sass + - sass-embedded + - supports-color + - uglify-js + - utf-8-validate + - webpack-cli + + '@angular-devkit/build-webpack@0.1502.10(chokidar@3.5.3)(webpack-dev-server@4.11.1(webpack-cli@5.1.4)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)))(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4))': + dependencies: + '@angular-devkit/architect': 0.1502.10(chokidar@3.5.3) + rxjs: 6.6.7 + webpack: 5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4) + webpack-dev-server: 4.11.1(webpack-cli@5.1.4)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + transitivePeerDependencies: + - chokidar + + '@angular-devkit/core@15.2.10(chokidar@3.5.3)': + dependencies: + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + jsonc-parser: 3.2.0 + rxjs: 6.6.7 + source-map: 0.7.4 + optionalDependencies: + chokidar: 3.5.3 + + '@angular-devkit/core@15.2.10(chokidar@3.6.0)': + dependencies: + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + jsonc-parser: 3.2.0 + rxjs: 6.6.7 + source-map: 0.7.4 + optionalDependencies: + chokidar: 3.6.0 + + '@angular-devkit/core@16.2.16(chokidar@3.6.0)': + dependencies: + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + jsonc-parser: 3.2.0 + picomatch: 2.3.1 + rxjs: 7.8.1 + source-map: 0.7.4 + optionalDependencies: + chokidar: 3.6.0 + + '@angular-devkit/schematics@15.2.10(chokidar@3.5.3)': + dependencies: + '@angular-devkit/core': 15.2.10(chokidar@3.5.3) + jsonc-parser: 3.2.0 + magic-string: 0.29.0 + ora: 5.4.1 + rxjs: 6.6.7 + transitivePeerDependencies: + - chokidar + + '@angular-devkit/schematics@15.2.10(chokidar@3.6.0)': + dependencies: + '@angular-devkit/core': 15.2.10(chokidar@3.6.0) + jsonc-parser: 3.2.0 + magic-string: 0.29.0 + ora: 5.4.1 + rxjs: 6.6.7 + transitivePeerDependencies: + - chokidar + + '@angular/animations@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))': + dependencies: + '@angular/core': 15.2.10(rxjs@7.8.2)(zone.js@0.14.10) + tslib: 2.8.1 + + '@angular/cli@15.2.10(chokidar@3.5.3)': + dependencies: + '@angular-devkit/architect': 0.1502.10(chokidar@3.5.3) + '@angular-devkit/core': 15.2.10(chokidar@3.5.3) + '@angular-devkit/schematics': 15.2.10(chokidar@3.5.3) + '@schematics/angular': 15.2.10(chokidar@3.5.3) + '@yarnpkg/lockfile': 1.1.0 + ansi-colors: 4.1.3 + ini: 3.0.1 + inquirer: 8.2.4 + jsonc-parser: 3.2.0 + npm-package-arg: 10.1.0 + npm-pick-manifest: 8.0.1 + open: 8.4.1 + ora: 5.4.1 + pacote: 15.1.0 + resolve: 1.22.1 + semver: 7.5.3 + symbol-observable: 4.0.0 + yargs: 17.6.2 + transitivePeerDependencies: + - bluebird + - chokidar + - supports-color + + '@angular/cli@15.2.10(chokidar@3.6.0)': + dependencies: + '@angular-devkit/architect': 0.1502.10(chokidar@3.6.0) + '@angular-devkit/core': 15.2.10(chokidar@3.6.0) + '@angular-devkit/schematics': 15.2.10(chokidar@3.6.0) + '@schematics/angular': 15.2.10(chokidar@3.6.0) + '@yarnpkg/lockfile': 1.1.0 + ansi-colors: 4.1.3 + ini: 3.0.1 + inquirer: 8.2.4 + jsonc-parser: 3.2.0 + npm-package-arg: 10.1.0 + npm-pick-manifest: 8.0.1 + open: 8.4.1 + ora: 5.4.1 + pacote: 15.1.0 + resolve: 1.22.1 + semver: 7.5.3 + symbol-observable: 4.0.0 + yargs: 17.6.2 + transitivePeerDependencies: + - bluebird + - chokidar + - supports-color + + '@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2)': + dependencies: + '@angular/core': 15.2.10(rxjs@7.8.2)(zone.js@0.14.10) + rxjs: 7.8.2 + tslib: 2.8.1 + + '@angular/compiler-cli@15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3)': + dependencies: + '@angular/compiler': 15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)) + '@babel/core': 7.19.3 + '@jridgewell/sourcemap-codec': 1.5.5 + chokidar: 3.6.0 + convert-source-map: 1.9.0 + dependency-graph: 0.11.0 + magic-string: 0.27.0 + reflect-metadata: 0.1.14 + semver: 7.6.3 + tslib: 2.8.1 + typescript: 5.5.3 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + + '@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))': + dependencies: + tslib: 2.8.1 + optionalDependencies: + '@angular/core': 15.2.10(rxjs@7.8.2)(zone.js@0.14.10) + + '@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)': + dependencies: + rxjs: 7.8.2 + tslib: 2.8.1 + zone.js: 0.14.10 + + '@angular/forms@15.2.10(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(@angular/platform-browser@15.2.10(@angular/animations@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(rxjs@7.8.2)': + dependencies: + '@angular/common': 15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2) + '@angular/core': 15.2.10(rxjs@7.8.2)(zone.js@0.14.10) + '@angular/platform-browser': 15.2.10(@angular/animations@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)) + rxjs: 7.8.2 + tslib: 2.8.1 + + '@angular/platform-browser-dynamic@15.2.10(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(@angular/platform-browser@15.2.10(@angular/animations@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))': + dependencies: + '@angular/common': 15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2) + '@angular/compiler': 15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)) + '@angular/core': 15.2.10(rxjs@7.8.2)(zone.js@0.14.10) + '@angular/platform-browser': 15.2.10(@angular/animations@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)) + tslib: 2.8.1 + + '@angular/platform-browser@15.2.10(@angular/animations@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))': + dependencies: + '@angular/common': 15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2) + '@angular/core': 15.2.10(rxjs@7.8.2)(zone.js@0.14.10) + tslib: 2.8.1 + optionalDependencies: + '@angular/animations': 15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)) + + '@angular/platform-server@15.2.10(6676711f88f9c40c18b0e2629d70e5ad)': + dependencies: + '@angular/animations': 15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)) + '@angular/common': 15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2) + '@angular/compiler': 15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)) + '@angular/core': 15.2.10(rxjs@7.8.2)(zone.js@0.14.10) + '@angular/platform-browser': 15.2.10(@angular/animations@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)) + '@angular/platform-browser-dynamic': 15.2.10(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(@angular/platform-browser@15.2.10(@angular/animations@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))) + domino: 2.1.6 + tslib: 2.8.1 + xhr2: 0.2.1 + + '@angular/router@15.2.10(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(@angular/platform-browser@15.2.10(@angular/animations@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(rxjs@7.8.2)': + dependencies: + '@angular/common': 15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2) + '@angular/core': 15.2.10(rxjs@7.8.2)(zone.js@0.14.10) + '@angular/platform-browser': 15.2.10(@angular/animations@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)) + rxjs: 7.8.2 + tslib: 2.8.1 '@apideck/better-ajv-errors@0.3.6(ajv@8.17.1)': dependencies: @@ -28098,7 +30076,7 @@ snapshots: jsonpointer: 5.0.1 leven: 3.1.0 - '@apollo/client@3.13.9(@types/react@18.3.10)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@apollo/client@3.14.0(@types/react@18.3.10)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) '@wry/caches': 1.0.1 @@ -28123,15 +30101,17 @@ snapshots: '@asamuzakjp/css-color@3.2.0': dependencies: '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-color-parser': 3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 lru-cache: 10.4.3 + '@assemblyscript/loader@0.10.1': {} + '@babel/cli@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 commander: 6.2.1 convert-source-map: 2.0.0 fs-readdir-recursive: 1.1.0 @@ -28153,7 +30133,47 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.0': {} + '@babel/compat-data@7.28.4': {} + + '@babel/core@7.19.3': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.3 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.19.3) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.4 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + convert-source-map: 1.9.0 + debug: 4.4.3(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/core@7.20.12': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.3 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.20.12) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.4 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + convert-source-map: 1.9.0 + debug: 4.4.3(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color '@babel/core@7.22.17': dependencies: @@ -28162,13 +30182,13 @@ snapshots: '@babel/generator': 7.28.3 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-module-transforms': 7.28.3(@babel/core@7.22.17) - '@babel/helpers': 7.28.3 - '@babel/parser': 7.28.3 + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.4 '@babel/template': 7.27.2 - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 convert-source-map: 1.9.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -28182,81 +30202,112 @@ snapshots: '@babel/generator': 7.28.3 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-module-transforms': 7.28.3(@babel/core@7.24.7) - '@babel/helpers': 7.28.3 - '@babel/parser': 7.28.3 + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.4 '@babel/template': 7.27.2 - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 convert-source-map: 2.0.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/core@7.28.3': + '@babel/core@7.28.4': dependencies: - '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.27.1 '@babel/generator': 7.28.3 '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) - '@babel/helpers': 7.28.3 - '@babel/parser': 7.28.3 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.4 '@babel/template': 7.27.2 - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.28.0(@babel/core@7.24.7)(eslint@8.57.1)': + '@babel/eslint-parser@7.28.4(@babel/core@7.24.7)(eslint@8.57.0)': dependencies: '@babel/core': 7.24.7 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.57.1 + eslint: 8.57.0 eslint-visitor-keys: 2.1.0 semver: 6.3.1 - '@babel/eslint-parser@7.28.0(@babel/core@7.24.7)(eslint@9.6.0)': + '@babel/eslint-parser@7.28.4(@babel/core@7.28.4)(eslint@8.57.0)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.28.4 + '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 + eslint: 8.57.0 + eslint-visitor-keys: 2.1.0 + semver: 6.3.1 + + '@babel/eslint-parser@7.28.4(@babel/core@7.28.4)(eslint@9.6.0)': + dependencies: + '@babel/core': 7.28.4 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 eslint: 9.6.0 eslint-visitor-keys: 2.1.0 semver: 6.3.1 - '@babel/eslint-plugin@7.27.1(@babel/eslint-parser@7.28.0(@babel/core@7.24.7)(eslint@8.57.1))(eslint@8.57.1)': + '@babel/eslint-plugin@7.27.1(@babel/eslint-parser@7.28.4(@babel/core@7.24.7)(eslint@8.57.0))(eslint@8.57.0)': dependencies: - '@babel/eslint-parser': 7.28.0(@babel/core@7.24.7)(eslint@8.57.1) - eslint: 8.57.1 + '@babel/eslint-parser': 7.28.4(@babel/core@7.28.4)(eslint@8.57.0) + eslint: 8.57.0 eslint-rule-composer: 0.3.0 + '@babel/generator@7.20.14': + dependencies: + '@babel/types': 7.28.4 + '@jridgewell/gen-mapping': 0.3.13 + jsesc: 2.5.2 + '@babel/generator@7.28.3': dependencies: - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 + '@babel/helper-annotate-as-pure@7.18.6': + dependencies: + '@babel/types': 7.28.4 + '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.28.0 + '@babel/compat-data': 7.28.4 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.25.2 + browserslist: 4.26.2 lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.20.12) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.28.4 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -28265,7 +30316,7 @@ snapshots: '@babel/helper-optimise-call-expression': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.22.17) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -28278,51 +30329,70 @@ snapshots: '@babel/helper-optimise-call-expression': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.24.7) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.3)': + '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.3) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 semver: 6.3.1 transitivePeerDependencies: - supports-color + '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-annotate-as-pure': 7.27.3 + regexpu-core: 6.3.1 + semver: 6.3.1 + '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 '@babel/helper-annotate-as-pure': 7.27.3 - regexpu-core: 6.2.0 + regexpu-core: 6.3.1 semver: 6.3.1 '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-annotate-as-pure': 7.27.3 - regexpu-core: 6.2.0 + regexpu-core: 6.3.1 semver: 6.3.1 - '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.28.3)': + '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 - regexpu-core: 6.2.0 + regexpu-core: 6.3.1 semver: 6.3.1 + '@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + debug: 4.4.3(supports-color@8.1.1) + lodash.debounce: 4.0.8 + resolve: 1.22.10 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.10 transitivePeerDependencies: @@ -28333,7 +30403,7 @@ snapshots: '@babel/core': 7.22.17 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.10 transitivePeerDependencies: @@ -28344,7 +30414,7 @@ snapshots: '@babel/core': 7.22.17 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.10 transitivePeerDependencies: @@ -28355,43 +30425,65 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.10 transitivePeerDependencies: - supports-color - '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.3)': + '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.10 transitivePeerDependencies: - supports-color + '@babel/helper-environment-visitor@7.24.7': + dependencies: + '@babel/types': 7.28.4 + '@babel/helper-globals@7.28.0': {} '@babel/helper-member-expression-to-functions@7.27.1': dependencies: - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.27.1(supports-color@5.5.0)': dependencies: - '@babel/traverse': 7.28.3(supports-color@5.5.0) - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4(supports-color@5.5.0) + '@babel/types': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.3(@babel/core@7.19.3)': + dependencies: + '@babel/core': 7.19.3 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.3(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -28400,7 +30492,7 @@ snapshots: '@babel/core': 7.22.17 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -28409,31 +30501,40 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.3)': + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@babel/helper-plugin-utils@7.27.1': {} + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-wrap-function': 7.28.3 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.28.3 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -28442,16 +30543,25 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.28.3 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.3)': + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.28.3 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.27.1(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -28460,7 +30570,7 @@ snapshots: '@babel/core': 7.22.17 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -28469,36 +30579,40 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.3)': + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color '@babel/helper-simple-access@7.27.1': dependencies: - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color + '@babel/helper-split-export-declaration@7.18.6': + dependencies: + '@babel/types': 7.28.4 + '@babel/helper-split-export-declaration@7.24.7': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@babel/helper-string-parser@7.27.1': {} @@ -28509,15 +30623,15 @@ snapshots: '@babel/helper-wrap-function@7.28.3': dependencies: '@babel/template': 7.27.2 - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/helpers@7.28.3': + '@babel/helpers@7.28.4': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@babel/highlight@7.25.9': dependencies: @@ -28531,34 +30645,39 @@ snapshots: '@babel/core': 7.24.7 '@babel/register': 7.28.3(@babel/core@7.24.7) commander: 6.2.1 - core-js: 3.45.0 + core-js: 3.45.1 node-environment-flags: 1.0.6 regenerator-runtime: 0.14.1 v8flags: 3.2.0 - '@babel/parser@7.28.3': + '@babel/parser@7.28.4': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.22.17)': @@ -28571,10 +30690,19 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.20.12)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.20.12) + transitivePeerDependencies: + - supports-color '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.22.17)': dependencies: @@ -28594,12 +30722,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.4) transitivePeerDependencies: - supports-color @@ -28607,15 +30735,33 @@ snapshots: dependencies: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.20.12) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.28.3)': + '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.20.12)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.20.12 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color @@ -28635,6 +30781,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.20.12) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.20.12) + transitivePeerDependencies: + - supports-color + '@babel/plugin-proposal-decorators@7.22.15(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -28655,15 +30810,21 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-decorators@7.28.0(@babel/core@7.28.3)': + '@babel/plugin-proposal-decorators@7.28.0(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.28.4) transitivePeerDependencies: - supports-color + '@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.20.12) + '@babel/plugin-proposal-export-default-from@7.22.17(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -28675,10 +30836,22 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-proposal-export-default-from@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-proposal-export-default-from@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.20.12) + + '@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.20.12)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.20.12) '@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.24.7)': dependencies: @@ -28686,27 +30859,69 @@ snapshots: '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.20.12) + + '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.20.12) + '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.20.12) + '@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) + '@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.20.12)': + dependencies: + '@babel/compat-data': 7.28.4 + '@babel/core': 7.20.12 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.20.12) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.20.12) + '@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.24.7)': dependencies: - '@babel/compat-data': 7.28.0 + '@babel/compat-data': 7.28.4 '@babel/core': 7.24.7 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.24.7) + '@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.20.12) + + '@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.20.12) + transitivePeerDependencies: + - supports-color + '@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 @@ -28721,9 +30936,9 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-proposal-partial-application@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-proposal-partial-application@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-proposal-pipeline-operator@7.27.1(@babel/core@7.24.7)': @@ -28732,11 +30947,19 @@ snapshots: '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-pipeline-operator': 7.27.1(@babel/core@7.24.7) - '@babel/plugin-proposal-pipeline-operator@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-proposal-pipeline-operator@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-pipeline-operator': 7.27.1(@babel/core@7.28.4) + + '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.20.12)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.20.12 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-pipeline-operator': 7.27.1(@babel/core@7.28.3) + transitivePeerDependencies: + - supports-color '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.22.17)': dependencies: @@ -28762,9 +30985,19 @@ snapshots: dependencies: '@babel/core': 7.24.7 - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.3)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 + + '@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.20.12) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.20.12) + transitivePeerDependencies: + - supports-color '@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.22.17)': dependencies: @@ -28786,6 +31019,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.20.12) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -28801,6 +31045,11 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -28811,6 +31060,11 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -28831,9 +31085,14 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.20.12)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.17)': @@ -28846,9 +31105,9 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.28.3)': + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-export-default-from@7.27.1(@babel/core@7.22.17)': @@ -28856,6 +31115,11 @@ snapshots: '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -28871,9 +31135,14 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.22.17)': @@ -28886,9 +31155,9 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.22.17)': @@ -28901,9 +31170,9 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.17)': @@ -28916,6 +31185,11 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -28941,9 +31215,14 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.20.12)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.17)': @@ -28956,6 +31235,11 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -28966,6 +31250,11 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -28976,6 +31265,11 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -28986,6 +31280,11 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -28996,6 +31295,11 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -29011,9 +31315,14 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-pipeline-operator@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-syntax-pipeline-operator@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.20.12)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.17)': @@ -29026,6 +31335,11 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -29046,9 +31360,9 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.17)': @@ -29063,10 +31377,15 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.24.7) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.3)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.20.12)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) + '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.22.17)': @@ -29079,9 +31398,9 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.22.17)': @@ -29089,7 +31408,7 @@ snapshots: '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.22.17) - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -29098,16 +31417,34 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.24.7) - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.3)': + '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.3) - '@babel/traverse': 7.28.3 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.20.12) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.20.12) transitivePeerDependencies: - supports-color @@ -29129,15 +31466,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.3) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) transitivePeerDependencies: - supports-color + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -29148,24 +31490,29 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-block-scoping@7.28.4(@babel/core@7.20.12)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-block-scoping@7.28.0(@babel/core@7.22.17)': + '@babel/plugin-transform-block-scoping@7.28.4(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-block-scoping@7.28.0(@babel/core@7.24.7)': + '@babel/plugin-transform-block-scoping@7.28.4(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-block-scoping@7.28.0(@babel/core@7.28.3)': + '@babel/plugin-transform-block-scoping@7.28.4(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.22.17)': @@ -29184,10 +31531,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -29208,15 +31555,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.3)': + '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.28.4(@babel/core@7.20.12)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) + '@babel/core': 7.20.12 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-globals': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.20.12) + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.28.3(@babel/core@7.22.17)': + '@babel/plugin-transform-classes@7.28.4(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 '@babel/helper-annotate-as-pure': 7.27.3 @@ -29224,11 +31583,11 @@ snapshots: '@babel/helper-globals': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.22.17) - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.28.3(@babel/core@7.24.7)': + '@babel/plugin-transform-classes@7.28.4(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-annotate-as-pure': 7.27.3 @@ -29236,22 +31595,28 @@ snapshots: '@babel/helper-globals': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.24.7) - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.28.3(@babel/core@7.28.3)': + '@babel/plugin-transform-classes@7.28.4(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-globals': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.3) - '@babel/traverse': 7.28.3 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/template': 7.27.2 + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -29264,17 +31629,25 @@ snapshots: '@babel/helper-plugin-utils': 7.27.1 '@babel/template': 7.27.2 - '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/template': 7.27.2 + '@babel/plugin-transform-destructuring@7.28.0(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-destructuring@7.28.0(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -29282,18 +31655,24 @@ snapshots: dependencies: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-destructuring@7.28.0(@babel/core@7.28.3)': + '@babel/plugin-transform-destructuring@7.28.0(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.20.12) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -29306,10 +31685,15 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.24.7) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.20.12)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) + '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.22.17)': @@ -29322,15 +31706,15 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.22.17)': @@ -29343,19 +31727,24 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.3)': + '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.3) + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) transitivePeerDependencies: - supports-color + '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -29366,9 +31755,9 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.22.17)': @@ -29381,9 +31770,9 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.24.7)': @@ -29392,6 +31781,14 @@ snapshots: '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.24.7) + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -29408,20 +31805,29 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -29430,16 +31836,16 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -29453,9 +31859,14 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-literals@7.27.1(@babel/core@7.22.17)': @@ -29468,9 +31879,9 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.22.17)': @@ -29483,9 +31894,14 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.20.12)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.22.17)': @@ -29498,10 +31914,18 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.20.12)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.20.12 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.22.17)': dependencies: @@ -29519,10 +31943,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -29536,6 +31960,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.20.12) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -29552,11 +31984,21 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.20.12)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) + '@babel/core': 7.20.12 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -29566,7 +32008,7 @@ snapshots: '@babel/helper-module-transforms': 7.28.3(@babel/core@7.22.17) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -29576,17 +32018,25 @@ snapshots: '@babel/helper-module-transforms': 7.28.3(@babel/core@7.24.7) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.20.12) + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -29606,14 +32056,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.20.12) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -29626,10 +32082,15 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.24.7) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.20.12)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) + '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.22.17)': @@ -29642,9 +32103,9 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.22.17)': @@ -29657,9 +32118,9 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.22.17)': @@ -29672,41 +32133,49 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-object-rest-spread@7.28.0(@babel/core@7.22.17)': + '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.22.17) '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.22.17) - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-object-rest-spread@7.28.0(@babel/core@7.24.7)': + '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.24.7) '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.24.7) - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-object-rest-spread@7.28.0(@babel/core@7.28.3)': + '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.3) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.3) - '@babel/traverse': 7.28.3 + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.4) + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.20.12) transitivePeerDependencies: - supports-color @@ -29726,11 +32195,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.3) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) transitivePeerDependencies: - supports-color @@ -29744,10 +32213,18 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.20.12)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.22.17)': dependencies: @@ -29765,14 +32242,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -29783,9 +32265,9 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.3)': + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.22.17)': @@ -29804,10 +32286,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -29830,15 +32312,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -29849,9 +32336,9 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-react-constant-elements@7.27.1(@babel/core@7.24.7)': @@ -29864,9 +32351,9 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.28.3)': + '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.24.7)': @@ -29876,10 +32363,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.4) transitivePeerDependencies: - supports-color @@ -29888,9 +32375,9 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.24.7)': @@ -29898,9 +32385,9 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.24.7)': @@ -29910,18 +32397,18 @@ snapshots: '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.24.7) - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.3) - '@babel/types': 7.28.2 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color @@ -29931,31 +32418,41 @@ snapshots: '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regenerator@7.28.3(@babel/core@7.22.17)': + '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regenerator@7.28.3(@babel/core@7.24.7)': + '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regenerator@7.28.3(@babel/core@7.28.3)': + '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.22.17)': @@ -29968,11 +32465,23 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-runtime@7.19.6(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.20.12) + babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.20.12) + babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.20.12) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-runtime@7.22.15(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -29997,18 +32506,23 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-runtime@7.24.7(@babel/core@7.28.3)': + '@babel/plugin-transform-runtime@7.24.7(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.3) - babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.28.3) - babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.3) + babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.4) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.28.4) + babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.4) semver: 6.3.1 transitivePeerDependencies: - supports-color + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -30019,10 +32533,18 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.20.12)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-spread@7.27.1(@babel/core@7.22.17)': dependencies: @@ -30040,14 +32562,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -30058,9 +32585,14 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.20.12)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.22.17)': @@ -30073,9 +32605,14 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.22.17)': @@ -30088,9 +32625,9 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.22.17)': @@ -30115,17 +32652,22 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.3)': + '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) transitivePeerDependencies: - supports-color + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -30136,9 +32678,9 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.22.17)': @@ -30153,10 +32695,16 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.24.7) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.22.17)': @@ -30171,10 +32719,10 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.24.7) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.22.17)': @@ -30189,10 +32737,10 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.24.7) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 '@babel/polyfill@7.12.1': @@ -30200,9 +32748,90 @@ snapshots: core-js: 2.6.12 regenerator-runtime: 0.13.11 + '@babel/preset-env@7.20.2(@babel/core@7.20.12)': + dependencies: + '@babel/compat-data': 7.28.4 + '@babel/core': 7.20.12 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.20.12) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.20.12) + '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.20.12) + '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.20.12) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.20.12) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.20.12) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.20.12) + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.20.12) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.20.12) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.20.12) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.20.12) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.20.12) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.20.12) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.20.12) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.20.12) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.20.12) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.20.12) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.20.12) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.20.12) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.20.12) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.20.12) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-block-scoping': 7.28.4(@babel/core@7.20.12) + '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.20.12) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.20.12) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.20.12) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.20.12) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.20.12) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.20.12) + '@babel/preset-modules': 0.1.6(@babel/core@7.20.12) + '@babel/types': 7.28.4 + babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.20.12) + babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.20.12) + babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.20.12) + core-js-compat: 3.45.1 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/preset-env@7.22.15(@babel/core@7.22.17)': dependencies: - '@babel/compat-data': 7.28.0 + '@babel/compat-data': 7.28.4 '@babel/core': 7.22.17 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 @@ -30232,10 +32861,10 @@ snapshots: '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.22.17) '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.22.17) '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.22.17) - '@babel/plugin-transform-block-scoping': 7.28.0(@babel/core@7.22.17) + '@babel/plugin-transform-block-scoping': 7.28.4(@babel/core@7.22.17) '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.22.17) '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.22.17) - '@babel/plugin-transform-classes': 7.28.3(@babel/core@7.22.17) + '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.22.17) '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.22.17) '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.22.17) '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.22.17) @@ -30257,7 +32886,7 @@ snapshots: '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.22.17) '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.22.17) '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.22.17) - '@babel/plugin-transform-object-rest-spread': 7.28.0(@babel/core@7.22.17) + '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.22.17) '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.22.17) '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.22.17) '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.22.17) @@ -30265,7 +32894,7 @@ snapshots: '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.22.17) '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.22.17) '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.22.17) - '@babel/plugin-transform-regenerator': 7.28.3(@babel/core@7.22.17) + '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.22.17) '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.22.17) '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.22.17) '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.22.17) @@ -30277,18 +32906,18 @@ snapshots: '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.22.17) '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.22.17) '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.22.17) - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.22.17) babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.22.17) babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.22.17) - core-js-compat: 3.45.0 + core-js-compat: 3.45.1 semver: 6.3.1 transitivePeerDependencies: - supports-color '@babel/preset-env@7.24.7(@babel/core@7.24.7)': dependencies: - '@babel/compat-data': 7.28.0 + '@babel/compat-data': 7.28.4 '@babel/core': 7.24.7 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 @@ -30320,10 +32949,10 @@ snapshots: '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.24.7) '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.24.7) '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.24.7) - '@babel/plugin-transform-block-scoping': 7.28.0(@babel/core@7.24.7) + '@babel/plugin-transform-block-scoping': 7.28.4(@babel/core@7.24.7) '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.24.7) '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.24.7) - '@babel/plugin-transform-classes': 7.28.3(@babel/core@7.24.7) + '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.24.7) '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.24.7) '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.24.7) '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.24.7) @@ -30345,7 +32974,7 @@ snapshots: '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.24.7) '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.24.7) '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.24.7) - '@babel/plugin-transform-object-rest-spread': 7.28.0(@babel/core@7.24.7) + '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.24.7) '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.24.7) '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.24.7) '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.24.7) @@ -30353,7 +32982,7 @@ snapshots: '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.24.7) '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.24.7) '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.24.7) - '@babel/plugin-transform-regenerator': 7.28.3(@babel/core@7.24.7) + '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.24.7) '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.24.7) '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.24.7) '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.24.7) @@ -30368,106 +32997,115 @@ snapshots: babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.24.7) babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.24.7) babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.24.7) - core-js-compat: 3.45.0 + core-js-compat: 3.45.1 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-env@7.28.3(@babel/core@7.28.3)': + '@babel/preset-env@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/compat-data': 7.28.0 - '@babel/core': 7.28.3 + '@babel/compat-data': 7.28.4 + '@babel/core': 7.28.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.28.3) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.3) - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.3) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.3) - '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-block-scoping': 7.28.0(@babel/core@7.28.3) - '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.28.3) - '@babel/plugin-transform-classes': 7.28.3(@babel/core@7.28.3) - '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.3) - '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.28.3) - '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-object-rest-spread': 7.28.0(@babel/core@7.28.3) - '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.3) - '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-regenerator': 7.28.3(@babel/core@7.28.3) - '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.3) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.3) - babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.3) - babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.3) - babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.3) - core-js-compat: 3.45.0 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.28.4) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.4) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.4) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-block-scoping': 7.28.4(@babel/core@7.28.4) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.28.4) + '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.28.4) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.28.4) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.4) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.28.4) + '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.4) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.4) + babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.4) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.4) + babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.4) + core-js-compat: 3.45.1 semver: 6.3.1 transitivePeerDependencies: - supports-color + '@babel/preset-modules@0.1.6(@babel/core@7.20.12)': + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.20.12) + '@babel/types': 7.28.4 + esutils: 2.0.3 + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.27.1 - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 esutils: 2.0.3 '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 esutils: 2.0.3 - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.3)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 esutils: 2.0.3 '@babel/preset-react@7.24.7(@babel/core@7.24.7)': @@ -30482,15 +33120,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/preset-react@7.24.7(@babel/core@7.28.3)': + '@babel/preset-react@7.24.7(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.28.3) - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.28.4) transitivePeerDependencies: - supports-color @@ -30516,25 +33154,25 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.24.7(@babel/core@7.28.3)': + '@babel/preset-typescript@7.24.7(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.3) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.4) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.27.1(@babel/core@7.28.3)': + '@babel/preset-typescript@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.3) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.4) transitivePeerDependencies: - supports-color @@ -30547,59 +33185,69 @@ snapshots: pirates: 4.0.7 source-map-support: 0.5.21 - '@babel/register@7.28.3(@babel/core@7.28.3)': + '@babel/register@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 clone-deep: 4.0.1 find-cache-dir: 2.1.0 make-dir: 2.1.0 pirates: 4.0.7 source-map-support: 0.5.21 + '@babel/runtime@7.20.13': + dependencies: + regenerator-runtime: 0.13.11 + '@babel/runtime@7.22.15': dependencies: regenerator-runtime: 0.14.1 - '@babel/runtime@7.28.3': {} + '@babel/runtime@7.28.4': {} + + '@babel/template@7.20.7': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 - '@babel/traverse@7.28.3': + '@babel/traverse@7.28.4': dependencies: '@babel/code-frame': 7.27.1 '@babel/generator': 7.28.3 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.3 + '@babel/parser': 7.28.4 '@babel/template': 7.27.2 - '@babel/types': 7.28.2 - debug: 4.4.1(supports-color@8.1.1) + '@babel/types': 7.28.4 + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color - '@babel/traverse@7.28.3(supports-color@5.5.0)': + '@babel/traverse@7.28.4(supports-color@5.5.0)': dependencies: '@babel/code-frame': 7.27.1 '@babel/generator': 7.28.3 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.3 + '@babel/parser': 7.28.4 '@babel/template': 7.27.2 - '@babel/types': 7.28.2 - debug: 4.4.1(supports-color@5.5.0) + '@babel/types': 7.28.4 + debug: 4.4.3(supports-color@5.5.0) transitivePeerDependencies: - supports-color - '@babel/types@7.28.2': + '@babel/types@7.28.4': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 '@bcoe/v8-coverage@0.2.3': {} - '@bufbuild/protobuf@2.6.3': {} + '@bufbuild/protobuf@2.9.0': {} '@chromatic-com/storybook@1.9.0(react@17.0.2)': dependencies: @@ -30607,7 +33255,7 @@ snapshots: filesize: 10.1.6 jsonfile: 6.2.0 react-confetti: 6.4.0(react@17.0.2) - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 transitivePeerDependencies: - '@chromatic-com/cypress' - '@chromatic-com/playwright' @@ -30629,7 +33277,7 @@ snapshots: '@csstools/color-helpers@4.2.1': {} - '@csstools/color-helpers@5.0.2': {} + '@csstools/color-helpers@5.1.0': {} '@csstools/css-calc@1.2.4(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)': dependencies: @@ -30648,9 +33296,9 @@ snapshots: '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1) '@csstools/css-tokenizer': 2.4.1 - '@csstools/css-color-parser@3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': dependencies: - '@csstools/color-helpers': 5.0.2 + '@csstools/color-helpers': 5.1.0 '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 @@ -31365,18 +34013,18 @@ snapshots: '@discoveryjs/json-ext@0.5.7': {} - '@emnapi/core@1.4.5': + '@emnapi/core@1.5.0': dependencies: - '@emnapi/wasi-threads': 1.0.4 + '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.4.5': + '@emnapi/runtime@1.5.0': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.0.4': + '@emnapi/wasi-threads@1.1.0': dependencies: tslib: 2.8.1 optional: true @@ -31384,7 +34032,7 @@ snapshots: '@emotion/babel-plugin@11.13.5': dependencies: '@babel/helper-module-imports': 7.27.1 - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 '@emotion/serialize': 1.3.3 @@ -31413,7 +34061,7 @@ snapshots: dependencies: '@emotion/memoize': 0.7.1 - '@emotion/is-prop-valid@1.3.1': + '@emotion/is-prop-valid@1.4.0': dependencies: '@emotion/memoize': 0.9.0 @@ -31423,7 +34071,7 @@ snapshots: '@emotion/react@11.11.4(@types/react@18.3.10)(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 '@emotion/babel-plugin': 11.13.5 '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 @@ -31469,10 +34117,10 @@ snapshots: '@esbuild/aix-ppc64@0.23.0': optional: true - '@esbuild/aix-ppc64@0.25.5': + '@esbuild/aix-ppc64@0.25.10': optional: true - '@esbuild/aix-ppc64@0.25.9': + '@esbuild/aix-ppc64@0.25.5': optional: true '@esbuild/android-arm64@0.16.17': @@ -31484,6 +34132,9 @@ snapshots: '@esbuild/android-arm64@0.17.6': optional: true + '@esbuild/android-arm64@0.17.8': + optional: true + '@esbuild/android-arm64@0.18.20': optional: true @@ -31493,10 +34144,10 @@ snapshots: '@esbuild/android-arm64@0.23.0': optional: true - '@esbuild/android-arm64@0.25.5': + '@esbuild/android-arm64@0.25.10': optional: true - '@esbuild/android-arm64@0.25.9': + '@esbuild/android-arm64@0.25.5': optional: true '@esbuild/android-arm@0.16.17': @@ -31508,6 +34159,9 @@ snapshots: '@esbuild/android-arm@0.17.6': optional: true + '@esbuild/android-arm@0.17.8': + optional: true + '@esbuild/android-arm@0.18.20': optional: true @@ -31517,10 +34171,10 @@ snapshots: '@esbuild/android-arm@0.23.0': optional: true - '@esbuild/android-arm@0.25.5': + '@esbuild/android-arm@0.25.10': optional: true - '@esbuild/android-arm@0.25.9': + '@esbuild/android-arm@0.25.5': optional: true '@esbuild/android-x64@0.16.17': @@ -31532,6 +34186,9 @@ snapshots: '@esbuild/android-x64@0.17.6': optional: true + '@esbuild/android-x64@0.17.8': + optional: true + '@esbuild/android-x64@0.18.20': optional: true @@ -31541,10 +34198,10 @@ snapshots: '@esbuild/android-x64@0.23.0': optional: true - '@esbuild/android-x64@0.25.5': + '@esbuild/android-x64@0.25.10': optional: true - '@esbuild/android-x64@0.25.9': + '@esbuild/android-x64@0.25.5': optional: true '@esbuild/darwin-arm64@0.16.17': @@ -31556,6 +34213,9 @@ snapshots: '@esbuild/darwin-arm64@0.17.6': optional: true + '@esbuild/darwin-arm64@0.17.8': + optional: true + '@esbuild/darwin-arm64@0.18.20': optional: true @@ -31565,10 +34225,10 @@ snapshots: '@esbuild/darwin-arm64@0.23.0': optional: true - '@esbuild/darwin-arm64@0.25.5': + '@esbuild/darwin-arm64@0.25.10': optional: true - '@esbuild/darwin-arm64@0.25.9': + '@esbuild/darwin-arm64@0.25.5': optional: true '@esbuild/darwin-x64@0.16.17': @@ -31580,6 +34240,9 @@ snapshots: '@esbuild/darwin-x64@0.17.6': optional: true + '@esbuild/darwin-x64@0.17.8': + optional: true + '@esbuild/darwin-x64@0.18.20': optional: true @@ -31589,10 +34252,10 @@ snapshots: '@esbuild/darwin-x64@0.23.0': optional: true - '@esbuild/darwin-x64@0.25.5': + '@esbuild/darwin-x64@0.25.10': optional: true - '@esbuild/darwin-x64@0.25.9': + '@esbuild/darwin-x64@0.25.5': optional: true '@esbuild/freebsd-arm64@0.16.17': @@ -31604,6 +34267,9 @@ snapshots: '@esbuild/freebsd-arm64@0.17.6': optional: true + '@esbuild/freebsd-arm64@0.17.8': + optional: true + '@esbuild/freebsd-arm64@0.18.20': optional: true @@ -31613,10 +34279,10 @@ snapshots: '@esbuild/freebsd-arm64@0.23.0': optional: true - '@esbuild/freebsd-arm64@0.25.5': + '@esbuild/freebsd-arm64@0.25.10': optional: true - '@esbuild/freebsd-arm64@0.25.9': + '@esbuild/freebsd-arm64@0.25.5': optional: true '@esbuild/freebsd-x64@0.16.17': @@ -31628,6 +34294,9 @@ snapshots: '@esbuild/freebsd-x64@0.17.6': optional: true + '@esbuild/freebsd-x64@0.17.8': + optional: true + '@esbuild/freebsd-x64@0.18.20': optional: true @@ -31637,10 +34306,10 @@ snapshots: '@esbuild/freebsd-x64@0.23.0': optional: true - '@esbuild/freebsd-x64@0.25.5': + '@esbuild/freebsd-x64@0.25.10': optional: true - '@esbuild/freebsd-x64@0.25.9': + '@esbuild/freebsd-x64@0.25.5': optional: true '@esbuild/linux-arm64@0.16.17': @@ -31652,6 +34321,9 @@ snapshots: '@esbuild/linux-arm64@0.17.6': optional: true + '@esbuild/linux-arm64@0.17.8': + optional: true + '@esbuild/linux-arm64@0.18.20': optional: true @@ -31661,10 +34333,10 @@ snapshots: '@esbuild/linux-arm64@0.23.0': optional: true - '@esbuild/linux-arm64@0.25.5': + '@esbuild/linux-arm64@0.25.10': optional: true - '@esbuild/linux-arm64@0.25.9': + '@esbuild/linux-arm64@0.25.5': optional: true '@esbuild/linux-arm@0.16.17': @@ -31676,6 +34348,9 @@ snapshots: '@esbuild/linux-arm@0.17.6': optional: true + '@esbuild/linux-arm@0.17.8': + optional: true + '@esbuild/linux-arm@0.18.20': optional: true @@ -31685,10 +34360,10 @@ snapshots: '@esbuild/linux-arm@0.23.0': optional: true - '@esbuild/linux-arm@0.25.5': + '@esbuild/linux-arm@0.25.10': optional: true - '@esbuild/linux-arm@0.25.9': + '@esbuild/linux-arm@0.25.5': optional: true '@esbuild/linux-ia32@0.16.17': @@ -31700,6 +34375,9 @@ snapshots: '@esbuild/linux-ia32@0.17.6': optional: true + '@esbuild/linux-ia32@0.17.8': + optional: true + '@esbuild/linux-ia32@0.18.20': optional: true @@ -31709,10 +34387,10 @@ snapshots: '@esbuild/linux-ia32@0.23.0': optional: true - '@esbuild/linux-ia32@0.25.5': + '@esbuild/linux-ia32@0.25.10': optional: true - '@esbuild/linux-ia32@0.25.9': + '@esbuild/linux-ia32@0.25.5': optional: true '@esbuild/linux-loong64@0.16.17': @@ -31724,6 +34402,9 @@ snapshots: '@esbuild/linux-loong64@0.17.6': optional: true + '@esbuild/linux-loong64@0.17.8': + optional: true + '@esbuild/linux-loong64@0.18.20': optional: true @@ -31733,10 +34414,10 @@ snapshots: '@esbuild/linux-loong64@0.23.0': optional: true - '@esbuild/linux-loong64@0.25.5': + '@esbuild/linux-loong64@0.25.10': optional: true - '@esbuild/linux-loong64@0.25.9': + '@esbuild/linux-loong64@0.25.5': optional: true '@esbuild/linux-mips64el@0.16.17': @@ -31748,6 +34429,9 @@ snapshots: '@esbuild/linux-mips64el@0.17.6': optional: true + '@esbuild/linux-mips64el@0.17.8': + optional: true + '@esbuild/linux-mips64el@0.18.20': optional: true @@ -31757,10 +34441,10 @@ snapshots: '@esbuild/linux-mips64el@0.23.0': optional: true - '@esbuild/linux-mips64el@0.25.5': + '@esbuild/linux-mips64el@0.25.10': optional: true - '@esbuild/linux-mips64el@0.25.9': + '@esbuild/linux-mips64el@0.25.5': optional: true '@esbuild/linux-ppc64@0.16.17': @@ -31772,6 +34456,9 @@ snapshots: '@esbuild/linux-ppc64@0.17.6': optional: true + '@esbuild/linux-ppc64@0.17.8': + optional: true + '@esbuild/linux-ppc64@0.18.20': optional: true @@ -31781,10 +34468,10 @@ snapshots: '@esbuild/linux-ppc64@0.23.0': optional: true - '@esbuild/linux-ppc64@0.25.5': + '@esbuild/linux-ppc64@0.25.10': optional: true - '@esbuild/linux-ppc64@0.25.9': + '@esbuild/linux-ppc64@0.25.5': optional: true '@esbuild/linux-riscv64@0.16.17': @@ -31796,6 +34483,9 @@ snapshots: '@esbuild/linux-riscv64@0.17.6': optional: true + '@esbuild/linux-riscv64@0.17.8': + optional: true + '@esbuild/linux-riscv64@0.18.20': optional: true @@ -31805,10 +34495,10 @@ snapshots: '@esbuild/linux-riscv64@0.23.0': optional: true - '@esbuild/linux-riscv64@0.25.5': + '@esbuild/linux-riscv64@0.25.10': optional: true - '@esbuild/linux-riscv64@0.25.9': + '@esbuild/linux-riscv64@0.25.5': optional: true '@esbuild/linux-s390x@0.16.17': @@ -31820,6 +34510,9 @@ snapshots: '@esbuild/linux-s390x@0.17.6': optional: true + '@esbuild/linux-s390x@0.17.8': + optional: true + '@esbuild/linux-s390x@0.18.20': optional: true @@ -31829,10 +34522,10 @@ snapshots: '@esbuild/linux-s390x@0.23.0': optional: true - '@esbuild/linux-s390x@0.25.5': + '@esbuild/linux-s390x@0.25.10': optional: true - '@esbuild/linux-s390x@0.25.9': + '@esbuild/linux-s390x@0.25.5': optional: true '@esbuild/linux-x64@0.16.17': @@ -31844,6 +34537,9 @@ snapshots: '@esbuild/linux-x64@0.17.6': optional: true + '@esbuild/linux-x64@0.17.8': + optional: true + '@esbuild/linux-x64@0.18.20': optional: true @@ -31853,16 +34549,16 @@ snapshots: '@esbuild/linux-x64@0.23.0': optional: true - '@esbuild/linux-x64@0.25.5': + '@esbuild/linux-x64@0.25.10': optional: true - '@esbuild/linux-x64@0.25.9': + '@esbuild/linux-x64@0.25.5': optional: true - '@esbuild/netbsd-arm64@0.25.5': + '@esbuild/netbsd-arm64@0.25.10': optional: true - '@esbuild/netbsd-arm64@0.25.9': + '@esbuild/netbsd-arm64@0.25.5': optional: true '@esbuild/netbsd-x64@0.16.17': @@ -31874,6 +34570,9 @@ snapshots: '@esbuild/netbsd-x64@0.17.6': optional: true + '@esbuild/netbsd-x64@0.17.8': + optional: true + '@esbuild/netbsd-x64@0.18.20': optional: true @@ -31883,19 +34582,19 @@ snapshots: '@esbuild/netbsd-x64@0.23.0': optional: true - '@esbuild/netbsd-x64@0.25.5': + '@esbuild/netbsd-x64@0.25.10': optional: true - '@esbuild/netbsd-x64@0.25.9': + '@esbuild/netbsd-x64@0.25.5': optional: true '@esbuild/openbsd-arm64@0.23.0': optional: true - '@esbuild/openbsd-arm64@0.25.5': + '@esbuild/openbsd-arm64@0.25.10': optional: true - '@esbuild/openbsd-arm64@0.25.9': + '@esbuild/openbsd-arm64@0.25.5': optional: true '@esbuild/openbsd-x64@0.16.17': @@ -31907,6 +34606,9 @@ snapshots: '@esbuild/openbsd-x64@0.17.6': optional: true + '@esbuild/openbsd-x64@0.17.8': + optional: true + '@esbuild/openbsd-x64@0.18.20': optional: true @@ -31916,13 +34618,13 @@ snapshots: '@esbuild/openbsd-x64@0.23.0': optional: true - '@esbuild/openbsd-x64@0.25.5': + '@esbuild/openbsd-x64@0.25.10': optional: true - '@esbuild/openbsd-x64@0.25.9': + '@esbuild/openbsd-x64@0.25.5': optional: true - '@esbuild/openharmony-arm64@0.25.9': + '@esbuild/openharmony-arm64@0.25.10': optional: true '@esbuild/sunos-x64@0.16.17': @@ -31934,6 +34636,9 @@ snapshots: '@esbuild/sunos-x64@0.17.6': optional: true + '@esbuild/sunos-x64@0.17.8': + optional: true + '@esbuild/sunos-x64@0.18.20': optional: true @@ -31943,10 +34648,10 @@ snapshots: '@esbuild/sunos-x64@0.23.0': optional: true - '@esbuild/sunos-x64@0.25.5': + '@esbuild/sunos-x64@0.25.10': optional: true - '@esbuild/sunos-x64@0.25.9': + '@esbuild/sunos-x64@0.25.5': optional: true '@esbuild/win32-arm64@0.16.17': @@ -31958,6 +34663,9 @@ snapshots: '@esbuild/win32-arm64@0.17.6': optional: true + '@esbuild/win32-arm64@0.17.8': + optional: true + '@esbuild/win32-arm64@0.18.20': optional: true @@ -31967,10 +34675,10 @@ snapshots: '@esbuild/win32-arm64@0.23.0': optional: true - '@esbuild/win32-arm64@0.25.5': + '@esbuild/win32-arm64@0.25.10': optional: true - '@esbuild/win32-arm64@0.25.9': + '@esbuild/win32-arm64@0.25.5': optional: true '@esbuild/win32-ia32@0.16.17': @@ -31982,6 +34690,9 @@ snapshots: '@esbuild/win32-ia32@0.17.6': optional: true + '@esbuild/win32-ia32@0.17.8': + optional: true + '@esbuild/win32-ia32@0.18.20': optional: true @@ -31991,10 +34702,10 @@ snapshots: '@esbuild/win32-ia32@0.23.0': optional: true - '@esbuild/win32-ia32@0.25.5': + '@esbuild/win32-ia32@0.25.10': optional: true - '@esbuild/win32-ia32@0.25.9': + '@esbuild/win32-ia32@0.25.5': optional: true '@esbuild/win32-x64@0.16.17': @@ -32006,6 +34717,9 @@ snapshots: '@esbuild/win32-x64@0.17.6': optional: true + '@esbuild/win32-x64@0.17.8': + optional: true + '@esbuild/win32-x64@0.18.20': optional: true @@ -32015,18 +34729,23 @@ snapshots: '@esbuild/win32-x64@0.23.0': optional: true - '@esbuild/win32-x64@0.25.5': + '@esbuild/win32-x64@0.25.10': optional: true - '@esbuild/win32-x64@0.25.9': + '@esbuild/win32-x64@0.25.5': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)': + '@eslint-community/eslint-utils@4.9.0(eslint@8.57.0)': + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/eslint-utils@4.9.0(eslint@8.57.1)': dependencies: eslint: 8.57.1 eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.7.0(eslint@9.6.0)': + '@eslint-community/eslint-utils@4.9.0(eslint@9.6.0)': dependencies: eslint: 9.6.0 eslint-visitor-keys: 3.4.3 @@ -32036,7 +34755,7 @@ snapshots: '@eslint/config-array@0.17.1': dependencies: '@eslint/object-schema': 2.1.6 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -32044,7 +34763,7 @@ snapshots: '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) espree: 9.6.1 globals: 13.24.0 ignore: 5.3.2 @@ -32058,7 +34777,7 @@ snapshots: '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 @@ -32069,13 +34788,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@eslint/js@8.57.0': {} + '@eslint/js@8.57.1': {} '@eslint/js@9.6.0': {} '@eslint/object-schema@2.1.6': {} - '@fmfe/genesis-compiler@2.7.20(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(prettier@3.3.3)(sass-embedded@1.90.0)(sass@1.90.0)': + '@fmfe/genesis-compiler@2.7.20(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(prettier@3.3.3)(sass-embedded@1.92.1)(sass@1.92.1)': dependencies: '@babel/core': 7.22.17 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.17) @@ -32095,7 +34816,7 @@ snapshots: babel-plugin-transform-vue-jsx: 3.7.0(babel-helper-vue-jsx-merge-props@2.0.3) babel-preset-typescript-vue: 1.1.1(@babel/core@7.22.17) core-js: 3.32.2 - css-loader: 6.8.1(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) + css-loader: 6.8.1(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) cssnano: 6.0.1(postcss@8.4.32) esbuild-loader: 2.21.0(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) fflate: 0.8.0 @@ -32110,14 +34831,14 @@ snapshots: postcss-loader: 7.3.3(postcss@8.4.32)(typescript@5.2.2)(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) postcss-preset-env: 9.1.3(postcss@8.4.32) relative: 3.0.2 - sass-loader: 13.3.2(sass-embedded@1.90.0)(sass@1.90.0)(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) + sass-loader: 13.3.2(sass-embedded@1.92.1)(sass@1.92.1)(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) style-loader: 3.3.3(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) style-resources-loader: 1.5.0(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) thread-loader: 4.0.2(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) ts-node: 10.9.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.6.0)(typescript@5.2.2) typescript: 5.2.2 upath: 2.0.1 - vue-loader: 15.11.1(@vue/compiler-sfc@3.5.18)(css-loader@6.8.1(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))))(prettier@3.3.3)(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) + vue-loader: 15.11.1(@vue/compiler-sfc@3.5.21)(css-loader@6.8.1(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))))(prettier@3.3.3)(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) vue-server-renderer: 2.7.16 vue-style-loader: 4.1.3 webpack: 5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17)) @@ -32199,7 +34920,7 @@ snapshots: - webpack-cli - whiskers - '@fmfe/genesis-compiler@2.7.21(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(prettier@3.3.3)(sass-embedded@1.90.0)(sass@1.90.0)': + '@fmfe/genesis-compiler@2.7.21(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(prettier@3.3.3)(sass-embedded@1.92.1)(sass@1.92.1)': dependencies: '@babel/core': 7.22.17 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.17) @@ -32235,14 +34956,14 @@ snapshots: postcss-loader: 7.3.3(postcss@8.4.32)(typescript@5.2.2)(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) postcss-preset-env: 9.1.3(postcss@8.4.32) relative: 3.0.2 - sass-loader: 13.3.2(sass-embedded@1.90.0)(sass@1.90.0)(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) + sass-loader: 13.3.2(sass-embedded@1.92.1)(sass@1.92.1)(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) style-loader: 3.3.3(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) style-resources-loader: 1.5.0(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) thread-loader: 4.0.2(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) ts-node: 10.9.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.6.0)(typescript@5.2.2) typescript: 5.2.2 upath: 2.0.1 - vue-loader: 15.11.1(@vue/compiler-sfc@3.5.18)(css-loader@6.8.1(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))))(prettier@3.3.3)(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) + vue-loader: 15.11.1(@vue/compiler-sfc@3.5.21)(css-loader@6.8.1(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))))(prettier@3.3.3)(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) vue-server-renderer: 2.7.16 vue-style-loader: 4.1.3 webpack: 5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17)) @@ -32350,6 +35071,8 @@ snapshots: transitivePeerDependencies: - debug + '@gar/promisify@1.1.3': {} + '@graphql-typed-document-node/core@3.2.0(graphql@16.11.0)': dependencies: graphql: 16.11.0 @@ -32371,10 +35094,18 @@ snapshots: dependencies: react: 18.3.1 + '@humanwhocodes/config-array@0.11.14': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.4.3(supports-color@8.1.1) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -32387,17 +35118,17 @@ snapshots: '@hutson/parse-repository-url@3.0.2': {} - '@inquirer/external-editor@1.0.1(@types/node@20.16.5)': + '@inquirer/external-editor@1.0.2(@types/node@20.16.5)': dependencies: chardet: 2.1.0 - iconv-lite: 0.6.3 + iconv-lite: 0.7.0 optionalDependencies: '@types/node': 20.16.5 - '@inquirer/external-editor@1.0.1(@types/node@20.9.0)': + '@inquirer/external-editor@1.0.2(@types/node@20.9.0)': dependencies: chardet: 2.1.0 - iconv-lite: 0.6.3 + iconv-lite: 0.7.0 optionalDependencies: '@types/node': 20.9.0 @@ -32405,7 +35136,7 @@ snapshots: dependencies: string-width: 5.1.2 string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 @@ -32449,7 +35180,7 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))': + '@jest/core@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))': dependencies: '@jest/console': 27.5.1 '@jest/reporters': 27.5.1 @@ -32463,7 +35194,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 27.5.1 - jest-config: 27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)) + jest-config: 27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)) jest-haste-map: 27.5.1 jest-message-util: 27.5.1 jest-regex-util: 27.5.1 @@ -32596,7 +35327,7 @@ snapshots: istanbul-lib-instrument: 5.2.1 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.7 + istanbul-reports: 3.2.0 jest-haste-map: 27.5.1 jest-resolve: 27.5.1 jest-util: 27.5.1 @@ -32616,7 +35347,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 '@types/node': 20.16.5 chalk: 4.1.2 collect-v8-coverage: 1.0.2 @@ -32627,7 +35358,7 @@ snapshots: istanbul-lib-instrument: 6.0.3 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.7 + istanbul-reports: 3.2.0 jest-message-util: 29.7.0 jest-util: 29.7.0 jest-worker: 29.7.0 @@ -32654,7 +35385,7 @@ snapshots: '@jest/source-map@29.6.3': dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 callsites: 3.1.0 graceful-fs: 4.2.11 @@ -32719,7 +35450,7 @@ snapshots: dependencies: '@babel/core': 7.24.7 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -32767,21 +35498,33 @@ snapshots: '@types/yargs': 17.0.33 chalk: 4.1.2 + '@jridgewell/gen-mapping@0.1.1': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/resolve-uri@3.1.2': {} + '@jridgewell/set-array@1.2.1': {} + '@jridgewell/source-map@0.3.11': dependencies: '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/sourcemap-codec@1.5.5': {} - '@jridgewell/trace-mapping@0.3.30': + '@jridgewell/trace-mapping@0.3.31': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 @@ -32803,19 +35546,20 @@ snapshots: dependencies: tslib: 2.8.1 - '@jsonjoy.com/json-pack@1.11.0(tslib@2.8.1)': + '@jsonjoy.com/json-pack@1.14.0(tslib@2.8.1)': dependencies: '@jsonjoy.com/base64': 1.1.2(tslib@2.8.1) '@jsonjoy.com/buffers': 1.0.0(tslib@2.8.1) '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) - '@jsonjoy.com/json-pointer': 1.0.1(tslib@2.8.1) + '@jsonjoy.com/json-pointer': 1.0.2(tslib@2.8.1) '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) hyperdyperid: 1.2.0 thingies: 2.5.0(tslib@2.8.1) tslib: 2.8.1 - '@jsonjoy.com/json-pointer@1.0.1(tslib@2.8.1)': + '@jsonjoy.com/json-pointer@1.0.2(tslib@2.8.1)': dependencies: + '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) tslib: 2.8.1 @@ -32850,7 +35594,7 @@ snapshots: cosmiconfig: 8.3.6(typescript@5.6.2) dedent: 1.5.3(babel-plugin-macros@3.1.0) execa: 5.0.0 - fs-extra: 11.3.1 + fs-extra: 11.3.2 get-stream: 6.0.0 git-url-parse: 14.0.0 glob-parent: 6.0.2 @@ -32933,7 +35677,7 @@ snapshots: cosmiconfig: 8.3.6(typescript@5.6.2) dedent: 1.5.3(babel-plugin-macros@3.1.0) execa: 5.0.0 - fs-extra: 11.3.1 + fs-extra: 11.3.2 get-stream: 6.0.0 git-url-parse: 14.0.0 glob-parent: 6.0.2 @@ -33001,10 +35745,10 @@ snapshots: '@babel/core': 7.24.7 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) - '@loadable/babel-plugin@5.15.3(@babel/core@7.28.3)': + '@loadable/babel-plugin@5.15.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.28.4) '@loadable/babel-plugin@5.16.1(@babel/core@7.24.7)': dependencies: @@ -33013,21 +35757,21 @@ snapshots: '@loadable/component@5.15.3(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 hoist-non-react-statics: 3.3.2 react: 18.3.1 react-is: 16.13.1 '@loadable/component@5.16.7(react@16.14.0)': dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 hoist-non-react-statics: 3.3.2 react: 16.14.0 react-is: 16.13.1 '@loadable/component@5.16.7(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 hoist-non-react-statics: 3.3.2 react: 18.3.1 react-is: 16.13.1 @@ -33053,7 +35797,7 @@ snapshots: '@loadable/webpack-plugin@5.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: make-dir: 3.1.0 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) '@loadable/webpack-plugin@5.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19))': dependencies: @@ -33067,7 +35811,7 @@ snapshots: '@mapbox/node-pre-gyp@1.0.11(encoding@0.1.13)': dependencies: - detect-libc: 2.0.4 + detect-libc: 2.1.0 https-proxy-agent: 5.0.1 make-dir: 3.1.0 node-fetch: 2.7.0(encoding@0.1.13) @@ -33082,7 +35826,7 @@ snapshots: '@material-ui/core@4.12.4(@types/react@18.3.10)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 '@material-ui/styles': 4.11.5(@types/react@18.3.10)(react-dom@16.14.0(react@16.14.0))(react@16.14.0) '@material-ui/system': 4.12.2(@types/react@18.3.10)(react-dom@16.14.0(react@16.14.0))(react@16.14.0) '@material-ui/types': 5.1.0(@types/react@18.3.10) @@ -33101,7 +35845,7 @@ snapshots: '@material-ui/core@4.12.4(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 '@material-ui/styles': 4.11.5(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@material-ui/system': 4.12.2(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@material-ui/types': 5.1.0(@types/react@18.3.10) @@ -33120,7 +35864,7 @@ snapshots: '@material-ui/icons@4.11.3(@material-ui/core@4.12.4(@types/react@18.3.10)(react-dom@16.14.0(react@16.14.0))(react@16.14.0))(@types/react@18.3.10)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 '@material-ui/core': 4.12.4(@types/react@18.3.10)(react-dom@16.14.0(react@16.14.0))(react@16.14.0) react: 16.14.0 react-dom: 16.14.0(react@16.14.0) @@ -33129,7 +35873,7 @@ snapshots: '@material-ui/styles@4.11.5(@types/react@18.3.10)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 '@emotion/hash': 0.8.0 '@material-ui/types': 5.1.0(@types/react@18.3.10) '@material-ui/utils': 4.11.3(react-dom@16.14.0(react@16.14.0))(react@16.14.0) @@ -33152,7 +35896,7 @@ snapshots: '@material-ui/styles@4.11.5(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 '@emotion/hash': 0.8.0 '@material-ui/types': 5.1.0(@types/react@18.3.10) '@material-ui/utils': 4.11.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -33175,7 +35919,7 @@ snapshots: '@material-ui/system@4.12.2(@types/react@18.3.10)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 '@material-ui/utils': 4.11.3(react-dom@16.14.0(react@16.14.0))(react@16.14.0) csstype: 2.6.21 prop-types: 15.8.1 @@ -33186,7 +35930,7 @@ snapshots: '@material-ui/system@4.12.2(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 '@material-ui/utils': 4.11.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) csstype: 2.6.21 prop-types: 15.8.1 @@ -33201,7 +35945,7 @@ snapshots: '@material-ui/utils@4.11.3(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 prop-types: 15.8.1 react: 16.14.0 react-dom: 16.14.0(react@16.14.0) @@ -33209,7 +35953,7 @@ snapshots: '@material-ui/utils@4.11.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 prop-types: 15.8.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -33237,7 +35981,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/react@3.1.0(@types/react@18.3.10)(react@18.3.1)': + '@mdx-js/react@3.1.1(@types/react@18.3.10)(react@18.3.1)': dependencies: '@types/mdx': 2.0.13 '@types/react': 18.3.10 @@ -33246,22 +35990,22 @@ snapshots: '@modern-js-app/eslint-config@2.54.6(@swc/helpers@0.5.17)(typescript@5.5.3)': dependencies: '@babel/core': 7.24.7 - '@babel/eslint-parser': 7.28.0(@babel/core@7.24.7)(eslint@8.57.1) - '@babel/eslint-plugin': 7.27.1(@babel/eslint-parser@7.28.0(@babel/core@7.24.7)(eslint@8.57.1))(eslint@8.57.1) + '@babel/eslint-parser': 7.28.4(@babel/core@7.24.7)(eslint@8.57.0) + '@babel/eslint-plugin': 7.27.1(@babel/eslint-parser@7.28.4(@babel/core@7.24.7)(eslint@8.57.0))(eslint@8.57.0) '@rsbuild/babel-preset': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.17) '@rsbuild/core': 0.7.10 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.5.3))(eslint@8.57.1)(typescript@5.5.3) - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.5.3) - eslint: 8.57.1 - eslint-config-prettier: 8.10.2(eslint@8.57.1) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.1) - eslint-plugin-filenames: 1.3.2(eslint@8.57.1) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.5.3))(eslint@8.57.1) - eslint-plugin-node: 11.1.0(eslint@8.57.1) - eslint-plugin-prettier: 4.2.5(eslint-config-prettier@8.10.2(eslint@8.57.1))(eslint@8.57.1)(prettier@2.8.8) - eslint-plugin-promise: 6.6.0(eslint@8.57.1) - eslint-plugin-react: 7.34.3(eslint@8.57.1) - eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.5.3) + eslint: 8.57.0 + eslint-config-prettier: 8.10.2(eslint@8.57.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) + eslint-plugin-filenames: 1.3.2(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0) + eslint-plugin-node: 11.1.0(eslint@8.57.0) + eslint-plugin-prettier: 4.2.5(eslint-config-prettier@8.10.2(eslint@8.57.0))(eslint@8.57.0)(prettier@2.8.8) + eslint-plugin-promise: 6.6.0(eslint@8.57.0) + eslint-plugin-react: 7.34.3(eslint@8.57.0) + eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) prettier: 2.8.8 typescript: 5.5.3 transitivePeerDependencies: @@ -33270,54 +36014,27 @@ snapshots: - eslint-import-resolver-webpack - supports-color - '@modern-js-app/eslint-config@2.54.6(@swc/helpers@0.5.17)(typescript@5.6.2)': - dependencies: - '@babel/core': 7.24.7 - '@babel/eslint-parser': 7.28.0(@babel/core@7.24.7)(eslint@8.57.1) - '@babel/eslint-plugin': 7.27.1(@babel/eslint-parser@7.28.0(@babel/core@7.24.7)(eslint@8.57.1))(eslint@8.57.1) - '@rsbuild/babel-preset': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.17) - '@rsbuild/core': 0.7.10 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2) - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.6.2) - eslint: 8.57.1 - eslint-config-prettier: 8.10.2(eslint@8.57.1) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.1) - eslint-plugin-filenames: 1.3.2(eslint@8.57.1) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1) - eslint-plugin-node: 11.1.0(eslint@8.57.1) - eslint-plugin-prettier: 4.2.5(eslint-config-prettier@8.10.2(eslint@8.57.1))(eslint@8.57.1)(prettier@2.8.8) - eslint-plugin-promise: 6.6.0(eslint@8.57.1) - eslint-plugin-react: 7.34.3(eslint@8.57.1) - eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) - prettier: 2.8.8 - typescript: 5.6.2 - transitivePeerDependencies: - - '@swc/helpers' - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - '@modern-js-app/eslint-config@2.54.6(@swc/helpers@0.5.3)(typescript@5.6.2)': + '@modern-js-app/eslint-config@2.54.6(@swc/helpers@0.5.3)(typescript@5.5.3)': dependencies: '@babel/core': 7.24.7 - '@babel/eslint-parser': 7.28.0(@babel/core@7.24.7)(eslint@8.57.1) - '@babel/eslint-plugin': 7.27.1(@babel/eslint-parser@7.28.0(@babel/core@7.24.7)(eslint@8.57.1))(eslint@8.57.1) + '@babel/eslint-parser': 7.28.4(@babel/core@7.28.4)(eslint@9.6.0) + '@babel/eslint-plugin': 7.27.1(@babel/eslint-parser@7.28.4(@babel/core@7.24.7)(eslint@8.57.0))(eslint@8.57.0) '@rsbuild/babel-preset': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) '@rsbuild/core': 0.7.10 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2) - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.6.2) - eslint: 8.57.1 - eslint-config-prettier: 8.10.2(eslint@8.57.1) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.1) - eslint-plugin-filenames: 1.3.2(eslint@8.57.1) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1) - eslint-plugin-node: 11.1.0(eslint@8.57.1) - eslint-plugin-prettier: 4.2.5(eslint-config-prettier@8.10.2(eslint@8.57.1))(eslint@8.57.1)(prettier@2.8.8) - eslint-plugin-promise: 6.6.0(eslint@8.57.1) - eslint-plugin-react: 7.34.3(eslint@8.57.1) - eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3) + '@typescript-eslint/parser': 5.62.0(eslint@9.6.0)(typescript@5.5.3) + eslint: 8.57.0 + eslint-config-prettier: 8.10.2(eslint@8.57.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) + eslint-plugin-filenames: 1.3.2(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0) + eslint-plugin-node: 11.1.0(eslint@8.57.0) + eslint-plugin-prettier: 4.2.5(eslint-config-prettier@8.10.2(eslint@8.57.0))(eslint@8.57.0)(prettier@2.8.8) + eslint-plugin-promise: 6.6.0(eslint@8.57.0) + eslint-plugin-react: 7.34.3(eslint@8.57.0) + eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) prettier: 2.8.8 - typescript: 5.6.2 + typescript: 5.5.3 transitivePeerDependencies: - '@swc/helpers' - eslint-import-resolver-typescript @@ -33327,22 +36044,22 @@ snapshots: '@modern-js-app/eslint-config@2.57.0(typescript@4.9.5)': dependencies: '@babel/core': 7.24.7 - '@babel/eslint-parser': 7.28.0(@babel/core@7.24.7)(eslint@8.57.1) - '@babel/eslint-plugin': 7.27.1(@babel/eslint-parser@7.28.0(@babel/core@7.24.7)(eslint@8.57.1))(eslint@8.57.1) + '@babel/eslint-parser': 7.28.4(@babel/core@7.28.4)(eslint@9.6.0) + '@babel/eslint-plugin': 7.27.1(@babel/eslint-parser@7.28.4(@babel/core@7.24.7)(eslint@8.57.0))(eslint@8.57.0) '@modern-js/babel-preset': 2.57.0(@rsbuild/core@1.0.1-beta.3) '@rsbuild/core': 1.0.1-beta.3 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1)(typescript@4.9.5) - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@4.9.5) - eslint: 8.57.1 - eslint-config-prettier: 8.10.2(eslint@8.57.1) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.1) - eslint-plugin-filenames: 1.3.2(eslint@8.57.1) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1) - eslint-plugin-node: 11.1.0(eslint@8.57.1) - eslint-plugin-prettier: 4.2.5(eslint-config-prettier@8.10.2(eslint@8.57.1))(eslint@8.57.1)(prettier@2.8.8) - eslint-plugin-promise: 6.6.0(eslint@8.57.1) - eslint-plugin-react: 7.34.3(eslint@8.57.1) - eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.62.0(eslint@9.6.0)(typescript@4.9.5) + eslint: 8.57.0 + eslint-config-prettier: 8.10.2(eslint@8.57.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) + eslint-plugin-filenames: 1.3.2(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0) + eslint-plugin-node: 11.1.0(eslint@8.57.0) + eslint-plugin-prettier: 4.2.5(eslint-config-prettier@8.10.2(eslint@8.57.0))(eslint@8.57.0)(prettier@2.8.8) + eslint-plugin-promise: 6.6.0(eslint@8.57.0) + eslint-plugin-react: 7.34.3(eslint@8.57.0) + eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) prettier: 2.8.8 typescript: 4.9.5 transitivePeerDependencies: @@ -33350,27 +36067,27 @@ snapshots: - eslint-import-resolver-webpack - supports-color - '@modern-js-app/eslint-config@2.59.0(typescript@5.6.2)': + '@modern-js-app/eslint-config@2.59.0(typescript@5.5.3)': dependencies: '@babel/core': 7.24.7 - '@babel/eslint-parser': 7.28.0(@babel/core@7.24.7)(eslint@8.57.1) - '@babel/eslint-plugin': 7.27.1(@babel/eslint-parser@7.28.0(@babel/core@7.24.7)(eslint@8.57.1))(eslint@8.57.1) + '@babel/eslint-parser': 7.28.4(@babel/core@7.28.4)(eslint@8.57.0) + '@babel/eslint-plugin': 7.27.1(@babel/eslint-parser@7.28.4(@babel/core@7.24.7)(eslint@8.57.0))(eslint@8.57.0) '@modern-js/babel-preset': 2.59.0(@rsbuild/core@1.0.1-rc.4) '@rsbuild/core': 1.0.1-rc.4 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2) - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.6.2) - eslint: 8.57.1 - eslint-config-prettier: 8.10.2(eslint@8.57.1) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.1) - eslint-plugin-filenames: 1.3.2(eslint@8.57.1) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1) - eslint-plugin-node: 11.1.0(eslint@8.57.1) - eslint-plugin-prettier: 4.2.5(eslint-config-prettier@8.10.2(eslint@8.57.1))(eslint@8.57.1)(prettier@2.8.8) - eslint-plugin-promise: 6.6.0(eslint@8.57.1) - eslint-plugin-react: 7.34.3(eslint@8.57.1) - eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.5.3) + eslint: 8.57.0 + eslint-config-prettier: 8.10.2(eslint@8.57.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) + eslint-plugin-filenames: 1.3.2(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0) + eslint-plugin-node: 11.1.0(eslint@8.57.0) + eslint-plugin-prettier: 4.2.5(eslint-config-prettier@8.10.2(eslint@8.57.0))(eslint@8.57.0)(prettier@2.8.8) + eslint-plugin-promise: 6.6.0(eslint@8.57.0) + eslint-plugin-react: 7.34.3(eslint@8.57.0) + eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) prettier: 2.8.8 - typescript: 5.6.2 + typescript: 5.5.3 transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -33422,24 +36139,24 @@ snapshots: '@swc/helpers': 0.5.1 redux: 4.2.1 - '@modern-js/app-tools@2.54.6(@rspack/core@0.4.5)(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19))(encoding@0.1.13)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)))(webpack-hot-middleware@2.26.1)': + '@modern-js/app-tools@2.54.6(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(encoding@0.1.13)(eslint@9.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)': dependencies: - '@babel/parser': 7.28.3 - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 '@modern-js/core': 2.54.6 '@modern-js/node-bundle-require': 2.54.6 '@modern-js/plugin': 2.54.6 '@modern-js/plugin-data-loader': 2.54.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/plugin-i18n': 2.54.6 - '@modern-js/plugin-lint': 2.54.6(eslint@8.57.1) + '@modern-js/plugin-lint': 2.54.6(eslint@9.6.0) '@modern-js/prod-server': 2.54.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/rsbuild-plugin-esbuild': 2.54.6(@swc/core@1.11.31(@swc/helpers@0.5.3)) - '@modern-js/server': 2.54.6(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0) + '@modern-js/rsbuild-plugin-esbuild': 2.54.6(@swc/core@1.11.31(@swc/helpers@0.5.17)) + '@modern-js/server': 2.54.6(@babel/traverse@7.28.4)(@rsbuild/core@0.7.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0) '@modern-js/server-core': 2.54.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 2.54.6(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10) + '@modern-js/server-utils': 2.54.6(@babel/traverse@7.28.4)(@rsbuild/core@0.7.10) '@modern-js/types': 2.54.6 - '@modern-js/uni-builder': 2.54.6(@babel/traverse@7.28.3)(@rspack/core@0.4.5)(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19))(esbuild@0.17.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)))(webpack-hot-middleware@2.26.1) + '@modern-js/uni-builder': 2.54.6(@babel/traverse@7.28.4)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(esbuild@0.17.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1) '@modern-js/utils': 2.54.6 '@rsbuild/core': 0.7.10 '@rsbuild/plugin-node-polyfill': 0.7.10(@rsbuild/core@0.7.10) @@ -33449,7 +36166,7 @@ snapshots: es-module-lexer: 1.7.0 esbuild: 0.17.19 esbuild-register: 3.6.0(esbuild@0.17.19) - mlly: 1.7.4 + mlly: 1.8.0 pkg-types: 1.3.1 std-env: 3.9.0 transitivePeerDependencies: @@ -33482,11 +36199,11 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@modern-js/app-tools@2.54.6(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(encoding@0.1.13)(eslint@9.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)': + '@modern-js/app-tools@2.54.6(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(encoding@0.1.13)(eslint@9.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)': dependencies: - '@babel/parser': 7.28.3 - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 '@modern-js/core': 2.54.6 '@modern-js/node-bundle-require': 2.54.6 '@modern-js/plugin': 2.54.6 @@ -33495,11 +36212,11 @@ snapshots: '@modern-js/plugin-lint': 2.54.6(eslint@9.6.0) '@modern-js/prod-server': 2.54.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/rsbuild-plugin-esbuild': 2.54.6(@swc/core@1.11.31(@swc/helpers@0.5.17)) - '@modern-js/server': 2.54.6(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0) + '@modern-js/server': 2.54.6(@babel/traverse@7.28.4)(@rsbuild/core@0.7.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0) '@modern-js/server-core': 2.54.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 2.54.6(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10) + '@modern-js/server-utils': 2.54.6(@babel/traverse@7.28.4)(@rsbuild/core@0.7.10) '@modern-js/types': 2.54.6 - '@modern-js/uni-builder': 2.54.6(@babel/traverse@7.28.3)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(esbuild@0.17.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1) + '@modern-js/uni-builder': 2.54.6(@babel/traverse@7.28.4)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(esbuild@0.17.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1) '@modern-js/utils': 2.54.6 '@rsbuild/core': 0.7.10 '@rsbuild/plugin-node-polyfill': 0.7.10(@rsbuild/core@0.7.10) @@ -33509,7 +36226,7 @@ snapshots: es-module-lexer: 1.7.0 esbuild: 0.17.19 esbuild-register: 3.6.0(esbuild@0.17.19) - mlly: 1.7.4 + mlly: 1.8.0 pkg-types: 1.3.1 std-env: 3.9.0 transitivePeerDependencies: @@ -33542,11 +36259,11 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@modern-js/app-tools@2.54.6(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(encoding@0.1.13)(eslint@9.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)': + '@modern-js/app-tools@2.54.6(@rspack/core@1.4.11(@swc/helpers@0.5.3))(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19))(encoding@0.1.13)(eslint@9.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)))(webpack-hot-middleware@2.26.1)': dependencies: - '@babel/parser': 7.28.3 - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 '@modern-js/core': 2.54.6 '@modern-js/node-bundle-require': 2.54.6 '@modern-js/plugin': 2.54.6 @@ -33554,12 +36271,12 @@ snapshots: '@modern-js/plugin-i18n': 2.54.6 '@modern-js/plugin-lint': 2.54.6(eslint@9.6.0) '@modern-js/prod-server': 2.54.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/rsbuild-plugin-esbuild': 2.54.6(@swc/core@1.11.31(@swc/helpers@0.5.17)) - '@modern-js/server': 2.54.6(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0) + '@modern-js/rsbuild-plugin-esbuild': 2.54.6(@swc/core@1.11.31(@swc/helpers@0.5.3)) + '@modern-js/server': 2.54.6(@babel/traverse@7.28.4)(@rsbuild/core@0.7.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0) '@modern-js/server-core': 2.54.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 2.54.6(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10) + '@modern-js/server-utils': 2.54.6(@babel/traverse@7.28.4)(@rsbuild/core@0.7.10) '@modern-js/types': 2.54.6 - '@modern-js/uni-builder': 2.54.6(@babel/traverse@7.28.3)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(esbuild@0.17.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1) + '@modern-js/uni-builder': 2.54.6(@babel/traverse@7.28.4)(@rspack/core@1.4.11(@swc/helpers@0.5.3))(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19))(esbuild@0.17.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)))(webpack-hot-middleware@2.26.1) '@modern-js/utils': 2.54.6 '@rsbuild/core': 0.7.10 '@rsbuild/plugin-node-polyfill': 0.7.10(@rsbuild/core@0.7.10) @@ -33569,7 +36286,7 @@ snapshots: es-module-lexer: 1.7.0 esbuild: 0.17.19 esbuild-register: 3.6.0(esbuild@0.17.19) - mlly: 1.7.4 + mlly: 1.8.0 pkg-types: 1.3.1 std-env: 3.9.0 transitivePeerDependencies: @@ -33602,24 +36319,24 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@modern-js/app-tools@2.57.0(@rspack/core@1.4.11(@swc/helpers@0.5.11))(@swc/core@1.11.31(@swc/helpers@0.5.11))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19))(encoding@0.1.13)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.11))(@types/node@16.18.101)(typescript@4.9.5))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@4.9.5)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19)))(webpack-hot-middleware@2.26.1)': + '@modern-js/app-tools@2.57.0(@rspack/core@1.4.11(@swc/helpers@0.5.11))(@swc/core@1.11.31(@swc/helpers@0.5.11))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19))(encoding@0.1.13)(eslint@9.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.11))(@types/node@16.18.101)(typescript@4.9.5))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@4.9.5)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19)))(webpack-hot-middleware@2.26.1)': dependencies: - '@babel/parser': 7.28.3 - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 '@modern-js/core': 2.57.0 '@modern-js/node-bundle-require': 2.57.0 '@modern-js/plugin': 2.57.0 '@modern-js/plugin-data-loader': 2.57.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/plugin-i18n': 2.57.0 - '@modern-js/plugin-lint': 2.57.0(eslint@8.57.1) + '@modern-js/plugin-lint': 2.57.0(eslint@9.6.0) '@modern-js/prod-server': 2.57.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/rsbuild-plugin-esbuild': 2.57.0(@swc/core@1.11.31(@swc/helpers@0.5.11)) - '@modern-js/server': 2.57.0(@babel/traverse@7.28.3)(@rsbuild/core@1.0.1-beta.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.11))(@types/node@16.18.101)(typescript@4.9.5))(tsconfig-paths@4.2.0) + '@modern-js/server': 2.57.0(@babel/traverse@7.28.4)(@rsbuild/core@1.0.1-beta.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.11))(@types/node@16.18.101)(typescript@4.9.5))(tsconfig-paths@4.2.0) '@modern-js/server-core': 2.57.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 2.57.0(@babel/traverse@7.28.3)(@rsbuild/core@1.0.1-beta.3) + '@modern-js/server-utils': 2.57.0(@babel/traverse@7.28.4)(@rsbuild/core@1.0.1-beta.3) '@modern-js/types': 2.57.0 - '@modern-js/uni-builder': 2.57.0(@rspack/core@1.4.11(@swc/helpers@0.5.11))(@swc/core@1.11.31(@swc/helpers@0.5.11))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19))(esbuild@0.17.19)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(type-fest@2.19.0)(typescript@4.9.5)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19)))(webpack-hot-middleware@2.26.1) + '@modern-js/uni-builder': 2.57.0(@rspack/core@1.4.11(@swc/helpers@0.5.11))(@swc/core@1.11.31(@swc/helpers@0.5.11))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19))(esbuild@0.17.19)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(type-fest@2.19.0)(typescript@4.9.5)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19)))(webpack-hot-middleware@2.26.1) '@modern-js/utils': 2.57.0 '@rsbuild/core': 1.0.1-beta.3 '@rsbuild/plugin-node-polyfill': 1.0.3(@rsbuild/core@1.0.1-beta.3) @@ -33628,7 +36345,7 @@ snapshots: es-module-lexer: 1.7.0 esbuild: 0.17.19 esbuild-register: 3.6.0(esbuild@0.17.19) - mlly: 1.7.4 + mlly: 1.8.0 pkg-types: 1.3.1 std-env: 3.9.0 transitivePeerDependencies: @@ -33661,11 +36378,11 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@modern-js/app-tools@2.57.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(encoding@0.1.13)(eslint@9.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@4.9.5))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@4.9.5)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)': + '@modern-js/app-tools@2.57.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(encoding@0.1.13)(eslint@9.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@4.9.5))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@4.9.5)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)': dependencies: - '@babel/parser': 7.28.3 - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 '@modern-js/core': 2.57.0 '@modern-js/node-bundle-require': 2.57.0 '@modern-js/plugin': 2.57.0 @@ -33674,11 +36391,11 @@ snapshots: '@modern-js/plugin-lint': 2.57.0(eslint@9.6.0) '@modern-js/prod-server': 2.57.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/rsbuild-plugin-esbuild': 2.57.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) - '@modern-js/server': 2.57.0(@babel/traverse@7.28.3)(@rsbuild/core@1.0.1-beta.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@4.9.5))(tsconfig-paths@4.2.0) + '@modern-js/server': 2.57.0(@babel/traverse@7.28.4)(@rsbuild/core@1.0.1-beta.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@4.9.5))(tsconfig-paths@4.2.0) '@modern-js/server-core': 2.57.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 2.57.0(@babel/traverse@7.28.3)(@rsbuild/core@1.0.1-beta.3) + '@modern-js/server-utils': 2.57.0(@babel/traverse@7.28.4)(@rsbuild/core@1.0.1-beta.3) '@modern-js/types': 2.57.0 - '@modern-js/uni-builder': 2.57.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(esbuild@0.17.19)(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(type-fest@2.19.0)(typescript@4.9.5)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1) + '@modern-js/uni-builder': 2.57.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(esbuild@0.17.19)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(type-fest@2.19.0)(typescript@4.9.5)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1) '@modern-js/utils': 2.57.0 '@rsbuild/core': 1.0.1-beta.3 '@rsbuild/plugin-node-polyfill': 1.0.3(@rsbuild/core@1.0.1-beta.3) @@ -33687,7 +36404,7 @@ snapshots: es-module-lexer: 1.7.0 esbuild: 0.17.19 esbuild-register: 3.6.0(esbuild@0.17.19) - mlly: 1.7.4 + mlly: 1.8.0 pkg-types: 1.3.1 std-env: 3.9.0 transitivePeerDependencies: @@ -33720,11 +36437,11 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@modern-js/app-tools@2.68.6(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5))(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)))(webpack-hot-middleware@2.26.1)': + '@modern-js/app-tools@2.68.6(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)': dependencies: - '@babel/parser': 7.28.3 - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 '@modern-js/core': 2.68.6 '@modern-js/node-bundle-require': 2.68.6 '@modern-js/plugin': 2.68.6 @@ -33733,11 +36450,11 @@ snapshots: '@modern-js/plugin-v2': 2.68.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/prod-server': 2.68.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/rsbuild-plugin-esbuild': 2.68.6(@swc/core@1.11.31(@swc/helpers@0.5.17)) - '@modern-js/server': 2.68.6(@babel/traverse@7.28.3)(@rsbuild/core@1.4.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0) + '@modern-js/server': 2.68.6(@babel/traverse@7.28.4)(@rsbuild/core@1.4.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0) '@modern-js/server-core': 2.68.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 2.68.6(@babel/traverse@7.28.3)(@rsbuild/core@1.4.11) + '@modern-js/server-utils': 2.68.6(@babel/traverse@7.28.4)(@rsbuild/core@1.4.11) '@modern-js/types': 2.68.6 - '@modern-js/uni-builder': 2.68.6(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5))(esbuild@0.25.5)(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)))(webpack-hot-middleware@2.26.1) + '@modern-js/uni-builder': 2.68.6(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(esbuild@0.25.5)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1) '@modern-js/utils': 2.68.6 '@rsbuild/core': 1.4.11 '@rsbuild/plugin-node-polyfill': 1.4.0(@rsbuild/core@1.4.11) @@ -33746,12 +36463,12 @@ snapshots: esbuild: 0.25.5 esbuild-register: 3.6.0(esbuild@0.25.5) flatted: 3.3.3 - mlly: 1.7.4 + mlly: 1.8.0 ndepe: 0.1.12(encoding@0.1.13) pkg-types: 1.3.1 std-env: 3.9.0 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2) + ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3) tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@parcel/css' @@ -33780,11 +36497,11 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@modern-js/app-tools@2.68.6(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)': + '@modern-js/app-tools@2.68.6(@rspack/core@1.4.11(@swc/helpers@0.5.3))(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5))(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)))(webpack-hot-middleware@2.26.1)': dependencies: - '@babel/parser': 7.28.3 - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 '@modern-js/core': 2.68.6 '@modern-js/node-bundle-require': 2.68.6 '@modern-js/plugin': 2.68.6 @@ -33792,12 +36509,12 @@ snapshots: '@modern-js/plugin-i18n': 2.68.6 '@modern-js/plugin-v2': 2.68.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/prod-server': 2.68.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/rsbuild-plugin-esbuild': 2.68.6(@swc/core@1.11.31(@swc/helpers@0.5.17)) - '@modern-js/server': 2.68.6(@babel/traverse@7.28.3)(@rsbuild/core@1.4.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0) + '@modern-js/rsbuild-plugin-esbuild': 2.68.6(@swc/core@1.11.31(@swc/helpers@0.5.3)) + '@modern-js/server': 2.68.6(@babel/traverse@7.28.4)(@rsbuild/core@1.4.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0) '@modern-js/server-core': 2.68.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 2.68.6(@babel/traverse@7.28.3)(@rsbuild/core@1.4.11) + '@modern-js/server-utils': 2.68.6(@babel/traverse@7.28.4)(@rsbuild/core@1.4.11) '@modern-js/types': 2.68.6 - '@modern-js/uni-builder': 2.68.6(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(esbuild@0.25.5)(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1) + '@modern-js/uni-builder': 2.68.6(@rspack/core@1.4.11(@swc/helpers@0.5.3))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5))(esbuild@0.25.5)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)))(webpack-hot-middleware@2.26.1) '@modern-js/utils': 2.68.6 '@rsbuild/core': 1.4.11 '@rsbuild/plugin-node-polyfill': 1.4.0(@rsbuild/core@1.4.11) @@ -33806,12 +36523,12 @@ snapshots: esbuild: 0.25.5 esbuild-register: 3.6.0(esbuild@0.25.5) flatted: 3.3.3 - mlly: 1.7.4 + mlly: 1.8.0 ndepe: 0.1.12(encoding@0.1.13) pkg-types: 1.3.1 std-env: 3.9.0 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2) + ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3) tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@parcel/css' @@ -33866,7 +36583,7 @@ snapshots: '@modern-js/babel-compiler@2.68.6': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@modern-js/utils': 2.68.6 '@swc/helpers': 0.5.17 transitivePeerDependencies: @@ -33914,8 +36631,8 @@ snapshots: '@babel/plugin-transform-runtime': 7.24.7(@babel/core@7.24.7) '@babel/preset-env': 7.24.7(@babel/core@7.24.7) '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@babel/runtime': 7.28.3 - '@babel/types': 7.28.2 + '@babel/runtime': 7.28.4 + '@babel/types': 7.28.4 '@rsbuild/plugin-babel': 1.0.1-beta.3(@rsbuild/core@1.0.1-beta.3) '@swc/helpers': 0.5.3 '@types/babel__core': 7.20.5 @@ -33935,8 +36652,8 @@ snapshots: '@babel/plugin-transform-runtime': 7.24.7(@babel/core@7.24.7) '@babel/preset-env': 7.24.7(@babel/core@7.24.7) '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@babel/runtime': 7.28.3 - '@babel/types': 7.28.2 + '@babel/runtime': 7.28.4 + '@babel/types': 7.28.4 '@rsbuild/plugin-babel': 1.0.1-rc.4(@rsbuild/core@1.0.1-rc.4) '@swc/helpers': 0.5.3 '@types/babel__core': 7.20.5 @@ -33948,16 +36665,16 @@ snapshots: '@modern-js/babel-preset@2.68.6(@rsbuild/core@1.4.11)': dependencies: - '@babel/core': 7.28.3 - '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.3) - '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-proposal-partial-application': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-proposal-pipeline-operator': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-runtime': 7.24.7(@babel/core@7.28.3) - '@babel/preset-env': 7.28.3(@babel/core@7.28.3) - '@babel/preset-typescript': 7.27.1(@babel/core@7.28.3) - '@babel/runtime': 7.28.3 - '@babel/types': 7.28.2 + '@babel/core': 7.28.4 + '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-proposal-partial-application': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-proposal-pipeline-operator': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-runtime': 7.24.7(@babel/core@7.28.4) + '@babel/preset-env': 7.28.3(@babel/core@7.28.4) + '@babel/preset-typescript': 7.27.1(@babel/core@7.28.4) + '@babel/runtime': 7.28.4 + '@babel/types': 7.28.4 '@rsbuild/plugin-babel': 1.0.5(@rsbuild/core@1.4.11) '@swc/helpers': 0.5.17 '@types/babel__core': 7.20.5 @@ -33967,25 +36684,25 @@ snapshots: - '@rsbuild/core' - supports-color - '@modern-js/builder-rspack-provider@2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10)(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/express@4.17.21)(esbuild@0.17.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(typescript@5.6.2)': + '@modern-js/builder-rspack-provider@2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.11)(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/express@4.17.21)(esbuild@0.25.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3)': dependencies: '@babel/core': 7.24.7 '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@modern-js/builder-shared': 2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10)(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/express@4.17.21)(esbuild@0.17.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(typescript@5.6.2) - '@modern-js/server': 2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0) + '@modern-js/builder-shared': 2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.11)(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/express@4.17.21)(esbuild@0.25.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3) + '@modern-js/server': 2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.11)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0) '@modern-js/types': 2.46.1 '@modern-js/utils': 2.46.1 '@rspack/core': 0.4.5 '@rspack/plugin-html': 0.4.5(@rspack/core@0.4.5) '@rspack/plugin-react-refresh': 0.4.5(react-refresh@0.14.2) '@swc/helpers': 0.5.3 - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001743 core-js: 3.32.2 postcss: 8.4.31 react-refresh: 0.14.2 - rspack-manifest-plugin: 5.0.0-alpha0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) - style-loader: 3.3.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19) + rspack-manifest-plugin: 5.0.0-alpha0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) + style-loader: 3.3.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5) transitivePeerDependencies: - '@babel/traverse' - '@parcel/css' @@ -34010,24 +36727,24 @@ snapshots: - utf-8-validate - webpack-cli - '@modern-js/builder-rspack-provider@2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.11)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(esbuild@0.25.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(typescript@5.6.2)': + '@modern-js/builder-rspack-provider@2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3)': dependencies: '@babel/core': 7.24.7 '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@modern-js/builder-shared': 2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.11)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(esbuild@0.25.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(typescript@5.6.2) - '@modern-js/server': 2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.11)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0) + '@modern-js/builder-shared': 2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3) + '@modern-js/server': 2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0) '@modern-js/types': 2.46.1 '@modern-js/utils': 2.46.1 '@rspack/core': 0.4.5 '@rspack/plugin-html': 0.4.5(@rspack/core@0.4.5) '@rspack/plugin-react-refresh': 0.4.5(react-refresh@0.14.2) '@swc/helpers': 0.5.3 - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001743 core-js: 3.32.2 postcss: 8.4.31 react-refresh: 0.14.2 - rspack-manifest-plugin: 5.0.0-alpha0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) - style-loader: 3.3.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) + rspack-manifest-plugin: 5.0.0-alpha0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + style-loader: 3.3.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) transitivePeerDependencies: - '@babel/traverse' @@ -34053,25 +36770,25 @@ snapshots: - utf-8-validate - webpack-cli - '@modern-js/builder-rspack-provider@2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.12)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3)': + '@modern-js/builder-rspack-provider@2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3)': dependencies: '@babel/core': 7.24.7 '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@modern-js/builder-shared': 2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.12)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3) - '@modern-js/server': 2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.12)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0) + '@modern-js/builder-shared': 2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3) + '@modern-js/server': 2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0) '@modern-js/types': 2.46.1 '@modern-js/utils': 2.46.1 '@rspack/core': 0.4.5 '@rspack/plugin-html': 0.4.5(@rspack/core@0.4.5) '@rspack/plugin-react-refresh': 0.4.5(react-refresh@0.14.2) '@swc/helpers': 0.5.3 - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001743 core-js: 3.32.2 postcss: 8.4.31 react-refresh: 0.14.2 rspack-manifest-plugin: 5.0.0-alpha0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) style-loader: 3.3.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) transitivePeerDependencies: - '@babel/traverse' - '@parcel/css' @@ -34096,25 +36813,25 @@ snapshots: - utf-8-validate - webpack-cli - '@modern-js/builder-rspack-provider@2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.12)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(typescript@5.6.2)': + '@modern-js/builder-rspack-provider@2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12)(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/express@4.17.21)(esbuild@0.17.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3)': dependencies: '@babel/core': 7.24.7 '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@modern-js/builder-shared': 2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.12)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(typescript@5.6.2) - '@modern-js/server': 2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.12)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0) + '@modern-js/builder-shared': 2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12)(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/express@4.17.21)(esbuild@0.17.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3) + '@modern-js/server': 2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0) '@modern-js/types': 2.46.1 '@modern-js/utils': 2.46.1 '@rspack/core': 0.4.5 '@rspack/plugin-html': 0.4.5(@rspack/core@0.4.5) '@rspack/plugin-react-refresh': 0.4.5(react-refresh@0.14.2) '@swc/helpers': 0.5.3 - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001743 core-js: 3.32.2 postcss: 8.4.31 react-refresh: 0.14.2 - rspack-manifest-plugin: 5.0.0-alpha0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - style-loader: 3.3.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + rspack-manifest-plugin: 5.0.0-alpha0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) + style-loader: 3.3.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19) transitivePeerDependencies: - '@babel/traverse' - '@parcel/css' @@ -34139,72 +36856,25 @@ snapshots: - utf-8-validate - webpack-cli - '@modern-js/builder-rspack-provider@2.46.1(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(typescript@5.6.2)': + '@modern-js/builder-rspack-provider@2.46.1(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3)': dependencies: '@babel/core': 7.24.7 '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@modern-js/builder-shared': 2.46.1(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(typescript@5.6.2) - '@modern-js/server': 2.46.1(@babel/traverse@7.28.3)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0) + '@modern-js/builder-shared': 2.46.1(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3) + '@modern-js/server': 2.46.1(@babel/traverse@7.28.4)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0) '@modern-js/types': 2.46.1 '@modern-js/utils': 2.46.1 '@rspack/core': 0.4.5 '@rspack/plugin-html': 0.4.5(@rspack/core@0.4.5) '@rspack/plugin-react-refresh': 0.4.5(react-refresh@0.14.2) '@swc/helpers': 0.5.3 - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001743 core-js: 3.32.2 postcss: 8.4.31 react-refresh: 0.14.2 rspack-manifest-plugin: 5.0.0-alpha0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) style-loader: 3.3.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) - transitivePeerDependencies: - - '@babel/traverse' - - '@parcel/css' - - '@rsbuild/core' - - '@swc/core' - - '@swc/css' - - '@types/express' - - bufferutil - - clean-css - - csso - - debug - - devcert - - esbuild - - lightningcss - - react - - react-dom - - supports-color - - ts-node - - tsconfig-paths - - typescript - - uglify-js - - utf-8-validate - - webpack-cli - - '@modern-js/builder-shared@2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10)(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/express@4.17.21)(esbuild@0.17.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(typescript@5.6.2)': - dependencies: - '@babel/core': 7.24.7 - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 - '@modern-js/prod-server': 2.46.1(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server': 2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0) - '@modern-js/types': 2.46.1 - '@modern-js/utils': 2.46.1 - '@swc/helpers': 0.5.3 - acorn: 8.15.0 - caniuse-lite: 1.0.30001735 - css-minimizer-webpack-plugin: 5.0.1(esbuild@0.17.19)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) - cssnano: 6.0.1(postcss@8.4.31) - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) - htmlparser2: 9.0.0 - line-diff: 2.1.1 - postcss: 8.4.31 - source-map: 0.7.4 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19) - webpack-sources: 3.2.3 - zod: 3.25.76 - zod-validation-error: 1.2.0(zod@3.25.76) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) transitivePeerDependencies: - '@babel/traverse' - '@parcel/css' @@ -34229,26 +36899,26 @@ snapshots: - utf-8-validate - webpack-cli - '@modern-js/builder-shared@2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.11)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(esbuild@0.25.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(typescript@5.6.2)': + '@modern-js/builder-shared@2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.11)(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/express@4.17.21)(esbuild@0.25.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3)': dependencies: '@babel/core': 7.24.7 - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 '@modern-js/prod-server': 2.46.1(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server': 2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.11)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0) + '@modern-js/server': 2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.11)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0) '@modern-js/types': 2.46.1 '@modern-js/utils': 2.46.1 '@swc/helpers': 0.5.3 acorn: 8.15.0 - caniuse-lite: 1.0.30001735 - css-minimizer-webpack-plugin: 5.0.1(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) + caniuse-lite: 1.0.30001743 + css-minimizer-webpack-plugin: 5.0.1(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) cssnano: 6.0.1(postcss@8.4.31) - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) htmlparser2: 9.0.0 line-diff: 2.1.1 postcss: 8.4.31 source-map: 0.7.4 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5) webpack-sources: 3.2.3 zod: 3.25.76 zod-validation-error: 1.2.0(zod@3.25.76) @@ -34276,18 +36946,18 @@ snapshots: - utf-8-validate - webpack-cli - '@modern-js/builder-shared@2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.12)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3)': + '@modern-js/builder-shared@2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3)': dependencies: '@babel/core': 7.24.7 - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 '@modern-js/prod-server': 2.46.1(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server': 2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.12)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0) + '@modern-js/server': 2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0) '@modern-js/types': 2.46.1 '@modern-js/utils': 2.46.1 '@swc/helpers': 0.5.3 acorn: 8.15.0 - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001743 css-minimizer-webpack-plugin: 5.0.1(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) cssnano: 6.0.1(postcss@8.4.31) fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) @@ -34295,7 +36965,7 @@ snapshots: line-diff: 2.1.1 postcss: 8.4.31 source-map: 0.7.4 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) webpack-sources: 3.2.3 zod: 3.25.76 zod-validation-error: 1.2.0(zod@3.25.76) @@ -34323,26 +36993,26 @@ snapshots: - utf-8-validate - webpack-cli - '@modern-js/builder-shared@2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.12)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(typescript@5.6.2)': + '@modern-js/builder-shared@2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3)': dependencies: '@babel/core': 7.24.7 - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 '@modern-js/prod-server': 2.46.1(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server': 2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.12)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0) + '@modern-js/server': 2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0) '@modern-js/types': 2.46.1 '@modern-js/utils': 2.46.1 '@swc/helpers': 0.5.3 acorn: 8.15.0 - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001743 css-minimizer-webpack-plugin: 5.0.1(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) cssnano: 6.0.1(postcss@8.4.31) - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) htmlparser2: 9.0.0 line-diff: 2.1.1 postcss: 8.4.31 source-map: 0.7.4 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) webpack-sources: 3.2.3 zod: 3.25.76 zod-validation-error: 1.2.0(zod@3.25.76) @@ -34370,26 +37040,73 @@ snapshots: - utf-8-validate - webpack-cli - '@modern-js/builder-shared@2.46.1(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(typescript@5.6.2)': + '@modern-js/builder-shared@2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12)(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/express@4.17.21)(esbuild@0.17.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3)': dependencies: '@babel/core': 7.24.7 - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 '@modern-js/prod-server': 2.46.1(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server': 2.46.1(@babel/traverse@7.28.3)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0) + '@modern-js/server': 2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0) '@modern-js/types': 2.46.1 '@modern-js/utils': 2.46.1 '@swc/helpers': 0.5.3 acorn: 8.15.0 - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001743 + css-minimizer-webpack-plugin: 5.0.1(esbuild@0.17.19)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) + cssnano: 6.0.1(postcss@8.4.31) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) + htmlparser2: 9.0.0 + line-diff: 2.1.1 + postcss: 8.4.31 + source-map: 0.7.4 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19) + webpack-sources: 3.2.3 + zod: 3.25.76 + zod-validation-error: 1.2.0(zod@3.25.76) + transitivePeerDependencies: + - '@babel/traverse' + - '@parcel/css' + - '@rsbuild/core' + - '@swc/core' + - '@swc/css' + - '@types/express' + - bufferutil + - clean-css + - csso + - debug + - devcert + - esbuild + - lightningcss + - react + - react-dom + - supports-color + - ts-node + - tsconfig-paths + - typescript + - uglify-js + - utf-8-validate + - webpack-cli + + '@modern-js/builder-shared@2.46.1(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(typescript@5.5.3)': + dependencies: + '@babel/core': 7.24.7 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + '@modern-js/prod-server': 2.46.1(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/server': 2.46.1(@babel/traverse@7.28.4)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0) + '@modern-js/types': 2.46.1 + '@modern-js/utils': 2.46.1 + '@swc/helpers': 0.5.3 + acorn: 8.15.0 + caniuse-lite: 1.0.30001743 css-minimizer-webpack-plugin: 5.0.1(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) cssnano: 6.0.1(postcss@8.4.31) - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) htmlparser2: 9.0.0 line-diff: 2.1.1 postcss: 8.4.31 source-map: 0.7.4 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) webpack-sources: 3.2.3 zod: 3.25.76 zod-validation-error: 1.2.0(zod@3.25.76) @@ -34448,19 +37165,9 @@ snapshots: - supports-color - typescript - '@modern-js/eslint-config@2.54.6(@swc/helpers@0.5.17)(typescript@5.6.2)': + '@modern-js/eslint-config@2.54.6(@swc/helpers@0.5.3)(typescript@5.5.3)': dependencies: - '@modern-js-app/eslint-config': 2.54.6(@swc/helpers@0.5.17)(typescript@5.6.2) - transitivePeerDependencies: - - '@swc/helpers' - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - typescript - - '@modern-js/eslint-config@2.54.6(@swc/helpers@0.5.3)(typescript@5.6.2)': - dependencies: - '@modern-js-app/eslint-config': 2.54.6(@swc/helpers@0.5.3)(typescript@5.6.2) + '@modern-js-app/eslint-config': 2.54.6(@swc/helpers@0.5.3)(typescript@5.5.3) transitivePeerDependencies: - '@swc/helpers' - eslint-import-resolver-typescript @@ -34477,9 +37184,9 @@ snapshots: - supports-color - typescript - '@modern-js/eslint-config@2.59.0(typescript@5.6.2)': + '@modern-js/eslint-config@2.59.0(typescript@5.5.3)': dependencies: - '@modern-js-app/eslint-config': 2.59.0(typescript@5.6.2) + '@modern-js-app/eslint-config': 2.59.0(typescript@5.5.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -34538,7 +37245,7 @@ snapshots: '@modern-js/plugin-data-loader@2.68.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@modern-js/runtime-utils': 2.68.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/utils': 2.68.6 '@swc/helpers': 0.5.17 @@ -34563,16 +37270,6 @@ snapshots: '@modern-js/utils': 2.68.6 '@swc/helpers': 0.5.17 - '@modern-js/plugin-lint@2.54.6(eslint@8.57.1)': - dependencies: - '@modern-js/tsconfig': 2.54.6 - '@modern-js/utils': 2.54.6 - '@swc/helpers': 0.5.3 - cross-spawn: 7.0.3 - husky: 8.0.3 - optionalDependencies: - eslint: 8.57.1 - '@modern-js/plugin-lint@2.54.6(eslint@9.6.0)': dependencies: '@modern-js/tsconfig': 2.54.6 @@ -34583,16 +37280,6 @@ snapshots: optionalDependencies: eslint: 9.6.0 - '@modern-js/plugin-lint@2.57.0(eslint@8.57.1)': - dependencies: - '@modern-js/tsconfig': 2.57.0 - '@modern-js/utils': 2.57.0 - '@swc/helpers': 0.5.3 - cross-spawn: 7.0.3 - husky: 8.0.3 - optionalDependencies: - eslint: 8.57.1 - '@modern-js/plugin-lint@2.57.0(eslint@9.6.0)': dependencies: '@modern-js/tsconfig': 2.57.0 @@ -34750,6 +37437,16 @@ snapshots: - uglify-js - webpack-cli + '@modern-js/rsbuild-plugin-esbuild@2.68.6(@swc/core@1.11.31(@swc/helpers@0.5.3))': + dependencies: + '@swc/helpers': 0.5.17 + esbuild: 0.25.5 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5) + transitivePeerDependencies: + - '@swc/core' + - uglify-js + - webpack-cli + '@modern-js/runtime-utils@2.46.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@modern-js/utils': 2.46.1 @@ -34802,7 +37499,7 @@ snapshots: '@modern-js/runtime@2.54.6(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: '@babel/core': 7.24.7 - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@loadable/babel-plugin': 5.15.3(@babel/core@7.24.7) '@loadable/component': 5.15.3(react@18.3.1) '@loadable/server': 5.15.3(@loadable/component@5.15.3(react@18.3.1))(react@18.3.1) @@ -34842,7 +37539,7 @@ snapshots: '@modern-js/runtime@2.54.6(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19))': dependencies: '@babel/core': 7.24.7 - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@loadable/babel-plugin': 5.15.3(@babel/core@7.24.7) '@loadable/component': 5.15.3(react@18.3.1) '@loadable/server': 5.15.3(@loadable/component@5.15.3(react@18.3.1))(react@18.3.1) @@ -34882,7 +37579,7 @@ snapshots: '@modern-js/runtime@2.57.0(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/core': 7.24.7 - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@loadable/babel-plugin': 5.15.3(@babel/core@7.24.7) '@loadable/component': 5.15.3(react@18.3.1) '@loadable/server': 5.15.3(@loadable/component@5.15.3(react@18.3.1))(react@18.3.1) @@ -34919,9 +37616,9 @@ snapshots: '@modern-js/runtime@2.68.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/core': 7.28.3 - '@babel/types': 7.28.2 - '@loadable/babel-plugin': 5.15.3(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/types': 7.28.4 + '@loadable/babel-plugin': 5.15.3(@babel/core@7.28.4) '@loadable/component': 5.15.3(react@18.3.1) '@loadable/server': 5.15.3(@loadable/component@5.15.3(react@18.3.1))(react@18.3.1) '@modern-js/plugin': 2.68.6 @@ -34945,7 +37642,7 @@ snapshots: react-helmet: 6.1.0(react@18.3.1) react-is: 18.3.1 react-side-effect: 2.1.2(react@18.3.1) - styled-components: 5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1) + styled-components: 5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1) transitivePeerDependencies: - supports-color @@ -35004,25 +37701,7 @@ snapshots: - react - react-dom - '@modern-js/server-utils@2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10)': - dependencies: - '@babel/core': 7.24.7 - '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.24.7) - '@babel/preset-env': 7.24.7(@babel/core@7.24.7) - '@babel/preset-react': 7.24.7(@babel/core@7.24.7) - '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@modern-js/babel-compiler': 2.46.1 - '@modern-js/babel-plugin-module-resolver': 2.46.1 - '@modern-js/utils': 2.46.1 - '@rsbuild/babel-preset': 0.3.4(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) - '@swc/helpers': 0.5.3 - babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.3) - transitivePeerDependencies: - - '@babel/traverse' - - '@rsbuild/core' - - supports-color - - '@modern-js/server-utils@2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.11)': + '@modern-js/server-utils@2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.11)': dependencies: '@babel/core': 7.24.7 '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.24.7) @@ -35034,13 +37713,13 @@ snapshots: '@modern-js/utils': 2.46.1 '@rsbuild/babel-preset': 0.3.4(@rsbuild/core@1.4.11)(@swc/helpers@0.5.3) '@swc/helpers': 0.5.3 - babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.3) + babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.4) transitivePeerDependencies: - '@babel/traverse' - '@rsbuild/core' - supports-color - '@modern-js/server-utils@2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.12)': + '@modern-js/server-utils@2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12)': dependencies: '@babel/core': 7.24.7 '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.24.7) @@ -35052,13 +37731,13 @@ snapshots: '@modern-js/utils': 2.46.1 '@rsbuild/babel-preset': 0.3.4(@rsbuild/core@1.4.12)(@swc/helpers@0.5.3) '@swc/helpers': 0.5.3 - babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.3) + babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.4) transitivePeerDependencies: - '@babel/traverse' - '@rsbuild/core' - supports-color - '@modern-js/server-utils@2.54.6(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10)': + '@modern-js/server-utils@2.54.6(@babel/traverse@7.28.4)(@rsbuild/core@0.7.10)': dependencies: '@babel/core': 7.24.7 '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.24.7) @@ -35070,13 +37749,13 @@ snapshots: '@modern-js/utils': 2.54.6 '@rsbuild/babel-preset': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) '@swc/helpers': 0.5.3 - babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.3) + babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.4) transitivePeerDependencies: - '@babel/traverse' - '@rsbuild/core' - supports-color - '@modern-js/server-utils@2.57.0(@babel/traverse@7.28.3)(@rsbuild/core@1.0.1-beta.3)': + '@modern-js/server-utils@2.57.0(@babel/traverse@7.28.4)(@rsbuild/core@1.0.1-beta.3)': dependencies: '@babel/core': 7.24.7 '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.24.7) @@ -35088,37 +37767,37 @@ snapshots: '@modern-js/babel-preset': 2.57.0(@rsbuild/core@1.0.1-beta.3) '@modern-js/utils': 2.57.0 '@swc/helpers': 0.5.3 - babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.3) + babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.4) transitivePeerDependencies: - '@babel/traverse' - '@rsbuild/core' - supports-color - '@modern-js/server-utils@2.68.6(@babel/traverse@7.28.3)(@rsbuild/core@1.4.11)': + '@modern-js/server-utils@2.68.6(@babel/traverse@7.28.4)(@rsbuild/core@1.4.11)': dependencies: - '@babel/core': 7.28.3 - '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.3) - '@babel/preset-env': 7.28.3(@babel/core@7.28.3) - '@babel/preset-react': 7.24.7(@babel/core@7.28.3) - '@babel/preset-typescript': 7.27.1(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.4) + '@babel/preset-env': 7.28.3(@babel/core@7.28.4) + '@babel/preset-react': 7.24.7(@babel/core@7.28.4) + '@babel/preset-typescript': 7.27.1(@babel/core@7.28.4) '@modern-js/babel-compiler': 2.68.6 '@modern-js/babel-plugin-module-resolver': 2.68.6 '@modern-js/babel-preset': 2.68.6(@rsbuild/core@1.4.11) '@modern-js/utils': 2.68.6 '@swc/helpers': 0.5.17 - babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.28.3)(@babel/traverse@7.28.3) + babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.28.4)(@babel/traverse@7.28.4) transitivePeerDependencies: - '@babel/traverse' - '@rsbuild/core' - supports-color - '@modern-js/server@2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)': + '@modern-js/server@2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.11)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)': dependencies: '@babel/core': 7.24.7 '@babel/register': 7.28.3(@babel/core@7.24.7) '@modern-js/prod-server': 2.46.1(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/runtime-utils': 2.46.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10) + '@modern-js/server-utils': 2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.11) '@modern-js/types': 2.46.1 '@modern-js/utils': 2.46.1 '@swc/helpers': 0.5.3 @@ -35129,7 +37808,7 @@ snapshots: path-to-regexp: 6.3.0 ws: 8.18.3 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.16.5)(typescript@5.6.2) + ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3) tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@babel/traverse' @@ -35142,13 +37821,13 @@ snapshots: - supports-color - utf-8-validate - '@modern-js/server@2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.11)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)': + '@modern-js/server@2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0)': dependencies: '@babel/core': 7.24.7 '@babel/register': 7.28.3(@babel/core@7.24.7) '@modern-js/prod-server': 2.46.1(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/runtime-utils': 2.46.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.11) + '@modern-js/server-utils': 2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12) '@modern-js/types': 2.46.1 '@modern-js/utils': 2.46.1 '@swc/helpers': 0.5.3 @@ -35159,7 +37838,7 @@ snapshots: path-to-regexp: 6.3.0 ws: 8.18.3 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2) + ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3) tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@babel/traverse' @@ -35172,13 +37851,13 @@ snapshots: - supports-color - utf-8-validate - '@modern-js/server@2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.12)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0)': + '@modern-js/server@2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)': dependencies: '@babel/core': 7.24.7 '@babel/register': 7.28.3(@babel/core@7.24.7) '@modern-js/prod-server': 2.46.1(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/runtime-utils': 2.46.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.12) + '@modern-js/server-utils': 2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12) '@modern-js/types': 2.46.1 '@modern-js/utils': 2.46.1 '@swc/helpers': 0.5.3 @@ -35189,7 +37868,7 @@ snapshots: path-to-regexp: 6.3.0 ws: 8.18.3 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3) + ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3) tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@babel/traverse' @@ -35202,13 +37881,13 @@ snapshots: - supports-color - utf-8-validate - '@modern-js/server@2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.12)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)': + '@modern-js/server@2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)': dependencies: '@babel/core': 7.24.7 '@babel/register': 7.28.3(@babel/core@7.24.7) '@modern-js/prod-server': 2.46.1(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/runtime-utils': 2.46.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.12) + '@modern-js/server-utils': 2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12) '@modern-js/types': 2.46.1 '@modern-js/utils': 2.46.1 '@swc/helpers': 0.5.3 @@ -35219,7 +37898,7 @@ snapshots: path-to-regexp: 6.3.0 ws: 8.18.3 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2) + ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3) tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@babel/traverse' @@ -35232,13 +37911,13 @@ snapshots: - supports-color - utf-8-validate - '@modern-js/server@2.46.1(@babel/traverse@7.28.3)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)': + '@modern-js/server@2.46.1(@babel/traverse@7.28.4)(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)': dependencies: '@babel/core': 7.24.7 '@babel/register': 7.28.3(@babel/core@7.24.7) '@modern-js/prod-server': 2.46.1(@types/express@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/runtime-utils': 2.46.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 2.46.1(@babel/traverse@7.28.3)(@rsbuild/core@1.4.11) + '@modern-js/server-utils': 2.46.1(@babel/traverse@7.28.4)(@rsbuild/core@1.4.12) '@modern-js/types': 2.46.1 '@modern-js/utils': 2.46.1 '@swc/helpers': 0.5.3 @@ -35249,7 +37928,7 @@ snapshots: path-to-regexp: 6.3.0 ws: 8.18.3 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2) + ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3) tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@babel/traverse' @@ -35262,13 +37941,13 @@ snapshots: - supports-color - utf-8-validate - '@modern-js/server@2.54.6(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0)': + '@modern-js/server@2.54.6(@babel/traverse@7.28.4)(@rsbuild/core@0.7.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0)': dependencies: '@babel/core': 7.24.7 '@babel/register': 7.28.3(@babel/core@7.24.7) '@modern-js/runtime-utils': 2.54.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/server-core': 2.54.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 2.54.6(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10) + '@modern-js/server-utils': 2.54.6(@babel/traverse@7.28.4)(@rsbuild/core@0.7.10) '@modern-js/types': 2.54.6 '@modern-js/utils': 2.54.6 '@swc/helpers': 0.5.3 @@ -35291,13 +37970,13 @@ snapshots: - supports-color - utf-8-validate - '@modern-js/server@2.54.6(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)': + '@modern-js/server@2.54.6(@babel/traverse@7.28.4)(@rsbuild/core@0.7.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)': dependencies: '@babel/core': 7.24.7 '@babel/register': 7.28.3(@babel/core@7.24.7) '@modern-js/runtime-utils': 2.54.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/server-core': 2.54.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 2.54.6(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10) + '@modern-js/server-utils': 2.54.6(@babel/traverse@7.28.4)(@rsbuild/core@0.7.10) '@modern-js/types': 2.54.6 '@modern-js/utils': 2.54.6 '@swc/helpers': 0.5.3 @@ -35308,7 +37987,7 @@ snapshots: path-to-regexp: 6.3.0 ws: 8.18.3 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2) + ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3) tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@babel/traverse' @@ -35320,13 +37999,13 @@ snapshots: - supports-color - utf-8-validate - '@modern-js/server@2.54.6(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)': + '@modern-js/server@2.54.6(@babel/traverse@7.28.4)(@rsbuild/core@0.7.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)': dependencies: '@babel/core': 7.24.7 '@babel/register': 7.28.3(@babel/core@7.24.7) '@modern-js/runtime-utils': 2.54.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/server-core': 2.54.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 2.54.6(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10) + '@modern-js/server-utils': 2.54.6(@babel/traverse@7.28.4)(@rsbuild/core@0.7.10) '@modern-js/types': 2.54.6 '@modern-js/utils': 2.54.6 '@swc/helpers': 0.5.3 @@ -35337,7 +38016,7 @@ snapshots: path-to-regexp: 6.3.0 ws: 8.18.3 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.16.5)(typescript@5.6.2) + ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3) tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@babel/traverse' @@ -35349,13 +38028,13 @@ snapshots: - supports-color - utf-8-validate - '@modern-js/server@2.57.0(@babel/traverse@7.28.3)(@rsbuild/core@1.0.1-beta.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.11))(@types/node@16.18.101)(typescript@4.9.5))(tsconfig-paths@4.2.0)': + '@modern-js/server@2.57.0(@babel/traverse@7.28.4)(@rsbuild/core@1.0.1-beta.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.11))(@types/node@16.18.101)(typescript@4.9.5))(tsconfig-paths@4.2.0)': dependencies: '@babel/core': 7.24.7 '@babel/register': 7.28.3(@babel/core@7.24.7) '@modern-js/runtime-utils': 2.57.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/server-core': 2.57.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 2.57.0(@babel/traverse@7.28.3)(@rsbuild/core@1.0.1-beta.3) + '@modern-js/server-utils': 2.57.0(@babel/traverse@7.28.4)(@rsbuild/core@1.0.1-beta.3) '@modern-js/types': 2.57.0 '@modern-js/utils': 2.57.0 '@swc/helpers': 0.5.3 @@ -35378,13 +38057,13 @@ snapshots: - supports-color - utf-8-validate - '@modern-js/server@2.57.0(@babel/traverse@7.28.3)(@rsbuild/core@1.0.1-beta.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@4.9.5))(tsconfig-paths@4.2.0)': + '@modern-js/server@2.57.0(@babel/traverse@7.28.4)(@rsbuild/core@1.0.1-beta.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@4.9.5))(tsconfig-paths@4.2.0)': dependencies: '@babel/core': 7.24.7 '@babel/register': 7.28.3(@babel/core@7.24.7) '@modern-js/runtime-utils': 2.57.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/server-core': 2.57.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 2.57.0(@babel/traverse@7.28.3)(@rsbuild/core@1.0.1-beta.3) + '@modern-js/server-utils': 2.57.0(@babel/traverse@7.28.4)(@rsbuild/core@1.0.1-beta.3) '@modern-js/types': 2.57.0 '@modern-js/utils': 2.57.0 '@swc/helpers': 0.5.3 @@ -35407,13 +38086,13 @@ snapshots: - supports-color - utf-8-validate - '@modern-js/server@2.68.6(@babel/traverse@7.28.3)(@rsbuild/core@1.4.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)': + '@modern-js/server@2.68.6(@babel/traverse@7.28.4)(@rsbuild/core@1.4.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)': dependencies: - '@babel/core': 7.28.3 - '@babel/register': 7.28.3(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/register': 7.28.3(@babel/core@7.28.4) '@modern-js/runtime-utils': 2.68.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/server-core': 2.68.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 2.68.6(@babel/traverse@7.28.3)(@rsbuild/core@1.4.11) + '@modern-js/server-utils': 2.68.6(@babel/traverse@7.28.4)(@rsbuild/core@1.4.11) '@modern-js/types': 2.68.6 '@modern-js/utils': 2.68.6 '@swc/helpers': 0.5.17 @@ -35424,7 +38103,36 @@ snapshots: path-to-regexp: 6.3.0 ws: 8.18.3 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2) + ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3) + tsconfig-paths: 4.2.0 + transitivePeerDependencies: + - '@babel/traverse' + - '@rsbuild/core' + - bufferutil + - debug + - react + - react-dom + - supports-color + - utf-8-validate + + '@modern-js/server@2.68.6(@babel/traverse@7.28.4)(@rsbuild/core@1.4.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)': + dependencies: + '@babel/core': 7.28.4 + '@babel/register': 7.28.3(@babel/core@7.28.4) + '@modern-js/runtime-utils': 2.68.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/server-core': 2.68.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/server-utils': 2.68.6(@babel/traverse@7.28.4)(@rsbuild/core@1.4.11) + '@modern-js/types': 2.68.6 + '@modern-js/utils': 2.68.6 + '@swc/helpers': 0.5.17 + axios: 1.7.7 + connect-history-api-fallback: 2.0.0 + http-compression: 1.0.6 + minimatch: 3.1.2 + path-to-regexp: 6.3.0 + ws: 8.18.3 + optionalDependencies: + ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3) tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@babel/traverse' @@ -35450,21 +38158,21 @@ snapshots: '@modern-js/types@2.68.6': {} - '@modern-js/uni-builder@2.54.6(@babel/traverse@7.28.3)(@rspack/core@0.4.5)(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19))(esbuild@0.17.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)))(webpack-hot-middleware@2.26.1)': + '@modern-js/uni-builder@2.54.6(@babel/traverse@7.28.4)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(esbuild@0.17.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)': dependencies: '@babel/core': 7.24.7 '@babel/preset-react': 7.24.7(@babel/core@7.24.7) - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@modern-js/prod-server': 2.54.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server': 2.54.6(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0) + '@modern-js/server': 2.54.6(@babel/traverse@7.28.4)(@rsbuild/core@0.7.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0) '@modern-js/utils': 2.54.6 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19))(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@rsbuild/babel-preset': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) '@rsbuild/core': 0.7.10 '@rsbuild/plugin-assets-retry': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) '@rsbuild/plugin-babel': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) '@rsbuild/plugin-check-syntax': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) - '@rsbuild/plugin-css-minimizer': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3)(esbuild@0.17.19)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) + '@rsbuild/plugin-css-minimizer': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3)(esbuild@0.17.19)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@rsbuild/plugin-less': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) '@rsbuild/plugin-pug': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) '@rsbuild/plugin-react': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) @@ -35472,21 +38180,21 @@ snapshots: '@rsbuild/plugin-sass': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) '@rsbuild/plugin-source-build': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) '@rsbuild/plugin-styled-components': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) - '@rsbuild/plugin-svgr': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3)(typescript@5.6.2) + '@rsbuild/plugin-svgr': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3)(typescript@5.5.3) '@rsbuild/plugin-toml': 0.7.10(@rsbuild/core@0.7.10) - '@rsbuild/plugin-type-check': 0.7.10(@rsbuild/core@0.7.10)(@swc/core@1.11.31(@swc/helpers@0.5.3))(@swc/helpers@0.5.3)(esbuild@0.17.19)(typescript@5.6.2) + '@rsbuild/plugin-type-check': 0.7.10(@rsbuild/core@0.7.10)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@swc/helpers@0.5.3)(esbuild@0.17.19)(typescript@5.5.3) '@rsbuild/plugin-typed-css-modules': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) '@rsbuild/plugin-yaml': 0.7.10(@rsbuild/core@0.7.10) '@rsbuild/shared': 0.7.10(@swc/helpers@0.5.3) - '@rsbuild/webpack': 0.7.10(@swc/core@1.11.31(@swc/helpers@0.5.3))(@swc/helpers@0.5.3)(esbuild@0.17.19) + '@rsbuild/webpack': 0.7.10(@swc/core@1.11.31(@swc/helpers@0.5.17))(@swc/helpers@0.5.3)(esbuild@0.17.19) '@swc/helpers': 0.5.3 - babel-loader: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) + babel-loader: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) babel-plugin-import: 1.13.5 - babel-plugin-styled-components: 1.13.3(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)) + babel-plugin-styled-components: 1.13.3(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)) babel-plugin-transform-react-remove-prop-types: 0.4.24 cssnano: 6.0.1(postcss@8.4.47) glob: 9.3.5 - html-webpack-plugin: 5.5.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) + html-webpack-plugin: 5.5.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) lodash: 4.17.21 postcss: 8.4.47 postcss-custom-properties: 13.1.5(postcss@8.4.47) @@ -35497,11 +38205,11 @@ snapshots: postcss-nesting: 12.0.1(postcss@8.4.47) postcss-page-break: 3.0.4(postcss@8.4.47) react-refresh: 0.14.2 - rspack-manifest-plugin: 5.0.0(@rspack/core@0.4.5) - terser-webpack-plugin: 5.3.10(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) - ts-loader: 9.4.4(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19) - webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.5.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) + rspack-manifest-plugin: 5.0.0(@rspack/core@1.4.11(@swc/helpers@0.5.17)) + terser-webpack-plugin: 5.3.10(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.19)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + ts-loader: 9.4.4(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.19) + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.5.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) transitivePeerDependencies: - '@babel/traverse' - '@parcel/css' @@ -35532,13 +38240,13 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@modern-js/uni-builder@2.54.6(@babel/traverse@7.28.3)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(esbuild@0.17.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)': + '@modern-js/uni-builder@2.54.6(@babel/traverse@7.28.4)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(esbuild@0.17.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)': dependencies: '@babel/core': 7.24.7 '@babel/preset-react': 7.24.7(@babel/core@7.24.7) - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@modern-js/prod-server': 2.54.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server': 2.54.6(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@16.18.101)(typescript@5.5.3))(tsconfig-paths@4.2.0) + '@modern-js/server': 2.54.6(@babel/traverse@7.28.4)(@rsbuild/core@0.7.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0) '@modern-js/utils': 2.54.6 '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@rsbuild/babel-preset': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) @@ -35564,7 +38272,7 @@ snapshots: '@swc/helpers': 0.5.3 babel-loader: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) babel-plugin-import: 1.13.5 - babel-plugin-styled-components: 1.13.3(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)) + babel-plugin-styled-components: 1.13.3(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)) babel-plugin-transform-react-remove-prop-types: 0.4.24 cssnano: 6.0.1(postcss@8.4.47) glob: 9.3.5 @@ -35614,21 +38322,21 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@modern-js/uni-builder@2.54.6(@babel/traverse@7.28.3)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(esbuild@0.17.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)': + '@modern-js/uni-builder@2.54.6(@babel/traverse@7.28.4)(@rspack/core@1.4.11(@swc/helpers@0.5.3))(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19))(esbuild@0.17.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0)(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)))(webpack-hot-middleware@2.26.1)': dependencies: '@babel/core': 7.24.7 '@babel/preset-react': 7.24.7(@babel/core@7.24.7) - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@modern-js/prod-server': 2.54.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server': 2.54.6(@babel/traverse@7.28.3)(@rsbuild/core@0.7.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(tsconfig-paths@4.2.0) + '@modern-js/server': 2.54.6(@babel/traverse@7.28.4)(@rsbuild/core@0.7.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3))(tsconfig-paths@4.2.0) '@modern-js/utils': 2.54.6 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19))(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) '@rsbuild/babel-preset': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) '@rsbuild/core': 0.7.10 '@rsbuild/plugin-assets-retry': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) '@rsbuild/plugin-babel': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) '@rsbuild/plugin-check-syntax': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) - '@rsbuild/plugin-css-minimizer': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3)(esbuild@0.17.19)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@rsbuild/plugin-css-minimizer': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3)(esbuild@0.17.19)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) '@rsbuild/plugin-less': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) '@rsbuild/plugin-pug': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) '@rsbuild/plugin-react': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) @@ -35636,21 +38344,21 @@ snapshots: '@rsbuild/plugin-sass': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) '@rsbuild/plugin-source-build': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) '@rsbuild/plugin-styled-components': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) - '@rsbuild/plugin-svgr': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3)(typescript@5.6.2) + '@rsbuild/plugin-svgr': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3)(typescript@5.5.3) '@rsbuild/plugin-toml': 0.7.10(@rsbuild/core@0.7.10) - '@rsbuild/plugin-type-check': 0.7.10(@rsbuild/core@0.7.10)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@swc/helpers@0.5.3)(esbuild@0.17.19)(typescript@5.6.2) + '@rsbuild/plugin-type-check': 0.7.10(@rsbuild/core@0.7.10)(@swc/core@1.11.31(@swc/helpers@0.5.3))(@swc/helpers@0.5.3)(esbuild@0.17.19)(typescript@5.5.3) '@rsbuild/plugin-typed-css-modules': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) '@rsbuild/plugin-yaml': 0.7.10(@rsbuild/core@0.7.10) '@rsbuild/shared': 0.7.10(@swc/helpers@0.5.3) - '@rsbuild/webpack': 0.7.10(@swc/core@1.11.31(@swc/helpers@0.5.17))(@swc/helpers@0.5.3)(esbuild@0.17.19) + '@rsbuild/webpack': 0.7.10(@swc/core@1.11.31(@swc/helpers@0.5.3))(@swc/helpers@0.5.3)(esbuild@0.17.19) '@swc/helpers': 0.5.3 - babel-loader: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + babel-loader: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) babel-plugin-import: 1.13.5 - babel-plugin-styled-components: 1.13.3(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)) + babel-plugin-styled-components: 1.13.3(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)) babel-plugin-transform-react-remove-prop-types: 0.4.24 cssnano: 6.0.1(postcss@8.4.47) glob: 9.3.5 - html-webpack-plugin: 5.5.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + html-webpack-plugin: 5.5.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) lodash: 4.17.21 postcss: 8.4.47 postcss-custom-properties: 13.1.5(postcss@8.4.47) @@ -35661,11 +38369,11 @@ snapshots: postcss-nesting: 12.0.1(postcss@8.4.47) postcss-page-break: 3.0.4(postcss@8.4.47) react-refresh: 0.14.2 - rspack-manifest-plugin: 5.0.0(@rspack/core@1.4.11(@swc/helpers@0.5.17)) - terser-webpack-plugin: 5.3.10(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.19)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - ts-loader: 9.4.4(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.19) - webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.5.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + rspack-manifest-plugin: 5.0.0(@rspack/core@1.4.11(@swc/helpers@0.5.3)) + terser-webpack-plugin: 5.3.10(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) + ts-loader: 9.4.4(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19) + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.5.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) transitivePeerDependencies: - '@babel/traverse' - '@parcel/css' @@ -35696,11 +38404,11 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@modern-js/uni-builder@2.57.0(@rspack/core@1.4.11(@swc/helpers@0.5.11))(@swc/core@1.11.31(@swc/helpers@0.5.11))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19))(esbuild@0.17.19)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(type-fest@2.19.0)(typescript@4.9.5)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19)))(webpack-hot-middleware@2.26.1)': + '@modern-js/uni-builder@2.57.0(@rspack/core@1.4.11(@swc/helpers@0.5.11))(@swc/core@1.11.31(@swc/helpers@0.5.11))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19))(esbuild@0.17.19)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(type-fest@2.19.0)(typescript@4.9.5)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19)))(webpack-hot-middleware@2.26.1)': dependencies: '@babel/core': 7.24.7 '@babel/preset-react': 7.24.7(@babel/core@7.24.7) - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@modern-js/babel-preset': 2.57.0(@rsbuild/core@1.0.1-beta.3) '@modern-js/utils': 2.57.0 '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19))(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19)))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19)) @@ -35725,7 +38433,7 @@ snapshots: '@swc/helpers': 0.5.3 babel-loader: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19)) babel-plugin-import: 1.13.5 - babel-plugin-styled-components: 1.13.3(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)) + babel-plugin-styled-components: 1.13.3(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)) babel-plugin-transform-react-remove-prop-types: 0.4.24 browserslist: 4.23.1 cssnano: 6.0.1(postcss@8.4.47) @@ -35770,11 +38478,11 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@modern-js/uni-builder@2.57.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(esbuild@0.17.19)(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(type-fest@2.19.0)(typescript@4.9.5)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)': + '@modern-js/uni-builder@2.57.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(esbuild@0.17.19)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(type-fest@2.19.0)(typescript@4.9.5)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)': dependencies: '@babel/core': 7.24.7 '@babel/preset-react': 7.24.7(@babel/core@7.24.7) - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@modern-js/babel-preset': 2.57.0(@rsbuild/core@1.0.1-beta.3) '@modern-js/utils': 2.57.0 '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) @@ -35799,7 +38507,7 @@ snapshots: '@swc/helpers': 0.5.3 babel-loader: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) babel-plugin-import: 1.13.5 - babel-plugin-styled-components: 1.13.3(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)) + babel-plugin-styled-components: 1.13.3(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)) babel-plugin-transform-react-remove-prop-types: 0.4.24 browserslist: 4.23.1 cssnano: 6.0.1(postcss@8.4.47) @@ -35844,20 +38552,20 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@modern-js/uni-builder@2.68.6(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5))(esbuild@0.25.5)(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)))(webpack-hot-middleware@2.26.1)': + '@modern-js/uni-builder@2.68.6(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(esbuild@0.25.5)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)': dependencies: - '@babel/core': 7.28.3 - '@babel/preset-react': 7.24.7(@babel/core@7.28.3) - '@babel/types': 7.28.2 + '@babel/core': 7.28.4 + '@babel/preset-react': 7.24.7(@babel/core@7.28.4) + '@babel/types': 7.28.4 '@modern-js/babel-preset': 2.68.6(@rsbuild/core@1.4.11) '@modern-js/flight-server-transform-plugin': 2.68.6 '@modern-js/utils': 2.68.6 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.16(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5))(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.16(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@rsbuild/core': 1.4.11 '@rsbuild/plugin-assets-retry': 1.4.0(@rsbuild/core@1.4.11) '@rsbuild/plugin-babel': 1.0.5(@rsbuild/core@1.4.11) '@rsbuild/plugin-check-syntax': 1.3.0(@rsbuild/core@1.4.11) - '@rsbuild/plugin-css-minimizer': 1.0.2(@rsbuild/core@1.4.11)(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) + '@rsbuild/plugin-css-minimizer': 1.0.2(@rsbuild/core@1.4.11)(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@rsbuild/plugin-less': 1.3.1(@rsbuild/core@1.4.11) '@rsbuild/plugin-pug': 1.3.1(@rsbuild/core@1.4.11) '@rsbuild/plugin-react': 1.3.4(@rsbuild/core@1.4.11)(webpack-hot-middleware@2.26.1) @@ -35865,25 +38573,25 @@ snapshots: '@rsbuild/plugin-sass': 1.3.3(@rsbuild/core@1.4.11) '@rsbuild/plugin-source-build': 1.0.2(@rsbuild/core@1.4.11) '@rsbuild/plugin-styled-components': 1.4.0(@rsbuild/core@1.4.11) - '@rsbuild/plugin-svgr': 1.2.1(@rsbuild/core@1.4.11)(typescript@5.6.2)(webpack-hot-middleware@2.26.1) + '@rsbuild/plugin-svgr': 1.2.1(@rsbuild/core@1.4.11)(typescript@5.5.3)(webpack-hot-middleware@2.26.1) '@rsbuild/plugin-toml': 1.1.0(@rsbuild/core@1.4.11) - '@rsbuild/plugin-type-check': 1.2.3(@rsbuild/core@1.4.11)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(typescript@5.6.2) + '@rsbuild/plugin-type-check': 1.2.3(@rsbuild/core@1.4.11)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(typescript@5.5.3) '@rsbuild/plugin-typed-css-modules': 1.0.2(@rsbuild/core@1.4.11) '@rsbuild/plugin-yaml': 1.0.2(@rsbuild/core@1.4.11) '@rsbuild/webpack': 1.3.2(@rsbuild/core@1.4.11)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) '@swc/core': 1.11.31(@swc/helpers@0.5.17) '@swc/helpers': 0.5.17 autoprefixer: 10.4.21(postcss@8.5.6) - babel-loader: 9.2.1(@babel/core@7.28.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) + babel-loader: 9.2.1(@babel/core@7.28.4)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) babel-plugin-import: 1.13.8 - babel-plugin-styled-components: 1.13.3(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)) + babel-plugin-styled-components: 1.13.3(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)) babel-plugin-transform-react-remove-prop-types: 0.4.24 browserslist: 4.24.4 cssnano: 6.1.2(postcss@8.5.6) es-module-lexer: 1.7.0 glob: 9.3.5 html-minifier-terser: 7.2.0 - html-webpack-plugin: 5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) + html-webpack-plugin: 5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) jiti: 1.21.7 lodash: 4.17.21 magic-string: 0.30.17 @@ -35898,11 +38606,11 @@ snapshots: postcss-page-break: 3.0.4(postcss@8.5.6) react-refresh: 0.14.2 rspack-manifest-plugin: 5.0.3(@rspack/core@1.4.11(@swc/helpers@0.5.17)) - terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) + terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) ts-deepmerge: 7.0.2 - ts-loader: 9.4.4(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) + ts-loader: 9.4.4(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) - webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) transitivePeerDependencies: - '@parcel/css' - '@rspack/core' @@ -35923,20 +38631,20 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@modern-js/uni-builder@2.68.6(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(esbuild@0.25.5)(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)': + '@modern-js/uni-builder@2.68.6(@rspack/core@1.4.11(@swc/helpers@0.5.3))(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5))(esbuild@0.25.5)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)))(webpack-hot-middleware@2.26.1)': dependencies: - '@babel/core': 7.28.3 - '@babel/preset-react': 7.24.7(@babel/core@7.28.3) - '@babel/types': 7.28.2 + '@babel/core': 7.28.4 + '@babel/preset-react': 7.24.7(@babel/core@7.28.4) + '@babel/types': 7.28.4 '@modern-js/babel-preset': 2.68.6(@rsbuild/core@1.4.11) '@modern-js/flight-server-transform-plugin': 2.68.6 '@modern-js/utils': 2.68.6 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.16(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.16(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5))(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) '@rsbuild/core': 1.4.11 '@rsbuild/plugin-assets-retry': 1.4.0(@rsbuild/core@1.4.11) '@rsbuild/plugin-babel': 1.0.5(@rsbuild/core@1.4.11) '@rsbuild/plugin-check-syntax': 1.3.0(@rsbuild/core@1.4.11) - '@rsbuild/plugin-css-minimizer': 1.0.2(@rsbuild/core@1.4.11)(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@rsbuild/plugin-css-minimizer': 1.0.2(@rsbuild/core@1.4.11)(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) '@rsbuild/plugin-less': 1.3.1(@rsbuild/core@1.4.11) '@rsbuild/plugin-pug': 1.3.1(@rsbuild/core@1.4.11) '@rsbuild/plugin-react': 1.3.4(@rsbuild/core@1.4.11)(webpack-hot-middleware@2.26.1) @@ -35944,25 +38652,25 @@ snapshots: '@rsbuild/plugin-sass': 1.3.3(@rsbuild/core@1.4.11) '@rsbuild/plugin-source-build': 1.0.2(@rsbuild/core@1.4.11) '@rsbuild/plugin-styled-components': 1.4.0(@rsbuild/core@1.4.11) - '@rsbuild/plugin-svgr': 1.2.1(@rsbuild/core@1.4.11)(typescript@5.6.2)(webpack-hot-middleware@2.26.1) + '@rsbuild/plugin-svgr': 1.2.1(@rsbuild/core@1.4.11)(typescript@5.5.3)(webpack-hot-middleware@2.26.1) '@rsbuild/plugin-toml': 1.1.0(@rsbuild/core@1.4.11) - '@rsbuild/plugin-type-check': 1.2.3(@rsbuild/core@1.4.11)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(typescript@5.6.2) + '@rsbuild/plugin-type-check': 1.2.3(@rsbuild/core@1.4.11)(@rspack/core@1.4.11(@swc/helpers@0.5.3))(typescript@5.5.3) '@rsbuild/plugin-typed-css-modules': 1.0.2(@rsbuild/core@1.4.11) '@rsbuild/plugin-yaml': 1.0.2(@rsbuild/core@1.4.11) - '@rsbuild/webpack': 1.3.2(@rsbuild/core@1.4.11)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) + '@rsbuild/webpack': 1.3.2(@rsbuild/core@1.4.11)(@rspack/core@1.4.11(@swc/helpers@0.5.3))(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5) '@swc/core': 1.11.31(@swc/helpers@0.5.17) '@swc/helpers': 0.5.17 autoprefixer: 10.4.21(postcss@8.5.6) - babel-loader: 9.2.1(@babel/core@7.28.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + babel-loader: 9.2.1(@babel/core@7.28.4)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) babel-plugin-import: 1.13.8 - babel-plugin-styled-components: 1.13.3(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)) + babel-plugin-styled-components: 1.13.3(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)) babel-plugin-transform-react-remove-prop-types: 0.4.24 browserslist: 4.24.4 cssnano: 6.1.2(postcss@8.5.6) es-module-lexer: 1.7.0 glob: 9.3.5 html-minifier-terser: 7.2.0 - html-webpack-plugin: 5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + html-webpack-plugin: 5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.3))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) jiti: 1.21.7 lodash: 4.17.21 magic-string: 0.30.17 @@ -35976,12 +38684,12 @@ snapshots: postcss-nesting: 12.1.5(postcss@8.5.6) postcss-page-break: 3.0.4(postcss@8.5.6) react-refresh: 0.14.2 - rspack-manifest-plugin: 5.0.3(@rspack/core@1.4.11(@swc/helpers@0.5.17)) - terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + rspack-manifest-plugin: 5.0.3(@rspack/core@1.4.11(@swc/helpers@0.5.3)) + terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) ts-deepmerge: 7.0.2 - ts-loader: 9.4.4(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) - webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + ts-loader: 9.4.4(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5) + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.3))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) transitivePeerDependencies: - '@parcel/css' - '@rspack/core' @@ -36005,35 +38713,35 @@ snapshots: '@modern-js/utils@2.46.1': dependencies: '@swc/helpers': 0.5.3 - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001743 lodash: 4.17.21 rslog: 1.2.11 '@modern-js/utils@2.54.6': dependencies: '@swc/helpers': 0.5.3 - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001743 lodash: 4.17.21 rslog: 1.2.11 '@modern-js/utils@2.57.0': dependencies: '@swc/helpers': 0.5.3 - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001743 lodash: 4.17.21 rslog: 1.2.11 '@modern-js/utils@2.68.2': dependencies: '@swc/helpers': 0.5.17 - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001743 lodash: 4.17.21 rslog: 1.2.11 '@modern-js/utils@2.68.6': dependencies: '@swc/helpers': 0.5.17 - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001743 lodash: 4.17.21 rslog: 1.2.11 @@ -36146,7 +38854,7 @@ snapshots: '@module-federation/third-party-dts-extractor': 0.17.1 adm-zip: 0.5.16 ansi-colors: 4.1.3 - axios: 1.11.0 + axios: 1.12.2 chalk: 3.0.0 fs-extra: 9.1.0 isomorphic-ws: 5.0.0(ws@8.18.0) @@ -36171,7 +38879,7 @@ snapshots: '@module-federation/third-party-dts-extractor': 0.17.1 adm-zip: 0.5.16 ansi-colors: 4.1.3 - axios: 1.11.0 + axios: 1.12.2 chalk: 3.0.0 fs-extra: 9.1.0 isomorphic-ws: 5.0.0(ws@8.18.0) @@ -36196,7 +38904,7 @@ snapshots: '@module-federation/third-party-dts-extractor': 0.17.1 adm-zip: 0.5.16 ansi-colors: 4.1.3 - axios: 1.11.0 + axios: 1.12.2 chalk: 3.0.0 fs-extra: 9.1.0 isomorphic-ws: 5.0.0(ws@8.18.0) @@ -36213,7 +38921,7 @@ snapshots: - supports-color - utf-8-validate - '@module-federation/dts-plugin@0.7.3(typescript@5.6.2)': + '@module-federation/dts-plugin@0.7.3(typescript@5.5.3)': dependencies: '@module-federation/error-codes': 0.7.3 '@module-federation/managers': 0.7.3 @@ -36230,7 +38938,7 @@ snapshots: log4js: 6.9.1 node-schedule: 2.1.1 rambda: 9.4.2 - typescript: 5.6.2 + typescript: 5.5.3 ws: 8.18.0 transitivePeerDependencies: - bufferutil @@ -36238,34 +38946,6 @@ snapshots: - supports-color - utf-8-validate - '@module-federation/enhanced@0.17.1(@rspack/core@0.4.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19))': - dependencies: - '@module-federation/bridge-react-webpack-plugin': 0.17.1 - '@module-federation/cli': 0.17.1(typescript@5.6.2) - '@module-federation/data-prefetch': 0.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@module-federation/dts-plugin': 0.17.1(typescript@5.6.2) - '@module-federation/error-codes': 0.17.1 - '@module-federation/inject-external-runtime-core-plugin': 0.17.1(@module-federation/runtime-tools@0.17.1) - '@module-federation/managers': 0.17.1 - '@module-federation/manifest': 0.17.1(typescript@5.6.2) - '@module-federation/rspack': 0.17.1(@rspack/core@0.4.5)(typescript@5.6.2) - '@module-federation/runtime-tools': 0.17.1 - '@module-federation/sdk': 0.17.1 - btoa: 1.2.1 - schema-utils: 4.3.2 - upath: 2.0.1 - optionalDependencies: - typescript: 5.6.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19) - transitivePeerDependencies: - - '@rspack/core' - - bufferutil - - debug - - react - - react-dom - - supports-color - - utf-8-validate - '@module-federation/enhanced@0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.11))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@4.9.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19))': dependencies: '@module-federation/bridge-react-webpack-plugin': 0.17.1 @@ -36322,25 +39002,25 @@ snapshots: - supports-color - utf-8-validate - '@module-federation/enhanced@0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0)': + '@module-federation/enhanced@0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: '@module-federation/bridge-react-webpack-plugin': 0.17.1 - '@module-federation/cli': 0.17.1(typescript@5.6.2) - '@module-federation/data-prefetch': 0.17.1(react-dom@16.14.0(react@16.14.0))(react@16.14.0) - '@module-federation/dts-plugin': 0.17.1(typescript@5.6.2) + '@module-federation/cli': 0.17.1(typescript@5.5.3) + '@module-federation/data-prefetch': 0.17.1(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@module-federation/dts-plugin': 0.17.1(typescript@5.5.3) '@module-federation/error-codes': 0.17.1 '@module-federation/inject-external-runtime-core-plugin': 0.17.1(@module-federation/runtime-tools@0.17.1) '@module-federation/managers': 0.17.1 - '@module-federation/manifest': 0.17.1(typescript@5.6.2) - '@module-federation/rspack': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(typescript@5.6.2) + '@module-federation/manifest': 0.17.1(typescript@5.5.3) + '@module-federation/rspack': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(typescript@5.5.3) '@module-federation/runtime-tools': 0.17.1 '@module-federation/sdk': 0.17.1 btoa: 1.2.1 schema-utils: 4.3.2 upath: 2.0.1 optionalDependencies: - typescript: 5.6.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) + typescript: 5.5.3 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) transitivePeerDependencies: - '@rspack/core' - bufferutil @@ -36378,53 +39058,25 @@ snapshots: - supports-color - utf-8-validate - '@module-federation/enhanced@0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': - dependencies: - '@module-federation/bridge-react-webpack-plugin': 0.17.1 - '@module-federation/cli': 0.17.1(typescript@5.6.2) - '@module-federation/data-prefetch': 0.17.1(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@module-federation/dts-plugin': 0.17.1(typescript@5.6.2) - '@module-federation/error-codes': 0.17.1 - '@module-federation/inject-external-runtime-core-plugin': 0.17.1(@module-federation/runtime-tools@0.17.1) - '@module-federation/managers': 0.17.1 - '@module-federation/manifest': 0.17.1(typescript@5.6.2) - '@module-federation/rspack': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(typescript@5.6.2) - '@module-federation/runtime-tools': 0.17.1 - '@module-federation/sdk': 0.17.1 - btoa: 1.2.1 - schema-utils: 4.3.2 - upath: 2.0.1 - optionalDependencies: - typescript: 5.6.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) - transitivePeerDependencies: - - '@rspack/core' - - bufferutil - - debug - - react - - react-dom - - supports-color - - utf-8-validate - - '@module-federation/enhanced@0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.6.2)(webpack@5.101.0)': + '@module-federation/enhanced@0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@4.9.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: '@module-federation/bridge-react-webpack-plugin': 0.17.1 - '@module-federation/cli': 0.17.1(typescript@5.6.2) - '@module-federation/data-prefetch': 0.17.1(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@module-federation/dts-plugin': 0.17.1(typescript@5.6.2) + '@module-federation/cli': 0.17.1(typescript@4.9.5) + '@module-federation/data-prefetch': 0.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@module-federation/dts-plugin': 0.17.1(typescript@4.9.5) '@module-federation/error-codes': 0.17.1 '@module-federation/inject-external-runtime-core-plugin': 0.17.1(@module-federation/runtime-tools@0.17.1) '@module-federation/managers': 0.17.1 - '@module-federation/manifest': 0.17.1(typescript@5.6.2) - '@module-federation/rspack': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(typescript@5.6.2) + '@module-federation/manifest': 0.17.1(typescript@4.9.5) + '@module-federation/rspack': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(typescript@4.9.5) '@module-federation/runtime-tools': 0.17.1 '@module-federation/sdk': 0.17.1 btoa: 1.2.1 schema-utils: 4.3.2 upath: 2.0.1 optionalDependencies: - typescript: 5.6.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) + typescript: 4.9.5 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) transitivePeerDependencies: - '@rspack/core' - bufferutil @@ -36434,25 +39086,25 @@ snapshots: - supports-color - utf-8-validate - '@module-federation/enhanced@0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@4.9.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@module-federation/enhanced@0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: '@module-federation/bridge-react-webpack-plugin': 0.17.1 - '@module-federation/cli': 0.17.1(typescript@4.9.5) + '@module-federation/cli': 0.17.1(typescript@5.5.3) '@module-federation/data-prefetch': 0.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@module-federation/dts-plugin': 0.17.1(typescript@4.9.5) + '@module-federation/dts-plugin': 0.17.1(typescript@5.5.3) '@module-federation/error-codes': 0.17.1 '@module-federation/inject-external-runtime-core-plugin': 0.17.1(@module-federation/runtime-tools@0.17.1) '@module-federation/managers': 0.17.1 - '@module-federation/manifest': 0.17.1(typescript@4.9.5) - '@module-federation/rspack': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(typescript@4.9.5) + '@module-federation/manifest': 0.17.1(typescript@5.5.3) + '@module-federation/rspack': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(typescript@5.5.3) '@module-federation/runtime-tools': 0.17.1 '@module-federation/sdk': 0.17.1 btoa: 1.2.1 schema-utils: 4.3.2 upath: 2.0.1 optionalDependencies: - typescript: 4.9.5 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + typescript: 5.5.3 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) transitivePeerDependencies: - '@rspack/core' - bufferutil @@ -36490,7 +39142,7 @@ snapshots: - supports-color - utf-8-validate - '@module-federation/enhanced@0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5))': + '@module-federation/enhanced@0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0)': dependencies: '@module-federation/bridge-react-webpack-plugin': 0.17.1 '@module-federation/cli': 0.17.1(typescript@5.6.2) @@ -36508,7 +39160,7 @@ snapshots: upath: 2.0.1 optionalDependencies: typescript: 5.6.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) transitivePeerDependencies: - '@rspack/core' - bufferutil @@ -36518,25 +39170,25 @@ snapshots: - supports-color - utf-8-validate - '@module-federation/enhanced@0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@module-federation/enhanced@0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19))': dependencies: '@module-federation/bridge-react-webpack-plugin': 0.17.1 - '@module-federation/cli': 0.17.1(typescript@5.6.2) + '@module-federation/cli': 0.17.1(typescript@5.5.3) '@module-federation/data-prefetch': 0.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@module-federation/dts-plugin': 0.17.1(typescript@5.6.2) + '@module-federation/dts-plugin': 0.17.1(typescript@5.5.3) '@module-federation/error-codes': 0.17.1 '@module-federation/inject-external-runtime-core-plugin': 0.17.1(@module-federation/runtime-tools@0.17.1) '@module-federation/managers': 0.17.1 - '@module-federation/manifest': 0.17.1(typescript@5.6.2) - '@module-federation/rspack': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(typescript@5.6.2) + '@module-federation/manifest': 0.17.1(typescript@5.5.3) + '@module-federation/rspack': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.3))(typescript@5.5.3) '@module-federation/runtime-tools': 0.17.1 '@module-federation/sdk': 0.17.1 btoa: 1.2.1 schema-utils: 4.3.2 upath: 2.0.1 optionalDependencies: - typescript: 5.6.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + typescript: 5.5.3 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19) transitivePeerDependencies: - '@rspack/core' - bufferutil @@ -36546,11 +39198,39 @@ snapshots: - supports-color - utf-8-validate - '@module-federation/enhanced@0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0)': + '@module-federation/enhanced@0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5))': dependencies: '@module-federation/bridge-react-webpack-plugin': 0.17.1 - '@module-federation/cli': 0.17.1(typescript@5.6.2) + '@module-federation/cli': 0.17.1(typescript@5.5.3) '@module-federation/data-prefetch': 0.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@module-federation/dts-plugin': 0.17.1(typescript@5.5.3) + '@module-federation/error-codes': 0.17.1 + '@module-federation/inject-external-runtime-core-plugin': 0.17.1(@module-federation/runtime-tools@0.17.1) + '@module-federation/managers': 0.17.1 + '@module-federation/manifest': 0.17.1(typescript@5.5.3) + '@module-federation/rspack': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.3))(typescript@5.5.3) + '@module-federation/runtime-tools': 0.17.1 + '@module-federation/sdk': 0.17.1 + btoa: 1.2.1 + schema-utils: 4.3.2 + upath: 2.0.1 + optionalDependencies: + typescript: 5.5.3 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5) + transitivePeerDependencies: + - '@rspack/core' + - bufferutil + - debug + - react + - react-dom + - supports-color + - utf-8-validate + + '@module-federation/enhanced@0.17.1(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0)': + dependencies: + '@module-federation/bridge-react-webpack-plugin': 0.17.1 + '@module-federation/cli': 0.17.1(typescript@5.6.2) + '@module-federation/data-prefetch': 0.17.1(react-dom@16.14.0(react@16.14.0))(react@16.14.0) '@module-federation/dts-plugin': 0.17.1(typescript@5.6.2) '@module-federation/error-codes': 0.17.1 '@module-federation/inject-external-runtime-core-plugin': 0.17.1(@module-federation/runtime-tools@0.17.1) @@ -36574,25 +39254,25 @@ snapshots: - supports-color - utf-8-validate - '@module-federation/enhanced@0.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@module-federation/enhanced@0.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: '@module-federation/bridge-react-webpack-plugin': 0.17.1 - '@module-federation/cli': 0.17.1(typescript@5.5.3) + '@module-federation/cli': 0.17.1(typescript@5.6.2) '@module-federation/data-prefetch': 0.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@module-federation/dts-plugin': 0.17.1(typescript@5.5.3) + '@module-federation/dts-plugin': 0.17.1(typescript@5.6.2) '@module-federation/error-codes': 0.17.1 '@module-federation/inject-external-runtime-core-plugin': 0.17.1(@module-federation/runtime-tools@0.17.1) '@module-federation/managers': 0.17.1 - '@module-federation/manifest': 0.17.1(typescript@5.5.3) - '@module-federation/rspack': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(typescript@5.5.3) + '@module-federation/manifest': 0.17.1(typescript@5.6.2) + '@module-federation/rspack': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(typescript@5.6.2) '@module-federation/runtime-tools': 0.17.1 '@module-federation/sdk': 0.17.1 btoa: 1.2.1 schema-utils: 4.3.2 upath: 2.0.1 optionalDependencies: - typescript: 5.5.3 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + typescript: 5.6.2 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) transitivePeerDependencies: - '@rspack/core' - bufferutil @@ -36602,20 +39282,20 @@ snapshots: - supports-color - utf-8-validate - '@module-federation/enhanced@0.7.3(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))': + '@module-federation/enhanced@0.7.3(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))': dependencies: '@module-federation/bridge-react-webpack-plugin': 0.7.3 '@module-federation/data-prefetch': 0.7.3(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@module-federation/dts-plugin': 0.7.3(typescript@5.6.2) + '@module-federation/dts-plugin': 0.7.3(typescript@5.5.3) '@module-federation/managers': 0.7.3 - '@module-federation/manifest': 0.7.3(typescript@5.6.2) - '@module-federation/rspack': 0.7.3(typescript@5.6.2) + '@module-federation/manifest': 0.7.3(typescript@5.5.3) + '@module-federation/rspack': 0.7.3(typescript@5.5.3) '@module-federation/runtime-tools': 0.7.3 '@module-federation/sdk': 0.7.3 btoa: 1.2.1 upath: 2.0.1 optionalDependencies: - typescript: 5.6.2 + typescript: 5.5.3 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) transitivePeerDependencies: - bufferutil @@ -36692,9 +39372,9 @@ snapshots: - utf-8-validate - vue-tsc - '@module-federation/manifest@0.7.3(typescript@5.6.2)': + '@module-federation/manifest@0.7.3(typescript@5.5.3)': dependencies: - '@module-federation/dts-plugin': 0.7.3(typescript@5.6.2) + '@module-federation/dts-plugin': 0.7.3(typescript@5.5.3) '@module-federation/managers': 0.7.3 '@module-federation/sdk': 0.7.3 chalk: 3.0.0 @@ -36738,15 +39418,15 @@ snapshots: - utf-8-validate - webpack - '@module-federation/modern-js@0.17.1(@rsbuild/core@1.4.11)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5))': + '@module-federation/modern-js@0.17.1(@rsbuild/core@1.4.11)(@rspack/core@1.4.11(@swc/helpers@0.5.3))(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5))': dependencies: '@modern-js/node-bundle-require': 2.68.2 '@modern-js/utils': 2.68.2 '@module-federation/bridge-react': 0.17.1(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@module-federation/cli': 0.17.1(typescript@5.6.2) - '@module-federation/enhanced': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) - '@module-federation/node': 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) - '@module-federation/rsbuild-plugin': 0.17.1(@rsbuild/core@1.4.11)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) + '@module-federation/cli': 0.17.1(typescript@5.5.3) + '@module-federation/enhanced': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) + '@module-federation/node': 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) + '@module-federation/rsbuild-plugin': 0.17.1(@rsbuild/core@1.4.11)(@rspack/core@1.4.11(@swc/helpers@0.5.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) '@module-federation/runtime': 0.17.1 '@module-federation/sdk': 0.17.1 '@swc/helpers': 0.5.17 @@ -36757,7 +39437,7 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-error-boundary: 4.1.2(react@18.3.1) optionalDependencies: - typescript: 5.6.2 + typescript: 5.5.3 transitivePeerDependencies: - '@rsbuild/core' - '@rspack/core' @@ -36800,15 +39480,15 @@ snapshots: - utf-8-validate - webpack - '@module-federation/modern-js@0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@module-federation/modern-js@0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: '@modern-js/node-bundle-require': 2.68.2 '@modern-js/utils': 2.68.2 '@module-federation/bridge-react': 0.17.1(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@module-federation/cli': 0.17.1(typescript@5.6.2) - '@module-federation/enhanced': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - '@module-federation/node': 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(next@14.2.13(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - '@module-federation/rsbuild-plugin': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@module-federation/cli': 0.17.1(typescript@5.5.3) + '@module-federation/enhanced': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@module-federation/node': 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(next@14.2.13(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@module-federation/rsbuild-plugin': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@module-federation/runtime': 0.17.1 '@module-federation/sdk': 0.17.1 '@swc/helpers': 0.5.17 @@ -36819,7 +39499,7 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-error-boundary: 4.1.2(react@18.3.1) optionalDependencies: - typescript: 5.6.2 + typescript: 5.5.3 transitivePeerDependencies: - '@rsbuild/core' - '@rspack/core' @@ -36831,25 +39511,6 @@ snapshots: - utf-8-validate - webpack - '@module-federation/native-federation-tests@0.6.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(jiti@2.5.1)(postcss@8.4.47)(typescript@5.5.3)(yaml@2.8.1)': - dependencies: - adm-zip: 0.5.16 - ansi-colors: 4.1.3 - axios: 1.7.7 - rambda: 9.4.2 - tsup: 8.5.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(jiti@2.5.1)(postcss@8.4.47)(typescript@5.5.3)(yaml@2.8.1) - unplugin: 1.16.1 - transitivePeerDependencies: - - '@microsoft/api-extractor' - - '@swc/core' - - debug - - jiti - - postcss - - supports-color - - tsx - - typescript - - yaml - '@module-federation/native-federation-tests@0.6.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(jiti@2.5.1)(postcss@8.5.6)(typescript@5.5.3)(yaml@2.8.1)': dependencies: adm-zip: 0.5.16 @@ -36880,20 +39541,20 @@ snapshots: transitivePeerDependencies: - debug - '@module-federation/nextjs-mf@8.8.34(@rspack/core@1.4.11(@swc/helpers@0.5.17))(next@14.2.13(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@module-federation/nextjs-mf@8.8.34(@rspack/core@1.4.11(@swc/helpers@0.5.17))(next@14.2.13(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: - '@module-federation/enhanced': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - '@module-federation/node': 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(next@14.2.13(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@module-federation/enhanced': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@module-federation/node': 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(next@14.2.13(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@module-federation/runtime': 0.17.1 '@module-federation/sdk': 0.17.1 '@module-federation/webpack-bundler-runtime': 0.17.1 fast-glob: 3.3.3 - next: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0) + next: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: styled-jsx: 5.1.1(@babel/core@7.24.7)(babel-plugin-macros@3.1.0)(react@18.3.1) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) transitivePeerDependencies: - '@rspack/core' - bufferutil @@ -36903,20 +39564,20 @@ snapshots: - utf-8-validate - vue-tsc - '@module-federation/nextjs-mf@8.8.34(next@12.3.4(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@module-federation/nextjs-mf@8.8.34(next@12.3.4(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: - '@module-federation/enhanced': 0.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - '@module-federation/node': 2.7.10(next@12.3.4(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@module-federation/enhanced': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@module-federation/node': 2.7.10(next@12.3.4(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@module-federation/runtime': 0.17.1 '@module-federation/sdk': 0.17.1 '@module-federation/webpack-bundler-runtime': 0.17.1 fast-glob: 3.3.3 - next: 12.3.4(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0) + next: 12.3.4(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: styled-jsx: 5.1.1(@babel/core@7.24.7)(babel-plugin-macros@3.1.0)(react@18.3.1) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) transitivePeerDependencies: - '@rspack/core' - bufferutil @@ -36926,20 +39587,20 @@ snapshots: - utf-8-validate - vue-tsc - '@module-federation/nextjs-mf@8.8.34(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(@babel/core@7.24.7)(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@module-federation/nextjs-mf@8.8.34(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(@babel/core@7.24.7)(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: - '@module-federation/enhanced': 0.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - '@module-federation/node': 2.7.10(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@module-federation/enhanced': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@module-federation/node': 2.7.10(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@module-federation/runtime': 0.17.1 '@module-federation/sdk': 0.17.1 '@module-federation/webpack-bundler-runtime': 0.17.1 fast-glob: 3.3.3 - next: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0) + next: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: styled-jsx: 5.1.1(@babel/core@7.24.7)(babel-plugin-macros@3.1.0)(react@18.3.1) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) transitivePeerDependencies: - '@rspack/core' - bufferutil @@ -36949,20 +39610,20 @@ snapshots: - utf-8-validate - vue-tsc - '@module-federation/nextjs-mf@8.8.34(next@14.2.13(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@module-federation/nextjs-mf@8.8.34(next@14.2.13(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1))(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: - '@module-federation/enhanced': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - '@module-federation/node': 2.7.10(next@14.2.13(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@module-federation/enhanced': 0.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@module-federation/node': 2.7.10(next@14.2.13(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@module-federation/runtime': 0.17.1 '@module-federation/sdk': 0.17.1 '@module-federation/webpack-bundler-runtime': 0.17.1 fast-glob: 3.3.3 - next: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0) + next: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: styled-jsx: 5.1.1(@babel/core@7.24.7)(babel-plugin-macros@3.1.0)(react@18.3.1) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) transitivePeerDependencies: - '@rspack/core' - bufferutil @@ -36993,17 +39654,17 @@ snapshots: - utf-8-validate - vue-tsc - '@module-federation/node@2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(next@14.2.13(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@module-federation/node@2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(next@14.2.13(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: - '@module-federation/enhanced': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@module-federation/enhanced': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@module-federation/runtime': 0.17.1 '@module-federation/sdk': 0.17.1 btoa: 1.2.1 encoding: 0.1.13 node-fetch: 2.7.0(encoding@0.1.13) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) optionalDependencies: - next: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0) + next: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -37015,9 +39676,9 @@ snapshots: - utf-8-validate - vue-tsc - '@module-federation/node@2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0)': + '@module-federation/node@2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.5.3)(webpack@5.101.0)': dependencies: - '@module-federation/enhanced': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0) + '@module-federation/enhanced': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/runtime': 0.17.1 '@module-federation/sdk': 0.17.1 btoa: 1.2.1 @@ -37044,7 +39705,7 @@ snapshots: btoa: 1.2.1 encoding: 0.1.13 node-fetch: 2.7.0(encoding@0.1.13) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -37057,15 +39718,15 @@ snapshots: - utf-8-validate - vue-tsc - '@module-federation/node@2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5))': + '@module-federation/node@2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0)': dependencies: - '@module-federation/enhanced': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) + '@module-federation/enhanced': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0) '@module-federation/runtime': 0.17.1 '@module-federation/sdk': 0.17.1 btoa: 1.2.1 encoding: 0.1.13 node-fetch: 2.7.0(encoding@0.1.13) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -37099,17 +39760,38 @@ snapshots: - utf-8-validate - vue-tsc - '@module-federation/node@2.7.10(next@12.3.4(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@module-federation/node@2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5))': + dependencies: + '@module-federation/enhanced': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) + '@module-federation/runtime': 0.17.1 + '@module-federation/sdk': 0.17.1 + btoa: 1.2.1 + encoding: 0.1.13 + node-fetch: 2.7.0(encoding@0.1.13) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5) + optionalDependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@rspack/core' + - bufferutil + - debug + - supports-color + - typescript + - utf-8-validate + - vue-tsc + + '@module-federation/node@2.7.10(next@12.3.4(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: - '@module-federation/enhanced': 0.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@module-federation/enhanced': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@module-federation/runtime': 0.17.1 '@module-federation/sdk': 0.17.1 btoa: 1.2.1 encoding: 0.1.13 node-fetch: 2.7.0(encoding@0.1.13) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) optionalDependencies: - next: 12.3.4(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0) + next: 12.3.4(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -37121,17 +39803,17 @@ snapshots: - utf-8-validate - vue-tsc - '@module-federation/node@2.7.10(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@module-federation/node@2.7.10(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: - '@module-federation/enhanced': 0.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@module-federation/enhanced': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@module-federation/runtime': 0.17.1 '@module-federation/sdk': 0.17.1 btoa: 1.2.1 encoding: 0.1.13 node-fetch: 2.7.0(encoding@0.1.13) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) optionalDependencies: - next: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0) + next: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -37143,17 +39825,17 @@ snapshots: - utf-8-validate - vue-tsc - '@module-federation/node@2.7.10(next@14.2.13(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@module-federation/node@2.7.10(next@14.2.13(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: - '@module-federation/enhanced': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@module-federation/enhanced': 0.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@module-federation/runtime': 0.17.1 '@module-federation/sdk': 0.17.1 btoa: 1.2.1 encoding: 0.1.13 node-fetch: 2.7.0(encoding@0.1.13) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) optionalDependencies: - next: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0) + next: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -37165,6 +39847,27 @@ snapshots: - utf-8-validate - vue-tsc + '@module-federation/node@2.7.10(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0)': + dependencies: + '@module-federation/enhanced': 0.17.1(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.6.2)(webpack@5.101.0) + '@module-federation/runtime': 0.17.1 + '@module-federation/sdk': 0.17.1 + btoa: 1.2.1 + encoding: 0.1.13 + node-fetch: 2.7.0(encoding@0.1.13) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) + optionalDependencies: + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + transitivePeerDependencies: + - '@rspack/core' + - bufferutil + - debug + - supports-color + - typescript + - utf-8-validate + - vue-tsc + '@module-federation/retry-plugin@0.17.1': dependencies: '@module-federation/sdk': 0.17.1 @@ -37190,10 +39893,10 @@ snapshots: - vue-tsc - webpack - '@module-federation/rsbuild-plugin@0.17.1(@rsbuild/core@1.4.11)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5))': + '@module-federation/rsbuild-plugin@0.17.1(@rsbuild/core@1.4.11)(@rspack/core@1.4.11(@swc/helpers@0.5.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5))': dependencies: - '@module-federation/enhanced': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) - '@module-federation/node': 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) + '@module-federation/enhanced': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) + '@module-federation/node': 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) '@module-federation/sdk': 0.17.1 fs-extra: 11.3.0 optionalDependencies: @@ -37232,10 +39935,10 @@ snapshots: - vue-tsc - webpack - '@module-federation/rsbuild-plugin@0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@module-federation/rsbuild-plugin@0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: - '@module-federation/enhanced': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - '@module-federation/node': 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(next@14.2.13(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@module-federation/enhanced': 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@module-federation/node': 2.7.10(@rspack/core@1.4.11(@swc/helpers@0.5.17))(next@14.2.13(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@module-federation/sdk': 0.17.1 fs-extra: 11.3.0 transitivePeerDependencies: @@ -37251,25 +39954,6 @@ snapshots: - vue-tsc - webpack - '@module-federation/rspack@0.17.1(@rspack/core@0.4.5)(typescript@5.6.2)': - dependencies: - '@module-federation/bridge-react-webpack-plugin': 0.17.1 - '@module-federation/dts-plugin': 0.17.1(typescript@5.6.2) - '@module-federation/inject-external-runtime-core-plugin': 0.17.1(@module-federation/runtime-tools@0.17.1) - '@module-federation/managers': 0.17.1 - '@module-federation/manifest': 0.17.1(typescript@5.6.2) - '@module-federation/runtime-tools': 0.17.1 - '@module-federation/sdk': 0.17.1 - '@rspack/core': 0.4.5 - btoa: 1.2.1 - optionalDependencies: - typescript: 5.6.2 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - '@module-federation/rspack@0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.11))(typescript@4.9.5)': dependencies: '@module-federation/bridge-react-webpack-plugin': 0.17.1 @@ -37346,16 +40030,35 @@ snapshots: - supports-color - utf-8-validate - '@module-federation/rspack@0.7.3(typescript@5.6.2)': + '@module-federation/rspack@0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.3))(typescript@5.5.3)': + dependencies: + '@module-federation/bridge-react-webpack-plugin': 0.17.1 + '@module-federation/dts-plugin': 0.17.1(typescript@5.5.3) + '@module-federation/inject-external-runtime-core-plugin': 0.17.1(@module-federation/runtime-tools@0.17.1) + '@module-federation/managers': 0.17.1 + '@module-federation/manifest': 0.17.1(typescript@5.5.3) + '@module-federation/runtime-tools': 0.17.1 + '@module-federation/sdk': 0.17.1 + '@rspack/core': 1.4.11(@swc/helpers@0.5.3) + btoa: 1.2.1 + optionalDependencies: + typescript: 5.5.3 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + + '@module-federation/rspack@0.7.3(typescript@5.5.3)': dependencies: '@module-federation/bridge-react-webpack-plugin': 0.7.3 - '@module-federation/dts-plugin': 0.7.3(typescript@5.6.2) + '@module-federation/dts-plugin': 0.7.3(typescript@5.5.3) '@module-federation/managers': 0.7.3 - '@module-federation/manifest': 0.7.3(typescript@5.6.2) + '@module-federation/manifest': 0.7.3(typescript@5.5.3) '@module-federation/runtime-tools': 0.7.3 '@module-federation/sdk': 0.7.3 optionalDependencies: - typescript: 5.6.2 + typescript: 5.5.3 transitivePeerDependencies: - bufferutil - debug @@ -37467,13 +40170,13 @@ snapshots: dependencies: isomorphic-rslog: 0.0.6 - '@module-federation/storybook-addon@3.0.6(dcf7040ee5370f2f21a18b6aeb918129)': + '@module-federation/storybook-addon@3.0.6(eb313c6b17db8bd606e8dfcd4e36e2b6)': dependencies: - '@module-federation/enhanced': 0.7.3(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) + '@module-federation/enhanced': 0.7.3(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) '@module-federation/sdk': 0.7.3 '@module-federation/utilities': 3.1.26(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) - '@nx/react': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(js-yaml@4.1.0)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) - '@nx/webpack': 17.2.8(@babel/traverse@7.28.3)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(esbuild@0.23.0)(html-webpack-plugin@5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)))(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(sass-embedded@1.90.0)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@nx/react': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) + '@nx/webpack': 17.2.8(@babel/traverse@7.28.4)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(esbuild@0.23.0)(html-webpack-plugin@5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)))(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(sass-embedded@1.92.1)(typescript@5.5.3)(vue-template-compiler@2.7.16) '@storybook/core-common': 7.6.20(encoding@0.1.13) '@storybook/node-logger': 7.6.20 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) @@ -37500,14 +40203,14 @@ snapshots: fs-extra: 9.1.0 resolve: 1.22.8 - '@module-federation/typescript@3.1.3(encoding@0.1.13)(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0)': + '@module-federation/typescript@3.1.3(encoding@0.1.13)(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)(webpack@5.101.0)': dependencies: lodash.get: 4.4.2 node-fetch: 2.7.0(encoding@0.1.13) typescript: 5.5.3 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) optionalDependencies: - next: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0) + next: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -37571,16 +40274,16 @@ snapshots: '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.4.5 - '@emnapi/runtime': 1.4.5 - '@tybys/wasm-util': 0.10.0 + '@emnapi/core': 1.5.0 + '@emnapi/runtime': 1.5.0 + '@tybys/wasm-util': 0.10.1 optional: true - '@napi-rs/wasm-runtime@1.0.3': + '@napi-rs/wasm-runtime@1.0.5': dependencies: - '@emnapi/core': 1.4.5 - '@emnapi/runtime': 1.4.5 - '@tybys/wasm-util': 0.10.0 + '@emnapi/core': 1.5.0 + '@emnapi/runtime': 1.5.0 + '@tybys/wasm-util': 0.10.1 optional: true '@next/env@12.3.4': {} @@ -37661,6 +40364,84 @@ snapshots: '@next/swc-win32-x64-msvc@14.2.13': optional: true + '@ngtools/webpack@15.2.10(@angular/compiler-cli@15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3))(typescript@5.5.3)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4))': + dependencies: + '@angular/compiler-cli': 15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3) + typescript: 5.5.3 + webpack: 5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4) + + '@ngtools/webpack@15.2.11(@angular/compiler-cli@15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3))(typescript@5.5.3)(webpack@5.101.0)': + dependencies: + '@angular/compiler-cli': 15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3) + typescript: 5.5.3 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) + + '@nguniversal/builders@16.2.0(@angular-devkit/build-angular@15.2.10(@angular/compiler-cli@15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3))(@angular/platform-server@15.2.10(6676711f88f9c40c18b0e2629d70e5ad))(@swc/core@1.11.31(@swc/helpers@0.5.17))(html-webpack-plugin@5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0))(sass-embedded@1.92.1)(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)))(typescript@5.5.3)(webpack-cli@5.1.4))(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(@types/express@4.17.21)(chokidar@3.6.0)(typescript@5.5.3)': + dependencies: + '@angular-devkit/architect': 0.1602.16(chokidar@3.6.0) + '@angular-devkit/build-angular': 15.2.10(@angular/compiler-cli@15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3))(@angular/platform-server@15.2.10(6676711f88f9c40c18b0e2629d70e5ad))(@swc/core@1.11.31(@swc/helpers@0.5.17))(html-webpack-plugin@5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0))(sass-embedded@1.92.1)(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)))(typescript@5.5.3)(webpack-cli@5.1.4) + '@angular-devkit/core': 16.2.16(chokidar@3.6.0) + '@nguniversal/common': 16.2.0(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)) + browser-sync: 2.29.3 + express: 4.19.2 + guess-parser: 0.4.22(typescript@5.5.3) + http-proxy-middleware: 2.0.9(@types/express@4.17.21) + ora: 5.4.1 + piscina: 4.0.0 + rxjs: 7.8.2 + tree-kill: 1.2.2 + transitivePeerDependencies: + - '@angular/common' + - '@angular/core' + - '@types/express' + - bufferutil + - canvas + - chokidar + - debug + - supports-color + - typescript + - utf-8-validate + + '@nguniversal/common@15.2.1(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))': + dependencies: + '@angular/common': 15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2) + '@angular/core': 15.2.10(rxjs@7.8.2)(zone.js@0.14.10) + critters: 0.0.16 + jsdom: 21.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + + '@nguniversal/common@16.2.0(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))': + dependencies: + '@angular/common': 15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2) + '@angular/core': 15.2.10(rxjs@7.8.2)(zone.js@0.14.10) + critters: 0.0.20 + jsdom: 22.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + + '@nguniversal/express-engine@15.2.1(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(@angular/platform-server@15.2.10(6676711f88f9c40c18b0e2629d70e5ad))(express@4.19.2)': + dependencies: + '@angular/common': 15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2) + '@angular/core': 15.2.10(rxjs@7.8.2)(zone.js@0.14.10) + '@angular/platform-server': 15.2.10(6676711f88f9c40c18b0e2629d70e5ad) + '@nguniversal/common': 15.2.1(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)) + express: 4.19.2 + tslib: 2.8.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': optional: true @@ -37778,6 +40559,11 @@ snapshots: - bluebird - supports-color + '@npmcli/fs@2.1.2': + dependencies: + '@gar/promisify': 1.1.3 + semver: 7.6.3 + '@npmcli/fs@3.1.1': dependencies: semver: 7.6.3 @@ -37832,6 +40618,11 @@ snapshots: - bluebird - supports-color + '@npmcli/move-file@2.0.1': + dependencies: + mkdirp: 1.0.4 + rimraf: 3.0.2 + '@npmcli/name-from-folder@2.0.0': {} '@npmcli/node-gyp@3.0.0': {} @@ -37874,6 +40665,17 @@ snapshots: '@npmcli/redact@2.0.1': {} + '@npmcli/run-script@6.0.2': + dependencies: + '@npmcli/node-gyp': 3.0.0 + '@npmcli/promise-spawn': 6.0.2 + node-gyp: 9.4.1 + read-package-json-fast: 3.0.2 + which: 3.0.1 + transitivePeerDependencies: + - bluebird + - supports-color + '@npmcli/run-script@8.1.0': dependencies: '@npmcli/node-gyp': 3.0.0 @@ -37886,9 +40688,9 @@ snapshots: - bluebird - supports-color - '@nrwl/cypress@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(cypress@13.12.0)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)': + '@nrwl/cypress@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(cypress@13.12.0)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)': dependencies: - '@nx/cypress': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(cypress@13.12.0)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) + '@nx/cypress': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(cypress@13.12.0)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -37909,9 +40711,9 @@ snapshots: transitivePeerDependencies: - nx - '@nrwl/devkit@17.3.2(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@nrwl/devkit@17.2.8(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: - '@nx/devkit': 17.3.2(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@nx/devkit': 17.2.8(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) transitivePeerDependencies: - nx @@ -37927,9 +40729,9 @@ snapshots: transitivePeerDependencies: - nx - '@nrwl/eslint-plugin-nx@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.3))(eslint-config-prettier@9.1.0(eslint@9.6.0))(eslint@9.6.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)': + '@nrwl/eslint-plugin-nx@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.3))(eslint-config-prettier@9.1.0(eslint@9.6.0))(eslint@9.6.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)': dependencies: - '@nx/eslint-plugin': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.3))(eslint-config-prettier@9.1.0(eslint@9.6.0))(eslint@9.6.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) + '@nx/eslint-plugin': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.3))(eslint-config-prettier@9.1.0(eslint@9.6.0))(eslint@9.6.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -37945,9 +40747,9 @@ snapshots: - typescript - verdaccio - '@nrwl/jest@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(babel-plugin-macros@3.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(typescript@5.5.3))(typescript@5.5.3)': + '@nrwl/jest@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(babel-plugin-macros@3.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(typescript@5.5.3))(typescript@5.5.3)': dependencies: - '@nx/jest': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(babel-plugin-macros@3.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(typescript@5.5.3))(typescript@5.5.3) + '@nx/jest': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(babel-plugin-macros@3.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(typescript@5.5.3))(typescript@5.5.3) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -37963,9 +40765,9 @@ snapshots: - typescript - verdaccio - '@nrwl/js@17.2.8(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.6.2)': + '@nrwl/js@17.2.8(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)': dependencies: - '@nx/js': 17.2.8(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.6.2) + '@nx/js': 17.2.8(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -37978,9 +40780,9 @@ snapshots: - typescript - verdaccio - '@nrwl/js@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.3.3)': + '@nrwl/js@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.3.3)': dependencies: - '@nx/js': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.3.3) + '@nx/js': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.3.3) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -37993,9 +40795,9 @@ snapshots: - typescript - verdaccio - '@nrwl/js@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)': + '@nrwl/js@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)': dependencies: - '@nx/js': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) + '@nx/js': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -38008,9 +40810,9 @@ snapshots: - typescript - verdaccio - '@nrwl/js@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.3.3)': + '@nrwl/js@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.3.3)': dependencies: - '@nx/js': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.3.3) + '@nx/js': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.3.3) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -38023,9 +40825,9 @@ snapshots: - typescript - verdaccio - '@nrwl/js@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.6.2)': + '@nrwl/js@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)': dependencies: - '@nx/js': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.6.2) + '@nx/js': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -38038,9 +40840,9 @@ snapshots: - typescript - verdaccio - '@nrwl/next@17.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(file-loader@6.2.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(js-yaml@4.1.0)(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@nrwl/next@17.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(file-loader@6.2.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(js-yaml@4.1.0)(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: - '@nx/next': 17.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(file-loader@6.2.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(js-yaml@4.1.0)(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@nx/next': 17.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(file-loader@6.2.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(js-yaml@4.1.0)(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) transitivePeerDependencies: - '@babel/core' - '@babel/traverse' @@ -38058,9 +40860,9 @@ snapshots: - verdaccio - webpack - '@nrwl/react@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@nrwl/react@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: - '@nx/react': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@nx/react': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -38075,9 +40877,9 @@ snapshots: - verdaccio - webpack - '@nrwl/react@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(js-yaml@4.1.0)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))': + '@nrwl/react@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))': dependencies: - '@nx/react': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(js-yaml@4.1.0)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) + '@nx/react': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -38110,9 +40912,9 @@ snapshots: - '@swc/core' - debug - '@nrwl/web@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)': + '@nrwl/web@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)': dependencies: - '@nx/web': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) + '@nx/web': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -38125,9 +40927,9 @@ snapshots: - typescript - verdaccio - '@nrwl/web@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.6.2)': + '@nrwl/web@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)': dependencies: - '@nx/web': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.6.2) + '@nx/web': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -38140,9 +40942,9 @@ snapshots: - typescript - verdaccio - '@nrwl/webpack@17.2.8(@babel/traverse@7.28.3)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(esbuild@0.23.0)(html-webpack-plugin@5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)))(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(sass-embedded@1.90.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)': + '@nrwl/webpack@17.2.8(@babel/traverse@7.28.4)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(esbuild@0.23.0)(html-webpack-plugin@5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)))(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(sass-embedded@1.92.1)(typescript@5.5.3)(vue-template-compiler@2.7.16)': dependencies: - '@nx/webpack': 17.2.8(@babel/traverse@7.28.3)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(esbuild@0.23.0)(html-webpack-plugin@5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)))(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(sass-embedded@1.90.0)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@nx/webpack': 17.2.8(@babel/traverse@7.28.4)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(esbuild@0.23.0)(html-webpack-plugin@5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)))(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(sass-embedded@1.92.1)(typescript@5.5.3)(vue-template-compiler@2.7.16) transitivePeerDependencies: - '@babel/traverse' - '@parcel/css' @@ -38187,12 +40989,12 @@ snapshots: - '@swc/core' - debug - '@nx/cypress@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(cypress@13.12.0)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)': + '@nx/cypress@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(cypress@13.12.0)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)': dependencies: - '@nrwl/cypress': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(cypress@13.12.0)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) + '@nrwl/cypress': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(cypress@13.12.0)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) '@nx/devkit': 17.3.2(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) - '@nx/eslint': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) - '@nx/js': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) + '@nx/eslint': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@nx/js': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) '@phenomnomnominal/tsquery': 5.0.1(typescript@5.5.3) detect-port: 1.6.1 semver: 7.6.3 @@ -38223,17 +41025,16 @@ snapshots: tmp: 0.2.5 tslib: 2.8.1 - '@nx/devkit@17.3.2(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@nx/devkit@17.2.8(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: - '@nrwl/devkit': 17.3.2(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@nrwl/devkit': 17.2.8(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) ejs: 3.1.10 enquirer: 2.3.6 ignore: 5.3.2 - nx: 17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)) - semver: 7.6.3 + nx: 17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)) + semver: 7.5.3 tmp: 0.2.5 tslib: 2.8.1 - yargs-parser: 21.1.1 '@nx/devkit@17.3.2(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: @@ -38260,11 +41061,11 @@ snapshots: tslib: 2.8.1 yargs-parser: 21.1.1 - '@nx/eslint-plugin@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.3))(eslint-config-prettier@9.1.0(eslint@9.6.0))(eslint@9.6.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)': + '@nx/eslint-plugin@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.3))(eslint-config-prettier@9.1.0(eslint@9.6.0))(eslint@9.6.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)': dependencies: - '@nrwl/eslint-plugin-nx': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.3))(eslint-config-prettier@9.1.0(eslint@9.6.0))(eslint@9.6.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) + '@nrwl/eslint-plugin-nx': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.3))(eslint-config-prettier@9.1.0(eslint@9.6.0))(eslint@9.6.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) '@nx/devkit': 17.3.2(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) - '@nx/js': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) + '@nx/js': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) '@typescript-eslint/parser': 7.15.0(eslint@9.6.0)(typescript@5.5.3) '@typescript-eslint/type-utils': 6.21.0(eslint@9.6.0)(typescript@5.5.3) '@typescript-eslint/utils': 6.21.0(eslint@9.6.0)(typescript@5.5.3) @@ -38288,11 +41089,11 @@ snapshots: - typescript - verdaccio - '@nx/eslint@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@nx/eslint@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: '@nx/devkit': 17.3.2(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) - '@nx/js': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.3.3) - '@nx/linter': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@nx/js': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.3.3) + '@nx/linter': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) eslint: 8.57.1 tslib: 2.8.1 typescript: 5.3.3 @@ -38309,11 +41110,11 @@ snapshots: - supports-color - verdaccio - '@nx/eslint@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(js-yaml@4.1.0)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@nx/eslint@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: - '@nx/devkit': 17.3.2(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17))) - '@nx/js': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.3.3) - '@nx/linter': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(js-yaml@4.1.0)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@nx/devkit': 17.3.2(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@nx/js': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.3.3) + '@nx/linter': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) eslint: 8.57.1 tslib: 2.8.1 typescript: 5.3.3 @@ -38330,13 +41131,13 @@ snapshots: - supports-color - verdaccio - '@nx/jest@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(babel-plugin-macros@3.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(typescript@5.5.3))(typescript@5.5.3)': + '@nx/jest@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(babel-plugin-macros@3.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(typescript@5.5.3))(typescript@5.5.3)': dependencies: '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 - '@nrwl/jest': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(babel-plugin-macros@3.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(typescript@5.5.3))(typescript@5.5.3) + '@nrwl/jest': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(babel-plugin-macros@3.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(typescript@5.5.3))(typescript@5.5.3) '@nx/devkit': 17.3.2(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) - '@nx/js': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) + '@nx/js': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) '@phenomnomnominal/tsquery': 5.0.1(typescript@5.5.3) chalk: 4.1.2 identity-obj-proxy: 3.0.0 @@ -38361,7 +41162,7 @@ snapshots: - typescript - verdaccio - '@nx/js@17.2.8(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.6.2)': + '@nx/js@17.2.8(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)': dependencies: '@babel/core': 7.24.7 '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.24.7) @@ -38369,19 +41170,19 @@ snapshots: '@babel/plugin-transform-runtime': 7.24.7(@babel/core@7.24.7) '@babel/preset-env': 7.24.7(@babel/core@7.24.7) '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@babel/runtime': 7.28.3 - '@nrwl/js': 17.2.8(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.6.2) - '@nx/devkit': 17.2.8(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@babel/runtime': 7.28.4 + '@nrwl/js': 17.2.8(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) + '@nx/devkit': 17.2.8(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@nx/workspace': 17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)) - '@phenomnomnominal/tsquery': 5.0.1(typescript@5.6.2) + '@phenomnomnominal/tsquery': 5.0.1(typescript@5.5.3) babel-plugin-const-enum: 1.2.0(@babel/core@7.24.7) babel-plugin-macros: 2.8.0 - babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.3) + babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.4) chalk: 4.1.2 columnify: 1.6.0 detect-port: 1.6.1 fast-glob: 3.2.7 - fs-extra: 11.3.1 + fs-extra: 11.3.2 ignore: 5.3.2 js-tokens: 4.0.0 minimatch: 3.0.5 @@ -38390,7 +41191,7 @@ snapshots: ora: 5.3.0 semver: 7.5.3 source-map-support: 0.5.19 - ts-node: 10.9.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2) + ts-node: 10.9.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3) tsconfig-paths: 4.2.0 tslib: 2.8.1 transitivePeerDependencies: @@ -38404,7 +41205,7 @@ snapshots: - supports-color - typescript - '@nx/js@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.3.3)': + '@nx/js@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.3.3)': dependencies: '@babel/core': 7.24.7 '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.24.7) @@ -38412,19 +41213,19 @@ snapshots: '@babel/plugin-transform-runtime': 7.24.7(@babel/core@7.24.7) '@babel/preset-env': 7.24.7(@babel/core@7.24.7) '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@babel/runtime': 7.28.3 - '@nrwl/js': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.3.3) + '@babel/runtime': 7.28.4 + '@nrwl/js': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.3.3) '@nx/devkit': 17.3.2(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@nx/workspace': 17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)) '@phenomnomnominal/tsquery': 5.0.1(typescript@5.3.3) babel-plugin-const-enum: 1.2.0(@babel/core@7.24.7) babel-plugin-macros: 2.8.0 - babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.3) + babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.4) chalk: 4.1.2 columnify: 1.6.0 detect-port: 1.6.1 fast-glob: 3.2.7 - fs-extra: 11.3.1 + fs-extra: 11.3.2 ignore: 5.3.2 js-tokens: 4.0.0 minimatch: 9.0.3 @@ -38447,7 +41248,7 @@ snapshots: - supports-color - typescript - '@nx/js@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)': + '@nx/js@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)': dependencies: '@babel/core': 7.24.7 '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.24.7) @@ -38455,19 +41256,19 @@ snapshots: '@babel/plugin-transform-runtime': 7.24.7(@babel/core@7.24.7) '@babel/preset-env': 7.24.7(@babel/core@7.24.7) '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@babel/runtime': 7.28.3 - '@nrwl/js': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) + '@babel/runtime': 7.28.4 + '@nrwl/js': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) '@nx/devkit': 17.3.2(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@nx/workspace': 17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)) '@phenomnomnominal/tsquery': 5.0.1(typescript@5.5.3) babel-plugin-const-enum: 1.2.0(@babel/core@7.24.7) babel-plugin-macros: 2.8.0 - babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.3) + babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.4) chalk: 4.1.2 columnify: 1.6.0 detect-port: 1.6.1 fast-glob: 3.2.7 - fs-extra: 11.3.1 + fs-extra: 11.3.2 ignore: 5.3.2 js-tokens: 4.0.0 minimatch: 9.0.3 @@ -38490,7 +41291,7 @@ snapshots: - supports-color - typescript - '@nx/js@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.3.3)': + '@nx/js@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.3.3)': dependencies: '@babel/core': 7.24.7 '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.24.7) @@ -38498,19 +41299,19 @@ snapshots: '@babel/plugin-transform-runtime': 7.24.7(@babel/core@7.24.7) '@babel/preset-env': 7.24.7(@babel/core@7.24.7) '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@babel/runtime': 7.28.3 - '@nrwl/js': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.3.3) - '@nx/devkit': 17.3.2(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@babel/runtime': 7.28.4 + '@nrwl/js': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.3.3) + '@nx/devkit': 17.3.2(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@nx/workspace': 17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)) '@phenomnomnominal/tsquery': 5.0.1(typescript@5.3.3) babel-plugin-const-enum: 1.2.0(@babel/core@7.24.7) babel-plugin-macros: 2.8.0 - babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.3) + babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.4) chalk: 4.1.2 columnify: 1.6.0 detect-port: 1.6.1 fast-glob: 3.2.7 - fs-extra: 11.3.1 + fs-extra: 11.3.2 ignore: 5.3.2 js-tokens: 4.0.0 minimatch: 9.0.3 @@ -38519,7 +41320,7 @@ snapshots: ora: 5.3.0 semver: 7.6.3 source-map-support: 0.5.19 - ts-node: 10.9.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.3.3) + ts-node: 10.9.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.3.3) tsconfig-paths: 4.2.0 tslib: 2.8.1 transitivePeerDependencies: @@ -38533,7 +41334,7 @@ snapshots: - supports-color - typescript - '@nx/js@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.6.2)': + '@nx/js@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)': dependencies: '@babel/core': 7.24.7 '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.24.7) @@ -38541,19 +41342,19 @@ snapshots: '@babel/plugin-transform-runtime': 7.24.7(@babel/core@7.24.7) '@babel/preset-env': 7.24.7(@babel/core@7.24.7) '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@babel/runtime': 7.28.3 - '@nrwl/js': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.6.2) - '@nx/devkit': 17.3.2(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@babel/runtime': 7.28.4 + '@nrwl/js': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) + '@nx/devkit': 17.3.2(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@nx/workspace': 17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)) - '@phenomnomnominal/tsquery': 5.0.1(typescript@5.6.2) + '@phenomnomnominal/tsquery': 5.0.1(typescript@5.5.3) babel-plugin-const-enum: 1.2.0(@babel/core@7.24.7) babel-plugin-macros: 2.8.0 - babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.3) + babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.4) chalk: 4.1.2 columnify: 1.6.0 detect-port: 1.6.1 fast-glob: 3.2.7 - fs-extra: 11.3.1 + fs-extra: 11.3.2 ignore: 5.3.2 js-tokens: 4.0.0 minimatch: 9.0.3 @@ -38562,7 +41363,7 @@ snapshots: ora: 5.3.0 semver: 7.6.3 source-map-support: 0.5.19 - ts-node: 10.9.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2) + ts-node: 10.9.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3) tsconfig-paths: 4.2.0 tslib: 2.8.1 transitivePeerDependencies: @@ -38576,9 +41377,9 @@ snapshots: - supports-color - typescript - '@nx/linter@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@nx/linter@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: - '@nx/eslint': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@nx/eslint': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -38591,9 +41392,9 @@ snapshots: - supports-color - verdaccio - '@nx/linter@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(js-yaml@4.1.0)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@nx/linter@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: - '@nx/eslint': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(js-yaml@4.1.0)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@nx/eslint': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -38606,22 +41407,22 @@ snapshots: - supports-color - verdaccio - '@nx/next@17.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(file-loader@6.2.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(js-yaml@4.1.0)(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@nx/next@17.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(file-loader@6.2.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(js-yaml@4.1.0)(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.24.7) - '@nrwl/next': 17.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(file-loader@6.2.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(js-yaml@4.1.0)(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0))(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@nrwl/next': 17.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(file-loader@6.2.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(js-yaml@4.1.0)(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1))(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@nx/devkit': 17.3.2(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) - '@nx/eslint': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) - '@nx/js': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) - '@nx/react': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - '@nx/web': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) + '@nx/eslint': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@nx/js': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) + '@nx/react': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@nx/web': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) '@nx/workspace': 17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)) '@svgr/webpack': 8.1.0(typescript@5.5.3) chalk: 4.1.2 copy-webpack-plugin: 10.2.4(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - fs-extra: 11.3.1 + fs-extra: 11.3.2 ignore: 5.3.2 - next: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0) + next: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1) semver: 7.6.3 tslib: 2.8.1 url-loader: 4.1.1(file-loader@6.2.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) @@ -38702,13 +41503,13 @@ snapshots: '@nx/nx-win32-x64-msvc@17.3.2': optional: true - '@nx/react@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@nx/react@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: - '@nrwl/react': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@nrwl/react': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@nx/devkit': 17.3.2(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) - '@nx/eslint': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) - '@nx/js': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) - '@nx/web': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) + '@nx/eslint': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@nx/js': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) + '@nx/web': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) '@phenomnomnominal/tsquery': 5.0.1(typescript@5.5.3) '@svgr/webpack': 8.1.0(typescript@5.5.3) chalk: 4.1.2 @@ -38729,15 +41530,15 @@ snapshots: - verdaccio - webpack - '@nx/react@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(js-yaml@4.1.0)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))': + '@nx/react@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))': dependencies: - '@nrwl/react': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(js-yaml@4.1.0)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) - '@nx/devkit': 17.3.2(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17))) - '@nx/eslint': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(js-yaml@4.1.0)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17))) - '@nx/js': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.6.2) - '@nx/web': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.6.2) - '@phenomnomnominal/tsquery': 5.0.1(typescript@5.6.2) - '@svgr/webpack': 8.1.0(typescript@5.6.2) + '@nrwl/react': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) + '@nx/devkit': 17.3.2(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@nx/eslint': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(js-yaml@4.1.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@nx/js': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) + '@nx/web': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) + '@phenomnomnominal/tsquery': 5.0.1(typescript@5.5.3) + '@svgr/webpack': 8.1.0(typescript@5.5.3) chalk: 4.1.2 file-loader: 6.2.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) minimatch: 9.0.3 @@ -38756,11 +41557,11 @@ snapshots: - verdaccio - webpack - '@nx/web@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)': + '@nx/web@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)': dependencies: - '@nrwl/web': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) + '@nrwl/web': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) '@nx/devkit': 17.3.2(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) - '@nx/js': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) + '@nx/js': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) chalk: 4.1.2 detect-port: 1.6.1 http-server: 14.1.1 @@ -38777,11 +41578,11 @@ snapshots: - typescript - verdaccio - '@nx/web@17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.6.2)': + '@nx/web@17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3)': dependencies: - '@nrwl/web': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.6.2) - '@nx/devkit': 17.3.2(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17))) - '@nx/js': 17.3.2(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.6.2) + '@nrwl/web': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) + '@nx/devkit': 17.3.2(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@nx/js': 17.3.2(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) chalk: 4.1.2 detect-port: 1.6.1 http-server: 14.1.1 @@ -38798,20 +41599,20 @@ snapshots: - typescript - verdaccio - '@nx/webpack@17.2.8(@babel/traverse@7.28.3)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(esbuild@0.23.0)(html-webpack-plugin@5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)))(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(sass-embedded@1.90.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)': + '@nx/webpack@17.2.8(@babel/traverse@7.28.4)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(esbuild@0.23.0)(html-webpack-plugin@5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)))(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(sass-embedded@1.92.1)(typescript@5.5.3)(vue-template-compiler@2.7.16)': dependencies: '@babel/core': 7.24.7 - '@nrwl/webpack': 17.2.8(@babel/traverse@7.28.3)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(esbuild@0.23.0)(html-webpack-plugin@5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)))(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(sass-embedded@1.90.0)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@nx/devkit': 17.2.8(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17))) - '@nx/js': 17.2.8(@babel/traverse@7.28.3)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.6.2) + '@nrwl/webpack': 17.2.8(@babel/traverse@7.28.4)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(esbuild@0.23.0)(html-webpack-plugin@5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)))(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(sass-embedded@1.92.1)(typescript@5.5.3)(vue-template-compiler@2.7.16) + '@nx/devkit': 17.2.8(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@nx/js': 17.2.8(@babel/traverse@7.28.4)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(nx@17.3.2(@swc/core@1.11.31(@swc/helpers@0.5.17)))(typescript@5.5.3) autoprefixer: 10.4.20(postcss@8.4.47) babel-loader: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) - browserslist: 4.25.2 + browserslist: 4.26.2 chalk: 4.1.2 copy-webpack-plugin: 10.2.4(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) css-loader: 6.11.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) css-minimizer-webpack-plugin: 5.0.1(esbuild@0.23.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) - fork-ts-checker-webpack-plugin: 7.2.13(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) + fork-ts-checker-webpack-plugin: 7.2.13(typescript@5.5.3)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) less: 4.1.3 less-loader: 11.1.0(less@4.1.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) license-webpack-plugin: 4.0.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) @@ -38822,14 +41623,14 @@ snapshots: postcss-import: 14.1.0(postcss@8.4.47) postcss-loader: 6.2.1(postcss@8.4.47)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) rxjs: 7.8.2 - sass: 1.90.0 - sass-loader: 12.6.0(sass-embedded@1.90.0)(sass@1.90.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) + sass: 1.92.1 + sass-loader: 12.6.0(sass-embedded@1.92.1)(sass@1.92.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) source-map-loader: 3.0.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) style-loader: 3.3.4(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) stylus: 0.59.0 stylus-loader: 7.1.3(stylus@0.59.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) - ts-loader: 9.5.1(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) + ts-loader: 9.5.1(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) tsconfig-paths-webpack-plugin: 4.0.0 tslib: 2.8.1 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) @@ -39046,23 +41847,18 @@ snapshots: esquery: 1.6.0 typescript: 5.5.3 - '@phenomnomnominal/tsquery@5.0.1(typescript@5.6.2)': - dependencies: - esquery: 1.6.0 - typescript: 5.6.2 - '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.54.2': + '@playwright/test@1.55.0': dependencies: - playwright: 1.54.2 + playwright: 1.55.0 '@pmmmwh/react-refresh-webpack-plugin@0.5.10(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19))(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19)))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19))': dependencies: ansi-html-community: 0.0.8 common-path-prefix: 3.0.0 - core-js-pure: 3.45.0 + core-js-pure: 3.45.1 error-stack-parser: 2.1.4 find-up: 5.0.0 html-entities: 2.6.0 @@ -39081,7 +41877,7 @@ snapshots: dependencies: ansi-html-community: 0.0.8 common-path-prefix: 3.0.0 - core-js-pure: 3.45.0 + core-js-pure: 3.45.1 error-stack-parser: 2.1.4 find-up: 5.0.0 html-entities: 2.6.0 @@ -39089,7 +41885,7 @@ snapshots: react-refresh: 0.14.2 schema-utils: 3.3.0 source-map: 0.7.6 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) optionalDependencies: '@types/webpack': 5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) type-fest: 2.19.0 @@ -39100,7 +41896,7 @@ snapshots: dependencies: ansi-html-community: 0.0.8 common-path-prefix: 3.0.0 - core-js-pure: 3.45.0 + core-js-pure: 3.45.1 error-stack-parser: 2.1.4 find-up: 5.0.0 html-entities: 2.6.0 @@ -39118,7 +41914,7 @@ snapshots: '@pmmmwh/react-refresh-webpack-plugin@0.5.15(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))': dependencies: ansi-html: 0.0.9 - core-js-pure: 3.45.0 + core-js-pure: 3.45.1 error-stack-parser: 2.1.4 html-entities: 2.6.0 loader-utils: 2.0.4 @@ -39132,10 +41928,27 @@ snapshots: webpack-dev-server: 4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) webpack-hot-middleware: 2.26.1 + '@pmmmwh/react-refresh-webpack-plugin@0.5.15(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))(react-refresh@0.17.0)(type-fest@2.19.0)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))': + dependencies: + ansi-html: 0.0.9 + core-js-pure: 3.45.1 + error-stack-parser: 2.1.4 + html-entities: 2.6.0 + loader-utils: 2.0.4 + react-refresh: 0.17.0 + schema-utils: 4.3.2 + source-map: 0.7.6 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) + optionalDependencies: + '@types/webpack': 5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) + type-fest: 2.19.0 + webpack-dev-server: 4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) + webpack-hot-middleware: 2.26.1 + '@pmmmwh/react-refresh-webpack-plugin@0.5.15(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4))(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@5.0.4)(webpack-hot-middleware@2.26.1)(webpack@5.101.0)': dependencies: ansi-html: 0.0.9 - core-js-pure: 3.45.0 + core-js-pure: 3.45.1 error-stack-parser: 2.1.4 html-entities: 2.6.0 loader-utils: 2.0.4 @@ -39152,7 +41965,7 @@ snapshots: '@pmmmwh/react-refresh-webpack-plugin@0.5.15(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4))(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1)(webpack@5.101.0)': dependencies: ansi-html: 0.0.9 - core-js-pure: 3.45.0 + core-js-pure: 3.45.1 error-stack-parser: 2.1.4 html-entities: 2.6.0 loader-utils: 2.0.4 @@ -39169,24 +41982,24 @@ snapshots: '@pmmmwh/react-refresh-webpack-plugin@0.5.15(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: ansi-html: 0.0.9 - core-js-pure: 3.45.0 + core-js-pure: 3.45.1 error-stack-parser: 2.1.4 html-entities: 2.6.0 loader-utils: 2.0.4 react-refresh: 0.11.0 schema-utils: 4.3.2 source-map: 0.7.6 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) optionalDependencies: '@types/webpack': 5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) type-fest: 2.19.0 webpack-dev-server: 4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) webpack-hot-middleware: 2.26.1 - '@pmmmwh/react-refresh-webpack-plugin@0.5.16(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5))(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5))': + '@pmmmwh/react-refresh-webpack-plugin@0.5.16(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: ansi-html: 0.0.9 - core-js-pure: 3.45.0 + core-js-pure: 3.45.1 error-stack-parser: 2.1.4 html-entities: 2.6.0 loader-utils: 2.0.4 @@ -39195,54 +42008,54 @@ snapshots: source-map: 0.7.6 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) optionalDependencies: - '@types/webpack': 5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) + '@types/webpack': 5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) type-fest: 2.19.0 - webpack-dev-server: 5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) + webpack-dev-server: 5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) webpack-hot-middleware: 2.26.1 - '@pmmmwh/react-refresh-webpack-plugin@0.5.16(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@pmmmwh/react-refresh-webpack-plugin@0.5.16(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5))(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5))': dependencies: ansi-html: 0.0.9 - core-js-pure: 3.45.0 + core-js-pure: 3.45.1 error-stack-parser: 2.1.4 html-entities: 2.6.0 loader-utils: 2.0.4 react-refresh: 0.14.2 schema-utils: 4.3.2 source-map: 0.7.6 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5) optionalDependencies: - '@types/webpack': 5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + '@types/webpack': 5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5) type-fest: 2.19.0 - webpack-dev-server: 5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + webpack-dev-server: 5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) webpack-hot-middleware: 2.26.1 '@polka/url@1.0.0-next.29': {} '@redux-devtools/extension@3.3.0(redux@4.2.1)': dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 immutable: 4.3.7 redux: 4.2.1 - '@remix-run/dev@2.10.2(@remix-run/react@2.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2))(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(typescript@5.6.2)(vite@5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1))': + '@remix-run/dev@2.10.2(@remix-run/react@2.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3))(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.5.3))(typescript@5.5.3)(vite@5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0))': dependencies: '@babel/core': 7.24.7 '@babel/generator': 7.28.3 - '@babel/parser': 7.28.3 + '@babel/parser': 7.28.4 '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.24.7) '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.24.7) '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 '@mdx-js/mdx': 2.3.0 '@npmcli/package-json': 4.0.1 - '@remix-run/node': 2.10.2(typescript@5.6.2) - '@remix-run/react': 2.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) + '@remix-run/node': 2.10.2(typescript@5.5.3) + '@remix-run/react': 2.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3) '@remix-run/router': 1.17.1 - '@remix-run/server-runtime': 2.10.2(typescript@5.6.2) + '@remix-run/server-runtime': 2.10.2(typescript@5.5.3) '@types/mdx': 2.0.13 - '@vanilla-extract/integration': 6.5.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1) + '@vanilla-extract/integration': 6.5.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0) arg: 5.0.2 cacache: 17.1.4 chalk: 4.1.2 @@ -39269,7 +42082,7 @@ snapshots: pidtree: 0.6.0 postcss: 8.4.47 postcss-discard-duplicates: 5.1.0(postcss@8.4.47) - postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)) + postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.5.3)) postcss-modules: 6.0.1(postcss@8.4.47) prettier: 2.8.8 pretty-ms: 7.0.1 @@ -39278,12 +42091,12 @@ snapshots: remark-mdx-frontmatter: 1.1.1 semver: 7.6.3 set-cookie-parser: 2.7.1 - tar-fs: 2.1.3 + tar-fs: 2.1.4 tsconfig-paths: 4.2.0 ws: 7.5.10 optionalDependencies: - typescript: 5.6.2 - vite: 5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1) + typescript: 5.5.3 + vite: 5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -39299,16 +42112,16 @@ snapshots: - ts-node - utf-8-validate - '@remix-run/express@2.17.0(express@4.19.2)(typescript@5.6.2)': + '@remix-run/express@2.17.1(express@4.19.2)(typescript@5.5.3)': dependencies: - '@remix-run/node': 2.17.0(typescript@5.6.2) + '@remix-run/node': 2.17.1(typescript@5.5.3) express: 4.19.2 optionalDependencies: - typescript: 5.6.2 + typescript: 5.5.3 - '@remix-run/node@2.10.2(typescript@5.6.2)': + '@remix-run/node@2.10.2(typescript@5.5.3)': dependencies: - '@remix-run/server-runtime': 2.10.2(typescript@5.6.2) + '@remix-run/server-runtime': 2.10.2(typescript@5.5.3) '@remix-run/web-fetch': 4.4.2 '@web3-storage/multipart-parser': 1.0.0 cookie-signature: 1.2.2 @@ -39316,11 +42129,11 @@ snapshots: stream-slice: 0.1.2 undici: 6.21.3 optionalDependencies: - typescript: 5.6.2 + typescript: 5.5.3 - '@remix-run/node@2.17.0(typescript@5.6.2)': + '@remix-run/node@2.17.1(typescript@5.5.3)': dependencies: - '@remix-run/server-runtime': 2.17.0(typescript@5.6.2) + '@remix-run/server-runtime': 2.17.1(typescript@5.5.3) '@remix-run/web-fetch': 4.4.2 '@web3-storage/multipart-parser': 1.0.0 cookie-signature: 1.2.2 @@ -39328,19 +42141,19 @@ snapshots: stream-slice: 0.1.2 undici: 6.21.3 optionalDependencies: - typescript: 5.6.2 + typescript: 5.5.3 - '@remix-run/react@2.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)': + '@remix-run/react@2.17.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.3)': dependencies: '@remix-run/router': 1.23.0 - '@remix-run/server-runtime': 2.17.0(typescript@5.6.2) + '@remix-run/server-runtime': 2.17.1(typescript@5.5.3) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-router: 6.30.0(react@18.3.1) react-router-dom: 6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) turbo-stream: 2.4.1 optionalDependencies: - typescript: 5.6.2 + typescript: 5.5.3 '@remix-run/router@1.10.0': {} @@ -39352,7 +42165,7 @@ snapshots: '@remix-run/router@1.23.0': {} - '@remix-run/server-runtime@2.10.2(typescript@5.6.2)': + '@remix-run/server-runtime@2.10.2(typescript@5.5.3)': dependencies: '@remix-run/router': 1.17.1 '@types/cookie': 0.6.0 @@ -39362,9 +42175,9 @@ snapshots: source-map: 0.7.6 turbo-stream: 2.2.0 optionalDependencies: - typescript: 5.6.2 + typescript: 5.5.3 - '@remix-run/server-runtime@2.17.0(typescript@5.6.2)': + '@remix-run/server-runtime@2.17.1(typescript@5.5.3)': dependencies: '@remix-run/router': 1.23.0 '@types/cookie': 0.6.0 @@ -39374,7 +42187,7 @@ snapshots: source-map: 0.7.6 turbo-stream: 2.4.1 optionalDependencies: - typescript: 5.6.2 + typescript: 5.5.3 '@remix-run/web-blob@3.1.0': dependencies: @@ -39443,87 +42256,68 @@ snapshots: estree-walker: 2.0.2 picomatch: 2.3.1 - '@rollup/rollup-android-arm-eabi@4.46.2': + '@rollup/rollup-android-arm-eabi@4.51.0': optional: true - '@rollup/rollup-android-arm64@4.46.2': + '@rollup/rollup-android-arm64@4.51.0': optional: true - '@rollup/rollup-darwin-arm64@4.46.2': + '@rollup/rollup-darwin-arm64@4.51.0': optional: true - '@rollup/rollup-darwin-x64@4.46.2': + '@rollup/rollup-darwin-x64@4.51.0': optional: true - '@rollup/rollup-freebsd-arm64@4.46.2': + '@rollup/rollup-freebsd-arm64@4.51.0': optional: true - '@rollup/rollup-freebsd-x64@4.46.2': + '@rollup/rollup-freebsd-x64@4.51.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.46.2': + '@rollup/rollup-linux-arm-gnueabihf@4.51.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.46.2': + '@rollup/rollup-linux-arm-musleabihf@4.51.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.46.2': + '@rollup/rollup-linux-arm64-gnu@4.51.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.46.2': + '@rollup/rollup-linux-arm64-musl@4.51.0': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.46.2': + '@rollup/rollup-linux-loong64-gnu@4.51.0': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.46.2': + '@rollup/rollup-linux-ppc64-gnu@4.51.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.46.2': + '@rollup/rollup-linux-riscv64-gnu@4.51.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.46.2': + '@rollup/rollup-linux-riscv64-musl@4.51.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.46.2': + '@rollup/rollup-linux-s390x-gnu@4.51.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.46.2': + '@rollup/rollup-linux-x64-gnu@4.51.0': optional: true - '@rollup/rollup-linux-x64-musl@4.46.2': + '@rollup/rollup-linux-x64-musl@4.51.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.46.2': + '@rollup/rollup-openharmony-arm64@4.51.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.46.2': + '@rollup/rollup-win32-arm64-msvc@4.51.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.46.2': + '@rollup/rollup-win32-ia32-msvc@4.51.0': optional: true - '@rsbuild/babel-preset@0.3.4(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3)': - dependencies: - '@babel/core': 7.24.7 - '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.24.7) - '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.24.7) - '@babel/plugin-proposal-partial-application': 7.27.1(@babel/core@7.24.7) - '@babel/plugin-proposal-pipeline-operator': 7.27.1(@babel/core@7.24.7) - '@babel/plugin-transform-runtime': 7.24.7(@babel/core@7.24.7) - '@babel/preset-env': 7.24.7(@babel/core@7.24.7) - '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@babel/runtime': 7.28.3 - '@babel/types': 7.28.2 - '@rsbuild/plugin-babel': 0.3.4(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) - '@rsbuild/shared': 0.3.4(@swc/helpers@0.5.3) - '@types/babel__core': 7.20.5 - babel-plugin-dynamic-import-node: 2.3.3 - core-js: 3.32.2 - transitivePeerDependencies: - - '@rsbuild/core' - - '@swc/helpers' - - supports-color + '@rollup/rollup-win32-x64-msvc@4.51.0': + optional: true '@rsbuild/babel-preset@0.3.4(@rsbuild/core@1.4.11)(@swc/helpers@0.5.3)': dependencies: @@ -39535,8 +42329,8 @@ snapshots: '@babel/plugin-transform-runtime': 7.24.7(@babel/core@7.24.7) '@babel/preset-env': 7.24.7(@babel/core@7.24.7) '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@babel/runtime': 7.28.3 - '@babel/types': 7.28.2 + '@babel/runtime': 7.28.4 + '@babel/types': 7.28.4 '@rsbuild/plugin-babel': 0.3.4(@rsbuild/core@1.4.11)(@swc/helpers@0.5.3) '@rsbuild/shared': 0.3.4(@swc/helpers@0.5.3) '@types/babel__core': 7.20.5 @@ -39557,8 +42351,8 @@ snapshots: '@babel/plugin-transform-runtime': 7.24.7(@babel/core@7.24.7) '@babel/preset-env': 7.24.7(@babel/core@7.24.7) '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@babel/runtime': 7.28.3 - '@babel/types': 7.28.2 + '@babel/runtime': 7.28.4 + '@babel/types': 7.28.4 '@rsbuild/plugin-babel': 0.3.4(@rsbuild/core@1.4.12)(@swc/helpers@0.5.3) '@rsbuild/shared': 0.3.4(@swc/helpers@0.5.3) '@types/babel__core': 7.20.5 @@ -39579,8 +42373,8 @@ snapshots: '@babel/plugin-transform-runtime': 7.24.7(@babel/core@7.24.7) '@babel/preset-env': 7.24.7(@babel/core@7.24.7) '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@babel/runtime': 7.28.3 - '@babel/types': 7.28.2 + '@babel/runtime': 7.28.4 + '@babel/types': 7.28.4 '@rsbuild/plugin-babel': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.17) '@types/babel__core': 7.20.5 babel-plugin-dynamic-import-node: 2.3.3 @@ -39600,8 +42394,8 @@ snapshots: '@babel/plugin-transform-runtime': 7.24.7(@babel/core@7.24.7) '@babel/preset-env': 7.24.7(@babel/core@7.24.7) '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@babel/runtime': 7.28.3 - '@babel/types': 7.28.2 + '@babel/runtime': 7.28.4 + '@babel/types': 7.28.4 '@rsbuild/plugin-babel': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) '@types/babel__core': 7.20.5 babel-plugin-dynamic-import-node: 2.3.3 @@ -39625,7 +42419,7 @@ snapshots: '@rspack/core': 1.0.0-alpha.5(@swc/helpers@0.5.11) '@rspack/lite-tapable': 1.0.0-alpha.5 '@swc/helpers': 0.5.11 - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001743 core-js: 3.37.1 postcss: 8.4.47 optionalDependencies: @@ -39636,7 +42430,7 @@ snapshots: '@rspack/core': 1.0.14(@swc/helpers@0.5.17) '@rspack/lite-tapable': 1.0.1 '@swc/helpers': 0.5.17 - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001743 core-js: 3.38.1 optionalDependencies: fsevents: 2.3.3 @@ -39674,18 +42468,6 @@ snapshots: optionalDependencies: '@rsbuild/core': 1.4.11 - '@rsbuild/plugin-babel@0.3.4(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3)': - dependencies: - '@babel/core': 7.24.7 - '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@rsbuild/core': 0.7.10 - '@rsbuild/shared': 0.3.4(@swc/helpers@0.5.3) - '@types/babel__core': 7.20.5 - upath: 2.0.1 - transitivePeerDependencies: - - '@swc/helpers' - - supports-color - '@rsbuild/plugin-babel@0.3.4(@rsbuild/core@1.4.11)(@swc/helpers@0.5.3)': dependencies: '@babel/core': 7.24.7 @@ -39740,10 +42522,10 @@ snapshots: '@rsbuild/plugin-babel@1.0.1-beta.3(@rsbuild/core@1.0.1-beta.3)': dependencies: - '@babel/core': 7.28.3 - '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.3) - '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.3) - '@babel/preset-typescript': 7.24.7(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.4) + '@babel/preset-typescript': 7.24.7(@babel/core@7.28.4) '@rsbuild/core': 1.0.1-beta.3 '@types/babel__core': 7.20.5 deepmerge: 4.3.1 @@ -39754,10 +42536,10 @@ snapshots: '@rsbuild/plugin-babel@1.0.1-rc.4(@rsbuild/core@1.0.1-rc.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.3) - '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.3) - '@babel/preset-typescript': 7.24.7(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.4) + '@babel/preset-typescript': 7.24.7(@babel/core@7.28.4) '@rsbuild/core': 1.0.1-rc.4 '@types/babel__core': 7.20.5 deepmerge: 4.3.1 @@ -39768,10 +42550,10 @@ snapshots: '@rsbuild/plugin-babel@1.0.5(@rsbuild/core@1.4.11)': dependencies: - '@babel/core': 7.28.3 - '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.3) - '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.3) - '@babel/preset-typescript': 7.27.1(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.4) + '@babel/preset-typescript': 7.27.1(@babel/core@7.28.4) '@rsbuild/core': 1.4.11 '@types/babel__core': 7.20.5 deepmerge: 4.3.1 @@ -39869,9 +42651,9 @@ snapshots: - lightningcss - webpack - '@rsbuild/plugin-css-minimizer@1.0.2(@rsbuild/core@1.4.11)(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5))': + '@rsbuild/plugin-css-minimizer@1.0.2(@rsbuild/core@1.4.11)(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': dependencies: - css-minimizer-webpack-plugin: 5.0.1(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) + css-minimizer-webpack-plugin: 5.0.1(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) reduce-configs: 1.1.1 optionalDependencies: '@rsbuild/core': 1.4.11 @@ -39884,9 +42666,9 @@ snapshots: - lightningcss - webpack - '@rsbuild/plugin-css-minimizer@1.0.2(@rsbuild/core@1.4.11)(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))': + '@rsbuild/plugin-css-minimizer@1.0.2(@rsbuild/core@1.4.11)(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5))': dependencies: - css-minimizer-webpack-plugin: 5.0.1(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + css-minimizer-webpack-plugin: 5.0.1(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) reduce-configs: 1.1.1 optionalDependencies: '@rsbuild/core': 1.4.11 @@ -40075,7 +42857,7 @@ snapshots: '@rsbuild/plugin-rem@1.0.2(@rsbuild/core@1.4.11)': dependencies: deepmerge: 4.3.1 - terser: 5.43.1 + terser: 5.44.0 optionalDependencies: '@rsbuild/core': 1.4.11 @@ -40085,7 +42867,7 @@ snapshots: '@rsbuild/shared': 0.7.10(@swc/helpers@0.5.3) loader-utils: 2.0.4 postcss: 8.4.47 - sass-embedded: 1.90.0 + sass-embedded: 1.92.1 transitivePeerDependencies: - '@swc/helpers' @@ -40096,7 +42878,7 @@ snapshots: loader-utils: 2.0.4 postcss: 8.4.47 reduce-configs: 1.1.1 - sass-embedded: 1.90.0 + sass-embedded: 1.92.1 '@rsbuild/plugin-sass@1.3.3(@rsbuild/core@1.4.11)': dependencies: @@ -40105,7 +42887,7 @@ snapshots: loader-utils: 2.0.4 postcss: 8.5.6 reduce-configs: 1.1.1 - sass-embedded: 1.90.0 + sass-embedded: 1.92.1 '@rsbuild/plugin-source-build@0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3)': dependencies: @@ -40164,20 +42946,6 @@ snapshots: - supports-color - typescript - '@rsbuild/plugin-svgr@0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3)(typescript@5.6.2)': - dependencies: - '@rsbuild/core': 0.7.10 - '@rsbuild/plugin-react': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) - '@rsbuild/shared': 0.7.10(@swc/helpers@0.5.3) - '@svgr/core': 8.1.0(typescript@5.6.2) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.6.2)) - '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.6.2))(typescript@5.6.2) - loader-utils: 2.0.4 - transitivePeerDependencies: - - '@swc/helpers' - - supports-color - - typescript - '@rsbuild/plugin-svgr@1.0.1-beta.3(@rsbuild/core@1.0.1-beta.3)(typescript@4.9.5)': dependencies: '@rsbuild/core': 1.0.1-beta.3 @@ -40191,13 +42959,13 @@ snapshots: - supports-color - typescript - '@rsbuild/plugin-svgr@1.2.1(@rsbuild/core@1.4.11)(typescript@5.6.2)(webpack-hot-middleware@2.26.1)': + '@rsbuild/plugin-svgr@1.2.1(@rsbuild/core@1.4.11)(typescript@5.5.3)(webpack-hot-middleware@2.26.1)': dependencies: '@rsbuild/core': 1.4.11 '@rsbuild/plugin-react': 1.3.4(@rsbuild/core@1.4.11)(webpack-hot-middleware@2.26.1) - '@svgr/core': 8.1.0(typescript@5.6.2) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.6.2)) - '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.6.2))(typescript@5.6.2) + '@svgr/core': 8.1.0(typescript@5.5.3) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.5.3)) + '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.5.3))(typescript@5.5.3) deepmerge: 4.3.1 loader-utils: 3.3.1 transitivePeerDependencies: @@ -40237,26 +43005,11 @@ snapshots: - uglify-js - webpack-cli - '@rsbuild/plugin-type-check@0.7.10(@rsbuild/core@0.7.10)(@swc/core@1.11.31(@swc/helpers@0.5.17))(@swc/helpers@0.5.3)(esbuild@0.17.19)(typescript@5.6.2)': - dependencies: - '@rsbuild/core': 0.7.10 - '@rsbuild/shared': 0.7.10(@swc/helpers@0.5.3) - fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - json5: 2.2.3 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.19) - transitivePeerDependencies: - - '@swc/core' - - '@swc/helpers' - - esbuild - - typescript - - uglify-js - - webpack-cli - - '@rsbuild/plugin-type-check@0.7.10(@rsbuild/core@0.7.10)(@swc/core@1.11.31(@swc/helpers@0.5.3))(@swc/helpers@0.5.3)(esbuild@0.17.19)(typescript@5.6.2)': + '@rsbuild/plugin-type-check@0.7.10(@rsbuild/core@0.7.10)(@swc/core@1.11.31(@swc/helpers@0.5.3))(@swc/helpers@0.5.3)(esbuild@0.17.19)(typescript@5.5.3)': dependencies: '@rsbuild/core': 0.7.10 '@rsbuild/shared': 0.7.10(@swc/helpers@0.5.3) - fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) + fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) json5: 2.2.3 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19) transitivePeerDependencies: @@ -40297,12 +43050,24 @@ snapshots: - uglify-js - webpack-cli - '@rsbuild/plugin-type-check@1.2.3(@rsbuild/core@1.4.11)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(typescript@5.6.2)': + '@rsbuild/plugin-type-check@1.2.3(@rsbuild/core@1.4.11)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(typescript@5.5.3)': + dependencies: + deepmerge: 4.3.1 + json5: 2.2.3 + reduce-configs: 1.1.1 + ts-checker-rspack-plugin: 1.1.5(@rspack/core@1.4.11(@swc/helpers@0.5.17))(typescript@5.5.3) + optionalDependencies: + '@rsbuild/core': 1.4.11 + transitivePeerDependencies: + - '@rspack/core' + - typescript + + '@rsbuild/plugin-type-check@1.2.3(@rsbuild/core@1.4.11)(@rspack/core@1.4.11(@swc/helpers@0.5.3))(typescript@5.5.3)': dependencies: deepmerge: 4.3.1 json5: 2.2.3 reduce-configs: 1.1.1 - ts-checker-rspack-plugin: 1.1.5(@rspack/core@1.4.11(@swc/helpers@0.5.17))(typescript@5.6.2) + ts-checker-rspack-plugin: 1.1.5(@rspack/core@1.4.11(@swc/helpers@0.5.3))(typescript@5.5.3) optionalDependencies: '@rsbuild/core': 1.4.11 transitivePeerDependencies: @@ -40339,7 +43104,7 @@ snapshots: '@rsbuild/shared@0.3.4(@swc/helpers@0.5.3)': dependencies: '@rspack/core': 0.5.0(@swc/helpers@0.5.3) - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001743 lodash: 4.17.21 postcss: 8.4.47 transitivePeerDependencies: @@ -40348,7 +43113,7 @@ snapshots: '@rsbuild/shared@0.7.10(@swc/helpers@0.5.17)': dependencies: '@rspack/core': 0.7.5(@swc/helpers@0.5.17) - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001743 html-webpack-plugin: html-rspack-plugin@5.7.2(@rspack/core@0.7.5(@swc/helpers@0.5.17)) postcss: 8.4.47 optionalDependencies: @@ -40359,7 +43124,7 @@ snapshots: '@rsbuild/shared@0.7.10(@swc/helpers@0.5.3)': dependencies: '@rspack/core': 0.7.5(@swc/helpers@0.5.3) - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001743 html-webpack-plugin: html-rspack-plugin@5.7.2(@rspack/core@0.7.5(@swc/helpers@0.5.3)) postcss: 8.4.47 optionalDependencies: @@ -40430,9 +43195,9 @@ snapshots: '@rsbuild/webpack@1.3.2(@rsbuild/core@1.4.11)(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)': dependencies: '@rsbuild/core': 1.4.11 - copy-webpack-plugin: 11.0.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) - html-webpack-plugin: 5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) - mini-css-extract-plugin: 2.9.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) + copy-webpack-plugin: 11.0.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + html-webpack-plugin: 5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + mini-css-extract-plugin: 2.9.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) picocolors: 1.1.1 reduce-configs: 1.1.1 tsconfig-paths-webpack-plugin: 4.2.0 @@ -40444,6 +43209,23 @@ snapshots: - uglify-js - webpack-cli + '@rsbuild/webpack@1.3.2(@rsbuild/core@1.4.11)(@rspack/core@1.4.11(@swc/helpers@0.5.3))(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)': + dependencies: + '@rsbuild/core': 1.4.11 + copy-webpack-plugin: 11.0.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) + html-webpack-plugin: 5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.3))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) + mini-css-extract-plugin: 2.9.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) + picocolors: 1.1.1 + reduce-configs: 1.1.1 + tsconfig-paths-webpack-plugin: 4.2.0 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5) + transitivePeerDependencies: + - '@rspack/core' + - '@swc/core' + - esbuild + - uglify-js + - webpack-cli + '@rsdoctor/client@0.3.7': {} '@rsdoctor/core@0.3.7(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))': @@ -40455,7 +43237,7 @@ snapshots: axios: 1.7.7 enhanced-resolve: 5.12.0 filesize: 10.1.6 - fs-extra: 11.3.1 + fs-extra: 11.3.2 loader-utils: 2.0.4 lodash: 4.17.21 path-browserify: 1.0.1 @@ -40565,7 +43347,7 @@ snapshots: deep-eql: 4.1.0 envinfo: 7.13.0 filesize: 10.1.6 - fs-extra: 11.3.1 + fs-extra: 11.3.2 get-port: 5.1.1 json-stream-stringify: 3.0.1 lines-and-columns: 2.0.4 @@ -40587,9 +43369,9 @@ snapshots: '@rsdoctor/sdk': 0.3.7(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17)) '@rsdoctor/types': 0.3.7(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17)) '@rsdoctor/utils': 0.3.7(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17)) - fs-extra: 11.3.1 + fs-extra: 11.3.2 lodash: 4.17.21 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) transitivePeerDependencies: - '@rspack/core' - '@swc/core' @@ -40729,12 +43511,12 @@ snapshots: '@rspack/binding-wasm32-wasi@1.4.10': dependencies: - '@napi-rs/wasm-runtime': 1.0.3 + '@napi-rs/wasm-runtime': 1.0.5 optional: true '@rspack/binding-wasm32-wasi@1.4.11': dependencies: - '@napi-rs/wasm-runtime': 1.0.3 + '@napi-rs/wasm-runtime': 1.0.5 optional: true '@rspack/binding-win32-arm64-msvc@0.4.5': @@ -40911,7 +43693,7 @@ snapshots: '@module-federation/runtime-tools': 0.0.0-next-20231225095220 '@rspack/binding': 0.4.5 '@swc/helpers': 0.5.1 - browserslist: 4.25.2 + browserslist: 4.26.2 compare-versions: 6.0.0-rc.1 enhanced-resolve: 5.12.0 graceful-fs: 4.2.10 @@ -40929,7 +43711,7 @@ snapshots: dependencies: '@module-federation/runtime-tools': 0.0.8 '@rspack/binding': 0.5.0 - browserslist: 4.25.2 + browserslist: 4.26.2 enhanced-resolve: 5.12.0 graceful-fs: 4.2.10 json-parse-even-better-errors: 3.0.2 @@ -40947,7 +43729,7 @@ snapshots: dependencies: '@module-federation/runtime-tools': 0.1.6 '@rspack/binding': 0.7.5 - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001743 tapable: 2.2.1 webpack-sources: 3.2.3 optionalDependencies: @@ -40957,7 +43739,7 @@ snapshots: dependencies: '@module-federation/runtime-tools': 0.1.6 '@rspack/binding': 0.7.5 - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001743 tapable: 2.2.1 webpack-sources: 3.2.3 optionalDependencies: @@ -40968,7 +43750,7 @@ snapshots: '@module-federation/runtime-tools': 0.2.3 '@rspack/binding': 1.0.0-alpha.5 '@rspack/lite-tapable': 1.0.0-alpha.5 - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001743 optionalDependencies: '@swc/helpers': 0.5.11 @@ -40977,7 +43759,7 @@ snapshots: '@module-federation/runtime-tools': 0.5.1 '@rspack/binding': 1.0.14 '@rspack/lite-tapable': 1.0.1 - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001743 optionalDependencies: '@swc/helpers': 0.5.17 @@ -41005,6 +43787,14 @@ snapshots: optionalDependencies: '@swc/helpers': 0.5.17 + '@rspack/core@1.4.11(@swc/helpers@0.5.3)': + dependencies: + '@module-federation/runtime-tools': 0.17.1 + '@rspack/binding': 1.4.11 + '@rspack/lite-tapable': 1.0.1 + optionalDependencies: + '@swc/helpers': 0.5.3 + '@rspack/dev-server@1.1.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0)': dependencies: '@rspack/core': 1.4.11(@swc/helpers@0.5.17) @@ -41068,6 +43858,22 @@ snapshots: '@rushstack/eslint-patch@1.12.0': {} + '@schematics/angular@15.2.10(chokidar@3.5.3)': + dependencies: + '@angular-devkit/core': 15.2.10(chokidar@3.5.3) + '@angular-devkit/schematics': 15.2.10(chokidar@3.5.3) + jsonc-parser: 3.2.0 + transitivePeerDependencies: + - chokidar + + '@schematics/angular@15.2.10(chokidar@3.6.0)': + dependencies: + '@angular-devkit/core': 15.2.10(chokidar@3.6.0) + '@angular-devkit/schematics': 15.2.10(chokidar@3.6.0) + jsonc-parser: 3.2.0 + transitivePeerDependencies: + - chokidar + '@shelex/allure-js-commons-browser@1.5.0': dependencies: uuid: 9.0.1 @@ -41091,14 +43897,28 @@ snapshots: '@sideway/pinpoint@2.0.0': {} + '@sigstore/bundle@1.1.0': + dependencies: + '@sigstore/protobuf-specs': 0.2.1 + '@sigstore/bundle@2.3.2': dependencies: '@sigstore/protobuf-specs': 0.3.3 '@sigstore/core@1.1.0': {} + '@sigstore/protobuf-specs@0.2.1': {} + '@sigstore/protobuf-specs@0.3.3': {} + '@sigstore/sign@1.0.0': + dependencies: + '@sigstore/bundle': 1.1.0 + '@sigstore/protobuf-specs': 0.2.1 + make-fetch-happen: 11.1.1 + transitivePeerDependencies: + - supports-color + '@sigstore/sign@2.3.2': dependencies: '@sigstore/bundle': 2.3.2 @@ -41110,6 +43930,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@sigstore/tuf@1.0.3': + dependencies: + '@sigstore/protobuf-specs': 0.2.1 + tuf-js: 1.1.7 + transitivePeerDependencies: + - supports-color + '@sigstore/tuf@2.3.4': dependencies: '@sigstore/protobuf-specs': 0.3.3 @@ -41153,7 +43980,7 @@ snapshots: error-stack-parser: 2.1.4 string-width: 4.2.3 strip-ansi: 6.0.1 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) '@soda/get-current-script@1.0.2': {} @@ -41182,7 +44009,7 @@ snapshots: '@storybook/addon-docs@8.6.14(@types/react@18.3.10)(storybook@8.6.14(prettier@3.3.3))': dependencies: - '@mdx-js/react': 3.1.0(@types/react@18.3.10)(react@18.3.1) + '@mdx-js/react': 3.1.1(@types/react@18.3.10)(react@18.3.1) '@storybook/blocks': 8.6.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.14(prettier@3.3.3)) '@storybook/csf-plugin': 8.6.14(storybook@8.6.14(prettier@3.3.3)) '@storybook/react-dom-shim': 8.6.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.14(prettier@3.3.3)) @@ -41258,7 +44085,7 @@ snapshots: '@storybook/blocks@8.6.14(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(storybook@8.6.14(prettier@3.3.3))': dependencies: - '@storybook/icons': 1.4.0(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/icons': 1.6.0(react-dom@17.0.2(react@17.0.2))(react@17.0.2) storybook: 8.6.14(prettier@3.3.3) ts-dedent: 2.2.0 optionalDependencies: @@ -41267,26 +44094,26 @@ snapshots: '@storybook/blocks@8.6.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.14(prettier@3.3.3))': dependencies: - '@storybook/icons': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/icons': 1.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) storybook: 8.6.14(prettier@3.3.3) ts-dedent: 2.2.0 optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/builder-webpack5@8.6.14(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(storybook@8.6.14(prettier@3.3.3))(typescript@5.6.2)': + '@storybook/builder-webpack5@8.6.14(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(storybook@8.6.14(prettier@3.3.3))(typescript@5.5.3)': dependencies: '@storybook/core-webpack': 8.6.14(storybook@8.6.14(prettier@3.3.3)) - '@types/semver': 7.7.0 + '@types/semver': 7.7.1 browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 cjs-module-lexer: 1.4.3 constants-browserify: 1.0.0 css-loader: 6.11.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) es-module-lexer: 1.7.0 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) html-webpack-plugin: 5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) - magic-string: 0.30.17 + magic-string: 0.30.19 path-browserify: 1.0.1 process: 0.11.10 semver: 7.6.3 @@ -41302,7 +44129,7 @@ snapshots: webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.6.2 optionalDependencies: - typescript: 5.6.2 + typescript: 5.5.3 transitivePeerDependencies: - '@rspack/core' - '@swc/core' @@ -41342,7 +44169,7 @@ snapshots: file-system-cache: 2.3.0 find-cache-dir: 3.3.2 find-up: 5.0.0 - fs-extra: 11.3.1 + fs-extra: 11.3.2 glob: 10.4.5 handlebars: 4.7.8 lazy-universal-dotenv: 4.0.0 @@ -41397,12 +44224,12 @@ snapshots: '@storybook/global@5.0.0': {} - '@storybook/icons@1.4.0(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': + '@storybook/icons@1.6.0(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: react: 17.0.2 react-dom: 17.0.2(react@17.0.2) - '@storybook/icons@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/icons@1.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -41419,13 +44246,13 @@ snapshots: '@storybook/node-logger@7.6.20': {} - '@storybook/preset-create-react-app@8.6.14(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))(react-refresh@0.11.0)(react-scripts@5.0.1(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.24.7))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.24.7))(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/babel__core@7.20.5)(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))(esbuild@0.23.0)(eslint@9.6.0)(react@17.0.2)(sass-embedded@1.90.0)(sass@1.90.0)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1))(storybook@8.6.14(prettier@3.3.3))(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))': + '@storybook/preset-create-react-app@8.6.14(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))(react-refresh@0.17.0)(react-scripts@5.0.1(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.24.7))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.24.7))(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/babel__core@7.20.5)(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))(esbuild@0.23.0)(eslint@8.57.0)(react@17.0.2)(sass-embedded@1.92.1)(sass@1.92.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(type-fest@2.19.0)(typescript@5.5.3)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1))(storybook@8.6.14(prettier@3.3.3))(type-fest@2.19.0)(typescript@5.5.3)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))': dependencies: - '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) - '@types/semver': 7.7.0 - pnp-webpack-plugin: 1.7.0(typescript@5.6.2) - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.24.7))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.24.7))(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/babel__core@7.20.5)(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))(esbuild@0.23.0)(eslint@9.6.0)(react@17.0.2)(sass-embedded@1.90.0)(sass@1.90.0)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))(react-refresh@0.17.0)(type-fest@2.19.0)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) + '@types/semver': 7.7.1 + pnp-webpack-plugin: 1.7.0(typescript@5.5.3) + react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.24.7))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.24.7))(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/babel__core@7.20.5)(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))(esbuild@0.23.0)(eslint@8.57.0)(react@17.0.2)(sass-embedded@1.92.1)(sass@1.92.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(type-fest@2.19.0)(typescript@5.5.3)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1) semver: 7.6.3 storybook: 8.6.14(prettier@3.3.3) transitivePeerDependencies: @@ -41440,14 +44267,14 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/preset-react-webpack@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.3.3)))(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(storybook@8.6.14(prettier@3.3.3))(typescript@5.6.2)': + '@storybook/preset-react-webpack@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.3.3)))(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(storybook@8.6.14(prettier@3.3.3))(typescript@5.5.3)': dependencies: '@storybook/core-webpack': 8.6.14(storybook@8.6.14(prettier@3.3.3)) - '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.3.3)))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(storybook@8.6.14(prettier@3.3.3))(typescript@5.6.2) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) - '@types/semver': 7.7.0 + '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.3.3)))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(storybook@8.6.14(prettier@3.3.3))(typescript@5.5.3) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) + '@types/semver': 7.7.1 find-up: 5.0.0 - magic-string: 0.30.17 + magic-string: 0.30.19 react: 17.0.2 react-docgen: 7.1.1 react-dom: 17.0.2(react@17.0.2) @@ -41457,7 +44284,7 @@ snapshots: tsconfig-paths: 4.2.0 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) optionalDependencies: - typescript: 5.6.2 + typescript: 5.5.3 transitivePeerDependencies: - '@storybook/test' - '@swc/core' @@ -41470,16 +44297,16 @@ snapshots: dependencies: storybook: 8.6.14(prettier@3.3.3) - '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))': + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))': dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.2.0 micromatch: 4.0.8 - react-docgen-typescript: 2.4.0(typescript@5.6.2) + react-docgen-typescript: 2.4.0(typescript@5.5.3) tslib: 2.8.1 - typescript: 5.6.2 + typescript: 5.5.3 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) transitivePeerDependencies: - supports-color @@ -41496,16 +44323,16 @@ snapshots: react-dom: 18.3.1(react@18.3.1) storybook: 8.6.14(prettier@3.3.3) - '@storybook/react-webpack5@8.6.14(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.3.3)))(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(storybook@8.6.14(prettier@3.3.3))(typescript@5.6.2)': + '@storybook/react-webpack5@8.6.14(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.3.3)))(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(storybook@8.6.14(prettier@3.3.3))(typescript@5.5.3)': dependencies: - '@storybook/builder-webpack5': 8.6.14(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(storybook@8.6.14(prettier@3.3.3))(typescript@5.6.2) - '@storybook/preset-react-webpack': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.3.3)))(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(storybook@8.6.14(prettier@3.3.3))(typescript@5.6.2) - '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.3.3)))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(storybook@8.6.14(prettier@3.3.3))(typescript@5.6.2) + '@storybook/builder-webpack5': 8.6.14(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(storybook@8.6.14(prettier@3.3.3))(typescript@5.5.3) + '@storybook/preset-react-webpack': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.3.3)))(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(storybook@8.6.14(prettier@3.3.3))(typescript@5.5.3) + '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.3.3)))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(storybook@8.6.14(prettier@3.3.3))(typescript@5.5.3) react: 17.0.2 react-dom: 17.0.2(react@17.0.2) storybook: 8.6.14(prettier@3.3.3) optionalDependencies: - typescript: 5.6.2 + typescript: 5.5.3 transitivePeerDependencies: - '@rspack/core' - '@storybook/test' @@ -41515,7 +44342,7 @@ snapshots: - uglify-js - webpack-cli - '@storybook/react@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.3.3)))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(storybook@8.6.14(prettier@3.3.3))(typescript@5.6.2)': + '@storybook/react@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.3.3)))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(storybook@8.6.14(prettier@3.3.3))(typescript@5.5.3)': dependencies: '@storybook/components': 8.6.14(storybook@8.6.14(prettier@3.3.3)) '@storybook/global': 5.0.0 @@ -41528,7 +44355,7 @@ snapshots: storybook: 8.6.14(prettier@3.3.3) optionalDependencies: '@storybook/test': 8.6.14(storybook@8.6.14(prettier@3.3.3)) - typescript: 5.6.2 + typescript: 5.5.3 '@storybook/test@8.6.14(storybook@8.6.14(prettier@3.3.3))': dependencies: @@ -41660,24 +44487,13 @@ snapshots: - supports-color - typescript - '@svgr/core@8.1.0(typescript@5.6.2)': - dependencies: - '@babel/core': 7.24.7 - '@svgr/babel-preset': 8.1.0(@babel/core@7.24.7) - camelcase: 6.3.0 - cosmiconfig: 8.3.6(typescript@5.6.2) - snake-case: 3.0.4 - transitivePeerDependencies: - - supports-color - - typescript - '@svgr/hast-util-to-babel-ast@5.5.0': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@svgr/hast-util-to-babel-ast@8.0.0': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 entities: 4.5.0 '@svgr/plugin-jsx@5.5.0': @@ -41709,16 +44525,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.6.2))': - dependencies: - '@babel/core': 7.24.7 - '@svgr/babel-preset': 8.1.0(@babel/core@7.24.7) - '@svgr/core': 8.1.0(typescript@5.6.2) - '@svgr/hast-util-to-babel-ast': 8.0.0 - svg-parser: 2.0.4 - transitivePeerDependencies: - - supports-color - '@svgr/plugin-svgo@5.5.0': dependencies: cosmiconfig: 7.1.0 @@ -41743,15 +44549,6 @@ snapshots: transitivePeerDependencies: - typescript - '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.6.2))(typescript@5.6.2)': - dependencies: - '@svgr/core': 8.1.0(typescript@5.6.2) - cosmiconfig: 8.3.6(typescript@5.6.2) - deepmerge: 4.3.1 - svgo: 3.3.2 - transitivePeerDependencies: - - typescript - '@svgr/webpack@5.5.0': dependencies: '@babel/core': 7.24.7 @@ -41779,20 +44576,6 @@ snapshots: - supports-color - typescript - '@svgr/webpack@8.1.0(typescript@5.6.2)': - dependencies: - '@babel/core': 7.24.7 - '@babel/plugin-transform-react-constant-elements': 7.27.1(@babel/core@7.24.7) - '@babel/preset-env': 7.24.7(@babel/core@7.24.7) - '@babel/preset-react': 7.24.7(@babel/core@7.24.7) - '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@svgr/core': 8.1.0(typescript@5.6.2) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.6.2)) - '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.6.2))(typescript@5.6.2) - transitivePeerDependencies: - - supports-color - - typescript - '@swc/core-darwin-arm64@1.11.31': optional: true @@ -41826,7 +44609,7 @@ snapshots: '@swc/core@1.11.31(@swc/helpers@0.5.11)': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.24 + '@swc/types': 0.1.25 optionalDependencies: '@swc/core-darwin-arm64': 1.11.31 '@swc/core-darwin-x64': 1.11.31 @@ -41844,7 +44627,7 @@ snapshots: '@swc/core@1.11.31(@swc/helpers@0.5.17)': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.24 + '@swc/types': 0.1.25 optionalDependencies: '@swc/core-darwin-arm64': 1.11.31 '@swc/core-darwin-x64': 1.11.31 @@ -41861,7 +44644,7 @@ snapshots: '@swc/core@1.11.31(@swc/helpers@0.5.3)': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.24 + '@swc/types': 0.1.25 optionalDependencies: '@swc/core-darwin-arm64': 1.11.31 '@swc/core-darwin-x64': 1.11.31 @@ -41911,15 +44694,15 @@ snapshots: dependencies: '@swc/counter': 0.1.3 - '@swc/types@0.1.24': + '@swc/types@0.1.25': dependencies: '@swc/counter': 0.1.3 - '@tanstack/query-core@4.40.0': {} + '@tanstack/query-core@4.41.0': {} - '@tanstack/react-query@4.40.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-query@4.41.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/query-core': 4.40.0 + '@tanstack/query-core': 4.41.0 react: 18.3.1 use-sync-external-store: 1.5.0(react@18.3.1) optionalDependencies: @@ -41936,7 +44719,7 @@ snapshots: '@testing-library/dom@10.4.0': dependencies: '@babel/code-frame': 7.27.1 - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 @@ -41956,7 +44739,7 @@ snapshots: '@testing-library/react@16.0.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 '@testing-library/dom': 10.4.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -41982,14 +44765,21 @@ snapshots: '@tsconfig/node16@1.0.4': {} + '@tufjs/canonical-json@1.0.0': {} + '@tufjs/canonical-json@2.0.0': {} + '@tufjs/models@1.0.4': + dependencies: + '@tufjs/canonical-json': 1.0.0 + minimatch: 9.0.5 + '@tufjs/models@2.0.1': dependencies: '@tufjs/canonical-json': 2.0.0 minimatch: 9.0.5 - '@tybys/wasm-util@0.10.0': + '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 optional: true @@ -42002,24 +44792,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.28.0 '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 '@types/babel__traverse@7.28.0': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@types/body-parser@1.19.6': dependencies: @@ -42078,6 +44868,8 @@ snapshots: '@types/estree@0.0.39': {} + '@types/estree@0.0.51': {} + '@types/estree@1.0.0': {} '@types/estree@1.0.8': {} @@ -42105,6 +44897,11 @@ snapshots: '@types/find-cache-dir@3.2.1': {} + '@types/glob@7.2.0': + dependencies: + '@types/minimatch': 3.0.5 + '@types/node': 20.16.5 + '@types/graceful-fs@4.1.9': dependencies: '@types/node': 20.16.5 @@ -42183,7 +44980,7 @@ snapshots: '@types/node': 20.16.5 form-data: 4.0.4 - '@types/node-forge@1.3.13': + '@types/node-forge@1.3.14': dependencies: '@types/node': 20.16.5 @@ -42273,7 +45070,7 @@ snapshots: '@types/semver@7.5.8': {} - '@types/semver@7.7.0': {} + '@types/semver@7.7.1': {} '@types/send@0.17.5': dependencies: @@ -42294,7 +45091,7 @@ snapshots: '@types/sinonjs__fake-timers@8.1.1': {} - '@types/sizzle@2.3.9': {} + '@types/sizzle@2.3.10': {} '@types/sockjs@0.3.36': dependencies: @@ -42310,7 +45107,7 @@ snapshots: '@types/tapable@2.2.2': dependencies: - tapable: 2.2.2 + tapable: 2.2.3 '@types/tough-cookie@4.0.5': {} @@ -42329,7 +45126,7 @@ snapshots: '@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19)': dependencies: '@types/node': 20.16.5 - tapable: 2.2.2 + tapable: 2.2.3 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19) transitivePeerDependencies: - '@swc/core' @@ -42341,8 +45138,8 @@ snapshots: '@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))': dependencies: '@types/node': 20.16.5 - tapable: 2.2.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + tapable: 2.2.3 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) transitivePeerDependencies: - '@swc/core' - esbuild @@ -42352,7 +45149,7 @@ snapshots: '@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)': dependencies: '@types/node': 20.16.5 - tapable: 2.2.2 + tapable: 2.2.3 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) transitivePeerDependencies: - '@swc/core' @@ -42361,11 +45158,11 @@ snapshots: - webpack-cli optional: true - '@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)': + '@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4)': dependencies: '@types/node': 20.16.5 - tapable: 2.2.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) + tapable: 2.2.3 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) transitivePeerDependencies: - '@swc/core' - esbuild @@ -42373,11 +45170,11 @@ snapshots: - webpack-cli optional: true - '@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4)': + '@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)': dependencies: '@types/node': 20.16.5 - tapable: 2.2.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) + tapable: 2.2.3 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19) transitivePeerDependencies: - '@swc/core' - esbuild @@ -42385,11 +45182,11 @@ snapshots: - webpack-cli optional: true - '@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)': + '@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)': dependencies: '@types/node': 20.16.5 - tapable: 2.2.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19) + tapable: 2.2.3 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5) transitivePeerDependencies: - '@swc/core' - esbuild @@ -42420,15 +45217,15 @@ snapshots: '@types/node': 20.16.5 optional: true - '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1)(typescript@4.9.5)': + '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@4.9.5) + '@typescript-eslint/parser': 5.62.0(eslint@9.6.0)(typescript@4.9.5) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@4.9.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@4.9.5) - debug: 4.4.1(supports-color@8.1.1) - eslint: 8.57.1 + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@4.9.5) + debug: 4.4.3(supports-color@8.1.1) + eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.2 natural-compare-lite: 1.4.0 @@ -42439,15 +45236,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.5.3))(eslint@8.57.1)(typescript@5.5.3)': + '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.5.3) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.5.3) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@5.5.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.5.3) - debug: 4.4.1(supports-color@8.1.1) - eslint: 8.57.1 + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.5.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.3) + debug: 4.4.3(supports-color@8.1.1) + eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.2 natural-compare-lite: 1.4.0 @@ -42458,44 +45255,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.6.2) - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) - debug: 4.4.1(supports-color@8.1.1) - eslint: 8.57.1 - graphemer: 1.4.0 - ignore: 5.3.2 - natural-compare-lite: 1.4.0 - semver: 7.6.3 - tsutils: 3.21.0(typescript@5.6.2) - optionalDependencies: - typescript: 5.6.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.6.0)(typescript@5.6.2))(eslint@9.6.0)(typescript@5.6.2)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 5.62.0(eslint@9.6.0)(typescript@5.6.2) - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@9.6.0)(typescript@5.6.2) - '@typescript-eslint/utils': 5.62.0(eslint@9.6.0)(typescript@5.6.2) - debug: 4.4.1(supports-color@8.1.1) - eslint: 9.6.0 - graphemer: 1.4.0 - ignore: 5.3.2 - natural-compare-lite: 1.4.0 - semver: 7.6.3 - tsutils: 3.21.0(typescript@5.6.2) - optionalDependencies: - typescript: 5.6.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/eslint-plugin@7.15.0(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.3))(eslint@9.6.0)(typescript@5.5.3)': dependencies: '@eslint-community/regexpp': 4.12.1 @@ -42514,59 +45273,47 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/experimental-utils@5.62.0(eslint@9.6.0)(typescript@5.6.2)': + '@typescript-eslint/experimental-utils@5.62.0(eslint@8.57.0)(typescript@5.5.3)': dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@9.6.0)(typescript@5.6.2) - eslint: 9.6.0 + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.3) + eslint: 8.57.0 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5)': - dependencies: - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) - debug: 4.4.1(supports-color@8.1.1) - eslint: 8.57.1 - optionalDependencies: - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.5.3)': + '@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.3)': dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.3) - debug: 4.4.1(supports-color@8.1.1) - eslint: 8.57.1 + debug: 4.4.3(supports-color@8.1.1) + eslint: 8.57.0 optionalDependencies: typescript: 5.5.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2)': + '@typescript-eslint/parser@5.62.0(eslint@9.6.0)(typescript@4.9.5)': dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.2) - debug: 4.4.1(supports-color@8.1.1) - eslint: 8.57.1 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) + debug: 4.4.3(supports-color@8.1.1) + eslint: 9.6.0 optionalDependencies: - typescript: 5.6.2 + typescript: 4.9.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@5.62.0(eslint@9.6.0)(typescript@5.6.2)': + '@typescript-eslint/parser@5.62.0(eslint@9.6.0)(typescript@5.5.3)': dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.2) - debug: 4.4.1(supports-color@8.1.1) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.3) + debug: 4.4.3(supports-color@8.1.1) eslint: 9.6.0 optionalDependencies: - typescript: 5.6.2 + typescript: 5.5.3 transitivePeerDependencies: - supports-color @@ -42576,7 +45323,7 @@ snapshots: '@typescript-eslint/types': 7.15.0 '@typescript-eslint/typescript-estree': 7.15.0(typescript@5.5.3) '@typescript-eslint/visitor-keys': 7.15.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 9.6.0 optionalDependencies: typescript: 5.5.3 @@ -42589,26 +45336,13 @@ snapshots: '@typescript-eslint/types': 7.2.0 '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.5.3) '@typescript-eslint/visitor-keys': 7.2.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 9.6.0 optionalDependencies: typescript: 5.5.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.6.2)': - dependencies: - '@typescript-eslint/scope-manager': 7.2.0 - '@typescript-eslint/types': 7.2.0 - '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.6.2) - '@typescript-eslint/visitor-keys': 7.2.0 - debug: 4.4.1(supports-color@8.1.1) - eslint: 9.6.0 - optionalDependencies: - typescript: 5.6.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/scope-manager@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 @@ -42629,59 +45363,35 @@ snapshots: '@typescript-eslint/types': 7.2.0 '@typescript-eslint/visitor-keys': 7.2.0 - '@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@4.9.5)': + '@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@4.9.5)': dependencies: '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@4.9.5) - debug: 4.4.1(supports-color@8.1.1) - eslint: 8.57.1 + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@4.9.5) + debug: 4.4.3(supports-color@8.1.1) + eslint: 8.57.0 tsutils: 3.21.0(typescript@4.9.5) optionalDependencies: typescript: 4.9.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.5.3)': + '@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.5.3)': dependencies: '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.5.3) - debug: 4.4.1(supports-color@8.1.1) - eslint: 8.57.1 + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.3) + debug: 4.4.3(supports-color@8.1.1) + eslint: 8.57.0 tsutils: 3.21.0(typescript@5.5.3) optionalDependencies: typescript: 5.5.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.6.2)': - dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) - debug: 4.4.1(supports-color@8.1.1) - eslint: 8.57.1 - tsutils: 3.21.0(typescript@5.6.2) - optionalDependencies: - typescript: 5.6.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/type-utils@5.62.0(eslint@9.6.0)(typescript@5.6.2)': - dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.2) - '@typescript-eslint/utils': 5.62.0(eslint@9.6.0)(typescript@5.6.2) - debug: 4.4.1(supports-color@8.1.1) - eslint: 9.6.0 - tsutils: 3.21.0(typescript@5.6.2) - optionalDependencies: - typescript: 5.6.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/type-utils@6.21.0(eslint@9.6.0)(typescript@5.5.3)': dependencies: '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.3) '@typescript-eslint/utils': 6.21.0(eslint@9.6.0)(typescript@5.5.3) - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 9.6.0 ts-api-utils: 1.4.3(typescript@5.5.3) optionalDependencies: @@ -42693,7 +45403,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 7.15.0(typescript@5.5.3) '@typescript-eslint/utils': 7.15.0(eslint@9.6.0)(typescript@5.5.3) - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 9.6.0 ts-api-utils: 1.4.3(typescript@5.5.3) optionalDependencies: @@ -42713,7 +45423,7 @@ snapshots: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.3 @@ -42727,7 +45437,7 @@ snapshots: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.3 @@ -42737,25 +45447,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@5.62.0(typescript@5.6.2)': - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.4.1(supports-color@8.1.1) - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.6.3 - tsutils: 3.21.0(typescript@5.6.2) - optionalDependencies: - typescript: 5.6.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.3)': dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 @@ -42770,7 +45466,7 @@ snapshots: dependencies: '@typescript-eslint/types': 7.15.0 '@typescript-eslint/visitor-keys': 7.15.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 @@ -42785,7 +45481,7 @@ snapshots: dependencies: '@typescript-eslint/types': 7.2.0 '@typescript-eslint/visitor-keys': 7.2.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 @@ -42796,75 +45492,30 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@7.2.0(typescript@5.6.2)': + '@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@4.9.5)': dependencies: - '@typescript-eslint/types': 7.2.0 - '@typescript-eslint/visitor-keys': 7.2.0 - debug: 4.4.1(supports-color@8.1.1) - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.3 - ts-api-utils: 1.4.3(typescript@5.6.2) - optionalDependencies: - typescript: 5.6.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@4.9.5)': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.0) '@types/json-schema': 7.0.15 - '@types/semver': 7.7.0 + '@types/semver': 7.7.1 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) - eslint: 8.57.1 + eslint: 8.57.0 eslint-scope: 5.1.1 semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.5.3)': + '@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.5.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.0) '@types/json-schema': 7.0.15 - '@types/semver': 7.7.0 + '@types/semver': 7.7.1 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.3) - eslint: 8.57.1 - eslint-scope: 5.1.1 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.6.2)': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) - '@types/json-schema': 7.0.15 - '@types/semver': 7.7.0 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.2) - eslint: 8.57.1 - eslint-scope: 5.1.1 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/utils@5.62.0(eslint@9.6.0)(typescript@5.6.2)': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.6.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.7.0 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.2) - eslint: 9.6.0 + eslint: 8.57.0 eslint-scope: 5.1.1 semver: 7.6.3 transitivePeerDependencies: @@ -42873,9 +45524,9 @@ snapshots: '@typescript-eslint/utils@6.21.0(eslint@9.6.0)(typescript@5.5.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.6.0) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.6.0) '@types/json-schema': 7.0.15 - '@types/semver': 7.7.0 + '@types/semver': 7.7.1 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.3) @@ -42887,7 +45538,7 @@ snapshots: '@typescript-eslint/utils@7.15.0(eslint@9.6.0)(typescript@5.5.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.6.0) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.6.0) '@typescript-eslint/scope-manager': 7.15.0 '@typescript-eslint/types': 7.15.0 '@typescript-eslint/typescript-estree': 7.15.0(typescript@5.5.3) @@ -42990,7 +45641,7 @@ snapshots: css-what: 6.2.2 cssesc: 3.0.0 csstype: 3.1.3 - dedent: 1.6.0(babel-plugin-macros@3.1.0) + dedent: 1.7.0(babel-plugin-macros@3.1.0) deep-object-diff: 1.1.9 deepmerge: 4.3.1 lru-cache: 10.4.3 @@ -43000,7 +45651,7 @@ snapshots: transitivePeerDependencies: - babel-plugin-macros - '@vanilla-extract/integration@6.5.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1)': + '@vanilla-extract/integration@6.5.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0)': dependencies: '@babel/core': 7.24.7 '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.24.7) @@ -43011,10 +45662,10 @@ snapshots: find-up: 5.0.0 javascript-stringify: 2.1.0 lodash: 4.17.21 - mlly: 1.7.4 + mlly: 1.8.0 outdent: 0.8.0 - vite: 5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1) - vite-node: 1.6.1(@types/node@20.16.5)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1) + vite: 5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0) + vite-node: 1.6.1(@types/node@20.16.5)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -43064,25 +45715,25 @@ snapshots: - encoding - supports-color - '@vitejs/plugin-react@4.3.1(vite@5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1))': + '@vitejs/plugin-react@4.3.1(vite@5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0))': dependencies: '@babel/core': 7.24.7 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.24.7) '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.24.7) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1) + vite: 5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.3.2(vite@5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1))': + '@vitejs/plugin-react@4.3.2(vite@5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0))': dependencies: - '@babel/core': 7.28.3 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.4) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1) + vite: 5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0) transitivePeerDependencies: - supports-color @@ -43096,7 +45747,7 @@ snapshots: dependencies: '@vitest/spy': 2.0.5 '@vitest/utils': 2.0.5 - chai: 5.2.1 + chai: 5.3.3 tinyrainbow: 1.2.0 '@vitest/pretty-format@2.0.5': @@ -43115,7 +45766,7 @@ snapshots: '@vitest/snapshot@1.6.0': dependencies: - magic-string: 0.30.17 + magic-string: 0.30.19 pathe: 1.1.2 pretty-format: 29.7.0 @@ -43138,13 +45789,13 @@ snapshots: dependencies: '@vitest/pretty-format': 2.0.5 estree-walker: 3.0.3 - loupe: 3.2.0 + loupe: 3.2.1 tinyrainbow: 1.2.0 '@vitest/utils@2.1.9': dependencies: '@vitest/pretty-format': 2.1.9 - loupe: 3.2.0 + loupe: 3.2.1 tinyrainbow: 1.2.0 '@vue/babel-helper-vue-jsx-merge-props@1.4.0': {} @@ -43157,11 +45808,11 @@ snapshots: '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.24.7) '@babel/template': 7.27.2 - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 '@vue/babel-helper-vue-transform-on': 1.5.0 '@vue/babel-plugin-resolve-type': 1.5.0(@babel/core@7.24.7) - '@vue/shared': 3.5.18 + '@vue/shared': 3.5.21 optionalDependencies: '@babel/core': 7.24.7 transitivePeerDependencies: @@ -43173,8 +45824,8 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/parser': 7.28.3 - '@vue/compiler-sfc': 3.5.18 + '@babel/parser': 7.28.4 + '@vue/compiler-sfc': 3.5.21 transitivePeerDependencies: - supports-color @@ -43190,7 +45841,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@vue/babel-preset-app@5.0.8(@babel/core@7.24.7)(core-js@3.45.0)(vue@2.7.16)': + '@vue/babel-preset-app@5.0.9(@babel/core@7.24.7)(core-js@3.45.1)(vue@2.7.16)': dependencies: '@babel/core': 7.24.7 '@babel/helper-compilation-targets': 7.27.2 @@ -43201,19 +45852,19 @@ snapshots: '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.24.7) '@babel/plugin-transform-runtime': 7.24.7(@babel/core@7.24.7) '@babel/preset-env': 7.24.7(@babel/core@7.24.7) - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.24.7) '@vue/babel-preset-jsx': 1.4.0(@babel/core@7.24.7)(vue@2.7.16) babel-plugin-dynamic-import-node: 2.3.3 - core-js-compat: 3.45.0 + core-js-compat: 3.45.1 semver: 7.6.3 optionalDependencies: - core-js: 3.45.0 + core-js: 3.45.1 vue: 2.7.16 transitivePeerDependencies: - supports-color - '@vue/babel-preset-app@5.0.8(@babel/core@7.24.7)(core-js@3.45.0)(vue@3.4.31(typescript@5.5.3))': + '@vue/babel-preset-app@5.0.9(@babel/core@7.24.7)(core-js@3.45.1)(vue@3.4.31(typescript@5.5.3))': dependencies: '@babel/core': 7.24.7 '@babel/helper-compilation-targets': 7.27.2 @@ -43224,14 +45875,14 @@ snapshots: '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.24.7) '@babel/plugin-transform-runtime': 7.24.7(@babel/core@7.24.7) '@babel/preset-env': 7.24.7(@babel/core@7.24.7) - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.24.7) '@vue/babel-preset-jsx': 1.4.0(@babel/core@7.24.7)(vue@3.4.31(typescript@5.5.3)) babel-plugin-dynamic-import-node: 2.3.3 - core-js-compat: 3.45.0 + core-js-compat: 3.45.1 semver: 7.6.3 optionalDependencies: - core-js: 3.45.0 + core-js: 3.45.1 vue: 3.4.31(typescript@5.5.3) transitivePeerDependencies: - supports-color @@ -43309,17 +45960,17 @@ snapshots: transitivePeerDependencies: - supports-color - '@vue/cli-overlay@5.0.8': {} + '@vue/cli-overlay@5.0.9': {} - '@vue/cli-plugin-babel@5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3))(core-js@3.45.0)(encoding@0.1.13)(vue@2.7.16)': + '@vue/cli-plugin-babel@5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3))(core-js@3.45.1)(encoding@0.1.13)(vue@2.7.16)': dependencies: '@babel/core': 7.24.7 - '@vue/babel-preset-app': 5.0.8(@babel/core@7.24.7)(core-js@3.45.0)(vue@2.7.16) - '@vue/cli-service': 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3) - '@vue/cli-shared-utils': 5.0.8(encoding@0.1.13) + '@vue/babel-preset-app': 5.0.9(@babel/core@7.24.7)(core-js@3.45.1)(vue@2.7.16) + '@vue/cli-service': 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3) + '@vue/cli-shared-utils': 5.0.9(encoding@0.1.13) babel-loader: 8.4.1(@babel/core@7.24.7)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) thread-loader: 3.0.4(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) transitivePeerDependencies: - '@swc/core' - core-js @@ -43330,15 +45981,15 @@ snapshots: - vue - webpack-cli - '@vue/cli-plugin-babel@5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(core-js@3.45.0)(encoding@0.1.13)(vue@3.4.31(typescript@5.5.3))': + '@vue/cli-plugin-babel@5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(core-js@3.45.1)(encoding@0.1.13)(vue@3.4.31(typescript@5.5.3))': dependencies: '@babel/core': 7.24.7 - '@vue/babel-preset-app': 5.0.8(@babel/core@7.24.7)(core-js@3.45.0)(vue@3.4.31(typescript@5.5.3)) - '@vue/cli-service': 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3) - '@vue/cli-shared-utils': 5.0.8(encoding@0.1.13) + '@vue/babel-preset-app': 5.0.9(@babel/core@7.24.7)(core-js@3.45.1)(vue@3.4.31(typescript@5.5.3)) + '@vue/cli-service': 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3) + '@vue/cli-shared-utils': 5.0.9(encoding@0.1.13) babel-loader: 8.4.1(@babel/core@7.24.7)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) thread-loader: 3.0.4(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) transitivePeerDependencies: - '@swc/core' - core-js @@ -43349,14 +46000,14 @@ snapshots: - vue - webpack-cli - '@vue/cli-plugin-eslint@5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3))(encoding@0.1.13)(eslint@9.6.0)': + '@vue/cli-plugin-eslint@5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3))(encoding@0.1.13)(eslint@9.6.0)': dependencies: - '@vue/cli-service': 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3) - '@vue/cli-shared-utils': 5.0.8(encoding@0.1.13) + '@vue/cli-service': 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3) + '@vue/cli-shared-utils': 5.0.9(encoding@0.1.13) eslint: 9.6.0 eslint-webpack-plugin: 3.2.0(eslint@9.6.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) globby: 11.1.0 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) yorkie: 2.0.0 transitivePeerDependencies: - '@swc/core' @@ -43365,14 +46016,14 @@ snapshots: - uglify-js - webpack-cli - '@vue/cli-plugin-eslint@5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(encoding@0.1.13)(eslint@9.6.0)': + '@vue/cli-plugin-eslint@5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(encoding@0.1.13)(eslint@9.6.0)': dependencies: - '@vue/cli-service': 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3) - '@vue/cli-shared-utils': 5.0.8(encoding@0.1.13) + '@vue/cli-service': 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3) + '@vue/cli-shared-utils': 5.0.9(encoding@0.1.13) eslint: 9.6.0 eslint-webpack-plugin: 3.2.0(eslint@9.6.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) globby: 11.1.0 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) yorkie: 2.0.0 transitivePeerDependencies: - '@swc/core' @@ -43381,26 +46032,26 @@ snapshots: - uglify-js - webpack-cli - '@vue/cli-plugin-router@5.0.8(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3))(encoding@0.1.13)': + '@vue/cli-plugin-router@5.0.8(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3))(encoding@0.1.13)': dependencies: - '@vue/cli-service': 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3) - '@vue/cli-shared-utils': 5.0.8(encoding@0.1.13) + '@vue/cli-service': 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3) + '@vue/cli-shared-utils': 5.0.9(encoding@0.1.13) transitivePeerDependencies: - encoding - '@vue/cli-plugin-router@5.0.8(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(encoding@0.1.13)': + '@vue/cli-plugin-router@5.0.8(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(encoding@0.1.13)': dependencies: - '@vue/cli-service': 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3) - '@vue/cli-shared-utils': 5.0.8(encoding@0.1.13) + '@vue/cli-service': 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3) + '@vue/cli-shared-utils': 5.0.9(encoding@0.1.13) transitivePeerDependencies: - encoding - '@vue/cli-plugin-typescript@5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(encoding@0.1.13)(eslint@9.6.0)(typescript@5.5.3)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))': + '@vue/cli-plugin-typescript@5.0.8(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(encoding@0.1.13)(eslint@9.6.0)(typescript@5.5.3)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))': dependencies: '@babel/core': 7.24.7 '@types/webpack-env': 1.18.8 - '@vue/cli-service': 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3) - '@vue/cli-shared-utils': 5.0.8(encoding@0.1.13) + '@vue/cli-service': 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3) + '@vue/cli-shared-utils': 5.0.9(encoding@0.1.13) babel-loader: 8.4.1(@babel/core@7.24.7)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.6.0)(typescript@5.5.3)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) globby: 11.1.0 @@ -43408,7 +46059,7 @@ snapshots: ts-loader: 9.5.1(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) typescript: 5.5.3 vue: 3.4.31(typescript@5.5.3) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) optionalDependencies: vue-template-compiler: 2.7.16 transitivePeerDependencies: @@ -43420,32 +46071,32 @@ snapshots: - uglify-js - webpack-cli - '@vue/cli-plugin-vuex@5.0.8(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3))': + '@vue/cli-plugin-vuex@5.0.8(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3))': dependencies: - '@vue/cli-service': 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3) + '@vue/cli-service': 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3) - '@vue/cli-plugin-vuex@5.0.8(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))': + '@vue/cli-plugin-vuex@5.0.8(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))': dependencies: - '@vue/cli-service': 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3) + '@vue/cli-service': 5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3) - '@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3)': + '@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3)': dependencies: '@babel/helper-compilation-targets': 7.27.2 '@soda/friendly-errors-webpack-plugin': 1.8.1(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@soda/get-current-script': 1.0.2 '@types/minimist': 1.2.5 - '@vue/cli-overlay': 5.0.8 - '@vue/cli-plugin-router': 5.0.8(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3))(encoding@0.1.13) - '@vue/cli-plugin-vuex': 5.0.8(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3)) - '@vue/cli-shared-utils': 5.0.8(encoding@0.1.13) + '@vue/cli-overlay': 5.0.9 + '@vue/cli-plugin-router': 5.0.8(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3))(encoding@0.1.13) + '@vue/cli-plugin-vuex': 5.0.8(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.3.3)) + '@vue/cli-shared-utils': 5.0.9(encoding@0.1.13) '@vue/component-compiler-utils': 3.3.0(ejs@3.1.10)(handlebars@4.7.8)(lodash@4.17.21)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1) - '@vue/vue-loader-v15': vue-loader@15.11.1(@vue/compiler-sfc@3.5.18)(css-loader@6.11.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(ejs@3.1.10)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@vue/vue-loader-v15': vue-loader@15.11.1(@vue/compiler-sfc@3.5.21)(css-loader@6.11.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(ejs@3.1.10)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@vue/web-component-wrapper': 1.3.0 acorn: 8.15.0 acorn-walk: 8.3.4 address: 1.2.2 autoprefixer: 10.4.20(postcss@8.4.47) - browserslist: 4.25.2 + browserslist: 4.26.2 case-sensitive-paths-webpack-plugin: 2.4.0 cli-highlight: 2.1.11 clipboardy: 2.3.0 @@ -43454,7 +46105,7 @@ snapshots: css-loader: 6.11.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) css-minimizer-webpack-plugin: 3.4.1(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) cssnano: 5.1.15(postcss@8.4.47) - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) default-gateway: 6.0.3 dotenv: 10.0.0 dotenv-expand: 5.1.0 @@ -43469,19 +46120,19 @@ snapshots: mini-css-extract-plugin: 2.9.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) minimist: 1.2.8 module-alias: 2.2.3 - portfinder: 1.0.37 + portfinder: 1.0.38 postcss: 8.4.47 postcss-loader: 6.2.1(postcss@8.4.47)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) progress-webpack-plugin: 1.0.16(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) ssri: 8.0.1 terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) thread-loader: 3.0.4(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - vue-loader: 17.0.1(@vue/compiler-sfc@3.5.18)(vue@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + vue-loader: 17.0.1(@vue/compiler-sfc@3.5.21)(vue@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) vue-style-loader: 4.1.3 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) webpack-bundle-analyzer: 4.10.2 webpack-chain: 6.5.1 - webpack-dev-server: 4.15.2(debug@4.4.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + webpack-dev-server: 4.15.2(debug@4.4.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) webpack-merge: 5.10.0 webpack-virtual-modules: 0.4.6 whatwg-fetch: 3.6.20 @@ -43558,24 +46209,24 @@ snapshots: - webpack-cli - whiskers - '@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3)': + '@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3)': dependencies: '@babel/helper-compilation-targets': 7.27.2 '@soda/friendly-errors-webpack-plugin': 1.8.1(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@soda/get-current-script': 1.0.2 '@types/minimist': 1.2.5 - '@vue/cli-overlay': 5.0.8 - '@vue/cli-plugin-router': 5.0.8(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(encoding@0.1.13) - '@vue/cli-plugin-vuex': 5.0.8(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.18)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3)) - '@vue/cli-shared-utils': 5.0.8(encoding@0.1.13) + '@vue/cli-overlay': 5.0.9 + '@vue/cli-plugin-router': 5.0.8(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3))(encoding@0.1.13) + '@vue/cli-plugin-vuex': 5.0.8(@vue/cli-service@5.0.8(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@vue/compiler-sfc@3.5.21)(ejs@3.1.10)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(vue@3.4.31(typescript@5.5.3))(webpack-sources@3.3.3)) + '@vue/cli-shared-utils': 5.0.9(encoding@0.1.13) '@vue/component-compiler-utils': 3.3.0(ejs@3.1.10)(handlebars@4.7.8)(lodash@4.17.21)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1) - '@vue/vue-loader-v15': vue-loader@15.11.1(@vue/compiler-sfc@3.5.18)(css-loader@6.11.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(ejs@3.1.10)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + '@vue/vue-loader-v15': vue-loader@15.11.1(@vue/compiler-sfc@3.5.21)(css-loader@6.11.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(ejs@3.1.10)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) '@vue/web-component-wrapper': 1.3.0 acorn: 8.15.0 acorn-walk: 8.3.4 address: 1.2.2 autoprefixer: 10.4.20(postcss@8.4.47) - browserslist: 4.25.2 + browserslist: 4.26.2 case-sensitive-paths-webpack-plugin: 2.4.0 cli-highlight: 2.1.11 clipboardy: 2.3.0 @@ -43584,7 +46235,7 @@ snapshots: css-loader: 6.11.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) css-minimizer-webpack-plugin: 3.4.1(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) cssnano: 5.1.15(postcss@8.4.47) - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) default-gateway: 6.0.3 dotenv: 10.0.0 dotenv-expand: 5.1.0 @@ -43599,19 +46250,19 @@ snapshots: mini-css-extract-plugin: 2.9.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) minimist: 1.2.8 module-alias: 2.2.3 - portfinder: 1.0.37 + portfinder: 1.0.38 postcss: 8.4.47 postcss-loader: 6.2.1(postcss@8.4.47)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) progress-webpack-plugin: 1.0.16(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) ssri: 8.0.1 terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) thread-loader: 3.0.4(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - vue-loader: 17.0.1(@vue/compiler-sfc@3.5.18)(vue@3.4.31(typescript@5.5.3))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + vue-loader: 17.0.1(@vue/compiler-sfc@3.5.21)(vue@3.4.31(typescript@5.5.3))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) vue-style-loader: 4.1.3 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) webpack-bundle-analyzer: 4.10.2 webpack-chain: 6.5.1 - webpack-dev-server: 4.15.2(debug@4.4.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + webpack-dev-server: 4.15.2(debug@4.4.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) webpack-merge: 5.10.0 webpack-virtual-modules: 0.4.6 whatwg-fetch: 3.6.20 @@ -43688,7 +46339,7 @@ snapshots: - webpack-cli - whiskers - '@vue/cli-shared-utils@5.0.8(encoding@0.1.13)': + '@vue/cli-shared-utils@5.0.9(encoding@0.1.13)': dependencies: '@achrinza/node-ipc': 9.2.9 chalk: 4.1.2 @@ -43707,16 +46358,16 @@ snapshots: '@vue/compiler-core@3.4.31': dependencies: - '@babel/parser': 7.28.3 + '@babel/parser': 7.28.4 '@vue/shared': 3.4.31 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-core@3.5.18': + '@vue/compiler-core@3.5.21': dependencies: - '@babel/parser': 7.28.3 - '@vue/shared': 3.5.18 + '@babel/parser': 7.28.4 + '@vue/shared': 3.5.21 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 @@ -43726,14 +46377,14 @@ snapshots: '@vue/compiler-core': 3.4.31 '@vue/shared': 3.4.31 - '@vue/compiler-dom@3.5.18': + '@vue/compiler-dom@3.5.21': dependencies: - '@vue/compiler-core': 3.5.18 - '@vue/shared': 3.5.18 + '@vue/compiler-core': 3.5.21 + '@vue/shared': 3.5.21 '@vue/compiler-sfc@2.7.16': dependencies: - '@babel/parser': 7.28.3 + '@babel/parser': 7.28.4 postcss: 8.4.47 source-map: 0.6.1 optionalDependencies: @@ -43741,25 +46392,25 @@ snapshots: '@vue/compiler-sfc@3.4.31': dependencies: - '@babel/parser': 7.28.3 + '@babel/parser': 7.28.4 '@vue/compiler-core': 3.4.31 '@vue/compiler-dom': 3.4.31 '@vue/compiler-ssr': 3.4.31 '@vue/shared': 3.4.31 estree-walker: 2.0.2 - magic-string: 0.30.17 + magic-string: 0.30.19 postcss: 8.4.47 source-map-js: 1.2.1 - '@vue/compiler-sfc@3.5.18': + '@vue/compiler-sfc@3.5.21': dependencies: - '@babel/parser': 7.28.3 - '@vue/compiler-core': 3.5.18 - '@vue/compiler-dom': 3.5.18 - '@vue/compiler-ssr': 3.5.18 - '@vue/shared': 3.5.18 + '@babel/parser': 7.28.4 + '@vue/compiler-core': 3.5.21 + '@vue/compiler-dom': 3.5.21 + '@vue/compiler-ssr': 3.5.21 + '@vue/shared': 3.5.21 estree-walker: 2.0.2 - magic-string: 0.30.17 + magic-string: 0.30.19 postcss: 8.5.6 source-map-js: 1.2.1 @@ -43768,10 +46419,10 @@ snapshots: '@vue/compiler-dom': 3.4.31 '@vue/shared': 3.4.31 - '@vue/compiler-ssr@3.5.18': + '@vue/compiler-ssr@3.5.21': dependencies: - '@vue/compiler-dom': 3.5.18 - '@vue/shared': 3.5.18 + '@vue/compiler-dom': 3.5.21 + '@vue/shared': 3.5.21 '@vue/component-compiler-utils@3.3.0(ejs@3.1.10)(handlebars@4.7.8)(lodash@4.17.21)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)': dependencies: @@ -43902,7 +46553,7 @@ snapshots: '@vue/shared@3.4.31': {} - '@vue/shared@3.5.18': {} + '@vue/shared@3.5.21': {} '@vue/web-component-wrapper@1.3.0': {} @@ -43947,25 +46598,51 @@ snapshots: '@web3-storage/multipart-parser@1.0.0': {} + '@webassemblyjs/ast@1.11.1': + dependencies: + '@webassemblyjs/helper-numbers': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/floating-point-hex-parser@1.11.1': {} + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} + '@webassemblyjs/helper-api-error@1.11.1': {} + '@webassemblyjs/helper-api-error@1.13.2': {} + '@webassemblyjs/helper-buffer@1.11.1': {} + '@webassemblyjs/helper-buffer@1.14.1': {} + '@webassemblyjs/helper-numbers@1.11.1': + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.11.1 + '@webassemblyjs/helper-api-error': 1.11.1 + '@xtuc/long': 4.2.2 + '@webassemblyjs/helper-numbers@1.13.2': dependencies: '@webassemblyjs/floating-point-hex-parser': 1.13.2 '@webassemblyjs/helper-api-error': 1.13.2 '@xtuc/long': 4.2.2 + '@webassemblyjs/helper-wasm-bytecode@1.11.1': {} + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} + '@webassemblyjs/helper-wasm-section@1.11.1': + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-buffer': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + '@webassemblyjs/wasm-gen': 1.11.1 + '@webassemblyjs/helper-wasm-section@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 @@ -43973,16 +46650,37 @@ snapshots: '@webassemblyjs/helper-wasm-bytecode': 1.13.2 '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/ieee754@1.11.1': + dependencies: + '@xtuc/ieee754': 1.2.0 + '@webassemblyjs/ieee754@1.13.2': dependencies: '@xtuc/ieee754': 1.2.0 + '@webassemblyjs/leb128@1.11.1': + dependencies: + '@xtuc/long': 4.2.2 + '@webassemblyjs/leb128@1.13.2': dependencies: '@xtuc/long': 4.2.2 + '@webassemblyjs/utf8@1.11.1': {} + '@webassemblyjs/utf8@1.13.2': {} + '@webassemblyjs/wasm-edit@1.11.1': + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-buffer': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + '@webassemblyjs/helper-wasm-section': 1.11.1 + '@webassemblyjs/wasm-gen': 1.11.1 + '@webassemblyjs/wasm-opt': 1.11.1 + '@webassemblyjs/wasm-parser': 1.11.1 + '@webassemblyjs/wast-printer': 1.11.1 + '@webassemblyjs/wasm-edit@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 @@ -43994,6 +46692,14 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 '@webassemblyjs/wast-printer': 1.14.1 + '@webassemblyjs/wasm-gen@1.11.1': + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + '@webassemblyjs/ieee754': 1.11.1 + '@webassemblyjs/leb128': 1.11.1 + '@webassemblyjs/utf8': 1.11.1 + '@webassemblyjs/wasm-gen@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 @@ -44002,6 +46708,13 @@ snapshots: '@webassemblyjs/leb128': 1.13.2 '@webassemblyjs/utf8': 1.13.2 + '@webassemblyjs/wasm-opt@1.11.1': + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-buffer': 1.11.1 + '@webassemblyjs/wasm-gen': 1.11.1 + '@webassemblyjs/wasm-parser': 1.11.1 + '@webassemblyjs/wasm-opt@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 @@ -44009,6 +46722,15 @@ snapshots: '@webassemblyjs/wasm-gen': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/wasm-parser@1.11.1': + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-api-error': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + '@webassemblyjs/ieee754': 1.11.1 + '@webassemblyjs/leb128': 1.11.1 + '@webassemblyjs/utf8': 1.11.1 + '@webassemblyjs/wasm-parser@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 @@ -44018,6 +46740,11 @@ snapshots: '@webassemblyjs/leb128': 1.13.2 '@webassemblyjs/utf8': 1.13.2 + '@webassemblyjs/wast-printer@1.11.1': + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@xtuc/long': 4.2.2 + '@webassemblyjs/wast-printer@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 @@ -44033,6 +46760,13 @@ snapshots: webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.101.0) + '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@4.11.1)(webpack@5.101.0)': + dependencies: + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack-dev-server@4.11.1)(webpack@5.101.0) + optionalDependencies: + webpack-dev-server: 4.11.1(webpack-cli@5.1.4)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.0.4)(webpack@5.101.0)': dependencies: webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) @@ -44052,6 +46786,19 @@ snapshots: webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack@5.101.0) + '@wessberg/ts-evaluator@0.0.27(typescript@5.5.3)': + dependencies: + chalk: 4.1.2 + jsdom: 16.7.0 + object-path: 0.11.8 + tslib: 2.8.1 + typescript: 5.5.3 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + '@wry/caches@1.0.1': dependencies: tslib: 2.8.1 @@ -44163,17 +46910,25 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color agent-base@7.1.4: {} + agentkeepalive@4.6.0: + dependencies: + humanize-ms: 1.2.1 + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 + ajv-formats@2.1.1(ajv@8.12.0): + optionalDependencies: + ajv: 8.12.0 + ajv-formats@2.1.1(ajv@8.17.1): optionalDependencies: ajv: 8.17.1 @@ -44204,12 +46959,22 @@ snapshots: ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.0.6 + fast-uri: 3.1.0 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 allure-commandline@2.29.0: {} + allure-js-commons@2.15.1: + dependencies: + md5: 2.3.0 + properties: 1.2.1 + strip-ansi: 5.2.0 + + allure-playwright@2.15.1: + dependencies: + allure-js-commons: 2.15.1 + ansi-align@3.0.1: dependencies: string-width: 4.2.3 @@ -44222,7 +46987,7 @@ snapshots: dependencies: type-fest: 0.21.3 - ansi-escapes@7.0.0: + ansi-escapes@7.1.0: dependencies: environment: 1.1.0 @@ -44236,7 +47001,7 @@ snapshots: ansi-regex@5.0.1: {} - ansi-regex@6.1.0: {} + ansi-regex@6.2.2: {} ansi-styles@3.2.1: dependencies: @@ -44248,7 +47013,7 @@ snapshots: ansi-styles@5.2.0: {} - ansi-styles@6.2.1: {} + ansi-styles@6.2.3: {} any-promise@1.3.0: {} @@ -44277,6 +47042,11 @@ snapshots: delegates: 1.0.0 readable-stream: 3.6.2 + are-we-there-yet@3.0.1: + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + arg@4.1.3: {} arg@5.0.2: {} @@ -44325,10 +47095,16 @@ snapshots: is-string: 1.1.1 math-intrinsics: 1.1.0 + array-union@1.0.2: + dependencies: + array-uniq: 1.0.3 + array-union@2.1.0: {} array-union@3.0.1: {} + array-uniq@1.0.3: {} + array-unique@0.3.2: {} array.prototype.findlast@1.2.5: @@ -44444,6 +47220,8 @@ snapshots: astring@1.9.0: {} + async-each-series@0.1.1: {} + async-each@1.0.6: {} async-function@1.0.0: {} @@ -44456,6 +47234,10 @@ snapshots: async@1.5.2: {} + async@2.6.4: + dependencies: + lodash: 4.17.21 + async@3.2.6: {} asynckit@0.4.0: {} @@ -44464,10 +47246,20 @@ snapshots: atob@2.1.2: {} + autoprefixer@10.4.13(postcss@8.4.31): + dependencies: + browserslist: 4.26.2 + caniuse-lite: 1.0.30001743 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + autoprefixer@10.4.19(postcss@8.4.39): dependencies: - browserslist: 4.25.2 - caniuse-lite: 1.0.30001735 + browserslist: 4.26.2 + caniuse-lite: 1.0.30001743 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -44476,8 +47268,8 @@ snapshots: autoprefixer@10.4.20(postcss@8.4.32): dependencies: - browserslist: 4.25.2 - caniuse-lite: 1.0.30001735 + browserslist: 4.26.2 + caniuse-lite: 1.0.30001743 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -44486,8 +47278,8 @@ snapshots: autoprefixer@10.4.20(postcss@8.4.39): dependencies: - browserslist: 4.25.2 - caniuse-lite: 1.0.30001735 + browserslist: 4.26.2 + caniuse-lite: 1.0.30001743 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -44496,8 +47288,8 @@ snapshots: autoprefixer@10.4.20(postcss@8.4.47): dependencies: - browserslist: 4.25.2 - caniuse-lite: 1.0.30001735 + browserslist: 4.26.2 + caniuse-lite: 1.0.30001743 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -44506,8 +47298,8 @@ snapshots: autoprefixer@10.4.21(postcss@8.5.6): dependencies: - browserslist: 4.24.4 - caniuse-lite: 1.0.30001735 + browserslist: 4.26.2 + caniuse-lite: 1.0.30001743 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -44524,9 +47316,15 @@ snapshots: axe-core@4.10.3: {} - axios@1.11.0: + axios@0.21.4(debug@4.3.2): + dependencies: + follow-redirects: 1.15.11(debug@4.3.2) + transitivePeerDependencies: + - debug + + axios@1.12.2: dependencies: - follow-redirects: 1.15.11(debug@4.4.1) + follow-redirects: 1.15.11(debug@4.4.3) form-data: 4.0.4 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -44534,7 +47332,7 @@ snapshots: axios@1.5.0: dependencies: - follow-redirects: 1.15.11(debug@4.4.1) + follow-redirects: 1.15.11(debug@4.4.3) form-data: 4.0.4 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -44542,7 +47340,7 @@ snapshots: axios@1.7.2: dependencies: - follow-redirects: 1.15.11(debug@4.4.1) + follow-redirects: 1.15.11(debug@4.4.3) form-data: 4.0.4 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -44550,7 +47348,7 @@ snapshots: axios@1.7.7: dependencies: - follow-redirects: 1.15.11(debug@4.4.1) + follow-redirects: 1.15.11(debug@4.4.3) form-data: 4.0.4 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -44565,9 +47363,9 @@ snapshots: babel-eslint@10.1.0(eslint@9.6.0): dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.3 - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 eslint: 9.6.0 eslint-visitor-keys: 1.3.0 resolve: 1.22.10 @@ -44619,7 +47417,14 @@ snapshots: loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) + + babel-loader@9.1.2(@babel/core@7.20.12)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)): + dependencies: + '@babel/core': 7.20.12 + find-cache-dir: 3.3.2 + schema-utils: 4.3.2 + webpack: 5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4) babel-loader@9.1.3(@babel/core@7.22.17)(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: @@ -44647,7 +47452,7 @@ snapshots: '@babel/core': 7.24.7 find-cache-dir: 4.0.0 schema-utils: 4.3.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) babel-loader@9.1.3(@babel/core@7.24.7)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)): dependencies: @@ -44663,26 +47468,26 @@ snapshots: schema-utils: 4.3.2 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) - babel-loader@9.2.1(@babel/core@7.28.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)): + babel-loader@9.2.1(@babel/core@7.28.4)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 find-cache-dir: 4.0.0 schema-utils: 4.3.2 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) - babel-loader@9.2.1(@babel/core@7.28.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): + babel-loader@9.2.1(@babel/core@7.28.4)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)): dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 find-cache-dir: 4.0.0 schema-utils: 4.3.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5) babel-plugin-const-enum@1.2.0(@babel/core@7.24.7): dependencies: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.24.7) - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -44719,26 +47524,26 @@ snapshots: babel-plugin-jest-hoist@27.5.1: dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.28.0 babel-plugin-jest-hoist@29.6.3: dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.28.0 babel-plugin-macros@2.8.0: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 cosmiconfig: 6.0.0 resolve: 1.22.10 babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 cosmiconfig: 7.1.0 resolve: 1.22.10 @@ -44748,9 +47553,18 @@ snapshots: babel-plugin-named-exports-order@0.0.2: {} + babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.20.12): + dependencies: + '@babel/compat-data': 7.28.4 + '@babel/core': 7.20.12 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.20.12) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.22.17): dependencies: - '@babel/compat-data': 7.28.0 + '@babel/compat-data': 7.28.4 '@babel/core': 7.22.17 '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.22.17) semver: 6.3.1 @@ -44759,18 +47573,18 @@ snapshots: babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.24.7): dependencies: - '@babel/compat-data': 7.28.0 + '@babel/compat-data': 7.28.4 '@babel/core': 7.24.7 '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.24.7) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.3): + babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.4): dependencies: - '@babel/compat-data': 7.28.0 - '@babel/core': 7.28.3 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.3) + '@babel/compat-data': 7.28.4 + '@babel/core': 7.28.4 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -44779,23 +47593,31 @@ snapshots: dependencies: '@babel/core': 7.24.7 '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.24.7) - core-js-compat: 3.45.0 + core-js-compat: 3.45.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.28.3): + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.28.4): dependencies: - '@babel/core': 7.28.3 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.3) - core-js-compat: 3.45.0 + '@babel/core': 7.28.4 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) + core-js-compat: 3.45.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.3): + babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.4): dependencies: - '@babel/core': 7.28.3 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.3) - core-js-compat: 3.45.0 + '@babel/core': 7.28.4 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) + core-js-compat: 3.45.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.20.12): + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.20.12) + core-js-compat: 3.45.1 transitivePeerDependencies: - supports-color @@ -44803,7 +47625,14 @@ snapshots: dependencies: '@babel/core': 7.22.17 '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.22.17) - core-js-compat: 3.45.0 + core-js-compat: 3.45.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.20.12): + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.20.12) transitivePeerDependencies: - supports-color @@ -44821,30 +47650,20 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.3): + babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.4): dependencies: - '@babel/core': 7.28.3 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.3) - transitivePeerDependencies: - - supports-color - - babel-plugin-styled-components@1.13.3(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)): - dependencies: - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-module-imports': 7.27.1 - babel-plugin-syntax-jsx: 6.18.0 - lodash: 4.17.21 - styled-components: 5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1) + '@babel/core': 7.28.4 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) transitivePeerDependencies: - supports-color - babel-plugin-styled-components@1.13.3(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)): + babel-plugin-styled-components@1.13.3(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)): dependencies: '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-module-imports': 7.27.1 babel-plugin-syntax-jsx: 6.18.0 lodash: 4.17.21 - styled-components: 5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1) + styled-components: 5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1) transitivePeerDependencies: - supports-color @@ -44884,14 +47703,14 @@ snapshots: - '@babel/core' - supports-color - babel-plugin-styled-components@2.1.4(@babel/core@7.28.3)(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(supports-color@5.5.0): + babel-plugin-styled-components@2.1.4(@babel/core@7.28.4)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(supports-color@5.5.0): dependencies: '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-module-imports': 7.27.1(supports-color@5.5.0) - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) lodash: 4.17.21 picomatch: 2.3.1 - styled-components: 5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1) + styled-components: 5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1) transitivePeerDependencies: - '@babel/core' - supports-color @@ -44900,19 +47719,19 @@ snapshots: babel-plugin-transform-react-remove-prop-types@0.4.24: {} - babel-plugin-transform-typescript-metadata@0.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.3): + babel-plugin-transform-typescript-metadata@0.3.2(@babel/core@7.24.7)(@babel/traverse@7.28.4): dependencies: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.27.1 optionalDependencies: - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 - babel-plugin-transform-typescript-metadata@0.3.2(@babel/core@7.28.3)(@babel/traverse@7.28.3): + babel-plugin-transform-typescript-metadata@0.3.2(@babel/core@7.28.4)(@babel/traverse@7.28.4): dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 optionalDependencies: - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 babel-plugin-transform-vue-jsx@3.7.0(babel-helper-vue-jsx-merge-props@2.0.3): dependencies: @@ -44966,7 +47785,7 @@ snapshots: '@babel/preset-env': 7.24.7(@babel/core@7.24.7) '@babel/preset-react': 7.24.7(@babel/core@7.24.7) '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 babel-plugin-macros: 3.1.0 babel-plugin-transform-react-remove-prop-types: 0.4.24 transitivePeerDependencies: @@ -44984,7 +47803,7 @@ snapshots: babel-walk@3.0.0-canary-5: dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 bail@2.0.2: {} @@ -45006,6 +47825,8 @@ snapshots: mixin-deep: 1.3.2 pascalcase: 0.1.1 + baseline-browser-mapping@2.8.6: {} + basic-auth@1.1.0: {} basic-auth@2.0.1: @@ -45183,6 +48004,63 @@ snapshots: browser-stdout@1.3.1: {} + browser-sync-client@2.29.3: + dependencies: + etag: 1.8.1 + fresh: 0.5.2 + mitt: 1.2.0 + + browser-sync-ui@2.29.3: + dependencies: + async-each-series: 0.1.1 + chalk: 4.1.2 + connect-history-api-fallback: 1.6.0 + immutable: 3.8.2 + server-destroy: 1.0.1 + socket.io-client: 4.8.1 + stream-throttle: 0.1.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + browser-sync@2.29.3: + dependencies: + browser-sync-client: 2.29.3 + browser-sync-ui: 2.29.3 + bs-recipes: 1.3.4 + chalk: 4.1.2 + chokidar: 3.6.0 + connect: 3.6.6 + connect-history-api-fallback: 1.6.0 + dev-ip: 1.0.1 + easy-extender: 2.3.4 + eazy-logger: 4.1.0 + etag: 1.8.1 + fresh: 0.5.2 + fs-extra: 3.0.1 + http-proxy: 1.18.1(debug@4.4.3) + immutable: 3.8.2 + localtunnel: 2.0.2 + micromatch: 4.0.8 + opn: 5.3.0 + portscanner: 2.2.0 + raw-body: 2.5.2 + resp-modifier: 6.0.2 + rx: 4.1.0 + send: 0.16.2 + serve-index: 1.9.1 + serve-static: 1.13.2 + server-destroy: 1.0.1 + socket.io: 4.7.2 + ua-parser-js: 1.0.41 + yargs: 17.7.2 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + browserify-aes@1.2.0: dependencies: buffer-xor: 1.0.3 @@ -45234,33 +48112,43 @@ snapshots: browserslist-to-es-version@1.1.1: dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 + + browserslist@4.21.5: + dependencies: + caniuse-lite: 1.0.30001743 + electron-to-chromium: 1.5.222 + node-releases: 2.0.21 + update-browserslist-db: 1.1.3(browserslist@4.21.5) browserslist@4.23.1: dependencies: - caniuse-lite: 1.0.30001735 - electron-to-chromium: 1.5.202 - node-releases: 2.0.19 + caniuse-lite: 1.0.30001743 + electron-to-chromium: 1.5.222 + node-releases: 2.0.21 update-browserslist-db: 1.1.3(browserslist@4.23.1) browserslist@4.24.4: dependencies: - caniuse-lite: 1.0.30001735 - electron-to-chromium: 1.5.202 - node-releases: 2.0.19 + caniuse-lite: 1.0.30001743 + electron-to-chromium: 1.5.222 + node-releases: 2.0.21 update-browserslist-db: 1.1.3(browserslist@4.24.4) - browserslist@4.25.2: + browserslist@4.26.2: dependencies: - caniuse-lite: 1.0.30001735 - electron-to-chromium: 1.5.202 - node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.25.2) + baseline-browser-mapping: 2.8.6 + caniuse-lite: 1.0.30001743 + electron-to-chromium: 1.5.222 + node-releases: 2.0.21 + update-browserslist-db: 1.1.3(browserslist@4.26.2) bs-logger@0.2.6: dependencies: fast-json-stable-stringify: 2.1.0 + bs-recipes@1.3.4: {} + bser@2.1.1: dependencies: node-int64: 0.4.0 @@ -45285,17 +48173,19 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + builtin-modules@1.1.1: {} + builtin-modules@3.3.0: {} builtin-status-codes@3.0.0: {} bundle-name@4.1.0: dependencies: - run-applescript: 7.0.0 + run-applescript: 7.1.0 - bundle-require@5.1.0(esbuild@0.25.9): + bundle-require@5.1.0(esbuild@0.25.10): dependencies: - esbuild: 0.25.9 + esbuild: 0.25.10 load-tsconfig: 0.2.5 busboy@1.6.0: @@ -45312,6 +48202,47 @@ snapshots: cac@6.7.14: {} + cacache@16.1.3: + dependencies: + '@npmcli/fs': 2.1.2 + '@npmcli/move-file': 2.0.1 + chownr: 2.0.0 + fs-minipass: 2.1.0 + glob: 8.1.0 + infer-owner: 1.0.4 + lru-cache: 7.18.3 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + mkdirp: 1.0.4 + p-map: 4.0.0 + promise-inflight: 1.0.1 + rimraf: 3.0.2 + ssri: 9.0.1 + tar: 6.2.1 + unique-filename: 2.0.1 + transitivePeerDependencies: + - bluebird + + cacache@17.0.4: + dependencies: + '@npmcli/fs': 3.1.1 + fs-minipass: 3.0.3 + glob: 8.1.0 + lru-cache: 7.18.3 + minipass: 4.2.8 + minipass-collect: 1.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + p-map: 4.0.0 + promise-inflight: 1.0.1 + ssri: 10.0.6 + tar: 6.2.1 + unique-filename: 3.0.0 + transitivePeerDependencies: + - bluebird + cacache@17.1.4: dependencies: '@npmcli/fs': 3.1.1 @@ -45410,12 +48341,12 @@ snapshots: caniuse-api@3.0.0: dependencies: - browserslist: 4.25.2 - caniuse-lite: 1.0.30001735 + browserslist: 4.26.2 + caniuse-lite: 1.0.30001743 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001735: {} + caniuse-lite@1.0.30001743: {} case-sensitive-paths-webpack-plugin@2.4.0: {} @@ -45433,12 +48364,12 @@ snapshots: pathval: 1.1.1 type-detect: 4.1.0 - chai@5.2.1: + chai@5.3.3: dependencies: assertion-error: 2.0.1 check-error: 2.1.1 deep-eql: 5.0.2 - loupe: 3.2.0 + loupe: 3.2.1 pathval: 2.0.1 chalk-template@0.4.0: @@ -45486,8 +48417,12 @@ snapshots: character-reference-invalid@2.0.1: {} + chardet@0.7.0: {} + chardet@2.1.0: {} + charenc@0.0.2: {} + check-error@1.0.3: dependencies: get-func-name: 2.0.2 @@ -45516,6 +48451,18 @@ snapshots: transitivePeerDependencies: - supports-color + chokidar@3.5.3: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -45576,6 +48523,11 @@ snapshots: clean-stack@2.2.0: {} + clean-webpack-plugin@4.0.0(webpack@5.101.0): + dependencies: + del: 4.1.1 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) + cli-boxes@3.0.0: {} cli-cursor@2.1.0: @@ -45731,7 +48683,7 @@ snapshots: color-string@1.9.1: dependencies: color-name: 1.1.4 - simple-swizzle: 0.2.2 + simple-swizzle: 0.2.4 color-support@1.1.3: {} @@ -45869,8 +48821,19 @@ snapshots: confusing-browser-globals@1.0.11: {} + connect-history-api-fallback@1.6.0: {} + connect-history-api-fallback@2.0.0: {} + connect@3.6.6: + dependencies: + debug: 2.6.9 + finalhandler: 1.1.0 + parseurl: 1.3.3 + utils-merge: 1.0.1 + transitivePeerDependencies: + - supports-color + connect@3.7.0: dependencies: debug: 2.6.9 @@ -45902,8 +48865,8 @@ snapshots: constantinople@4.0.1: dependencies: - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 constants-browserify@1.0.0: {} @@ -46016,7 +48979,7 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.3.2 serialize-javascript: 6.0.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) copy-webpack-plugin@11.0.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19)): dependencies: @@ -46028,7 +48991,7 @@ snapshots: serialize-javascript: 6.0.2 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19) - copy-webpack-plugin@11.0.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)): + copy-webpack-plugin@11.0.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: fast-glob: 3.3.3 glob-parent: 6.0.2 @@ -46038,7 +49001,17 @@ snapshots: serialize-javascript: 6.0.2 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) - copy-webpack-plugin@11.0.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): + copy-webpack-plugin@11.0.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)): + dependencies: + fast-glob: 3.3.3 + glob-parent: 6.0.2 + globby: 13.2.2 + normalize-path: 3.0.0 + schema-utils: 4.3.2 + serialize-javascript: 6.0.2 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5) + + copy-webpack-plugin@11.0.0(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)): dependencies: fast-glob: 3.3.3 glob-parent: 6.0.2 @@ -46046,7 +49019,7 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.3.2 serialize-javascript: 6.0.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4) copy-webpack-plugin@12.0.2(webpack@5.101.0): dependencies: @@ -46066,7 +49039,7 @@ snapshots: normalize-path: 3.0.0 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) copy-webpack-plugin@9.1.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)): dependencies: @@ -46078,11 +49051,11 @@ snapshots: serialize-javascript: 6.0.2 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19) - core-js-compat@3.45.0: + core-js-compat@3.45.1: dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 - core-js-pure@3.45.0: {} + core-js-pure@3.45.1: {} core-js@2.6.12: {} @@ -46098,7 +49071,7 @@ snapshots: core-js@3.44.0: {} - core-js@3.45.0: {} + core-js@3.45.1: {} core-util-is@1.0.2: {} @@ -46242,9 +49215,28 @@ snapshots: create-require@1.1.1: {} + critters@0.0.16: + dependencies: + chalk: 4.1.2 + css-select: 4.3.0 + parse5: 6.0.1 + parse5-htmlparser2-tree-adapter: 6.0.1 + postcss: 8.4.47 + pretty-bytes: 5.6.0 + + critters@0.0.20: + dependencies: + chalk: 4.1.2 + css-select: 5.2.2 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + htmlparser2: 8.0.2 + postcss: 8.4.47 + pretty-bytes: 5.6.0 + cron-parser@4.9.0: dependencies: - luxon: 3.7.1 + luxon: 3.7.2 cross-env@7.0.3: dependencies: @@ -46276,6 +49268,8 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + crypt@0.0.2: {} + crypto-browserify@3.12.1: dependencies: browserify-cipher: 1.0.1 @@ -46323,19 +49317,19 @@ snapshots: dependencies: postcss: 8.4.47 - css-declaration-sorter@7.2.0(postcss@8.4.31): + css-declaration-sorter@7.3.0(postcss@8.4.31): dependencies: postcss: 8.4.31 - css-declaration-sorter@7.2.0(postcss@8.4.32): + css-declaration-sorter@7.3.0(postcss@8.4.32): dependencies: postcss: 8.4.32 - css-declaration-sorter@7.2.0(postcss@8.4.47): + css-declaration-sorter@7.3.0(postcss@8.4.47): dependencies: postcss: 8.4.47 - css-declaration-sorter@7.2.0(postcss@8.5.6): + css-declaration-sorter@7.3.0(postcss@8.5.6): dependencies: postcss: 8.5.6 @@ -46367,7 +49361,7 @@ snapshots: css-jss@10.10.0: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 jss: 10.10.0 jss-preset-default: 10.10.0 @@ -46397,7 +49391,31 @@ snapshots: semver: 7.6.3 optionalDependencies: '@rspack/core': 1.4.11(@swc/helpers@0.5.17) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) + + css-loader@6.7.3(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)): + dependencies: + icss-utils: 5.1.0(postcss@8.4.47) + postcss: 8.4.47 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.47) + postcss-modules-local-by-default: 4.2.0(postcss@8.4.47) + postcss-modules-scope: 3.2.1(postcss@8.4.47) + postcss-modules-values: 4.0.0(postcss@8.4.47) + postcss-value-parser: 4.2.0 + semver: 7.6.3 + webpack: 5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4) + + css-loader@6.8.1(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): + dependencies: + icss-utils: 5.1.0(postcss@8.4.47) + postcss: 8.4.47 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.47) + postcss-modules-local-by-default: 4.2.0(postcss@8.4.47) + postcss-modules-scope: 3.2.1(postcss@8.4.47) + postcss-modules-values: 4.0.0(postcss@8.4.47) + postcss-value-parser: 4.2.0 + semver: 7.6.3 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) css-loader@6.8.1(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: @@ -46423,7 +49441,7 @@ snapshots: semver: 7.6.3 optionalDependencies: '@rspack/core': 1.4.11(@swc/helpers@0.5.17) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) css-loader@7.1.2(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0): dependencies: @@ -46459,11 +49477,11 @@ snapshots: schema-utils: 4.3.2 serialize-javascript: 6.0.2 source-map: 0.6.1 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) css-minimizer-webpack-plugin@5.0.1(esbuild@0.17.19)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19)): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 cssnano: 6.0.1(postcss@8.4.47) jest-worker: 29.7.0 postcss: 8.4.47 @@ -46475,19 +49493,19 @@ snapshots: css-minimizer-webpack-plugin@5.0.1(esbuild@0.17.19)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 cssnano: 6.0.1(postcss@8.4.47) jest-worker: 29.7.0 postcss: 8.4.47 schema-utils: 4.3.2 serialize-javascript: 6.0.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) optionalDependencies: esbuild: 0.17.19 css-minimizer-webpack-plugin@5.0.1(esbuild@0.17.19)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 cssnano: 6.0.1(postcss@8.4.47) jest-worker: 29.7.0 postcss: 8.4.47 @@ -46499,7 +49517,7 @@ snapshots: css-minimizer-webpack-plugin@5.0.1(esbuild@0.23.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 cssnano: 6.0.1(postcss@8.4.47) jest-worker: 29.7.0 postcss: 8.4.47 @@ -46509,9 +49527,9 @@ snapshots: optionalDependencies: esbuild: 0.23.0 - css-minimizer-webpack-plugin@5.0.1(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)): + css-minimizer-webpack-plugin@5.0.1(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 cssnano: 6.0.1(postcss@8.4.47) jest-worker: 29.7.0 postcss: 8.4.47 @@ -46521,15 +49539,15 @@ snapshots: optionalDependencies: esbuild: 0.25.5 - css-minimizer-webpack-plugin@5.0.1(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): + css-minimizer-webpack-plugin@5.0.1(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 cssnano: 6.0.1(postcss@8.4.47) jest-worker: 29.7.0 postcss: 8.4.47 schema-utils: 4.3.2 serialize-javascript: 6.0.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5) optionalDependencies: esbuild: 0.25.5 @@ -46602,7 +49620,7 @@ snapshots: css-vendor@2.0.8: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 is-in-browser: 1.1.3 css-what@3.4.2: {} @@ -46613,7 +49631,7 @@ snapshots: cssdb@7.11.2: {} - cssdb@8.3.1: {} + cssdb@8.4.0: {} cssesc@3.0.0: {} @@ -46652,8 +49670,8 @@ snapshots: cssnano-preset-default@6.1.2(postcss@8.4.31): dependencies: - browserslist: 4.25.2 - css-declaration-sorter: 7.2.0(postcss@8.4.31) + browserslist: 4.26.2 + css-declaration-sorter: 7.3.0(postcss@8.4.31) cssnano-utils: 4.0.2(postcss@8.4.31) postcss: 8.4.31 postcss-calc: 9.0.1(postcss@8.4.31) @@ -46686,8 +49704,8 @@ snapshots: cssnano-preset-default@6.1.2(postcss@8.4.32): dependencies: - browserslist: 4.25.2 - css-declaration-sorter: 7.2.0(postcss@8.4.32) + browserslist: 4.26.2 + css-declaration-sorter: 7.3.0(postcss@8.4.32) cssnano-utils: 4.0.2(postcss@8.4.32) postcss: 8.4.32 postcss-calc: 9.0.1(postcss@8.4.32) @@ -46720,8 +49738,8 @@ snapshots: cssnano-preset-default@6.1.2(postcss@8.4.47): dependencies: - browserslist: 4.25.2 - css-declaration-sorter: 7.2.0(postcss@8.4.47) + browserslist: 4.26.2 + css-declaration-sorter: 7.3.0(postcss@8.4.47) cssnano-utils: 4.0.2(postcss@8.4.47) postcss: 8.4.47 postcss-calc: 9.0.1(postcss@8.4.47) @@ -46754,8 +49772,8 @@ snapshots: cssnano-preset-default@6.1.2(postcss@8.5.6): dependencies: - browserslist: 4.25.2 - css-declaration-sorter: 7.2.0(postcss@8.5.6) + browserslist: 4.26.2 + css-declaration-sorter: 7.3.0(postcss@8.5.6) cssnano-utils: 4.0.2(postcss@8.5.6) postcss: 8.5.6 postcss-calc: 9.0.1(postcss@8.5.6) @@ -46855,6 +49873,10 @@ snapshots: dependencies: cssom: 0.3.8 + cssstyle@3.0.0: + dependencies: + rrweb-cssom: 0.6.0 + cssstyle@4.6.0: dependencies: '@asamuzakjp/css-color': 3.2.0 @@ -46879,7 +49901,7 @@ snapshots: '@cypress/request': 3.0.9 '@cypress/xvfb': 1.2.4(supports-color@8.1.1) '@types/sinonjs__fake-timers': 8.1.1 - '@types/sizzle': 2.3.9 + '@types/sizzle': 2.3.10 arch: 2.2.0 blob-util: 2.0.2 bluebird: 3.7.2 @@ -46891,8 +49913,8 @@ snapshots: cli-table3: 0.6.5 commander: 6.2.1 common-tags: 1.8.2 - dayjs: 1.11.13 - debug: 4.4.1(supports-color@8.1.1) + dayjs: 1.11.18 + debug: 4.4.3(supports-color@8.1.1) enquirer: 2.4.1 eventemitter2: 6.4.7 execa: 4.1.0 @@ -46976,6 +49998,12 @@ snapshots: whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 + data-urls@4.0.0: + dependencies: + abab: 2.0.6 + whatwg-mimetype: 3.0.0 + whatwg-url: 12.0.1 + data-urls@5.0.0: dependencies: whatwg-mimetype: 4.0.0 @@ -47001,13 +50029,13 @@ snapshots: date-fns@2.30.0: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 date-format@4.0.14: {} dateformat@3.0.3: {} - dayjs@1.11.13: {} + dayjs@1.11.18: {} dayjs@1.11.6: {} @@ -47025,6 +50053,10 @@ snapshots: optionalDependencies: supports-color: 8.1.1 + debug@4.3.2: + dependencies: + ms: 2.1.2 + debug@4.3.4: dependencies: ms: 2.1.2 @@ -47033,13 +50065,13 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.4.1(supports-color@5.5.0): + debug@4.4.3(supports-color@5.5.0): dependencies: ms: 2.1.3 optionalDependencies: supports-color: 5.5.0 - debug@4.4.1(supports-color@8.1.1): + debug@4.4.3(supports-color@8.1.1): dependencies: ms: 2.1.3 optionalDependencies: @@ -47070,7 +50102,7 @@ snapshots: optionalDependencies: babel-plugin-macros: 3.1.0 - dedent@1.6.0(babel-plugin-macros@3.1.0): + dedent@1.7.0(babel-plugin-macros@3.1.0): optionalDependencies: babel-plugin-macros: 3.1.0 @@ -47161,6 +50193,16 @@ snapshots: is-descriptor: 1.0.3 isobject: 3.0.1 + del@4.1.1: + dependencies: + '@types/glob': 7.2.0 + globby: 6.1.0 + is-path-cwd: 2.2.0 + is-path-in-cwd: 2.1.0 + p-map: 2.1.0 + pify: 4.0.1 + rimraf: 2.7.1 + del@6.1.1: dependencies: globby: 11.1.0 @@ -47180,6 +50222,8 @@ snapshots: depd@2.0.0: {} + dependency-graph@0.11.0: {} + deprecation@2.3.1: {} dequal@2.0.3: {} @@ -47189,6 +50233,8 @@ snapshots: inherits: 2.0.4 minimalistic-assert: 1.0.1 + destroy@1.0.4: {} + destroy@1.2.0: {} detect-indent@5.0.0: {} @@ -47196,7 +50242,7 @@ snapshots: detect-libc@1.0.3: optional: true - detect-libc@2.0.4: {} + detect-libc@2.1.0: {} detect-newline@3.1.0: {} @@ -47212,10 +50258,12 @@ snapshots: detect-port@1.6.1: dependencies: address: 1.2.2 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color + dev-ip@1.0.1: {} + didyoumean@1.2.2: {} diff-sequences@27.5.1: {} @@ -47264,11 +50312,11 @@ snapshots: dom-helpers@3.4.0: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 dom-helpers@5.2.1: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 csstype: 3.1.3 dom-serializer@0.2.2: @@ -47312,6 +50360,8 @@ snapshots: dependencies: domelementtype: 2.3.0 + domino@2.1.6: {} + domutils@1.7.0: dependencies: dom-serializer: 0.2.2 @@ -47369,8 +50419,16 @@ snapshots: eastasianwidth@0.2.0: {} + easy-extender@2.3.4: + dependencies: + lodash: 4.17.21 + easy-stack@1.0.1: {} + eazy-logger@4.1.0: + dependencies: + chalk: 4.1.2 + ecc-jsbn@0.1.2: dependencies: jsbn: 0.1.1 @@ -47401,7 +50459,7 @@ snapshots: dependencies: jake: 10.9.4 - electron-to-chromium@1.5.202: {} + electron-to-chromium@1.5.222: {} elliptic@6.6.1: dependencies: @@ -47419,7 +50477,7 @@ snapshots: emittery@0.8.1: {} - emoji-regex@10.4.0: {} + emoji-regex@10.5.0: {} emoji-regex@7.0.3: {} @@ -47449,6 +50507,18 @@ snapshots: fast-json-parse: 1.0.3 objectorarray: 1.0.5 + engine.io-client@6.6.3: + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7 + engine.io-parser: 5.2.3 + ws: 8.17.1 + xmlhttprequest-ssl: 2.1.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + engine.io-parser@5.2.3: {} engine.io@6.5.5: @@ -47471,12 +50541,12 @@ snapshots: enhanced-resolve@5.12.0: dependencies: graceful-fs: 4.2.11 - tapable: 2.2.2 + tapable: 2.2.3 enhanced-resolve@5.18.3: dependencies: graceful-fs: 4.2.11 - tapable: 2.2.2 + tapable: 2.2.3 enquirer@2.3.6: dependencies: @@ -47508,7 +50578,7 @@ snapshots: prr: 1.0.1 optional: true - error-ex@1.3.2: + error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 @@ -47614,6 +50684,8 @@ snapshots: iterator.prototype: 1.1.5 safe-array-concat: 1.1.3 + es-module-lexer@0.9.3: {} + es-module-lexer@1.7.0: {} es-object-atoms@1.1.1: @@ -47643,7 +50715,7 @@ snapshots: joycon: 3.1.1 json5: 2.2.3 loader-utils: 2.0.4 - tapable: 2.2.2 + tapable: 2.2.3 webpack: 5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17)) webpack-sources: 1.4.3 @@ -47667,37 +50739,39 @@ snapshots: dependencies: '@jspm/core': 2.1.0 esbuild: 0.17.6 - local-pkg: 1.1.1 + local-pkg: 1.1.2 resolve.exports: 2.0.3 esbuild-register@3.6.0(esbuild@0.17.19): dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) esbuild: 0.17.19 transitivePeerDependencies: - supports-color esbuild-register@3.6.0(esbuild@0.18.20): dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) esbuild: 0.18.20 transitivePeerDependencies: - supports-color esbuild-register@3.6.0(esbuild@0.23.0): dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) esbuild: 0.23.0 transitivePeerDependencies: - supports-color esbuild-register@3.6.0(esbuild@0.25.5): dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) esbuild: 0.25.5 transitivePeerDependencies: - supports-color + esbuild-wasm@0.17.8: {} + esbuild@0.16.17: optionalDependencies: '@esbuild/android-arm': 0.16.17 @@ -47773,6 +50847,32 @@ snapshots: '@esbuild/win32-ia32': 0.17.6 '@esbuild/win32-x64': 0.17.6 + esbuild@0.17.8: + optionalDependencies: + '@esbuild/android-arm': 0.17.8 + '@esbuild/android-arm64': 0.17.8 + '@esbuild/android-x64': 0.17.8 + '@esbuild/darwin-arm64': 0.17.8 + '@esbuild/darwin-x64': 0.17.8 + '@esbuild/freebsd-arm64': 0.17.8 + '@esbuild/freebsd-x64': 0.17.8 + '@esbuild/linux-arm': 0.17.8 + '@esbuild/linux-arm64': 0.17.8 + '@esbuild/linux-ia32': 0.17.8 + '@esbuild/linux-loong64': 0.17.8 + '@esbuild/linux-mips64el': 0.17.8 + '@esbuild/linux-ppc64': 0.17.8 + '@esbuild/linux-riscv64': 0.17.8 + '@esbuild/linux-s390x': 0.17.8 + '@esbuild/linux-x64': 0.17.8 + '@esbuild/netbsd-x64': 0.17.8 + '@esbuild/openbsd-x64': 0.17.8 + '@esbuild/sunos-x64': 0.17.8 + '@esbuild/win32-arm64': 0.17.8 + '@esbuild/win32-ia32': 0.17.8 + '@esbuild/win32-x64': 0.17.8 + optional: true + esbuild@0.18.20: optionalDependencies: '@esbuild/android-arm': 0.18.20 @@ -47851,6 +50951,35 @@ snapshots: '@esbuild/win32-ia32': 0.23.0 '@esbuild/win32-x64': 0.23.0 + esbuild@0.25.10: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.10 + '@esbuild/android-arm': 0.25.10 + '@esbuild/android-arm64': 0.25.10 + '@esbuild/android-x64': 0.25.10 + '@esbuild/darwin-arm64': 0.25.10 + '@esbuild/darwin-x64': 0.25.10 + '@esbuild/freebsd-arm64': 0.25.10 + '@esbuild/freebsd-x64': 0.25.10 + '@esbuild/linux-arm': 0.25.10 + '@esbuild/linux-arm64': 0.25.10 + '@esbuild/linux-ia32': 0.25.10 + '@esbuild/linux-loong64': 0.25.10 + '@esbuild/linux-mips64el': 0.25.10 + '@esbuild/linux-ppc64': 0.25.10 + '@esbuild/linux-riscv64': 0.25.10 + '@esbuild/linux-s390x': 0.25.10 + '@esbuild/linux-x64': 0.25.10 + '@esbuild/netbsd-arm64': 0.25.10 + '@esbuild/netbsd-x64': 0.25.10 + '@esbuild/openbsd-arm64': 0.25.10 + '@esbuild/openbsd-x64': 0.25.10 + '@esbuild/openharmony-arm64': 0.25.10 + '@esbuild/sunos-x64': 0.25.10 + '@esbuild/win32-arm64': 0.25.10 + '@esbuild/win32-ia32': 0.25.10 + '@esbuild/win32-x64': 0.25.10 + esbuild@0.25.5: optionalDependencies: '@esbuild/aix-ppc64': 0.25.5 @@ -47879,35 +51008,6 @@ snapshots: '@esbuild/win32-ia32': 0.25.5 '@esbuild/win32-x64': 0.25.5 - esbuild@0.25.9: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.9 - '@esbuild/android-arm': 0.25.9 - '@esbuild/android-arm64': 0.25.9 - '@esbuild/android-x64': 0.25.9 - '@esbuild/darwin-arm64': 0.25.9 - '@esbuild/darwin-x64': 0.25.9 - '@esbuild/freebsd-arm64': 0.25.9 - '@esbuild/freebsd-x64': 0.25.9 - '@esbuild/linux-arm': 0.25.9 - '@esbuild/linux-arm64': 0.25.9 - '@esbuild/linux-ia32': 0.25.9 - '@esbuild/linux-loong64': 0.25.9 - '@esbuild/linux-mips64el': 0.25.9 - '@esbuild/linux-ppc64': 0.25.9 - '@esbuild/linux-riscv64': 0.25.9 - '@esbuild/linux-s390x': 0.25.9 - '@esbuild/linux-x64': 0.25.9 - '@esbuild/netbsd-arm64': 0.25.9 - '@esbuild/netbsd-x64': 0.25.9 - '@esbuild/openbsd-arm64': 0.25.9 - '@esbuild/openbsd-x64': 0.25.9 - '@esbuild/openharmony-arm64': 0.25.9 - '@esbuild/sunos-x64': 0.25.9 - '@esbuild/win32-arm64': 0.25.9 - '@esbuild/win32-ia32': 0.25.9 - '@esbuild/win32-x64': 0.25.9 - escalade@3.2.0: {} escape-html@1.0.3: {} @@ -47971,7 +51071,7 @@ snapshots: '@typescript-eslint/parser': 7.2.0(eslint@9.6.0)(typescript@5.5.3) eslint: 9.6.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.29.1)(eslint@9.6.0) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.29.1(eslint@9.6.0))(eslint@9.6.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.5.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.6.0) eslint-plugin-jsx-a11y: 6.9.0(eslint@9.6.0) eslint-plugin-react: 7.34.3(eslint@9.6.0) @@ -47983,52 +51083,33 @@ snapshots: - eslint-plugin-import-x - supports-color - eslint-config-next@14.2.4(eslint@9.6.0)(typescript@5.6.2): + eslint-config-prettier@8.10.2(eslint@8.57.0): dependencies: - '@next/eslint-plugin-next': 14.2.4 - '@rushstack/eslint-patch': 1.12.0 - '@typescript-eslint/parser': 7.2.0(eslint@9.6.0)(typescript@5.6.2) - eslint: 9.6.0 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.29.1(eslint@9.6.0))(eslint@9.6.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.6.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.6.0) - eslint-plugin-jsx-a11y: 6.9.0(eslint@9.6.0) - eslint-plugin-react: 7.34.3(eslint@9.6.0) - eslint-plugin-react-hooks: 4.6.2(eslint@9.6.0) - optionalDependencies: - typescript: 5.6.2 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - eslint-plugin-import-x - - supports-color - - eslint-config-prettier@8.10.2(eslint@8.57.1): - dependencies: - eslint: 8.57.1 + eslint: 8.57.0 eslint-config-prettier@9.1.0(eslint@9.6.0): dependencies: eslint: 9.6.0 - eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.24.7))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.24.7))(eslint@9.6.0)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2): + eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.24.7))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.24.7))(eslint@8.57.0)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)))(typescript@5.5.3): dependencies: '@babel/core': 7.24.7 - '@babel/eslint-parser': 7.28.0(@babel/core@7.24.7)(eslint@9.6.0) + '@babel/eslint-parser': 7.28.4(@babel/core@7.24.7)(eslint@8.57.0) '@rushstack/eslint-patch': 1.12.0 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.6.0)(typescript@5.6.2))(eslint@9.6.0)(typescript@5.6.2) - '@typescript-eslint/parser': 5.62.0(eslint@9.6.0)(typescript@5.6.2) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.5.3) babel-preset-react-app: 10.1.0 confusing-browser-globals: 1.0.11 - eslint: 9.6.0 - eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.24.7))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.24.7))(eslint@9.6.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@9.6.0)(typescript@5.6.2))(eslint@9.6.0) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.6.0)(typescript@5.6.2))(eslint@9.6.0)(typescript@5.6.2))(eslint@9.6.0)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2) - eslint-plugin-jsx-a11y: 6.9.0(eslint@9.6.0) - eslint-plugin-react: 7.34.3(eslint@9.6.0) - eslint-plugin-react-hooks: 4.6.2(eslint@9.6.0) - eslint-plugin-testing-library: 5.11.1(eslint@9.6.0)(typescript@5.6.2) + eslint: 8.57.0 + eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.24.7))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.24.7))(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)))(typescript@5.5.3) + eslint-plugin-jsx-a11y: 6.9.0(eslint@8.57.0) + eslint-plugin-react: 7.34.3(eslint@8.57.0) + eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) + eslint-plugin-testing-library: 5.11.1(eslint@8.57.0)(typescript@5.5.3) optionalDependencies: - typescript: 5.6.2 + typescript: 5.5.3 transitivePeerDependencies: - '@babel/plugin-syntax-flow' - '@babel/plugin-transform-react-jsx' @@ -48037,25 +51118,25 @@ snapshots: - jest - supports-color - eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.3))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.3))(eslint@9.6.0)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2): + eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.4))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.4))(eslint@8.57.0)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)))(typescript@5.5.3): dependencies: '@babel/core': 7.24.7 - '@babel/eslint-parser': 7.28.0(@babel/core@7.24.7)(eslint@9.6.0) + '@babel/eslint-parser': 7.28.4(@babel/core@7.24.7)(eslint@8.57.0) '@rushstack/eslint-patch': 1.12.0 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.6.0)(typescript@5.6.2))(eslint@9.6.0)(typescript@5.6.2) - '@typescript-eslint/parser': 5.62.0(eslint@9.6.0)(typescript@5.6.2) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.5.3) babel-preset-react-app: 10.1.0 confusing-browser-globals: 1.0.11 - eslint: 9.6.0 - eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.3))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.3))(eslint@9.6.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@9.6.0)(typescript@5.6.2))(eslint@9.6.0) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.6.0)(typescript@5.6.2))(eslint@9.6.0)(typescript@5.6.2))(eslint@9.6.0)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2) - eslint-plugin-jsx-a11y: 6.9.0(eslint@9.6.0) - eslint-plugin-react: 7.34.3(eslint@9.6.0) - eslint-plugin-react-hooks: 4.6.2(eslint@9.6.0) - eslint-plugin-testing-library: 5.11.1(eslint@9.6.0)(typescript@5.6.2) + eslint: 8.57.0 + eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.4))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.4))(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)))(typescript@5.5.3) + eslint-plugin-jsx-a11y: 6.9.0(eslint@8.57.0) + eslint-plugin-react: 7.34.3(eslint@8.57.0) + eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) + eslint-plugin-testing-library: 5.11.1(eslint@8.57.0)(typescript@5.5.3) optionalDependencies: - typescript: 5.6.2 + typescript: 5.5.3 transitivePeerDependencies: - '@babel/plugin-syntax-flow' - '@babel/plugin-transform-react-jsx' @@ -48081,69 +51162,49 @@ snapshots: eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.29.1(eslint@9.6.0))(eslint@9.6.0): dependencies: '@nolyfill/is-core-module': 1.0.39 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 9.6.0 get-tsconfig: 4.10.1 is-bun-module: 2.0.0 stable-hash: 0.0.5 - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.6.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.6.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.5.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.6.0) transitivePeerDependencies: - supports-color eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.29.1)(eslint@9.6.0): dependencies: '@nolyfill/is-core-module': 1.0.39 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 9.6.0 get-tsconfig: 4.10.1 is-bun-module: 2.0.0 stable-hash: 0.0.5 - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.5.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.6.0) - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.12.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): - dependencies: - debug: 3.2.7(supports-color@8.1.1) - optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@4.9.5) - eslint: 8.57.1 - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.12.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): - dependencies: - debug: 3.2.7(supports-color@8.1.1) - optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.5.3) - eslint: 8.57.1 - eslint-import-resolver-node: 0.3.9 + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.6.0) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): + eslint-module-utils@2.12.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): dependencies: debug: 3.2.7(supports-color@8.1.1) optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.6.2) - eslint: 8.57.1 + '@typescript-eslint/parser': 5.62.0(eslint@9.6.0)(typescript@4.9.5) + eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@5.62.0(eslint@9.6.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@9.6.0): + eslint-module-utils@2.12.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): dependencies: debug: 3.2.7(supports-color@8.1.1) optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@9.6.0)(typescript@5.6.2) - eslint: 9.6.0 + '@typescript-eslint/parser': 5.62.0(eslint@9.6.0)(typescript@5.5.3) + eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color @@ -48159,24 +51220,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.6.0): + eslint-module-utils@2.12.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.29.1(eslint@9.6.0))(eslint@9.6.0))(eslint@9.6.0): dependencies: debug: 3.2.7(supports-color@8.1.1) optionalDependencies: '@typescript-eslint/parser': 7.2.0(eslint@9.6.0)(typescript@5.5.3) eslint: 9.6.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.29.1)(eslint@9.6.0) - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.12.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.29.1(eslint@9.6.0))(eslint@9.6.0))(eslint@9.6.0): - dependencies: - debug: 3.2.7(supports-color@8.1.1) - optionalDependencies: - '@typescript-eslint/parser': 7.2.0(eslint@9.6.0)(typescript@5.6.2) - eslint: 9.6.0 - eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.29.1(eslint@9.6.0))(eslint@9.6.0) transitivePeerDependencies: - supports-color @@ -48186,43 +51236,43 @@ snapshots: eslint: 9.6.0 globals: 13.24.0 - eslint-plugin-es@3.0.1(eslint@8.57.1): + eslint-plugin-es@3.0.1(eslint@8.57.0): dependencies: - eslint: 8.57.1 + eslint: 8.57.0 eslint-utils: 2.1.0 regexpp: 3.2.0 - eslint-plugin-eslint-comments@3.2.0(eslint@8.57.1): + eslint-plugin-eslint-comments@3.2.0(eslint@8.57.0): dependencies: escape-string-regexp: 1.0.5 - eslint: 8.57.1 + eslint: 8.57.0 ignore: 5.3.2 - eslint-plugin-filenames@1.3.2(eslint@8.57.1): + eslint-plugin-filenames@1.3.2(eslint@8.57.0): dependencies: - eslint: 8.57.1 + eslint: 8.57.0 lodash.camelcase: 4.3.0 lodash.kebabcase: 4.1.1 lodash.snakecase: 4.1.1 lodash.upperfirst: 4.3.1 - eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.24.7))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.24.7))(eslint@9.6.0): + eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.24.7))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.24.7))(eslint@8.57.0): dependencies: '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.24.7) '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.24.7) - eslint: 9.6.0 + eslint: 8.57.0 lodash: 4.17.21 string-natural-compare: 3.0.1 - eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.3))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.3))(eslint@9.6.0): + eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.4))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.4))(eslint@8.57.0): dependencies: - '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.3) - eslint: 9.6.0 + '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.4) + eslint: 8.57.0 lodash: 4.17.21 string-natural-compare: 3.0.1 - eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0): dependencies: array-includes: 3.1.9 array.prototype.findlastindex: 1.2.6 @@ -48230,9 +51280,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7(supports-color@8.1.1) doctrine: 2.1.0 - eslint: 8.57.1 + eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -48243,13 +51293,13 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@4.9.5) + '@typescript-eslint/parser': 5.62.0(eslint@9.6.0)(typescript@4.9.5) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.5.3))(eslint@8.57.1): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0): dependencies: array-includes: 3.1.9 array.prototype.findlastindex: 1.2.6 @@ -48257,9 +51307,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7(supports-color@8.1.1) doctrine: 2.1.0 - eslint: 8.57.1 + eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -48270,61 +51320,7 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.5.3) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1): - dependencies: - array-includes: 3.1.9 - array.prototype.findlastindex: 1.2.6 - array.prototype.flat: 1.3.3 - array.prototype.flatmap: 1.3.3 - debug: 3.2.7(supports-color@8.1.1) - doctrine: 2.1.0 - eslint: 8.57.1 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) - hasown: 2.0.2 - is-core-module: 2.16.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.1 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.6.2) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0(eslint@9.6.0)(typescript@5.6.2))(eslint@9.6.0): - dependencies: - array-includes: 3.1.9 - array.prototype.findlastindex: 1.2.6 - array.prototype.flat: 1.3.3 - array.prototype.flatmap: 1.3.3 - debug: 3.2.7(supports-color@8.1.1) - doctrine: 2.1.0 - eslint: 9.6.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@5.62.0(eslint@9.6.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@9.6.0) - hasown: 2.0.2 - is-core-module: 2.16.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.1 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@9.6.0)(typescript@5.6.2) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.5.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -48367,7 +51363,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.6.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.6.0) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.29.1(eslint@9.6.0))(eslint@9.6.0))(eslint@9.6.0) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -48384,43 +51380,36 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.6.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.6.0): + eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)))(typescript@5.5.3): dependencies: - array-includes: 3.1.9 - array.prototype.findlastindex: 1.2.6 - array.prototype.flat: 1.3.3 - array.prototype.flatmap: 1.3.3 - debug: 3.2.7(supports-color@8.1.1) - doctrine: 2.1.0 - eslint: 9.6.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.29.1(eslint@9.6.0))(eslint@9.6.0))(eslint@9.6.0) - hasown: 2.0.2 - is-core-module: 2.16.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.1 - semver: 6.3.1 - tsconfig-paths: 3.15.0 + '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.57.0)(typescript@5.5.3) + eslint: 8.57.0 optionalDependencies: - '@typescript-eslint/parser': 7.2.0(eslint@9.6.0)(typescript@5.6.2) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3) + jest: 27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)) transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - supports-color + - typescript - eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.6.0)(typescript@5.6.2))(eslint@9.6.0)(typescript@5.6.2))(eslint@9.6.0)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2): + eslint-plugin-jsx-a11y@6.9.0(eslint@8.57.0): dependencies: - '@typescript-eslint/experimental-utils': 5.62.0(eslint@9.6.0)(typescript@5.6.2) - eslint: 9.6.0 - optionalDependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.6.0)(typescript@5.6.2))(eslint@9.6.0)(typescript@5.6.2) - jest: 27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)) - transitivePeerDependencies: - - supports-color - - typescript + aria-query: 5.1.3 + array-includes: 3.1.9 + array.prototype.flatmap: 1.3.3 + ast-types-flow: 0.0.8 + axe-core: 4.10.3 + axobject-query: 3.1.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + es-iterator-helpers: 1.2.1 + eslint: 8.57.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 eslint-plugin-jsx-a11y@6.9.0(eslint@9.6.0): dependencies: @@ -48442,37 +51431,37 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-node@11.1.0(eslint@8.57.1): + eslint-plugin-node@11.1.0(eslint@8.57.0): dependencies: - eslint: 8.57.1 - eslint-plugin-es: 3.0.1(eslint@8.57.1) + eslint: 8.57.0 + eslint-plugin-es: 3.0.1(eslint@8.57.0) eslint-utils: 2.1.0 ignore: 5.3.2 minimatch: 3.1.2 resolve: 1.22.10 semver: 6.3.1 - eslint-plugin-prettier@4.2.5(eslint-config-prettier@8.10.2(eslint@8.57.1))(eslint@8.57.1)(prettier@2.8.8): + eslint-plugin-prettier@4.2.5(eslint-config-prettier@8.10.2(eslint@8.57.0))(eslint@8.57.0)(prettier@2.8.8): dependencies: - eslint: 8.57.1 + eslint: 8.57.0 prettier: 2.8.8 prettier-linter-helpers: 1.0.0 optionalDependencies: - eslint-config-prettier: 8.10.2(eslint@8.57.1) + eslint-config-prettier: 8.10.2(eslint@8.57.0) - eslint-plugin-promise@6.6.0(eslint@8.57.1): + eslint-plugin-promise@6.6.0(eslint@8.57.0): dependencies: - eslint: 8.57.1 + eslint: 8.57.0 - eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): + eslint-plugin-react-hooks@4.6.2(eslint@8.57.0): dependencies: - eslint: 8.57.1 + eslint: 8.57.0 eslint-plugin-react-hooks@4.6.2(eslint@9.6.0): dependencies: eslint: 9.6.0 - eslint-plugin-react@7.34.3(eslint@8.57.1): + eslint-plugin-react@7.34.3(eslint@8.57.0): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -48481,7 +51470,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 8.57.1 + eslint: 8.57.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 @@ -48516,28 +51505,28 @@ snapshots: semver: 6.3.1 string.prototype.matchall: 4.0.12 - eslint-plugin-storybook@0.8.0(eslint@9.6.0)(typescript@5.6.2): + eslint-plugin-storybook@0.8.0(eslint@8.57.0)(typescript@5.5.3): dependencies: '@storybook/csf': 0.0.1 - '@typescript-eslint/utils': 5.62.0(eslint@9.6.0)(typescript@5.6.2) - eslint: 9.6.0 + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.3) + eslint: 8.57.0 requireindex: 1.2.0 ts-dedent: 2.2.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-testing-library@5.11.1(eslint@9.6.0)(typescript@5.6.2): + eslint-plugin-testing-library@5.11.1(eslint@8.57.0)(typescript@5.5.3): dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@9.6.0)(typescript@5.6.2) - eslint: 9.6.0 + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.3) + eslint: 8.57.0 transitivePeerDependencies: - supports-color - typescript eslint-plugin-vue@9.27.0(eslint@9.6.0): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.6.0) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.6.0) eslint: 9.6.0 globals: 13.24.0 natural-compare: 1.4.0 @@ -48552,7 +51541,7 @@ snapshots: eslint-plugin-vuejs-accessibility@2.3.1(eslint@9.6.0): dependencies: aria-query: 5.3.2 - emoji-regex: 10.4.0 + emoji-regex: 10.5.0 eslint: 9.6.0 vue-eslint-parser: 9.4.3(eslint@9.6.0) transitivePeerDependencies: @@ -48587,16 +51576,26 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint-webpack-plugin@3.2.0(eslint@9.6.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)): + eslint-webpack-plugin@3.2.0(eslint@8.57.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)): dependencies: '@types/eslint': 8.56.12 - eslint: 9.6.0 + eslint: 8.57.0 jest-worker: 28.1.3 micromatch: 4.0.8 normalize-path: 3.0.0 schema-utils: 4.3.2 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) + eslint-webpack-plugin@3.2.0(eslint@8.57.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): + dependencies: + '@types/eslint': 8.56.12 + eslint: 8.57.0 + jest-worker: 28.1.3 + micromatch: 4.0.8 + normalize-path: 3.0.0 + schema-utils: 4.3.2 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) + eslint-webpack-plugin@3.2.0(eslint@9.6.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: '@types/eslint': 8.56.12 @@ -48605,11 +51604,54 @@ snapshots: micromatch: 4.0.8 normalize-path: 3.0.0 schema-utils: 4.3.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) + + eslint@8.57.0: + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.0) + '@eslint-community/regexpp': 4.12.1 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.0 + '@humanwhocodes/config-array': 0.11.14 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.3.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.4.3(supports-color@8.1.1) + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color eslint@8.57.1: dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1) '@eslint-community/regexpp': 4.12.1 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.1 @@ -48620,7 +51662,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -48652,7 +51694,7 @@ snapshots: eslint@9.6.0: dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.6.0) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.6.0) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.17.1 '@eslint/eslintrc': 3.3.1 @@ -48663,7 +51705,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -48777,6 +51819,8 @@ snapshots: event-target-shim@5.0.1: {} + eventemitter-asyncresource@1.0.0: {} + eventemitter2@0.4.14: {} eventemitter2@6.4.4: {} @@ -48990,6 +52034,12 @@ snapshots: extend@3.0.2: {} + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + external-remotes-plugin@1.0.0(webpack@5.101.0): dependencies: webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) @@ -49010,7 +52060,7 @@ snapshots: extract-zip@2.0.1(supports-color@8.1.1): dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -49048,7 +52098,7 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-uri@3.0.6: {} + fast-uri@3.1.0: {} fast-url-parser@1.1.3: dependencies: @@ -49119,7 +52169,7 @@ snapshots: dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) file-loader@6.2.0(webpack@5.101.0): dependencies: @@ -49159,6 +52209,18 @@ snapshots: dependencies: to-regex-range: 5.0.1 + finalhandler@1.1.0: + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.3.0 + parseurl: 1.3.3 + statuses: 1.3.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + finalhandler@1.1.2: dependencies: debug: 2.6.9 @@ -49257,9 +52319,9 @@ snapshots: fix-dts-default-cjs-exports@1.0.1: dependencies: - magic-string: 0.30.17 - mlly: 1.7.4 - rollup: 4.46.2 + magic-string: 0.30.19 + mlly: 1.8.0 + rollup: 4.51.0 flat-cache@3.2.0: dependencies: @@ -49285,9 +52347,13 @@ snapshots: fn.name@1.1.0: {} - follow-redirects@1.15.11(debug@4.4.1): + follow-redirects@1.15.11(debug@4.3.2): + optionalDependencies: + debug: 4.3.2 + + follow-redirects@1.15.11(debug@4.4.3): optionalDependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) for-each@0.3.5: dependencies: @@ -49337,7 +52403,7 @@ snapshots: transitivePeerDependencies: - supports-color - fork-ts-checker-webpack-plugin@6.5.3(eslint@9.6.0)(typescript@5.5.3)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): + fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.0)(typescript@5.5.3)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)): dependencies: '@babel/code-frame': 7.27.1 '@types/json-schema': 7.0.15 @@ -49353,12 +52419,12 @@ snapshots: semver: 7.6.3 tapable: 1.1.3 typescript: 5.5.3 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) optionalDependencies: - eslint: 9.6.0 + eslint: 8.57.0 vue-template-compiler: 2.7.16 - fork-ts-checker-webpack-plugin@6.5.3(eslint@9.6.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)): + fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.0)(typescript@5.5.3)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: '@babel/code-frame': 7.27.1 '@types/json-schema': 7.0.15 @@ -49373,13 +52439,13 @@ snapshots: schema-utils: 2.7.0 semver: 7.6.3 tapable: 1.1.3 - typescript: 5.6.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) + typescript: 5.5.3 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) optionalDependencies: - eslint: 9.6.0 + eslint: 8.57.0 vue-template-compiler: 2.7.16 - fork-ts-checker-webpack-plugin@6.5.3(eslint@9.6.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): + fork-ts-checker-webpack-plugin@6.5.3(eslint@9.6.0)(typescript@5.5.3)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: '@babel/code-frame': 7.27.1 '@types/json-schema': 7.0.15 @@ -49394,13 +52460,13 @@ snapshots: schema-utils: 2.7.0 semver: 7.6.3 tapable: 1.1.3 - typescript: 5.6.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + typescript: 5.5.3 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) optionalDependencies: eslint: 9.6.0 vue-template-compiler: 2.7.16 - fork-ts-checker-webpack-plugin@7.2.13(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)): + fork-ts-checker-webpack-plugin@7.2.13(typescript@5.5.3)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)): dependencies: '@babel/code-frame': 7.27.1 chalk: 4.1.2 @@ -49413,13 +52479,13 @@ snapshots: node-abort-controller: 3.1.1 schema-utils: 3.3.0 semver: 7.6.3 - tapable: 2.2.2 - typescript: 5.6.2 + tapable: 2.2.3 + typescript: 5.5.3 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) optionalDependencies: vue-template-compiler: 2.7.16 - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)): dependencies: '@babel/code-frame': 7.27.1 chalk: 4.1.2 @@ -49432,28 +52498,11 @@ snapshots: node-abort-controller: 3.1.1 schema-utils: 3.3.0 semver: 7.6.3 - tapable: 2.2.2 + tapable: 2.2.3 typescript: 5.5.3 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) - - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)): - dependencies: - '@babel/code-frame': 7.27.1 - chalk: 4.1.2 - chokidar: 3.6.0 - cosmiconfig: 7.1.0 - deepmerge: 4.3.1 - fs-extra: 10.1.0 - memfs: 3.5.3 - minimatch: 3.1.2 - node-abort-controller: 3.1.1 - schema-utils: 3.3.0 - semver: 7.6.3 - tapable: 2.2.2 - typescript: 5.6.2 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)): + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: '@babel/code-frame': 7.27.1 chalk: 4.1.2 @@ -49466,11 +52515,11 @@ snapshots: node-abort-controller: 3.1.1 schema-utils: 3.3.0 semver: 7.6.3 - tapable: 2.2.2 - typescript: 5.6.2 + tapable: 2.2.3 + typescript: 5.5.3 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)): dependencies: '@babel/code-frame': 7.27.1 chalk: 4.1.2 @@ -49483,11 +52532,11 @@ snapshots: node-abort-controller: 3.1.1 schema-utils: 3.3.0 semver: 7.6.3 - tapable: 2.2.2 - typescript: 5.6.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + tapable: 2.2.3 + typescript: 5.5.3 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19) - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)): + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)): dependencies: '@babel/code-frame': 7.27.1 chalk: 4.1.2 @@ -49500,9 +52549,9 @@ snapshots: node-abort-controller: 3.1.1 schema-utils: 3.3.0 semver: 7.6.3 - tapable: 2.2.2 - typescript: 5.6.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19) + tapable: 2.2.3 + typescript: 5.5.3 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5) fork-ts-checker-webpack-plugin@9.0.2(typescript@4.9.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19)): dependencies: @@ -49517,7 +52566,7 @@ snapshots: node-abort-controller: 3.1.1 schema-utils: 3.3.0 semver: 7.6.3 - tapable: 2.2.2 + tapable: 2.2.3 typescript: 4.9.5 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19) @@ -49534,9 +52583,9 @@ snapshots: node-abort-controller: 3.1.1 schema-utils: 3.3.0 semver: 7.6.3 - tapable: 2.2.2 + tapable: 2.2.3 typescript: 4.9.5 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) fork-ts-checker-webpack-plugin@9.0.2(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: @@ -49551,33 +52600,16 @@ snapshots: node-abort-controller: 3.1.1 schema-utils: 3.3.0 semver: 7.6.3 - tapable: 2.2.2 + tapable: 2.2.3 typescript: 5.5.3 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) - - fork-ts-checker-webpack-plugin@9.0.2(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): - dependencies: - '@babel/code-frame': 7.27.1 - chalk: 4.1.2 - chokidar: 3.6.0 - cosmiconfig: 8.3.6(typescript@5.6.2) - deepmerge: 4.3.1 - fs-extra: 10.1.0 - memfs: 3.5.3 - minimatch: 3.1.2 - node-abort-controller: 3.1.1 - schema-utils: 3.3.0 - semver: 7.6.3 - tapable: 2.2.2 - typescript: 5.6.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) - fork-ts-checker-webpack-plugin@9.0.2(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)): + fork-ts-checker-webpack-plugin@9.0.2(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)): dependencies: '@babel/code-frame': 7.27.1 chalk: 4.1.2 chokidar: 3.6.0 - cosmiconfig: 8.3.6(typescript@5.6.2) + cosmiconfig: 8.3.6(typescript@5.5.3) deepmerge: 4.3.1 fs-extra: 10.1.0 memfs: 3.5.3 @@ -49585,8 +52617,8 @@ snapshots: node-abort-controller: 3.1.1 schema-utils: 3.3.0 semver: 7.6.3 - tapable: 2.2.2 - typescript: 5.6.2 + tapable: 2.2.3 + typescript: 5.5.3 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19) form-data@3.0.4: @@ -49643,12 +52675,18 @@ snapshots: jsonfile: 6.2.0 universalify: 2.0.1 - fs-extra@11.3.1: + fs-extra@11.3.2: dependencies: graceful-fs: 4.2.11 jsonfile: 6.2.0 universalify: 2.0.1 + fs-extra@3.0.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 3.0.1 + universalify: 0.1.2 + fs-extra@8.1.0: dependencies: graceful-fs: 4.2.11 @@ -49713,6 +52751,17 @@ snapshots: strip-ansi: 6.0.1 wide-align: 1.1.5 + gauge@4.0.4: + dependencies: + aproba: 2.1.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + generic-names@4.0.0: dependencies: loader-utils: 3.3.1 @@ -49721,7 +52770,7 @@ snapshots: get-caller-file@2.0.5: {} - get-east-asian-width@1.3.0: {} + get-east-asian-width@1.4.0: {} get-func-name@2.0.2: {} @@ -49836,6 +52885,10 @@ snapshots: dependencies: is-glob: 4.0.3 + glob-to-regex.js@1.0.1(tslib@2.8.1): + dependencies: + tslib: 2.8.1 + glob-to-regexp@0.4.1: {} glob@10.3.10: @@ -49967,6 +53020,14 @@ snapshots: slash: 5.1.0 unicorn-magic: 0.3.0 + globby@6.1.0: + dependencies: + array-union: 1.0.2 + glob: 7.2.3 + object-assign: 4.1.1 + pify: 2.3.0 + pinkie-promise: 2.0.1 + gopd@1.2.0: {} graceful-fs@4.2.10: {} @@ -49982,6 +53043,16 @@ snapshots: graphql@16.11.0: {} + guess-parser@0.4.22(typescript@5.5.3): + dependencies: + '@wessberg/ts-evaluator': 0.0.27(typescript@5.5.3) + typescript: 5.5.3 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + gunzip-maybe@1.4.2: dependencies: browserify-zlib: 0.1.4 @@ -50095,13 +53166,21 @@ snapshots: hast-util-whitespace@2.0.1: {} + hdr-histogram-js@2.0.3: + dependencies: + '@assemblyscript/loader': 0.10.1 + base64-js: 1.5.1 + pako: 1.0.11 + + hdr-histogram-percentiles-obj@3.0.0: {} + he@1.2.0: {} highlight.js@10.7.3: {} history@4.10.1: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 loose-envify: 1.4.0 resolve-pathname: 3.0.0 tiny-invariant: 1.3.3 @@ -50110,7 +53189,7 @@ snapshots: history@5.3.0: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 hmac-drbg@1.0.1: dependencies: @@ -50175,7 +53254,7 @@ snapshots: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.43.1 + terser: 5.44.0 html-minifier-terser@7.0.0: dependencies: @@ -50185,7 +53264,7 @@ snapshots: entities: 4.5.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.43.1 + terser: 5.44.0 html-minifier-terser@7.2.0: dependencies: @@ -50195,7 +53274,7 @@ snapshots: entities: 4.5.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.43.1 + terser: 5.44.0 html-minifier@4.0.0: dependencies: @@ -50227,7 +53306,7 @@ snapshots: html-minifier-terser: 6.1.0 lodash: 4.17.21 pretty-error: 4.0.0 - tapable: 2.2.2 + tapable: 2.2.3 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19) html-webpack-plugin@5.5.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): @@ -50236,8 +53315,8 @@ snapshots: html-minifier-terser: 6.1.0 lodash: 4.17.21 pretty-error: 4.0.0 - tapable: 2.2.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + tapable: 2.2.3 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) html-webpack-plugin@5.5.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)): dependencies: @@ -50245,7 +53324,7 @@ snapshots: html-minifier-terser: 6.1.0 lodash: 4.17.21 pretty-error: 4.0.0 - tapable: 2.2.2 + tapable: 2.2.3 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19) html-webpack-plugin@5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)): @@ -50254,7 +53333,7 @@ snapshots: html-minifier-terser: 6.1.0 lodash: 4.17.21 pretty-error: 4.0.0 - tapable: 2.2.2 + tapable: 2.2.3 optionalDependencies: '@rspack/core': 1.4.11(@swc/helpers@0.5.17) webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) @@ -50265,10 +53344,10 @@ snapshots: html-minifier-terser: 6.1.0 lodash: 4.17.21 pretty-error: 4.0.0 - tapable: 2.2.2 + tapable: 2.2.3 optionalDependencies: '@rspack/core': 1.4.11(@swc/helpers@0.5.17) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) html-webpack-plugin@5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0): dependencies: @@ -50276,7 +53355,7 @@ snapshots: html-minifier-terser: 6.1.0 lodash: 4.17.21 pretty-error: 4.0.0 - tapable: 2.2.2 + tapable: 2.2.3 optionalDependencies: '@rspack/core': 1.4.11(@swc/helpers@0.5.17) webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) @@ -50287,33 +53366,33 @@ snapshots: html-minifier-terser: 6.1.0 lodash: 4.17.21 pretty-error: 4.0.0 - tapable: 2.2.2 + tapable: 2.2.3 optionalDependencies: '@rspack/core': 1.4.11(@swc/helpers@0.5.17) webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) optional: true - html-webpack-plugin@5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)): + html-webpack-plugin@5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 lodash: 4.17.21 pretty-error: 4.0.0 - tapable: 2.2.2 + tapable: 2.2.3 optionalDependencies: '@rspack/core': 1.4.11(@swc/helpers@0.5.17) webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) - html-webpack-plugin@5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): + html-webpack-plugin@5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.3))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 lodash: 4.17.21 pretty-error: 4.0.0 - tapable: 2.2.2 + tapable: 2.2.3 optionalDependencies: - '@rspack/core': 1.4.11(@swc/helpers@0.5.17) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + '@rspack/core': 1.4.11(@swc/helpers@0.5.3) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5) htmlparser2@10.0.0: dependencies: @@ -50329,6 +53408,13 @@ snapshots: domutils: 2.8.0 entities: 2.2.0 + htmlparser2@8.0.2: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 4.5.0 + htmlparser2@9.0.0: dependencies: domelementtype: 2.3.0 @@ -50383,7 +53469,7 @@ snapshots: dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -50391,21 +53477,21 @@ snapshots: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.4 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color http-proxy-middleware@2.0.9(@types/express@4.17.21): dependencies: '@types/http-proxy': 1.17.16 - http-proxy: 1.18.1(debug@4.4.1) + http-proxy: 1.18.1(debug@4.4.3) is-glob: 4.0.3 is-plain-obj: 3.0.0 micromatch: 4.0.8 @@ -50414,10 +53500,10 @@ snapshots: transitivePeerDependencies: - debug - http-proxy-middleware@2.0.9(@types/express@4.17.21)(debug@4.4.1): + http-proxy-middleware@2.0.9(@types/express@4.17.21)(debug@4.4.3): dependencies: '@types/http-proxy': 1.17.16 - http-proxy: 1.18.1(debug@4.4.1) + http-proxy: 1.18.1(debug@4.4.3) is-glob: 4.0.3 is-plain-obj: 3.0.0 micromatch: 4.0.8 @@ -50426,10 +53512,10 @@ snapshots: transitivePeerDependencies: - debug - http-proxy@1.18.1(debug@4.4.1): + http-proxy@1.18.1(debug@4.4.3): dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.11(debug@4.4.1) + follow-redirects: 1.15.11(debug@4.4.3) requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -50440,11 +53526,11 @@ snapshots: colors: 1.4.0 corser: 2.0.1 he: 1.2.0 - http-proxy: 1.18.1(debug@4.4.1) + http-proxy: 1.18.1(debug@4.4.3) mime: 1.6.0 minimist: 1.2.8 opener: 1.5.2 - portfinder: 1.0.37 + portfinder: 1.0.38 secure-compare: 3.0.1 union: 0.5.0 url-join: 2.0.5 @@ -50459,11 +53545,11 @@ snapshots: corser: 2.0.1 he: 1.2.0 html-encoding-sniffer: 3.0.0 - http-proxy: 1.18.1(debug@4.4.1) + http-proxy: 1.18.1(debug@4.4.3) mime: 1.6.0 minimist: 1.2.8 opener: 1.5.2 - portfinder: 1.0.37 + portfinder: 1.0.38 secure-compare: 3.0.1 union: 0.5.0 url-join: 4.0.1 @@ -50482,14 +53568,14 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.4 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -50499,6 +53585,10 @@ snapshots: human-signals@5.0.0: {} + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + husky@8.0.3: {} husky@9.0.11: {} @@ -50509,11 +53599,11 @@ snapshots: i18next-browser-languagedetector@6.1.8: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 i18next@21.10.0: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 i@0.3.7: {} @@ -50525,6 +53615,10 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.7.0: + dependencies: + safer-buffer: 2.1.2 + icss-utils@5.1.0(postcss@8.4.47): dependencies: postcss: 8.4.47 @@ -50552,6 +53646,8 @@ snapshots: immer@9.0.21: {} + immutable@3.8.2: {} + immutable@4.3.7: {} immutable@5.1.3: {} @@ -50575,6 +53671,8 @@ snapshots: indent-string@4.0.0: {} + infer-owner@1.0.4: {} + inflight@1.0.6: dependencies: once: 1.4.0 @@ -50588,6 +53686,8 @@ snapshots: ini@2.0.0: {} + ini@3.0.1: {} + ini@4.1.3: {} init-package-json@6.0.3: @@ -50608,9 +53708,27 @@ snapshots: inline-style-parser@0.1.1: {} + inquirer@8.2.4: + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.2 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 7.0.0 + inquirer@8.2.7(@types/node@20.16.5): dependencies: - '@inquirer/external-editor': 1.0.1(@types/node@20.16.5) + '@inquirer/external-editor': 1.0.2(@types/node@20.16.5) ansi-escapes: 4.3.2 chalk: 4.1.2 cli-cursor: 3.1.0 @@ -50630,7 +53748,7 @@ snapshots: inquirer@8.2.7(@types/node@20.9.0): dependencies: - '@inquirer/external-editor': 1.0.1(@types/node@20.9.0) + '@inquirer/external-editor': 1.0.2(@types/node@20.9.0) ansi-escapes: 4.3.2 chalk: 4.1.2 cli-cursor: 3.1.0 @@ -50692,7 +53810,7 @@ snapshots: is-arrayish@0.2.1: {} - is-arrayish@0.3.2: {} + is-arrayish@0.3.4: {} is-async-function@2.1.1: dependencies: @@ -50801,9 +53919,9 @@ snapshots: is-fullwidth-code-point@4.0.0: {} - is-fullwidth-code-point@5.0.0: + is-fullwidth-code-point@5.1.0: dependencies: - get-east-asian-width: 1.3.0 + get-east-asian-width: 1.4.0 is-generator-fn@2.1.0: {} @@ -50852,7 +53970,11 @@ snapshots: is-negative-zero@2.0.3: {} - is-network-error@1.1.0: {} + is-network-error@1.3.0: {} + + is-number-like@1.0.8: + dependencies: + lodash.isfinite: 3.3.2 is-number-object@1.1.1: dependencies: @@ -50871,6 +53993,14 @@ snapshots: is-path-cwd@2.2.0: {} + is-path-in-cwd@2.1.0: + dependencies: + is-path-inside: 2.1.0 + + is-path-inside@2.1.0: + dependencies: + path-is-inside: 1.0.2 + is-path-inside@3.0.3: {} is-plain-obj@1.1.0: {} @@ -50964,6 +54094,8 @@ snapshots: is-windows@1.0.2: {} + is-wsl@1.1.0: {} + is-wsl@2.2.0: dependencies: is-docker: 2.2.1 @@ -51013,7 +54145,7 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.24.7 - '@babel/parser': 7.28.3 + '@babel/parser': 7.28.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -51023,7 +54155,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.24.7 - '@babel/parser': 7.28.3 + '@babel/parser': 7.28.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.6.3 @@ -51038,13 +54170,13 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color - istanbul-reports@3.1.7: + istanbul-reports@3.2.0: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 @@ -51129,7 +54261,7 @@ snapshots: '@types/node': 20.16.5 chalk: 4.1.2 co: 4.6.0 - dedent: 1.6.0(babel-plugin-macros@3.1.0) + dedent: 1.7.0(babel-plugin-macros@3.1.0) is-generator-fn: 2.1.0 jest-each: 29.7.0 jest-matcher-utils: 29.7.0 @@ -51146,16 +54278,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)): + jest-cli@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)): dependencies: - '@jest/core': 27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)) + '@jest/core': 27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)) '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.2.0 - jest-config: 27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)) + jest-config: 27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)) jest-util: 27.5.1 jest-validate: 27.5.1 prompts: 2.4.2 @@ -51205,7 +54337,7 @@ snapshots: - supports-color - ts-node - jest-config@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)): + jest-config@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)): dependencies: '@babel/core': 7.24.7 '@jest/test-sequencer': 27.5.1 @@ -51232,7 +54364,7 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2) + ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3) transitivePeerDependencies: - bufferutil - canvas @@ -51720,8 +54852,8 @@ snapshots: '@babel/core': 7.24.7 '@babel/generator': 7.28.3 '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.24.7) - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 '@types/babel__traverse': 7.28.0 @@ -51748,7 +54880,7 @@ snapshots: '@babel/generator': 7.28.3 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.24.7) '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.24.7) - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 @@ -51812,16 +54944,16 @@ snapshots: leven: 3.1.0 pretty-format: 29.7.0 - jest-watch-typeahead@1.1.0(jest@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))): + jest-watch-typeahead@1.1.0(jest@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))): dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 - jest: 27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)) + jest: 27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)) jest-regex-util: 28.0.2 jest-watcher: 28.1.3 slash: 4.0.0 string-length: 5.0.1 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 jest-watcher@27.5.1: dependencies: @@ -51880,11 +55012,11 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)): + jest@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)): dependencies: - '@jest/core': 27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)) + '@jest/core': 27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)) import-local: 3.2.0 - jest-cli: 27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)) + jest-cli: 27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)) transitivePeerDependencies: - bufferutil - canvas @@ -51967,7 +55099,7 @@ snapshots: http-proxy-agent: 4.0.1 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.21 + nwsapi: 2.2.22 parse5: 6.0.1 saxes: 5.0.1 symbol-tree: 3.2.4 @@ -52001,7 +55133,7 @@ snapshots: http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.21 + nwsapi: 2.2.22 parse5: 7.3.0 saxes: 6.0.0 symbol-tree: 3.2.4 @@ -52018,6 +55150,69 @@ snapshots: - supports-color - utf-8-validate + jsdom@21.1.0: + dependencies: + abab: 2.0.6 + acorn: 8.15.0 + acorn-globals: 7.0.1 + cssom: 0.5.0 + cssstyle: 2.3.0 + data-urls: 3.0.2 + decimal.js: 10.6.0 + domexception: 4.0.0 + escodegen: 2.1.0 + form-data: 4.0.4 + html-encoding-sniffer: 3.0.0 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.22 + parse5: 7.3.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 4.1.4 + w3c-xmlserializer: 4.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 2.0.0 + whatwg-mimetype: 3.0.0 + whatwg-url: 11.0.0 + ws: 8.18.3 + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + jsdom@22.1.0: + dependencies: + abab: 2.0.6 + cssstyle: 3.0.0 + data-urls: 4.0.0 + decimal.js: 10.6.0 + domexception: 4.0.0 + form-data: 4.0.4 + html-encoding-sniffer: 3.0.0 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.22 + parse5: 7.3.0 + rrweb-cssom: 0.6.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 4.1.4 + w3c-xmlserializer: 4.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 2.0.0 + whatwg-mimetype: 3.0.0 + whatwg-url: 12.0.1 + ws: 8.18.3 + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + jsdom@24.1.0: dependencies: cssstyle: 4.6.0 @@ -52028,7 +55223,7 @@ snapshots: http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.21 + nwsapi: 2.2.22 parse5: 7.3.0 rrweb-cssom: 0.7.1 saxes: 6.0.0 @@ -52046,6 +55241,8 @@ snapshots: - supports-color - utf-8-validate + jsesc@2.5.2: {} + jsesc@3.0.2: {} jsesc@3.1.0: {} @@ -52087,6 +55284,10 @@ snapshots: jsonc-parser@3.2.0: {} + jsonfile@3.0.1: + optionalDependencies: + graceful-fs: 4.2.11 + jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 @@ -52116,75 +55317,75 @@ snapshots: jss-plugin-camel-case@10.10.0: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 hyphenate-style-name: 1.1.0 jss: 10.10.0 jss-plugin-compose@10.10.0: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 jss: 10.10.0 tiny-warning: 1.0.3 jss-plugin-default-unit@10.10.0: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 jss: 10.10.0 jss-plugin-expand@10.10.0: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 jss: 10.10.0 jss-plugin-extend@10.10.0: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 jss: 10.10.0 tiny-warning: 1.0.3 jss-plugin-global@10.10.0: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 jss: 10.10.0 jss-plugin-nested@10.10.0: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 jss: 10.10.0 tiny-warning: 1.0.3 jss-plugin-props-sort@10.10.0: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 jss: 10.10.0 jss-plugin-rule-value-function@10.10.0: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 jss: 10.10.0 tiny-warning: 1.0.3 jss-plugin-rule-value-observable@10.10.0: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 jss: 10.10.0 symbol-observable: 1.2.0 jss-plugin-template@10.10.0: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 jss: 10.10.0 tiny-warning: 1.0.3 jss-plugin-vendor-prefixer@10.10.0: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 css-vendor: 2.0.8 jss: 10.10.0 jss-preset-default@10.10.0: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 jss: 10.10.0 jss-plugin-camel-case: 10.10.0 jss-plugin-compose: 10.10.0 @@ -52201,7 +55402,7 @@ snapshots: jss@10.10.0: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 csstype: 3.1.3 is-in-browser: 1.1.3 tiny-warning: 1.0.3 @@ -52222,6 +55423,10 @@ snapshots: just-diff@6.0.2: {} + karma-source-map-support@1.4.0: + dependencies: + source-map-support: 0.5.21 + keygrip@1.1.0: dependencies: tsscmp: 1.0.6 @@ -52269,7 +55474,7 @@ snapshots: content-disposition: 0.5.4 content-type: 1.0.5 cookies: 0.9.1 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) delegates: 1.0.0 depd: 2.0.0 destroy: 1.2.0 @@ -52297,7 +55502,7 @@ snapshots: content-disposition: 0.5.4 content-type: 1.0.5 cookies: 0.9.1 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) delegates: 1.0.0 depd: 2.0.0 destroy: 1.2.0 @@ -52373,7 +55578,7 @@ snapshots: dedent: 1.5.3(babel-plugin-macros@3.1.0) envinfo: 7.13.0 execa: 5.0.0 - fs-extra: 11.3.1 + fs-extra: 11.3.2 get-port: 5.1.1 get-stream: 6.0.0 git-url-parse: 14.0.0 @@ -52465,7 +55670,7 @@ snapshots: dedent: 1.5.3(babel-plugin-macros@3.1.0) envinfo: 7.13.0 execa: 5.0.0 - fs-extra: 11.3.1 + fs-extra: 11.3.2 get-port: 5.1.1 get-stream: 6.0.0 git-url-parse: 14.0.0 @@ -52540,6 +55745,12 @@ snapshots: less: 4.1.3 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) + less-loader@11.1.0(less@4.1.3)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)): + dependencies: + klona: 2.0.6 + less: 4.1.3 + webpack: 5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4) + less-loader@11.1.3(less@4.2.0)(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: less: 4.2.0 @@ -52620,10 +55831,18 @@ snapshots: optionalDependencies: webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) + license-webpack-plugin@4.0.2(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)): + dependencies: + webpack-sources: 3.3.3 + optionalDependencies: + webpack: 5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4) + lilconfig@2.1.0: {} lilconfig@3.1.3: {} + limiter@1.1.5: {} + line-diff@2.1.1: dependencies: levdist: 1.0.0 @@ -52682,7 +55901,7 @@ snapshots: eventemitter3: 5.0.1 log-update: 6.1.0 rfdc: 1.4.1 - wrap-ansi: 9.0.0 + wrap-ansi: 9.0.2 lit-element@2.5.1: dependencies: @@ -52722,18 +55941,29 @@ snapshots: emojis-list: 3.0.0 json5: 2.2.3 + loader-utils@3.2.1: {} + loader-utils@3.3.1: {} local-pkg@0.5.1: dependencies: - mlly: 1.7.4 + mlly: 1.8.0 pkg-types: 1.3.1 - local-pkg@1.1.1: + local-pkg@1.1.2: + dependencies: + mlly: 1.8.0 + pkg-types: 2.3.0 + quansync: 0.2.11 + + localtunnel@2.0.2: dependencies: - mlly: 1.7.4 - pkg-types: 2.2.0 - quansync: 0.2.10 + axios: 0.21.4(debug@4.3.2) + debug: 4.3.2 + openurl: 1.1.1 + yargs: 17.1.1 + transitivePeerDependencies: + - supports-color locate-character@3.0.0: {} @@ -52777,6 +56007,8 @@ snapshots: lodash.invokemap@4.6.0: {} + lodash.isfinite@3.3.2: {} + lodash.ismatch@4.4.0: {} lodash.kebabcase@4.1.1: {} @@ -52834,16 +56066,16 @@ snapshots: log-update@6.1.0: dependencies: - ansi-escapes: 7.0.0 + ansi-escapes: 7.1.0 cli-cursor: 5.0.0 - slice-ansi: 7.1.0 - strip-ansi: 7.1.0 - wrap-ansi: 9.0.0 + slice-ansi: 7.1.2 + strip-ansi: 7.1.2 + wrap-ansi: 9.0.2 log4js@6.9.1: dependencies: date-format: 4.0.14 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) flatted: 3.3.3 rfdc: 1.4.1 streamroller: 3.1.5 @@ -52871,7 +56103,7 @@ snapshots: dependencies: get-func-name: 2.0.2 - loupe@3.2.0: {} + loupe@3.2.1: {} lower-case@1.1.4: {} @@ -52896,7 +56128,7 @@ snapshots: lru-cache@7.18.3: {} - luxon@3.7.1: {} + luxon@3.7.2: {} lz-string@1.5.0: {} @@ -52904,10 +56136,22 @@ snapshots: dependencies: sourcemap-codec: 1.4.8 + magic-string@0.27.0: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + magic-string@0.29.0: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + magic-string@0.30.19: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + make-dir@1.3.0: dependencies: pify: 3.0.0 @@ -52927,6 +56171,48 @@ snapshots: make-error@1.3.6: {} + make-fetch-happen@10.2.1: + dependencies: + agentkeepalive: 4.6.0 + cacache: 16.1.3 + http-cache-semantics: 4.2.0 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-lambda: 1.0.1 + lru-cache: 7.18.3 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-fetch: 2.1.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + negotiator: 0.6.4 + promise-retry: 2.0.1 + socks-proxy-agent: 7.0.0 + ssri: 9.0.1 + transitivePeerDependencies: + - bluebird + - supports-color + + make-fetch-happen@11.1.1: + dependencies: + agentkeepalive: 4.6.0 + cacache: 17.1.4 + http-cache-semantics: 4.2.0 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-lambda: 1.0.1 + lru-cache: 7.18.3 + minipass: 5.0.0 + minipass-fetch: 3.0.5 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + negotiator: 0.6.4 + promise-retry: 2.0.1 + socks-proxy-agent: 7.0.0 + ssri: 10.0.6 + transitivePeerDependencies: + - supports-color + make-fetch-happen@13.0.1: dependencies: '@npmcli/agent': 2.2.2 @@ -52982,6 +56268,12 @@ snapshots: inherits: 2.0.4 safe-buffer: 5.2.1 + md5@2.3.0: + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 + mdast-util-definitions@5.1.2: dependencies: '@types/mdast': 3.0.15 @@ -53099,7 +56391,7 @@ snapshots: media-query-parser@2.0.2: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 media-typer@0.3.0: {} @@ -53107,11 +56399,13 @@ snapshots: dependencies: fs-monkey: 1.1.0 - memfs@4.36.0: + memfs@4.42.0: dependencies: - '@jsonjoy.com/json-pack': 1.11.0(tslib@2.8.1) + '@jsonjoy.com/json-pack': 1.14.0(tslib@2.8.1) '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) - tree-dump: 1.0.3(tslib@2.8.1) + glob-to-regex.js: 1.0.1(tslib@2.8.1) + thingies: 2.5.0(tslib@2.8.1) + tree-dump: 1.1.0(tslib@2.8.1) tslib: 2.8.1 memoizerific@1.11.3: @@ -53346,7 +56640,7 @@ snapshots: micromark@3.2.0: dependencies: '@types/debug': 4.1.12 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) decode-named-character-reference: 1.2.0 micromark-core-commonmark: 1.1.0 micromark-factory-space: 1.1.0 @@ -53407,6 +56701,12 @@ snapshots: dependencies: mime-db: 1.52.0 + mime-types@3.0.1: + dependencies: + mime-db: 1.54.0 + + mime@1.4.1: {} + mime@1.6.0: {} mimic-fn@1.2.0: {} @@ -53428,6 +56728,11 @@ snapshots: schema-utils: 4.3.2 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) + mini-css-extract-plugin@2.7.2(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)): + dependencies: + schema-utils: 4.3.2 + webpack: 5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4) + mini-css-extract-plugin@2.7.6(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: schema-utils: 4.3.2 @@ -53436,43 +56741,43 @@ snapshots: mini-css-extract-plugin@2.9.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19)): dependencies: schema-utils: 4.3.2 - tapable: 2.2.2 + tapable: 2.2.3 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19) mini-css-extract-plugin@2.9.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: schema-utils: 4.3.2 - tapable: 2.2.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + tapable: 2.2.3 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) mini-css-extract-plugin@2.9.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)): dependencies: schema-utils: 4.3.2 - tapable: 2.2.2 + tapable: 2.2.3 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19) mini-css-extract-plugin@2.9.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)): dependencies: schema-utils: 4.3.2 - tapable: 2.2.2 + tapable: 2.2.3 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) - mini-css-extract-plugin@2.9.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)): + mini-css-extract-plugin@2.9.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: schema-utils: 4.3.2 - tapable: 2.2.2 + tapable: 2.2.3 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) - mini-css-extract-plugin@2.9.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): + mini-css-extract-plugin@2.9.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)): dependencies: schema-utils: 4.3.2 - tapable: 2.2.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + tapable: 2.2.3 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5) mini-css-extract-plugin@2.9.2(webpack@5.101.0): dependencies: schema-utils: 4.3.2 - tapable: 2.2.2 + tapable: 2.2.3 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) minimalistic-assert@1.0.1: {} @@ -53521,6 +56826,14 @@ snapshots: dependencies: minipass: 7.1.2 + minipass-fetch@2.1.2: + dependencies: + minipass: 3.3.6 + minipass-sized: 1.0.3 + minizlib: 2.1.2 + optionalDependencies: + encoding: 0.1.13 + minipass-fetch@3.0.5: dependencies: minipass: 7.1.2 @@ -53533,6 +56846,11 @@ snapshots: dependencies: minipass: 3.3.6 + minipass-json-stream@1.0.2: + dependencies: + jsonparse: 1.3.1 + minipass: 3.3.6 + minipass-pipeline@1.2.4: dependencies: minipass: 3.3.6 @@ -53556,6 +56874,8 @@ snapshots: minipass: 3.3.6 yallist: 4.0.0 + mitt@1.2.0: {} + mixin-deep@1.3.2: dependencies: for-in: 1.0.2 @@ -53583,7 +56903,7 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.1 - mlly@1.7.4: + mlly@1.8.0: dependencies: acorn: 8.15.0 pathe: 2.0.3 @@ -53595,7 +56915,7 @@ snapshots: ansi-colors: 4.1.3 browser-stdout: 1.3.1 chokidar: 3.6.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) diff: 5.2.0 escape-string-regexp: 4.0.0 find-up: 5.0.0 @@ -53648,7 +56968,7 @@ snapshots: array-differ: 3.0.0 array-union: 2.1.0 arrify: 2.0.1 - minimatch: 3.0.5 + minimatch: 3.1.2 mute-stream@0.0.8: {} @@ -53698,8 +57018,8 @@ snapshots: ndepe@0.1.12(encoding@0.1.13): dependencies: '@vercel/nft': 0.27.3(encoding@0.1.13) - debug: 4.4.1(supports-color@8.1.1) - fs-extra: 11.3.1 + debug: 4.4.3(supports-color@8.1.1) + fs-extra: 11.3.2 mlly: 1.6.1 pkg-types: 1.3.1 pkg-up: 3.1.0 @@ -53720,11 +57040,11 @@ snapshots: neo-async@2.6.2: {} - next@12.3.4(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0): + next@12.3.4(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1): dependencies: '@next/env': 12.3.4 '@swc/helpers': 0.4.11 - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001743 postcss: 8.4.14 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -53744,17 +57064,17 @@ snapshots: '@next/swc-win32-arm64-msvc': 12.3.4 '@next/swc-win32-ia32-msvc': 12.3.4 '@next/swc-win32-x64-msvc': 12.3.4 - sass: 1.90.0 + sass: 1.92.1 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0): + next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1): dependencies: '@next/env': 14.2.13 '@swc/helpers': 0.5.5 busboy: 1.6.0 - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001743 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.3.1 @@ -53770,16 +57090,22 @@ snapshots: '@next/swc-win32-arm64-msvc': 14.2.13 '@next/swc-win32-ia32-msvc': 14.2.13 '@next/swc-win32-x64-msvc': 14.2.13 - '@playwright/test': 1.54.2 - sass: 1.90.0 + '@playwright/test': 1.55.0 + sass: 1.92.1 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - nextjs-cors@2.2.0(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0)): + nextjs-cors@2.2.0(next@14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1)): dependencies: cors: 2.8.5 - next: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.54.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.90.0) + next: 14.2.13(@babel/core@7.24.7)(@playwright/test@1.55.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.92.1) + + nice-napi@1.0.2: + dependencies: + node-addon-api: 3.2.1 + node-gyp-build: 4.8.4 + optional: true nice-try@1.0.5: {} @@ -53794,6 +57120,9 @@ snapshots: node-abort-controller@3.1.1: {} + node-addon-api@3.2.1: + optional: true + node-addon-api@7.1.1: optional: true @@ -53841,6 +57170,23 @@ snapshots: transitivePeerDependencies: - supports-color + node-gyp@9.4.1: + dependencies: + env-paths: 2.2.1 + exponential-backoff: 3.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + make-fetch-happen: 10.2.1 + nopt: 6.0.0 + npmlog: 6.0.2 + rimraf: 3.0.2 + semver: 7.6.3 + tar: 6.2.1 + which: 2.0.2 + transitivePeerDependencies: + - bluebird + - supports-color + node-html-parser@6.1.13: dependencies: css-select: 5.2.2 @@ -53850,7 +57196,7 @@ snapshots: node-machine-id@1.1.12: {} - node-releases@2.0.19: {} + node-releases@2.0.21: {} node-schedule@2.1.1: dependencies: @@ -53862,6 +57208,10 @@ snapshots: dependencies: abbrev: 1.1.1 + nopt@6.0.0: + dependencies: + abbrev: 1.1.1 + nopt@7.2.1: dependencies: abbrev: 2.0.0 @@ -53936,10 +57286,21 @@ snapshots: semver: 7.6.3 validate-npm-package-name: 5.0.1 + npm-packlist@7.0.4: + dependencies: + ignore-walk: 6.0.5 + npm-packlist@8.0.2: dependencies: ignore-walk: 6.0.5 + npm-pick-manifest@8.0.1: + dependencies: + npm-install-checks: 6.3.0 + npm-normalize-package-bin: 3.0.1 + npm-package-arg: 10.1.0 + semver: 7.6.3 + npm-pick-manifest@8.0.2: dependencies: npm-install-checks: 6.3.0 @@ -53954,6 +57315,18 @@ snapshots: npm-package-arg: 11.0.2 semver: 7.6.3 + npm-registry-fetch@14.0.5: + dependencies: + make-fetch-happen: 11.1.1 + minipass: 5.0.0 + minipass-fetch: 3.0.5 + minipass-json-stream: 1.0.2 + minizlib: 2.1.2 + npm-package-arg: 10.1.0 + proc-log: 3.0.0 + transitivePeerDependencies: + - supports-color + npm-registry-fetch@17.1.0: dependencies: '@npmcli/redact': 2.0.1 @@ -53986,6 +57359,13 @@ snapshots: gauge: 3.0.2 set-blocking: 2.0.0 + npmlog@6.0.2: + dependencies: + are-we-there-yet: 3.0.1 + console-control-strings: 1.1.0 + gauge: 4.0.4 + set-blocking: 2.0.0 + nssocket@0.6.0: dependencies: eventemitter2: 0.4.14 @@ -53999,7 +57379,7 @@ snapshots: dependencies: boolbase: 1.0.0 - nwsapi@2.2.21: {} + nwsapi@2.2.22: {} nx@17.2.8(@swc/core@1.11.31(@swc/helpers@0.5.17)): dependencies: @@ -54017,7 +57397,7 @@ snapshots: enquirer: 2.3.6 figures: 3.2.0 flat: 5.0.2 - fs-extra: 11.3.1 + fs-extra: 11.3.2 glob: 7.1.4 ignore: 5.3.2 jest-diff: 29.7.0 @@ -54068,7 +57448,7 @@ snapshots: enquirer: 2.3.6 figures: 3.2.0 flat: 5.0.2 - fs-extra: 11.3.1 + fs-extra: 11.3.2 ignore: 5.3.2 jest-diff: 29.7.0 js-yaml: 4.1.0 @@ -54124,6 +57504,8 @@ snapshots: object-keys@1.1.1: {} + object-path@0.11.8: {} + object-visit@1.0.1: dependencies: isobject: 3.0.1 @@ -54233,6 +57615,12 @@ snapshots: is-inside-container: 1.0.0 wsl-utils: 0.1.0 + open@8.4.1: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 @@ -54241,6 +57629,12 @@ snapshots: opener@1.5.2: {} + openurl@1.1.1: {} + + opn@5.3.0: + dependencies: + is-wsl: 1.1.0 + optimism@0.18.1: dependencies: '@wry/caches': 1.0.1 @@ -54296,6 +57690,8 @@ snapshots: os-browserify@0.3.0: {} + os-tmpdir@1.0.2: {} + ospath@1.2.2: {} outdent@0.8.0: {} @@ -54350,6 +57746,8 @@ snapshots: p-map-series@2.1.0: {} + p-map@2.1.0: {} + p-map@4.0.0: dependencies: aggregate-error: 3.1.0 @@ -54371,7 +57769,7 @@ snapshots: p-retry@6.2.1: dependencies: '@types/retry': 0.12.2 - is-network-error: 1.1.0 + is-network-error: 1.3.0 retry: 0.13.1 p-timeout@3.2.0: @@ -54388,6 +57786,30 @@ snapshots: package-json-from-dist@1.0.1: {} + pacote@15.1.0: + dependencies: + '@npmcli/git': 4.1.0 + '@npmcli/installed-package-contents': 2.1.0 + '@npmcli/promise-spawn': 6.0.2 + '@npmcli/run-script': 6.0.2 + cacache: 17.1.4 + fs-minipass: 3.0.3 + minipass: 4.2.8 + npm-package-arg: 10.1.0 + npm-packlist: 7.0.4 + npm-pick-manifest: 8.0.2 + npm-registry-fetch: 14.0.5 + proc-log: 3.0.0 + promise-retry: 2.0.1 + read-package-json: 6.0.4 + read-package-json-fast: 3.0.2 + sigstore: 1.9.0 + ssri: 10.0.6 + tar: 6.2.1 + transitivePeerDependencies: + - bluebird + - supports-color + pacote@18.0.6: dependencies: '@npmcli/git': 5.0.8 @@ -54455,13 +57877,13 @@ snapshots: parse-json@4.0.0: dependencies: - error-ex: 1.3.2 + error-ex: 1.3.4 json-parse-better-errors: 1.0.2 parse-json@5.2.0: dependencies: '@babel/code-frame': 7.27.1 - error-ex: 1.3.2 + error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -54479,10 +57901,20 @@ snapshots: dependencies: parse-path: 7.1.0 + parse5-html-rewriting-stream@7.0.0: + dependencies: + entities: 4.5.0 + parse5: 7.3.0 + parse5-sax-parser: 7.0.0 + parse5-htmlparser2-tree-adapter@6.0.1: dependencies: parse5: 6.0.1 + parse5-sax-parser@7.0.0: + dependencies: + parse5: 7.3.0 + parse5@4.0.0: {} parse5@5.1.1: {} @@ -54610,8 +58042,30 @@ snapshots: pify@5.0.0: {} + pinkie-promise@2.0.1: + dependencies: + pinkie: 2.0.4 + + pinkie@2.0.4: {} + pirates@4.0.7: {} + piscina@3.2.0: + dependencies: + eventemitter-asyncresource: 1.0.0 + hdr-histogram-js: 2.0.3 + hdr-histogram-percentiles-obj: 3.0.0 + optionalDependencies: + nice-napi: 1.0.2 + + piscina@4.0.0: + dependencies: + eventemitter-asyncresource: 1.0.0 + hdr-histogram-js: 2.0.3 + hdr-histogram-percentiles-obj: 3.0.0 + optionalDependencies: + nice-napi: 1.0.2 + pkg-dir@3.0.0: dependencies: find-up: 3.0.0 @@ -54631,10 +58085,10 @@ snapshots: pkg-types@1.3.1: dependencies: confbox: 0.1.8 - mlly: 1.7.4 + mlly: 1.8.0 pathe: 2.0.3 - pkg-types@2.2.0: + pkg-types@2.3.0: dependencies: confbox: 0.2.2 exsolve: 1.0.7 @@ -54648,33 +58102,38 @@ snapshots: pkginfo@0.4.1: {} - playwright-core@1.54.2: {} + playwright-core@1.55.0: {} - playwright@1.54.2: + playwright@1.55.0: dependencies: - playwright-core: 1.54.2 + playwright-core: 1.55.0 optionalDependencies: fsevents: 2.3.2 - pnp-webpack-plugin@1.7.0(typescript@5.6.2): + pnp-webpack-plugin@1.7.0(typescript@5.5.3): dependencies: - ts-pnp: 1.2.0(typescript@5.6.2) + ts-pnp: 1.2.0(typescript@5.5.3) transitivePeerDependencies: - typescript polished@4.3.1: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 popper.js@1.16.1-lts: {} - portfinder@1.0.37: + portfinder@1.0.38: dependencies: async: 3.2.6 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color + portscanner@2.2.0: + dependencies: + async: 2.6.4 + is-number-like: 1.0.8 + posix-character-classes@0.1.1: {} possible-typed-array-names@1.1.0: {} @@ -54699,9 +58158,9 @@ snapshots: postcss: 8.4.47 postcss-selector-parser: 6.1.2 - postcss-browser-comments@4.0.0(browserslist@4.25.2)(postcss@8.4.47): + postcss-browser-comments@4.0.0(browserslist@4.26.2)(postcss@8.4.47): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 postcss: 8.4.47 postcss-calc@8.2.4(postcss@8.4.47): @@ -54829,7 +58288,7 @@ snapshots: postcss-colormin@5.3.1(postcss@8.4.47): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.4.47 @@ -54837,7 +58296,7 @@ snapshots: postcss-colormin@6.1.0(postcss@8.4.31): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.4.31 @@ -54845,7 +58304,7 @@ snapshots: postcss-colormin@6.1.0(postcss@8.4.32): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.4.32 @@ -54853,7 +58312,7 @@ snapshots: postcss-colormin@6.1.0(postcss@8.4.47): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.4.47 @@ -54861,7 +58320,7 @@ snapshots: postcss-colormin@6.1.0(postcss@8.5.6): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.5.6 @@ -54869,31 +58328,31 @@ snapshots: postcss-convert-values@5.1.3(postcss@8.4.47): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 postcss: 8.4.47 postcss-value-parser: 4.2.0 postcss-convert-values@6.1.0(postcss@8.4.31): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 postcss: 8.4.31 postcss-value-parser: 4.2.0 postcss-convert-values@6.1.0(postcss@8.4.32): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 postcss: 8.4.32 postcss-value-parser: 4.2.0 postcss-convert-values@6.1.0(postcss@8.4.47): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 postcss: 8.4.47 postcss-value-parser: 4.2.0 postcss-convert-values@6.1.0(postcss@8.5.6): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -55265,7 +58724,7 @@ snapshots: dependencies: postcss: 8.5.6 - postcss-js@4.0.1(postcss@8.4.47): + postcss-js@4.1.0(postcss@8.4.47): dependencies: camelcase-css: 2.0.1 postcss: 8.4.47 @@ -55311,21 +58770,38 @@ snapshots: postcss: 8.4.47 ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.5.3) - postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)): + postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(typescript@5.5.3)): dependencies: lilconfig: 3.1.3 yaml: 2.8.1 optionalDependencies: postcss: 8.4.47 - ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2) + ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(typescript@5.5.3) + optional: true - postcss-load-config@6.0.1(jiti@2.5.1)(postcss@8.4.47)(yaml@2.8.1): + postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.5.3)): dependencies: lilconfig: 3.1.3 + yaml: 2.8.1 optionalDependencies: - jiti: 2.5.1 postcss: 8.4.47 + ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.5.3) + + postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)): + dependencies: + lilconfig: 3.1.3 yaml: 2.8.1 + optionalDependencies: + postcss: 8.4.47 + ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3) + + postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.6.2)): + dependencies: + lilconfig: 3.1.3 + yaml: 2.8.1 + optionalDependencies: + postcss: 8.4.47 + ts-node: 10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.6.2) postcss-load-config@6.0.1(jiti@2.5.1)(postcss@8.5.6)(yaml@2.8.1): dependencies: @@ -55349,7 +58825,15 @@ snapshots: klona: 2.0.6 postcss: 8.4.47 semver: 7.6.3 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) + + postcss-loader@7.0.2(postcss@8.4.31)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)): + dependencies: + cosmiconfig: 7.1.0 + klona: 2.0.6 + postcss: 8.4.31 + semver: 7.6.3 + webpack: 5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4) postcss-loader@7.3.3(postcss@8.4.32)(typescript@5.2.2)(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: @@ -55373,11 +58857,11 @@ snapshots: transitivePeerDependencies: - typescript - postcss-loader@8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.4.39)(typescript@5.6.2)(webpack@5.101.0): + postcss-loader@8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.4.47)(typescript@5.5.3)(webpack@5.101.0): dependencies: - cosmiconfig: 9.0.0(typescript@5.6.2) + cosmiconfig: 9.0.0(typescript@5.5.3) jiti: 1.21.7 - postcss: 8.4.39 + postcss: 8.4.47 semver: 7.6.3 optionalDependencies: '@rspack/core': 1.4.11(@swc/helpers@0.5.17) @@ -55385,11 +58869,11 @@ snapshots: transitivePeerDependencies: - typescript - postcss-loader@8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.4.47)(typescript@5.6.2)(webpack@5.101.0): + postcss-loader@8.1.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(postcss@8.5.6)(typescript@5.5.3)(webpack@5.101.0): dependencies: - cosmiconfig: 9.0.0(typescript@5.6.2) + cosmiconfig: 9.0.0(typescript@5.5.3) jiti: 1.21.7 - postcss: 8.4.47 + postcss: 8.5.6 semver: 7.6.3 optionalDependencies: '@rspack/core': 1.4.11(@swc/helpers@0.5.17) @@ -55468,7 +58952,7 @@ snapshots: postcss-merge-rules@5.1.4(postcss@8.4.47): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 caniuse-api: 3.0.0 cssnano-utils: 3.1.0(postcss@8.4.47) postcss: 8.4.47 @@ -55476,7 +58960,7 @@ snapshots: postcss-merge-rules@6.1.1(postcss@8.4.31): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 caniuse-api: 3.0.0 cssnano-utils: 4.0.2(postcss@8.4.31) postcss: 8.4.31 @@ -55484,7 +58968,7 @@ snapshots: postcss-merge-rules@6.1.1(postcss@8.4.32): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 caniuse-api: 3.0.0 cssnano-utils: 4.0.2(postcss@8.4.32) postcss: 8.4.32 @@ -55492,7 +58976,7 @@ snapshots: postcss-merge-rules@6.1.1(postcss@8.4.47): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 caniuse-api: 3.0.0 cssnano-utils: 4.0.2(postcss@8.4.47) postcss: 8.4.47 @@ -55500,7 +58984,7 @@ snapshots: postcss-merge-rules@6.1.1(postcss@8.5.6): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 caniuse-api: 3.0.0 cssnano-utils: 4.0.2(postcss@8.5.6) postcss: 8.5.6 @@ -55568,35 +59052,35 @@ snapshots: postcss-minify-params@5.1.4(postcss@8.4.47): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 cssnano-utils: 3.1.0(postcss@8.4.47) postcss: 8.4.47 postcss-value-parser: 4.2.0 postcss-minify-params@6.1.0(postcss@8.4.31): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 cssnano-utils: 4.0.2(postcss@8.4.31) postcss: 8.4.31 postcss-value-parser: 4.2.0 postcss-minify-params@6.1.0(postcss@8.4.32): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 cssnano-utils: 4.0.2(postcss@8.4.32) postcss: 8.4.32 postcss-value-parser: 4.2.0 postcss-minify-params@6.1.0(postcss@8.4.47): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 cssnano-utils: 4.0.2(postcss@8.4.47) postcss: 8.4.47 postcss-value-parser: 4.2.0 postcss-minify-params@6.1.0(postcss@8.5.6): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 cssnano-utils: 4.0.2(postcss@8.5.6) postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -55851,31 +59335,31 @@ snapshots: postcss-normalize-unicode@5.1.1(postcss@8.4.47): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 postcss: 8.4.47 postcss-value-parser: 4.2.0 postcss-normalize-unicode@6.1.0(postcss@8.4.31): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 postcss: 8.4.31 postcss-value-parser: 4.2.0 postcss-normalize-unicode@6.1.0(postcss@8.4.32): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 postcss: 8.4.32 postcss-value-parser: 4.2.0 postcss-normalize-unicode@6.1.0(postcss@8.4.47): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 postcss: 8.4.47 postcss-value-parser: 4.2.0 postcss-normalize-unicode@6.1.0(postcss@8.5.6): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -55930,12 +59414,12 @@ snapshots: postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize@10.0.1(browserslist@4.25.2)(postcss@8.4.47): + postcss-normalize@10.0.1(browserslist@4.26.2)(postcss@8.4.47): dependencies: '@csstools/normalize.css': 12.1.1 - browserslist: 4.25.2 + browserslist: 4.26.2 postcss: 8.4.47 - postcss-browser-comments: 4.0.0(browserslist@4.25.2)(postcss@8.4.47) + postcss-browser-comments: 4.0.0(browserslist@4.26.2)(postcss@8.4.47) sanitize.css: 13.0.0 postcss-opacity-percentage@1.1.3(postcss@8.4.47): @@ -56057,7 +59541,7 @@ snapshots: '@csstools/postcss-trigonometric-functions': 1.0.2(postcss@8.4.47) '@csstools/postcss-unset-value': 1.0.2(postcss@8.4.47) autoprefixer: 10.4.20(postcss@8.4.47) - browserslist: 4.25.2 + browserslist: 4.26.2 css-blank-pseudo: 3.0.3(postcss@8.4.47) css-has-pseudo: 3.0.4(postcss@8.4.47) css-prefers-color-scheme: 6.0.3(postcss@8.4.47) @@ -56120,7 +59604,7 @@ snapshots: '@csstools/postcss-trigonometric-functions': 3.0.10(postcss@8.4.32) '@csstools/postcss-unset-value': 3.0.1(postcss@8.4.32) autoprefixer: 10.4.20(postcss@8.4.32) - browserslist: 4.25.2 + browserslist: 4.26.2 css-blank-pseudo: 6.0.2(postcss@8.4.32) css-has-pseudo: 6.0.5(postcss@8.4.32) css-prefers-color-scheme: 9.0.1(postcss@8.4.32) @@ -56187,11 +59671,11 @@ snapshots: '@csstools/postcss-trigonometric-functions': 3.0.10(postcss@8.4.39) '@csstools/postcss-unset-value': 3.0.1(postcss@8.4.39) autoprefixer: 10.4.20(postcss@8.4.39) - browserslist: 4.25.2 + browserslist: 4.26.2 css-blank-pseudo: 6.0.2(postcss@8.4.39) css-has-pseudo: 6.0.5(postcss@8.4.39) css-prefers-color-scheme: 9.0.1(postcss@8.4.39) - cssdb: 8.3.1 + cssdb: 8.4.0 postcss: 8.4.39 postcss-attribute-case-insensitive: 6.0.3(postcss@8.4.39) postcss-clamp: 4.1.0(postcss@8.4.39) @@ -56252,11 +59736,11 @@ snapshots: '@csstools/postcss-trigonometric-functions': 3.0.10(postcss@8.4.47) '@csstools/postcss-unset-value': 3.0.1(postcss@8.4.47) autoprefixer: 10.4.20(postcss@8.4.47) - browserslist: 4.25.2 + browserslist: 4.26.2 css-blank-pseudo: 6.0.2(postcss@8.4.47) css-has-pseudo: 6.0.5(postcss@8.4.47) css-prefers-color-scheme: 9.0.1(postcss@8.4.47) - cssdb: 8.3.1 + cssdb: 8.4.0 postcss: 8.4.47 postcss-attribute-case-insensitive: 6.0.3(postcss@8.4.47) postcss-clamp: 4.1.0(postcss@8.4.47) @@ -56306,31 +59790,31 @@ snapshots: postcss-reduce-initial@5.1.2(postcss@8.4.47): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 caniuse-api: 3.0.0 postcss: 8.4.47 postcss-reduce-initial@6.1.0(postcss@8.4.31): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 caniuse-api: 3.0.0 postcss: 8.4.31 postcss-reduce-initial@6.1.0(postcss@8.4.32): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 caniuse-api: 3.0.0 postcss: 8.4.32 postcss-reduce-initial@6.1.0(postcss@8.4.47): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 caniuse-api: 3.0.0 postcss: 8.4.47 postcss-reduce-initial@6.1.0(postcss@8.5.6): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 caniuse-api: 3.0.0 postcss: 8.5.6 @@ -56578,7 +60062,7 @@ snapshots: chalk: 2.4.2 figures: 2.0.0 log-update: 2.3.0 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) promise-all-reject-late@1.0.1: {} @@ -56622,6 +60106,8 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 + properties@1.2.1: {} + property-information@6.5.0: {} protocols@2.0.2: {} @@ -56760,7 +60246,7 @@ snapshots: dependencies: side-channel: 1.1.0 - quansync@0.2.10: {} + quansync@0.2.11: {} querystring-es3@0.2.1: {} @@ -56825,7 +60311,7 @@ snapshots: react-app-polyfill@3.0.0: dependencies: - core-js: 3.45.0 + core-js: 3.45.1 object-assign: 4.1.1 promise: 8.3.0 raf: 3.4.1 @@ -56837,18 +60323,18 @@ snapshots: react: 17.0.2 tween-functions: 1.2.0 - react-dev-utils@12.0.1(eslint@9.6.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)): + react-dev-utils@12.0.1(eslint@8.57.0)(typescript@5.5.3)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)): dependencies: '@babel/code-frame': 7.27.1 address: 1.2.2 - browserslist: 4.25.2 + browserslist: 4.26.2 chalk: 4.1.2 cross-spawn: 7.0.3 detect-port-alt: 1.1.6 escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.6.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.0)(typescript@5.5.3)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -56865,24 +60351,24 @@ snapshots: text-table: 0.2.0 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) optionalDependencies: - typescript: 5.6.2 + typescript: 5.5.3 transitivePeerDependencies: - eslint - supports-color - vue-template-compiler - react-dev-utils@12.0.1(eslint@9.6.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): + react-dev-utils@12.0.1(eslint@8.57.0)(typescript@5.5.3)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: '@babel/code-frame': 7.27.1 address: 1.2.2 - browserslist: 4.25.2 + browserslist: 4.26.2 chalk: 4.1.2 cross-spawn: 7.0.3 detect-port-alt: 1.1.6 escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.6.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.0)(typescript@5.5.3)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -56897,9 +60383,9 @@ snapshots: shell-quote: 1.8.3 strip-ansi: 6.0.1 text-table: 0.2.0 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) optionalDependencies: - typescript: 5.6.2 + typescript: 5.5.3 transitivePeerDependencies: - eslint - supports-color @@ -56907,22 +60393,22 @@ snapshots: react-display-name@0.2.5: {} - react-docgen-typescript@2.4.0(typescript@5.6.2): + react-docgen-typescript@2.4.0(typescript@5.5.3): dependencies: - typescript: 5.6.2 + typescript: 5.5.3 react-docgen@7.1.1: dependencies: '@babel/core': 7.24.7 - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.28.0 '@types/doctrine': 0.0.9 '@types/resolve': 1.20.6 doctrine: 3.0.0 resolve: 1.22.10 - strip-indent: 4.0.0 + strip-indent: 4.1.0 transitivePeerDependencies: - supports-color @@ -56949,12 +60435,12 @@ snapshots: react-error-boundary@4.0.13(react@16.14.0): dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 react: 16.14.0 react-error-boundary@4.1.2(react@18.3.1): dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 react: 18.3.1 react-error-overlay@6.1.0: {} @@ -56979,7 +60465,7 @@ snapshots: react-i18next@11.18.6(i18next@21.10.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 html-parse-stringify: 3.0.1 i18next: 21.10.0 react: 18.3.1 @@ -56994,7 +60480,7 @@ snapshots: react-jss@10.10.0(react@18.3.1): dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 '@emotion/is-prop-valid': 0.7.3 css-jss: 10.10.0 hoist-non-react-statics: 3.3.2 @@ -57011,7 +60497,7 @@ snapshots: react-loadable-ssr-addon@1.0.2(react-loadable@5.5.0(react@16.14.0))(webpack@5.101.0): dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 react-loadable: 5.5.0(react@16.14.0) webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) @@ -57022,7 +60508,7 @@ snapshots: react-redux@7.2.9(react-dom@16.14.0(react@16.14.0))(react@16.14.0): dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 '@types/react-redux': 7.1.34 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 @@ -57034,7 +60520,7 @@ snapshots: react-redux@7.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 '@types/react-redux': 7.1.34 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 @@ -57071,7 +60557,7 @@ snapshots: react-router-dom@5.3.4(react@16.14.0): dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 history: 4.10.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -57082,7 +60568,7 @@ snapshots: react-router-dom@5.3.4(react@17.0.2): dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 history: 4.10.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -57093,7 +60579,7 @@ snapshots: react-router-dom@5.3.4(react@18.3.1): dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 history: 4.10.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -57146,7 +60632,7 @@ snapshots: react-router@5.3.4(react@16.14.0): dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 history: 4.10.1 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 @@ -57159,7 +60645,7 @@ snapshots: react-router@5.3.4(react@17.0.2): dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 history: 4.10.1 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 @@ -57172,7 +60658,7 @@ snapshots: react-router@5.3.4(react@18.3.1): dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 history: 4.10.1 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 @@ -57213,7 +60699,7 @@ snapshots: '@remix-run/router': 1.23.0 react: 18.3.1 - react-scripts@5.0.1(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.24.7))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.24.7))(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/babel__core@7.20.5)(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))(esbuild@0.23.0)(eslint@9.6.0)(react@17.0.2)(sass-embedded@1.90.0)(sass@1.90.0)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1): + react-scripts@5.0.1(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.24.7))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.24.7))(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/babel__core@7.20.5)(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))(esbuild@0.23.0)(eslint@8.57.0)(react@17.0.2)(sass-embedded@1.92.1)(sass@1.92.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(type-fest@2.19.0)(typescript@5.5.3)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1): dependencies: '@babel/core': 7.24.7 '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0))(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) @@ -57223,41 +60709,41 @@ snapshots: babel-plugin-named-asset-import: 0.3.8(@babel/core@7.24.7) babel-preset-react-app: 10.1.0 bfj: 7.1.0 - browserslist: 4.25.2 + browserslist: 4.26.2 camelcase: 6.3.0 case-sensitive-paths-webpack-plugin: 2.4.0 css-loader: 6.11.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) css-minimizer-webpack-plugin: 3.4.1(esbuild@0.23.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) dotenv: 10.0.0 dotenv-expand: 5.1.0 - eslint: 9.6.0 - eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.24.7))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.24.7))(eslint@9.6.0)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2) - eslint-webpack-plugin: 3.2.0(eslint@9.6.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) + eslint: 8.57.0 + eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.24.7))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.24.7))(eslint@8.57.0)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)))(typescript@5.5.3) + eslint-webpack-plugin: 3.2.0(eslint@8.57.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) file-loader: 6.2.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) fs-extra: 10.1.0 html-webpack-plugin: 5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) identity-obj-proxy: 3.0.0 - jest: 27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)) + jest: 27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)) jest-resolve: 27.5.1 - jest-watch-typeahead: 1.1.0(jest@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))) + jest-watch-typeahead: 1.1.0(jest@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))) mini-css-extract-plugin: 2.9.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) postcss: 8.4.47 postcss-flexbugs-fixes: 5.0.2(postcss@8.4.47) postcss-loader: 6.2.1(postcss@8.4.47)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) - postcss-normalize: 10.0.1(browserslist@4.25.2)(postcss@8.4.47) + postcss-normalize: 10.0.1(browserslist@4.26.2)(postcss@8.4.47) postcss-preset-env: 7.8.3(postcss@8.4.47) prompts: 2.4.2 react: 17.0.2 react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1(eslint@9.6.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) + react-dev-utils: 12.0.1(eslint@8.57.0)(typescript@5.5.3)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) react-refresh: 0.11.0 resolve: 1.22.10 resolve-url-loader: 4.0.0 - sass-loader: 12.6.0(sass-embedded@1.90.0)(sass@1.90.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) + sass-loader: 12.6.0(sass-embedded@1.92.1)(sass@1.92.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) semver: 7.6.3 source-map-loader: 3.0.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) style-loader: 3.3.4(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) - tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)) + tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)) terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) webpack-dev-server: 4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) @@ -57265,7 +60751,7 @@ snapshots: workbox-webpack-plugin: 6.6.0(@types/babel__core@7.20.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) optionalDependencies: fsevents: 2.3.3 - typescript: 5.6.2 + typescript: 5.5.3 transitivePeerDependencies: - '@babel/plugin-syntax-flow' - '@babel/plugin-transform-react-jsx' @@ -57300,7 +60786,7 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - react-scripts@5.0.1(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.3))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.3))(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/babel__core@7.20.5)(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(eslint@9.6.0)(react@17.0.2)(sass-embedded@1.90.0)(sass@1.90.0)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1): + react-scripts@5.0.1(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.4))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.4))(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/babel__core@7.20.5)(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(eslint@8.57.0)(react@17.0.2)(sass-embedded@1.92.1)(sass@1.92.1)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))(type-fest@2.19.0)(typescript@5.5.3)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1): dependencies: '@babel/core': 7.24.7 '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(@types/webpack@5.28.0(@swc/core@1.11.31(@swc/helpers@0.5.17)))(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-dev-server@4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) @@ -57310,49 +60796,49 @@ snapshots: babel-plugin-named-asset-import: 0.3.8(@babel/core@7.24.7) babel-preset-react-app: 10.1.0 bfj: 7.1.0 - browserslist: 4.25.2 + browserslist: 4.26.2 camelcase: 6.3.0 case-sensitive-paths-webpack-plugin: 2.4.0 css-loader: 6.11.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) css-minimizer-webpack-plugin: 3.4.1(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) dotenv: 10.0.0 dotenv-expand: 5.1.0 - eslint: 9.6.0 - eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.3))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.3))(eslint@9.6.0)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2) - eslint-webpack-plugin: 3.2.0(eslint@9.6.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + eslint: 8.57.0 + eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.4))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.4))(eslint@8.57.0)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)))(typescript@5.5.3) + eslint-webpack-plugin: 3.2.0(eslint@8.57.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) file-loader: 6.2.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) fs-extra: 10.1.0 html-webpack-plugin: 5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) identity-obj-proxy: 3.0.0 - jest: 27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)) + jest: 27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)) jest-resolve: 27.5.1 - jest-watch-typeahead: 1.1.0(jest@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2))) + jest-watch-typeahead: 1.1.0(jest@27.5.1(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3))) mini-css-extract-plugin: 2.9.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) postcss: 8.4.47 postcss-flexbugs-fixes: 5.0.2(postcss@8.4.47) postcss-loader: 6.2.1(postcss@8.4.47)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - postcss-normalize: 10.0.1(browserslist@4.25.2)(postcss@8.4.47) + postcss-normalize: 10.0.1(browserslist@4.26.2)(postcss@8.4.47) postcss-preset-env: 7.8.3(postcss@8.4.47) prompts: 2.4.2 react: 17.0.2 react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1(eslint@9.6.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + react-dev-utils: 12.0.1(eslint@8.57.0)(typescript@5.5.3)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) react-refresh: 0.11.0 resolve: 1.22.10 resolve-url-loader: 4.0.0 - sass-loader: 12.6.0(sass-embedded@1.90.0)(sass@1.90.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + sass-loader: 12.6.0(sass-embedded@1.92.1)(sass@1.92.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) semver: 7.6.3 source-map-loader: 3.0.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) style-loader: 3.3.4(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)) + tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)) terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) webpack-dev-server: 4.15.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) webpack-manifest-plugin: 4.1.1(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) workbox-webpack-plugin: 6.6.0(@types/babel__core@7.20.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) optionalDependencies: fsevents: 2.3.3 - typescript: 5.6.2 + typescript: 5.5.3 transitivePeerDependencies: - '@babel/plugin-syntax-flow' - '@babel/plugin-transform-react-jsx' @@ -57415,7 +60901,7 @@ snapshots: react-transition-group@4.4.5(react-dom@16.14.0(react@16.14.0))(react@16.14.0): dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -57424,7 +60910,7 @@ snapshots: react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -57457,6 +60943,13 @@ snapshots: json-parse-even-better-errors: 3.0.2 npm-normalize-package-bin: 3.0.1 + read-package-json@6.0.4: + dependencies: + glob: 10.4.5 + json-parse-even-better-errors: 3.0.2 + normalize-package-data: 5.0.0 + npm-normalize-package-bin: 3.0.1 + read-pkg-up@3.0.0: dependencies: find-up: 2.1.0 @@ -57586,10 +61079,12 @@ snapshots: redux@4.2.1: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 redux@5.0.1: {} + reflect-metadata@0.1.14: {} + reflect.getprototypeof@1.0.10: dependencies: call-bind: 1.0.8 @@ -57601,7 +61096,7 @@ snapshots: get-proto: 1.0.1 which-builtin-type: 1.2.1 - regenerate-unicode-properties@10.2.0: + regenerate-unicode-properties@10.2.2: dependencies: regenerate: 1.4.2 @@ -57629,14 +61124,14 @@ snapshots: regexpp@3.2.0: {} - regexpu-core@6.2.0: + regexpu-core@6.3.1: dependencies: regenerate: 1.4.2 - regenerate-unicode-properties: 10.2.0 + regenerate-unicode-properties: 10.2.2 regjsgen: 0.8.0 regjsparser: 0.12.0 unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.2.0 + unicode-match-property-value-ecmascript: 2.2.1 registry-auth-token@3.3.2: dependencies: @@ -57761,6 +61256,14 @@ snapshots: postcss: 7.0.39 source-map: 0.6.1 + resolve-url-loader@5.0.0: + dependencies: + adjust-sourcemap-loader: 4.0.0 + convert-source-map: 1.9.0 + loader-utils: 2.0.4 + postcss: 8.4.47 + source-map: 0.6.1 + resolve-url@0.2.1: {} resolve.exports@1.1.0: {} @@ -57769,6 +61272,12 @@ snapshots: resolve.exports@2.0.3: {} + resolve@1.22.1: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + resolve@1.22.10: dependencies: is-core-module: 2.16.1 @@ -57787,6 +61296,13 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + resp-modifier@6.0.2: + dependencies: + debug: 2.6.9 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + restore-cursor@2.0.0: dependencies: onetime: 2.0.1 @@ -57850,90 +61366,99 @@ snapshots: jest-worker: 26.6.2 rollup: 2.79.2 serialize-javascript: 4.0.0 - terser: 5.43.1 + terser: 5.44.0 rollup@2.79.2: optionalDependencies: fsevents: 2.3.3 - rollup@4.46.2: + rollup@4.51.0: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.46.2 - '@rollup/rollup-android-arm64': 4.46.2 - '@rollup/rollup-darwin-arm64': 4.46.2 - '@rollup/rollup-darwin-x64': 4.46.2 - '@rollup/rollup-freebsd-arm64': 4.46.2 - '@rollup/rollup-freebsd-x64': 4.46.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.46.2 - '@rollup/rollup-linux-arm-musleabihf': 4.46.2 - '@rollup/rollup-linux-arm64-gnu': 4.46.2 - '@rollup/rollup-linux-arm64-musl': 4.46.2 - '@rollup/rollup-linux-loongarch64-gnu': 4.46.2 - '@rollup/rollup-linux-ppc64-gnu': 4.46.2 - '@rollup/rollup-linux-riscv64-gnu': 4.46.2 - '@rollup/rollup-linux-riscv64-musl': 4.46.2 - '@rollup/rollup-linux-s390x-gnu': 4.46.2 - '@rollup/rollup-linux-x64-gnu': 4.46.2 - '@rollup/rollup-linux-x64-musl': 4.46.2 - '@rollup/rollup-win32-arm64-msvc': 4.46.2 - '@rollup/rollup-win32-ia32-msvc': 4.46.2 - '@rollup/rollup-win32-x64-msvc': 4.46.2 + '@rollup/rollup-android-arm-eabi': 4.51.0 + '@rollup/rollup-android-arm64': 4.51.0 + '@rollup/rollup-darwin-arm64': 4.51.0 + '@rollup/rollup-darwin-x64': 4.51.0 + '@rollup/rollup-freebsd-arm64': 4.51.0 + '@rollup/rollup-freebsd-x64': 4.51.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.51.0 + '@rollup/rollup-linux-arm-musleabihf': 4.51.0 + '@rollup/rollup-linux-arm64-gnu': 4.51.0 + '@rollup/rollup-linux-arm64-musl': 4.51.0 + '@rollup/rollup-linux-loong64-gnu': 4.51.0 + '@rollup/rollup-linux-ppc64-gnu': 4.51.0 + '@rollup/rollup-linux-riscv64-gnu': 4.51.0 + '@rollup/rollup-linux-riscv64-musl': 4.51.0 + '@rollup/rollup-linux-s390x-gnu': 4.51.0 + '@rollup/rollup-linux-x64-gnu': 4.51.0 + '@rollup/rollup-linux-x64-musl': 4.51.0 + '@rollup/rollup-openharmony-arm64': 4.51.0 + '@rollup/rollup-win32-arm64-msvc': 4.51.0 + '@rollup/rollup-win32-ia32-msvc': 4.51.0 + '@rollup/rollup-win32-x64-msvc': 4.51.0 fsevents: 2.3.3 + rrweb-cssom@0.6.0: {} + rrweb-cssom@0.7.1: {} rrweb-cssom@0.8.0: {} rslog@1.2.11: {} - rspack-manifest-plugin@5.0.0(@rspack/core@0.4.5): - dependencies: - tapable: 2.2.2 - webpack-sources: 2.3.1 - optionalDependencies: - '@rspack/core': 0.4.5 - rspack-manifest-plugin@5.0.0(@rspack/core@1.4.11(@swc/helpers@0.5.11)): dependencies: - tapable: 2.2.2 + tapable: 2.2.3 webpack-sources: 2.3.1 optionalDependencies: '@rspack/core': 1.4.11(@swc/helpers@0.5.11) rspack-manifest-plugin@5.0.0(@rspack/core@1.4.11(@swc/helpers@0.5.17)): dependencies: - tapable: 2.2.2 + tapable: 2.2.3 webpack-sources: 2.3.1 optionalDependencies: '@rspack/core': 1.4.11(@swc/helpers@0.5.17) - rspack-manifest-plugin@5.0.0-alpha0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)): + rspack-manifest-plugin@5.0.0(@rspack/core@1.4.11(@swc/helpers@0.5.3)): dependencies: - tapable: 2.2.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) + tapable: 2.2.3 webpack-sources: 2.3.1 + optionalDependencies: + '@rspack/core': 1.4.11(@swc/helpers@0.5.3) rspack-manifest-plugin@5.0.0-alpha0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: - tapable: 2.2.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + tapable: 2.2.3 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) webpack-sources: 2.3.1 rspack-manifest-plugin@5.0.0-alpha0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)): dependencies: - tapable: 2.2.2 + tapable: 2.2.3 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19) webpack-sources: 2.3.1 + rspack-manifest-plugin@5.0.0-alpha0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)): + dependencies: + tapable: 2.2.3 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5) + webpack-sources: 2.3.1 + rspack-manifest-plugin@5.0.3(@rspack/core@1.4.11(@swc/helpers@0.5.17)): dependencies: '@rspack/lite-tapable': 1.0.1 optionalDependencies: '@rspack/core': 1.4.11(@swc/helpers@0.5.17) - run-applescript@7.0.0: {} + rspack-manifest-plugin@5.0.3(@rspack/core@1.4.11(@swc/helpers@0.5.3)): + dependencies: + '@rspack/lite-tapable': 1.0.1 + optionalDependencies: + '@rspack/core': 1.4.11(@swc/helpers@0.5.3) + + run-applescript@7.1.0: {} run-async@2.4.1: {} @@ -57941,6 +61466,16 @@ snapshots: dependencies: queue-microtask: 1.2.3 + rx@4.1.0: {} + + rxjs@6.6.7: + dependencies: + tslib: 1.14.1 + + rxjs@7.8.1: + dependencies: + tslib: 2.8.1 + rxjs@7.8.2: dependencies: tslib: 2.8.1 @@ -57984,67 +61519,67 @@ snapshots: sanitize.css@13.0.0: {} - sass-embedded-all-unknown@1.90.0: + sass-embedded-all-unknown@1.92.1: dependencies: - sass: 1.90.0 + sass: 1.92.1 optional: true - sass-embedded-android-arm64@1.90.0: + sass-embedded-android-arm64@1.92.1: optional: true - sass-embedded-android-arm@1.90.0: + sass-embedded-android-arm@1.92.1: optional: true - sass-embedded-android-riscv64@1.90.0: + sass-embedded-android-riscv64@1.92.1: optional: true - sass-embedded-android-x64@1.90.0: + sass-embedded-android-x64@1.92.1: optional: true - sass-embedded-darwin-arm64@1.90.0: + sass-embedded-darwin-arm64@1.92.1: optional: true - sass-embedded-darwin-x64@1.90.0: + sass-embedded-darwin-x64@1.92.1: optional: true - sass-embedded-linux-arm64@1.90.0: + sass-embedded-linux-arm64@1.92.1: optional: true - sass-embedded-linux-arm@1.90.0: + sass-embedded-linux-arm@1.92.1: optional: true - sass-embedded-linux-musl-arm64@1.90.0: + sass-embedded-linux-musl-arm64@1.92.1: optional: true - sass-embedded-linux-musl-arm@1.90.0: + sass-embedded-linux-musl-arm@1.92.1: optional: true - sass-embedded-linux-musl-riscv64@1.90.0: + sass-embedded-linux-musl-riscv64@1.92.1: optional: true - sass-embedded-linux-musl-x64@1.90.0: + sass-embedded-linux-musl-x64@1.92.1: optional: true - sass-embedded-linux-riscv64@1.90.0: + sass-embedded-linux-riscv64@1.92.1: optional: true - sass-embedded-linux-x64@1.90.0: + sass-embedded-linux-x64@1.92.1: optional: true - sass-embedded-unknown-all@1.90.0: + sass-embedded-unknown-all@1.92.1: dependencies: - sass: 1.90.0 + sass: 1.92.1 optional: true - sass-embedded-win32-arm64@1.90.0: + sass-embedded-win32-arm64@1.92.1: optional: true - sass-embedded-win32-x64@1.90.0: + sass-embedded-win32-x64@1.92.1: optional: true - sass-embedded@1.90.0: + sass-embedded@1.92.1: dependencies: - '@bufbuild/protobuf': 2.6.3 + '@bufbuild/protobuf': 2.9.0 buffer-builder: 0.2.0 colorjs.io: 0.5.2 immutable: 5.1.3 @@ -58053,61 +61588,85 @@ snapshots: sync-child-process: 1.0.2 varint: 6.0.0 optionalDependencies: - sass-embedded-all-unknown: 1.90.0 - sass-embedded-android-arm: 1.90.0 - sass-embedded-android-arm64: 1.90.0 - sass-embedded-android-riscv64: 1.90.0 - sass-embedded-android-x64: 1.90.0 - sass-embedded-darwin-arm64: 1.90.0 - sass-embedded-darwin-x64: 1.90.0 - sass-embedded-linux-arm: 1.90.0 - sass-embedded-linux-arm64: 1.90.0 - sass-embedded-linux-musl-arm: 1.90.0 - sass-embedded-linux-musl-arm64: 1.90.0 - sass-embedded-linux-musl-riscv64: 1.90.0 - sass-embedded-linux-musl-x64: 1.90.0 - sass-embedded-linux-riscv64: 1.90.0 - sass-embedded-linux-x64: 1.90.0 - sass-embedded-unknown-all: 1.90.0 - sass-embedded-win32-arm64: 1.90.0 - sass-embedded-win32-x64: 1.90.0 - - sass-loader@12.6.0(sass-embedded@1.90.0)(sass@1.90.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)): + sass-embedded-all-unknown: 1.92.1 + sass-embedded-android-arm: 1.92.1 + sass-embedded-android-arm64: 1.92.1 + sass-embedded-android-riscv64: 1.92.1 + sass-embedded-android-x64: 1.92.1 + sass-embedded-darwin-arm64: 1.92.1 + sass-embedded-darwin-x64: 1.92.1 + sass-embedded-linux-arm: 1.92.1 + sass-embedded-linux-arm64: 1.92.1 + sass-embedded-linux-musl-arm: 1.92.1 + sass-embedded-linux-musl-arm64: 1.92.1 + sass-embedded-linux-musl-riscv64: 1.92.1 + sass-embedded-linux-musl-x64: 1.92.1 + sass-embedded-linux-riscv64: 1.92.1 + sass-embedded-linux-x64: 1.92.1 + sass-embedded-unknown-all: 1.92.1 + sass-embedded-win32-arm64: 1.92.1 + sass-embedded-win32-x64: 1.92.1 + + sass-loader@12.6.0(sass-embedded@1.92.1)(sass@1.92.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)): dependencies: klona: 2.0.6 neo-async: 2.6.2 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) optionalDependencies: - sass: 1.90.0 - sass-embedded: 1.90.0 + sass: 1.92.1 + sass-embedded: 1.92.1 + + sass-loader@12.6.0(sass-embedded@1.92.1)(sass@1.92.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): + dependencies: + klona: 2.0.6 + neo-async: 2.6.2 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) + optionalDependencies: + sass: 1.92.1 + sass-embedded: 1.92.1 - sass-loader@12.6.0(sass-embedded@1.90.0)(sass@1.90.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): + sass-loader@13.2.0(sass-embedded@1.92.1)(sass@1.58.1)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)): dependencies: klona: 2.0.6 neo-async: 2.6.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4) optionalDependencies: - sass: 1.90.0 - sass-embedded: 1.90.0 + sass: 1.58.1 + sass-embedded: 1.92.1 - sass-loader@13.3.2(sass-embedded@1.90.0)(sass@1.90.0)(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))): + sass-loader@13.3.2(sass-embedded@1.92.1)(sass@1.92.1)(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: neo-async: 2.6.2 webpack: 5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17)) optionalDependencies: - sass: 1.90.0 - sass-embedded: 1.90.0 + sass: 1.92.1 + sass-embedded: 1.92.1 + + sass-loader@14.2.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(sass-embedded@1.92.1)(sass@1.58.1)(webpack@5.101.0): + dependencies: + neo-async: 2.6.2 + optionalDependencies: + '@rspack/core': 1.4.11(@swc/helpers@0.5.17) + sass: 1.58.1 + sass-embedded: 1.92.1 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) - sass-loader@14.2.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(sass-embedded@1.90.0)(sass@1.90.0)(webpack@5.101.0): + sass-loader@14.2.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(sass-embedded@1.92.1)(sass@1.92.1)(webpack@5.101.0): dependencies: neo-async: 2.6.2 optionalDependencies: '@rspack/core': 1.4.11(@swc/helpers@0.5.17) - sass: 1.90.0 - sass-embedded: 1.90.0 + sass: 1.92.1 + sass-embedded: 1.92.1 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) - sass@1.90.0: + sass@1.58.1: + dependencies: + chokidar: 3.6.0 + immutable: 4.3.7 + source-map-js: 1.2.1 + + sass@1.92.1: dependencies: chokidar: 4.0.3 immutable: 5.1.3 @@ -58175,7 +61734,7 @@ snapshots: selfsigned@2.4.1: dependencies: - '@types/node-forge': 1.3.13 + '@types/node-forge': 1.3.14 node-forge: 1.3.1 semver@5.7.2: {} @@ -58192,6 +61751,24 @@ snapshots: semverhook@1.2.0: {} + send@0.16.2: + dependencies: + debug: 2.6.9 + depd: 1.1.2 + destroy: 1.0.4 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 1.6.3 + mime: 1.4.1 + ms: 2.0.0 + on-finished: 2.3.0 + range-parser: 1.2.1 + statuses: 1.4.0 + transitivePeerDependencies: + - supports-color + send@0.18.0: dependencies: debug: 2.6.9 @@ -58263,6 +61840,15 @@ snapshots: transitivePeerDependencies: - supports-color + serve-static@1.13.2: + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.16.2 + transitivePeerDependencies: + - supports-color + serve-static@1.15.0: dependencies: encodeurl: 1.0.2 @@ -58297,6 +61883,8 @@ snapshots: transitivePeerDependencies: - supports-color + server-destroy@1.0.1: {} + set-blocking@2.0.0: {} set-cookie-parser@2.7.1: {} @@ -58412,6 +62000,16 @@ snapshots: signal-exit@4.1.0: {} + sigstore@1.9.0: + dependencies: + '@sigstore/bundle': 1.1.0 + '@sigstore/protobuf-specs': 0.2.1 + '@sigstore/sign': 1.0.0 + '@sigstore/tuf': 1.0.3 + make-fetch-happen: 11.1.1 + transitivePeerDependencies: + - supports-color + sigstore@2.3.1: dependencies: '@sigstore/bundle': 2.3.2 @@ -58423,9 +62021,9 @@ snapshots: transitivePeerDependencies: - supports-color - simple-swizzle@0.2.2: + simple-swizzle@0.2.4: dependencies: - is-arrayish: 0.3.2 + is-arrayish: 0.3.4 sirv@2.0.4: dependencies: @@ -58457,13 +62055,13 @@ snapshots: slice-ansi@5.0.0: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 is-fullwidth-code-point: 4.0.0 - slice-ansi@7.1.0: + slice-ansi@7.1.2: dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 5.0.0 + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 smart-buffer@4.2.0: {} @@ -58504,6 +62102,17 @@ snapshots: - supports-color - utf-8-validate + socket.io-client@4.8.1: + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7 + engine.io-client: 6.6.3 + socket.io-parser: 4.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + socket.io-parser@4.2.4: dependencies: '@socket.io/component-emitter': 3.1.2 @@ -58531,10 +62140,18 @@ snapshots: uuid: 8.3.2 websocket-driver: 0.7.4 + socks-proxy-agent@7.0.0: + dependencies: + agent-base: 6.0.2 + debug: 4.4.3(supports-color@8.1.1) + socks: 2.8.7 + transitivePeerDependencies: + - supports-color + socks-proxy-agent@8.0.5: dependencies: agent-base: 7.1.4 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) socks: 2.8.7 transitivePeerDependencies: - supports-color @@ -58566,7 +62183,14 @@ snapshots: abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) + + source-map-loader@4.0.1(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)): + dependencies: + abab: 2.0.6 + iconv-lite: 0.6.3 + source-map-js: 1.2.1 + webpack: 5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4) source-map-resolve@0.5.3: dependencies: @@ -58629,7 +62253,7 @@ snapshots: spdy-transport@3.0.0: dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -58640,7 +62264,7 @@ snapshots: spdy@4.0.2: dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -58686,6 +62310,10 @@ snapshots: dependencies: minipass: 3.3.6 + ssri@9.0.1: + dependencies: + minipass: 3.3.6 + stable-hash@0.0.5: {} stable@0.1.8: {} @@ -58709,6 +62337,10 @@ snapshots: define-property: 0.2.5 object-copy: 0.1.0 + statuses@1.3.1: {} + + statuses@1.4.0: {} + statuses@1.5.0: {} statuses@2.0.1: {} @@ -58750,10 +62382,15 @@ snapshots: stream-slice@0.1.2: {} + stream-throttle@0.1.3: + dependencies: + commander: 2.20.3 + limiter: 1.1.5 + streamroller@3.1.5: dependencies: date-format: 4.0.14 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) fs-extra: 8.1.0 transitivePeerDependencies: - supports-color @@ -58772,7 +62409,7 @@ snapshots: string-length@5.0.1: dependencies: char-regex: 2.0.2 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 string-natural-compare@3.0.1: {} @@ -58799,13 +62436,13 @@ snapshots: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 string-width@7.2.0: dependencies: - emoji-regex: 10.4.0 - get-east-asian-width: 1.3.0 - strip-ansi: 7.1.0 + emoji-regex: 10.5.0 + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.2 string.prototype.includes@2.0.1: dependencies: @@ -58887,9 +62524,9 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.0: + strip-ansi@7.1.2: dependencies: - ansi-regex: 6.1.0 + ansi-regex: 6.2.2 strip-bom@3.0.0: {} @@ -58911,9 +62548,7 @@ snapshots: dependencies: min-indent: 1.0.1 - strip-indent@4.0.0: - dependencies: - min-indent: 1.0.1 + strip-indent@4.1.0: {} strip-json-comments@2.0.1: {} @@ -58929,18 +62564,18 @@ snapshots: minimist: 1.2.8 through: 2.3.8 - style-loader@3.3.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)): - dependencies: - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) - style-loader@3.3.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) style-loader@3.3.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)): dependencies: webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19) + style-loader@3.3.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)): + dependencies: + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5) + style-loader@3.3.3(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: webpack: 5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17)) @@ -58951,11 +62586,11 @@ snapshots: style-loader@3.3.4(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) style-loader@4.0.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) style-loader@4.0.0(webpack@5.101.0): dependencies: @@ -58976,8 +62611,8 @@ snapshots: styled-components@5.3.11(@babel/core@7.24.7)(react-dom@16.14.0(react@16.14.0))(react-is@18.3.1)(react@16.14.0): dependencies: '@babel/helper-module-imports': 7.27.1(supports-color@5.5.0) - '@babel/traverse': 7.28.3(supports-color@5.5.0) - '@emotion/is-prop-valid': 1.3.1 + '@babel/traverse': 7.28.4(supports-color@5.5.0) + '@emotion/is-prop-valid': 1.4.0 '@emotion/stylis': 0.8.5 '@emotion/unitless': 0.7.5 babel-plugin-styled-components: 2.1.4(@babel/core@7.24.7)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@16.14.0(react@16.14.0))(react-is@18.3.1)(react@16.14.0))(supports-color@5.5.0) @@ -58994,8 +62629,8 @@ snapshots: styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1): dependencies: '@babel/helper-module-imports': 7.27.1(supports-color@5.5.0) - '@babel/traverse': 7.28.3(supports-color@5.5.0) - '@emotion/is-prop-valid': 1.3.1 + '@babel/traverse': 7.28.4(supports-color@5.5.0) + '@emotion/is-prop-valid': 1.4.0 '@emotion/stylis': 0.8.5 '@emotion/unitless': 0.7.5 babel-plugin-styled-components: 2.1.4(@babel/core@7.24.7)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(supports-color@5.5.0) @@ -59009,14 +62644,14 @@ snapshots: transitivePeerDependencies: - '@babel/core' - styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1): + styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1): dependencies: '@babel/helper-module-imports': 7.27.1(supports-color@5.5.0) - '@babel/traverse': 7.28.3(supports-color@5.5.0) - '@emotion/is-prop-valid': 1.3.1 + '@babel/traverse': 7.28.4(supports-color@5.5.0) + '@emotion/is-prop-valid': 1.4.0 '@emotion/stylis': 0.8.5 '@emotion/unitless': 0.7.5 - babel-plugin-styled-components: 2.1.4(@babel/core@7.28.3)(styled-components@5.3.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(supports-color@5.5.0) + babel-plugin-styled-components: 2.1.4(@babel/core@7.28.4)(styled-components@5.3.11(@babel/core@7.28.4)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(supports-color@5.5.0) css-to-react-native: 3.2.0 hoist-non-react-statics: 3.3.2 react: 18.3.1 @@ -59043,31 +62678,31 @@ snapshots: stylehacks@5.1.1(postcss@8.4.47): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 postcss: 8.4.47 postcss-selector-parser: 6.1.2 stylehacks@6.1.1(postcss@8.4.31): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 postcss: 8.4.31 postcss-selector-parser: 6.1.2 stylehacks@6.1.1(postcss@8.4.32): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 postcss: 8.4.32 postcss-selector-parser: 6.1.2 stylehacks@6.1.1(postcss@8.4.47): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 postcss: 8.4.47 postcss-selector-parser: 6.1.2 stylehacks@6.1.1(postcss@8.5.6): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 postcss: 8.5.6 postcss-selector-parser: 6.1.2 @@ -59083,7 +62718,7 @@ snapshots: stylus@0.59.0: dependencies: '@adobe/css-tools': 4.4.4 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) glob: 7.2.3 sax: 1.2.4 source-map: 0.7.6 @@ -59093,7 +62728,7 @@ snapshots: stylus@0.62.0: dependencies: '@adobe/css-tools': 4.3.3 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) glob: 7.2.3 sax: 1.3.0 source-map: 0.7.6 @@ -59157,7 +62792,7 @@ snapshots: dependencies: '@ampproject/remapping': 2.3.0 '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 '@types/estree': 1.0.8 acorn: 8.15.0 aria-query: 5.3.2 @@ -59167,14 +62802,14 @@ snapshots: estree-walker: 3.0.3 is-reference: 3.0.3 locate-character: 3.0.0 - magic-string: 0.30.17 + magic-string: 0.30.19 periscopic: 3.1.0 svelte@4.2.19: dependencies: '@ampproject/remapping': 2.3.0 '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 '@types/estree': 1.0.8 acorn: 8.15.0 aria-query: 5.3.2 @@ -59184,7 +62819,7 @@ snapshots: estree-walker: 3.0.3 is-reference: 3.0.3 locate-character: 3.0.0 - magic-string: 0.30.17 + magic-string: 0.30.19 periscopic: 3.1.0 svg-parser@2.0.4: {} @@ -59241,7 +62876,7 @@ snapshots: systemjs@6.15.1: {} - tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)): + tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(typescript@5.5.3)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -59259,16 +62894,17 @@ snapshots: picocolors: 1.1.1 postcss: 8.4.47 postcss-import: 15.1.0(postcss@8.4.47) - postcss-js: 4.0.1(postcss@8.4.47) - postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)) + postcss-js: 4.1.0(postcss@8.4.47) + postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@18.19.39)(typescript@5.5.3)) postcss-nested: 6.2.0(postcss@8.4.47) postcss-selector-parser: 6.1.2 resolve: 1.22.10 sucrase: 3.35.0 transitivePeerDependencies: - ts-node + optional: true - tailwindcss@3.4.4(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)): + tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -59286,8 +62922,62 @@ snapshots: picocolors: 1.1.1 postcss: 8.4.47 postcss-import: 15.1.0(postcss@8.4.47) - postcss-js: 4.0.1(postcss@8.4.47) - postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2)) + postcss-js: 4.1.0(postcss@8.4.47) + postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)) + postcss-nested: 6.2.0(postcss@8.4.47) + postcss-selector-parser: 6.1.2 + resolve: 1.22.10 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + tailwindcss@3.4.4(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)): + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.3 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.7 + lilconfig: 2.1.0 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.4.47 + postcss-import: 15.1.0(postcss@8.4.47) + postcss-js: 4.1.0(postcss@8.4.47) + postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3)) + postcss-nested: 6.2.0(postcss@8.4.47) + postcss-selector-parser: 6.1.2 + resolve: 1.22.10 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + tailwindcss@3.4.4(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.6.2)): + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.3 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.7 + lilconfig: 2.1.0 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.4.47 + postcss-import: 15.1.0(postcss@8.4.47) + postcss-js: 4.1.0(postcss@8.4.47) + postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.6.2)) postcss-nested: 6.2.0(postcss@8.4.47) postcss-selector-parser: 6.1.2 resolve: 1.22.10 @@ -59299,9 +62989,9 @@ snapshots: tapable@2.2.1: {} - tapable@2.2.2: {} + tapable@2.2.3: {} - tar-fs@2.1.3: + tar-fs@2.1.4: dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 @@ -59347,11 +63037,11 @@ snapshots: terser-webpack-plugin@5.3.10(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19)): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - terser: 5.43.1 + terser: 5.44.0 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19) optionalDependencies: '@swc/core': 1.11.31(@swc/helpers@0.5.11) @@ -59359,23 +63049,23 @@ snapshots: terser-webpack-plugin@5.3.10(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.19)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - terser: 5.43.1 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + terser: 5.44.0 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) optionalDependencies: '@swc/core': 1.11.31(@swc/helpers@0.5.17) esbuild: 0.17.19 terser-webpack-plugin@5.3.10(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - terser: 5.43.1 + terser: 5.44.0 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19) optionalDependencies: '@swc/core': 1.11.31(@swc/helpers@0.5.3) @@ -59383,11 +63073,11 @@ snapshots: terser-webpack-plugin@5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19)): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 - terser: 5.43.1 + terser: 5.44.0 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19) optionalDependencies: '@swc/core': 1.11.31(@swc/helpers@0.5.11) @@ -59395,110 +63085,129 @@ snapshots: terser-webpack-plugin@5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.19)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 - terser: 5.43.1 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + terser: 5.44.0 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) optionalDependencies: '@swc/core': 1.11.31(@swc/helpers@0.5.17) esbuild: 0.17.19 - terser-webpack-plugin@5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)): + terser-webpack-plugin@5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 - terser: 5.43.1 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) + terser: 5.44.0 + webpack: 5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4) optionalDependencies: '@swc/core': 1.11.31(@swc/helpers@0.5.17) - esbuild: 0.23.0 + esbuild: 0.17.8 - terser-webpack-plugin@5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(webpack@5.101.0): + terser-webpack-plugin@5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 - terser: 5.43.1 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(webpack-cli@5.1.4) + terser: 5.44.0 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) optionalDependencies: '@swc/core': 1.11.31(@swc/helpers@0.5.17) esbuild: 0.23.0 - terser-webpack-plugin@5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)): + terser-webpack-plugin@5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(webpack@5.101.0): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 - terser: 5.43.1 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) + terser: 5.44.0 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(webpack-cli@5.1.4) optionalDependencies: '@swc/core': 1.11.31(@swc/helpers@0.5.17) - esbuild: 0.25.5 + esbuild: 0.23.0 - terser-webpack-plugin@5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): + terser-webpack-plugin@5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.10)(webpack@5.101.0): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 - terser: 5.43.1 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + terser: 5.44.0 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.10)(webpack-cli@5.1.4) optionalDependencies: '@swc/core': 1.11.31(@swc/helpers@0.5.17) - esbuild: 0.25.5 + esbuild: 0.25.10 - terser-webpack-plugin@5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.9)(webpack@5.101.0): + terser-webpack-plugin@5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 - terser: 5.43.1 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.9)(webpack-cli@5.1.4) + terser: 5.44.0 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) optionalDependencies: '@swc/core': 1.11.31(@swc/helpers@0.5.17) - esbuild: 0.25.9 + esbuild: 0.25.5 terser-webpack-plugin@5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack@5.101.0): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 - terser: 5.43.1 + terser: 5.44.0 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) optionalDependencies: '@swc/core': 1.11.31(@swc/helpers@0.5.17) terser-webpack-plugin@5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 - terser: 5.43.1 + terser: 5.44.0 webpack: 5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17)) optionalDependencies: '@swc/core': 1.11.31(@swc/helpers@0.5.17) terser-webpack-plugin@5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 - terser: 5.43.1 + terser: 5.44.0 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19) optionalDependencies: '@swc/core': 1.11.31(@swc/helpers@0.5.3) esbuild: 0.17.19 + terser-webpack-plugin@5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.3.2 + serialize-javascript: 6.0.2 + terser: 5.44.0 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5) + optionalDependencies: + '@swc/core': 1.11.31(@swc/helpers@0.5.3) + esbuild: 0.25.5 + + terser@5.16.3: + dependencies: + '@jridgewell/source-map': 0.3.11 + acorn: 8.15.0 + commander: 2.20.3 + source-map-support: 0.5.21 + terser@5.31.1: dependencies: '@jridgewell/source-map': 0.3.11 @@ -59513,7 +63222,7 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 - terser@5.43.1: + terser@5.44.0: dependencies: '@jridgewell/source-map': 0.3.11 acorn: 8.15.0 @@ -59559,7 +63268,7 @@ snapshots: loader-utils: 2.0.4 neo-async: 2.6.2 schema-utils: 3.3.0 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) thread-loader@4.0.2(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: @@ -59607,7 +63316,7 @@ snapshots: tinyexec@0.3.2: {} - tinyglobby@0.2.14: + tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 @@ -59626,6 +63335,10 @@ snapshots: dependencies: tldts-core: 6.1.86 + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + tmp@0.2.5: {} tmpl@1.0.5: {} @@ -59689,13 +63402,17 @@ snapshots: dependencies: punycode: 2.3.1 + tr46@4.1.1: + dependencies: + punycode: 2.3.1 + tr46@5.1.1: dependencies: punycode: 2.3.1 traverse-chain@0.1.0: {} - tree-dump@1.0.3(tslib@2.8.1): + tree-dump@1.1.0(tslib@2.8.1): dependencies: tslib: 2.8.1 @@ -59717,22 +63434,31 @@ snapshots: dependencies: typescript: 5.5.3 - ts-api-utils@1.4.3(typescript@5.6.2): + ts-checker-rspack-plugin@1.1.5(@rspack/core@1.4.11(@swc/helpers@0.5.17))(typescript@5.5.3): dependencies: - typescript: 5.6.2 + '@babel/code-frame': 7.27.1 + '@rspack/lite-tapable': 1.0.1 + chokidar: 3.6.0 + is-glob: 4.0.3 + memfs: 4.42.0 + minimatch: 9.0.5 + picocolors: 1.1.1 + typescript: 5.5.3 + optionalDependencies: + '@rspack/core': 1.4.11(@swc/helpers@0.5.17) - ts-checker-rspack-plugin@1.1.5(@rspack/core@1.4.11(@swc/helpers@0.5.17))(typescript@5.6.2): + ts-checker-rspack-plugin@1.1.5(@rspack/core@1.4.11(@swc/helpers@0.5.3))(typescript@5.5.3): dependencies: '@babel/code-frame': 7.27.1 '@rspack/lite-tapable': 1.0.1 chokidar: 3.6.0 is-glob: 4.0.3 - memfs: 4.36.0 + memfs: 4.42.0 minimatch: 9.0.5 picocolors: 1.1.1 - typescript: 5.6.2 + typescript: 5.5.3 optionalDependencies: - '@rspack/core': 1.4.11(@swc/helpers@0.5.17) + '@rspack/core': 1.4.11(@swc/helpers@0.5.3) ts-dedent@2.2.0: {} @@ -59780,7 +63506,7 @@ snapshots: micromatch: 4.0.8 semver: 7.6.3 typescript: 4.9.5 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) ts-loader@9.4.4(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: @@ -59789,34 +63515,35 @@ snapshots: micromatch: 4.0.8 semver: 7.6.3 typescript: 5.5.3 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) - ts-loader@9.4.4(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)): + ts-loader@9.4.4(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)): dependencies: chalk: 4.1.2 enhanced-resolve: 5.18.3 micromatch: 4.0.8 semver: 7.6.3 - typescript: 5.6.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) + typescript: 5.5.3 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19) - ts-loader@9.4.4(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): + ts-loader@9.4.4(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)): dependencies: chalk: 4.1.2 enhanced-resolve: 5.18.3 micromatch: 4.0.8 semver: 7.6.3 - typescript: 5.6.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + typescript: 5.5.3 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5) - ts-loader@9.4.4(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)): + ts-loader@9.5.1(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)): dependencies: chalk: 4.1.2 enhanced-resolve: 5.18.3 micromatch: 4.0.8 semver: 7.6.3 - typescript: 5.6.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19) + source-map: 0.7.6 + typescript: 5.5.3 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) ts-loader@9.5.1(typescript@5.5.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: @@ -59826,7 +63553,7 @@ snapshots: semver: 7.6.3 source-map: 0.7.6 typescript: 5.5.3 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) ts-loader@9.5.1(typescript@5.5.3)(webpack@5.101.0): dependencies: @@ -59838,16 +63565,6 @@ snapshots: typescript: 5.5.3 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) - ts-loader@9.5.1(typescript@5.6.2)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)): - dependencies: - chalk: 4.1.2 - enhanced-resolve: 5.18.3 - micromatch: 4.0.8 - semver: 7.6.3 - source-map: 0.7.6 - typescript: 5.6.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) - ts-loader@9.5.1(typescript@5.6.2)(webpack@5.101.0): dependencies: chalk: 4.1.2 @@ -59898,61 +63615,61 @@ snapshots: optionalDependencies: '@swc/core': 1.11.31(@swc/helpers@0.5.17) - ts-node@10.9.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.3.3): + ts-node@10.9.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.6.0)(typescript@5.2.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.16.5 + '@types/node': 20.6.0 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.3.3 + typescript: 5.2.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: '@swc/core': 1.11.31(@swc/helpers@0.5.17) - ts-node@10.9.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2): + ts-node@10.9.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.3.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.16.5 + '@types/node': 20.9.0 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.6.2 + typescript: 5.3.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: '@swc/core': 1.11.31(@swc/helpers@0.5.17) - ts-node@10.9.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.6.0)(typescript@5.2.2): + ts-node@10.9.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.6.0 + '@types/node': 20.9.0 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.2.2 + typescript: 5.5.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: @@ -60062,14 +63779,34 @@ snapshots: '@swc/core': 1.11.31(@swc/helpers@0.5.17) optional: true - ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.16.5)(typescript@5.6.2): + ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.5.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.16.5 + '@types/node': 20.9.0 + acorn: 8.15.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.5.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.11.31(@swc/helpers@0.5.17) + + ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.17))(@types/node@20.9.0)(typescript@5.6.2): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.9.0 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -60083,30 +63820,30 @@ snapshots: '@swc/core': 1.11.31(@swc/helpers@0.5.17) optional: true - ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.16.5)(typescript@5.6.2): + ts-node@10.9.2(@swc/core@1.11.31(@swc/helpers@0.5.3))(@types/node@20.9.0)(typescript@5.5.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.16.5 + '@types/node': 20.9.0 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.6.2 + typescript: 5.5.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: '@swc/core': 1.11.31(@swc/helpers@0.5.3) optional: true - ts-pnp@1.2.0(typescript@5.6.2): + ts-pnp@1.2.0(typescript@5.5.3): optionalDependencies: - typescript: 5.6.2 + typescript: 5.5.3 tsconfig-paths-webpack-plugin@4.0.0: dependencies: @@ -60124,7 +63861,7 @@ snapshots: dependencies: chalk: 4.1.2 enhanced-resolve: 5.18.3 - tapable: 2.2.2 + tapable: 2.2.3 tsconfig-paths: 4.2.0 tsconfig-paths@3.15.0: @@ -60142,57 +63879,47 @@ snapshots: tslib@1.14.1: {} - tslib@2.8.1: {} + tslib@2.5.0: {} - tsscmp@1.0.6: {} + tslib@2.8.1: {} - tsup@8.5.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(jiti@2.5.1)(postcss@8.4.47)(typescript@5.5.3)(yaml@2.8.1): + tslint@6.1.3(typescript@5.5.3): dependencies: - bundle-require: 5.1.0(esbuild@0.25.9) - cac: 6.7.14 - chokidar: 4.0.3 - consola: 3.4.2 - debug: 4.4.1(supports-color@8.1.1) - esbuild: 0.25.9 - fix-dts-default-cjs-exports: 1.0.1 - joycon: 3.1.1 - picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.5.1)(postcss@8.4.47)(yaml@2.8.1) - resolve-from: 5.0.0 - rollup: 4.46.2 - source-map: 0.8.0-beta.0 - sucrase: 3.35.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.14 - tree-kill: 1.2.2 - optionalDependencies: - '@swc/core': 1.11.31(@swc/helpers@0.5.17) - postcss: 8.4.47 + '@babel/code-frame': 7.27.1 + builtin-modules: 1.1.1 + chalk: 2.4.2 + commander: 2.20.3 + diff: 4.0.2 + glob: 7.2.3 + js-yaml: 3.14.1 + minimatch: 3.1.2 + mkdirp: 0.5.6 + resolve: 1.22.10 + semver: 5.7.2 + tslib: 1.14.1 + tsutils: 2.29.0(typescript@5.5.3) typescript: 5.5.3 - transitivePeerDependencies: - - jiti - - supports-color - - tsx - - yaml + + tsscmp@1.0.6: {} tsup@8.5.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(jiti@2.5.1)(postcss@8.5.6)(typescript@5.5.3)(yaml@2.8.1): dependencies: - bundle-require: 5.1.0(esbuild@0.25.9) + bundle-require: 5.1.0(esbuild@0.25.10) cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.2 - debug: 4.4.1(supports-color@8.1.1) - esbuild: 0.25.9 + debug: 4.4.3(supports-color@8.1.1) + esbuild: 0.25.10 fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 postcss-load-config: 6.0.1(jiti@2.5.1)(postcss@8.5.6)(yaml@2.8.1) resolve-from: 5.0.0 - rollup: 4.46.2 + rollup: 4.51.0 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tinyexec: 0.3.2 - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 tree-kill: 1.2.2 optionalDependencies: '@swc/core': 1.11.31(@swc/helpers@0.5.17) @@ -60204,6 +63931,11 @@ snapshots: - tsx - yaml + tsutils@2.29.0(typescript@5.5.3): + dependencies: + tslib: 1.14.1 + typescript: 5.5.3 + tsutils@3.21.0(typescript@4.9.5): dependencies: tslib: 1.14.1 @@ -60214,17 +63946,20 @@ snapshots: tslib: 1.14.1 typescript: 5.5.3 - tsutils@3.21.0(typescript@5.6.2): - dependencies: - tslib: 1.14.1 - typescript: 5.6.2 - tty-browserify@0.0.1: {} + tuf-js@1.1.7: + dependencies: + '@tufjs/models': 1.0.4 + debug: 4.4.3(supports-color@8.1.1) + make-fetch-happen: 11.1.1 + transitivePeerDependencies: + - supports-color + tuf-js@2.2.1: dependencies: '@tufjs/models': 2.0.1 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) make-fetch-happen: 13.0.1 transitivePeerDependencies: - supports-color @@ -60329,7 +64064,7 @@ snapshots: postcss-modules-local-by-default: 4.2.0(postcss@8.4.47) postcss-modules-scope: 3.2.1(postcss@8.4.47) reserved-words: 0.1.2 - sass: 1.90.0 + sass: 1.92.1 source-map-js: 1.2.1 stylus: 0.62.0 tsconfig-paths: 4.2.0 @@ -60348,6 +64083,8 @@ snapshots: typescript@5.6.2: {} + ua-parser-js@1.0.41: {} + ufo@1.6.1: {} uglify-js@3.19.3: {} @@ -60377,11 +64114,11 @@ snapshots: unicode-match-property-ecmascript@2.0.0: dependencies: unicode-canonical-property-names-ecmascript: 2.0.1 - unicode-property-aliases-ecmascript: 2.1.0 + unicode-property-aliases-ecmascript: 2.2.0 - unicode-match-property-value-ecmascript@2.2.0: {} + unicode-match-property-value-ecmascript@2.2.1: {} - unicode-property-aliases-ecmascript@2.1.0: {} + unicode-property-aliases-ecmascript@2.2.0: {} unicorn-magic@0.1.0: {} @@ -60408,10 +64145,18 @@ snapshots: dependencies: qs: 6.14.0 + unique-filename@2.0.1: + dependencies: + unique-slug: 3.0.0 + unique-filename@3.0.0: dependencies: unique-slug: 4.0.0 + unique-slug@3.0.0: + dependencies: + imurmurhash: 0.1.4 + unique-slug@4.0.0: dependencies: imurmurhash: 0.1.4 @@ -60519,6 +64264,12 @@ snapshots: upath@2.0.1: {} + update-browserslist-db@1.1.3(browserslist@4.21.5): + dependencies: + browserslist: 4.21.5 + escalade: 3.2.0 + picocolors: 1.1.1 + update-browserslist-db@1.1.3(browserslist@4.23.1): dependencies: browserslist: 4.23.1 @@ -60531,9 +64282,9 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - update-browserslist-db@1.1.3(browserslist@4.25.2): + update-browserslist-db@1.1.3(browserslist@4.26.2): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 escalade: 3.2.0 picocolors: 1.1.1 @@ -60559,7 +64310,7 @@ snapshots: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) optionalDependencies: file-loader: 6.2.0(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) @@ -60649,7 +64400,7 @@ snapshots: v8-to-istanbul@9.3.0: dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 @@ -60688,13 +64439,13 @@ snapshots: unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 - vite-node@1.6.0(@types/node@20.16.5)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1): + vite-node@1.6.0(@types/node@20.16.5)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0): dependencies: cac: 6.7.14 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) pathe: 1.1.2 picocolors: 1.1.1 - vite: 5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1) + vite: 5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0) transitivePeerDependencies: - '@types/node' - less @@ -60705,13 +64456,13 @@ snapshots: - supports-color - terser - vite-node@1.6.1(@types/node@20.16.5)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1): + vite-node@1.6.1(@types/node@20.16.5)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0): dependencies: cac: 6.7.14 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) pathe: 1.1.2 picocolors: 1.1.1 - vite: 5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1) + vite: 5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0) transitivePeerDependencies: - '@types/node' - less @@ -60722,20 +64473,20 @@ snapshots: - supports-color - terser - vite@5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1): + vite@5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0): dependencies: esbuild: 0.21.5 postcss: 8.4.47 - rollup: 4.46.2 + rollup: 4.51.0 optionalDependencies: '@types/node': 20.16.5 fsevents: 2.3.3 less: 4.2.0 - sass: 1.90.0 + sass: 1.92.1 stylus: 0.62.0 - terser: 5.43.1 + terser: 5.44.0 - vitest@1.6.0(@types/node@20.16.5)(jsdom@24.1.0)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1): + vitest@1.6.0(@types/node@20.16.5)(jsdom@24.1.0)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0): dependencies: '@vitest/expect': 1.6.0 '@vitest/runner': 1.6.0 @@ -60744,18 +64495,18 @@ snapshots: '@vitest/utils': 1.6.0 acorn-walk: 8.3.4 chai: 4.5.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) execa: 8.0.1 local-pkg: 0.5.1 - magic-string: 0.30.17 + magic-string: 0.30.19 pathe: 1.1.2 picocolors: 1.1.1 std-env: 3.9.0 strip-literal: 2.1.1 tinybench: 2.9.0 tinypool: 0.8.4 - vite: 5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1) - vite-node: 1.6.0(@types/node@20.16.5)(less@4.2.0)(sass@1.90.0)(stylus@0.62.0)(terser@5.43.1) + vite: 5.3.3(@types/node@20.16.5)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0) + vite-node: 1.6.0(@types/node@20.16.5)(less@4.2.0)(sass@1.92.1)(stylus@0.62.0)(terser@5.44.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.16.5 @@ -60775,7 +64526,7 @@ snapshots: vue-eslint-parser@9.4.3(eslint@9.6.0): dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 9.6.0 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 @@ -60856,7 +64607,7 @@ snapshots: - walrus - whiskers - vue-loader@15.11.1(@vue/compiler-sfc@3.5.18)(css-loader@6.11.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(ejs@3.1.10)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): + vue-loader@15.11.1(@vue/compiler-sfc@3.5.21)(css-loader@6.11.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(ejs@3.1.10)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.3.3)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1)(vue-template-compiler@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: '@vue/component-compiler-utils': 3.3.0(ejs@3.1.10)(handlebars@4.7.8)(lodash@4.17.21)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1) css-loader: 6.11.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) @@ -60864,9 +64615,9 @@ snapshots: loader-utils: 1.4.2 vue-hot-reload-api: 2.3.4 vue-style-loader: 4.1.3 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) optionalDependencies: - '@vue/compiler-sfc': 3.5.18 + '@vue/compiler-sfc': 3.5.21 prettier: 3.3.3 vue-template-compiler: 2.7.16 transitivePeerDependencies: @@ -60924,7 +64675,7 @@ snapshots: - walrus - whiskers - vue-loader@15.11.1(@vue/compiler-sfc@3.5.18)(css-loader@6.8.1(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))))(prettier@3.3.3)(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))): + vue-loader@15.11.1(@vue/compiler-sfc@3.5.21)(css-loader@6.8.1(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))))(prettier@3.3.3)(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: '@vue/component-compiler-utils': 3.3.0(ejs@3.1.10)(handlebars@4.7.8)(lodash@4.17.21)(pug@3.0.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(underscore@1.12.1) css-loader: 6.8.1(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) @@ -60934,7 +64685,7 @@ snapshots: vue-style-loader: 4.1.3 webpack: 5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17)) optionalDependencies: - '@vue/compiler-sfc': 3.5.18 + '@vue/compiler-sfc': 3.5.21 prettier: 3.3.3 transitivePeerDependencies: - arc-templates @@ -61001,24 +64752,24 @@ snapshots: '@vue/compiler-sfc': 3.4.31 vue: 3.4.31(typescript@5.6.2) - vue-loader@17.0.1(@vue/compiler-sfc@3.5.18)(vue@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): + vue-loader@17.0.1(@vue/compiler-sfc@3.5.21)(vue@2.7.16)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: chalk: 4.1.2 hash-sum: 2.0.0 loader-utils: 2.0.4 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) optionalDependencies: - '@vue/compiler-sfc': 3.5.18 + '@vue/compiler-sfc': 3.5.21 vue: 2.7.16 - vue-loader@17.0.1(@vue/compiler-sfc@3.5.18)(vue@3.4.31(typescript@5.5.3))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): + vue-loader@17.0.1(@vue/compiler-sfc@3.5.21)(vue@3.4.31(typescript@5.5.3))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: chalk: 4.1.2 hash-sum: 2.0.0 loader-utils: 2.0.4 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) optionalDependencies: - '@vue/compiler-sfc': 3.5.18 + '@vue/compiler-sfc': 3.5.21 vue: 3.4.31(typescript@5.5.3) vue-loader@17.0.1(vue@3.4.31(typescript@5.6.2))(webpack@5.101.0): @@ -61225,6 +64976,25 @@ snapshots: webpack-bundle-analyzer: 4.10.2 webpack-dev-server: 5.0.4(webpack-cli@5.1.4)(webpack@5.101.0) + webpack-cli@5.1.4(webpack-dev-server@4.11.1)(webpack@5.101.0): + dependencies: + '@discoveryjs/json-ext': 0.5.7 + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.101.0) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.101.0) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack-dev-server@4.11.1)(webpack@5.101.0) + colorette: 2.0.20 + commander: 10.0.1 + cross-spawn: 7.0.3 + envinfo: 7.14.0 + fastest-levenshtein: 1.0.16 + import-local: 3.2.0 + interpret: 3.1.1 + rechoir: 0.8.0 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) + webpack-merge: 5.10.0 + optionalDependencies: + webpack-dev-server: 4.11.1(webpack-cli@5.1.4)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + webpack-cli@5.1.4(webpack-dev-server@5.2.2)(webpack@5.101.0): dependencies: '@discoveryjs/json-ext': 0.5.7 @@ -61287,7 +65057,7 @@ snapshots: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.3.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) webpack-dev-middleware@5.3.4(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)): dependencies: @@ -61299,6 +65069,24 @@ snapshots: webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19) optional: true + webpack-dev-middleware@5.3.4(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)): + dependencies: + colorette: 2.0.20 + memfs: 3.5.3 + mime-types: 2.1.35 + range-parser: 1.2.1 + schema-utils: 4.3.2 + webpack: 5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4) + + webpack-dev-middleware@6.0.1(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)): + dependencies: + colorette: 2.0.20 + memfs: 3.5.3 + mime-types: 2.1.35 + range-parser: 1.2.1 + schema-utils: 4.3.2 + webpack: 5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4) + webpack-dev-middleware@6.1.1(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: colorette: 2.0.20 @@ -61319,11 +65107,11 @@ snapshots: optionalDependencies: webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) - webpack-dev-middleware@7.4.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)): + webpack-dev-middleware@7.4.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: colorette: 2.0.20 - memfs: 4.36.0 - mime-types: 2.1.35 + memfs: 4.42.0 + mime-types: 3.0.1 on-finished: 2.4.1 range-parser: 1.2.1 schema-utils: 4.3.2 @@ -61331,30 +65119,30 @@ snapshots: webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) optional: true - webpack-dev-middleware@7.4.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): + webpack-dev-middleware@7.4.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)): dependencies: colorette: 2.0.20 - memfs: 4.36.0 - mime-types: 2.1.35 + memfs: 4.42.0 + mime-types: 3.0.1 on-finished: 2.4.1 range-parser: 1.2.1 schema-utils: 4.3.2 optionalDependencies: - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5) optional: true - webpack-dev-middleware@7.4.2(webpack@5.101.0): + webpack-dev-middleware@7.4.3(webpack@5.101.0): dependencies: colorette: 2.0.20 - memfs: 4.36.0 - mime-types: 2.1.35 + memfs: 4.42.0 + mime-types: 3.0.1 on-finished: 2.4.1 range-parser: 1.2.1 schema-utils: 4.3.2 optionalDependencies: webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) - webpack-dev-server@4.15.2(debug@4.4.1)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): + webpack-dev-server@4.11.1(webpack-cli@5.1.4)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -61373,7 +65161,47 @@ snapshots: express: 4.19.2 graceful-fs: 4.2.11 html-entities: 2.6.0 - http-proxy-middleware: 2.0.9(@types/express@4.17.21)(debug@4.4.1) + http-proxy-middleware: 2.0.9(@types/express@4.17.21) + ipaddr.js: 2.2.0 + open: 8.4.2 + p-retry: 4.6.2 + rimraf: 3.0.2 + schema-utils: 4.3.2 + selfsigned: 2.4.1 + serve-index: 1.9.1 + sockjs: 0.3.24 + spdy: 4.0.2 + webpack: 5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4) + webpack-dev-middleware: 5.3.4(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + ws: 8.18.3 + optionalDependencies: + webpack-cli: 5.1.4(webpack-dev-server@4.11.1)(webpack@5.101.0) + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + + webpack-dev-server@4.15.2(debug@4.4.3)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): + dependencies: + '@types/bonjour': 3.5.13 + '@types/connect-history-api-fallback': 1.5.4 + '@types/express': 4.17.21 + '@types/serve-index': 1.9.4 + '@types/serve-static': 1.15.8 + '@types/sockjs': 0.3.36 + '@types/ws': 8.18.1 + ansi-html-community: 0.0.8 + bonjour-service: 1.3.0 + chokidar: 3.6.0 + colorette: 2.0.20 + compression: 1.8.1 + connect-history-api-fallback: 2.0.0 + default-gateway: 6.0.3 + express: 4.19.2 + graceful-fs: 4.2.11 + html-entities: 2.6.0 + http-proxy-middleware: 2.0.9(@types/express@4.17.21)(debug@4.4.3) ipaddr.js: 2.2.0 launch-editor: 2.11.1 open: 8.4.2 @@ -61387,7 +65215,7 @@ snapshots: webpack-dev-middleware: 5.3.4(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) ws: 8.18.3 optionalDependencies: - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) transitivePeerDependencies: - bufferutil - debug @@ -61508,7 +65336,7 @@ snapshots: webpack-dev-middleware: 5.3.4(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) ws: 8.18.3 optionalDependencies: - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) transitivePeerDependencies: - bufferutil - debug @@ -61586,7 +65414,7 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.2(webpack@5.101.0) + webpack-dev-middleware: 7.4.3(webpack@5.101.0) ws: 8.18.3 optionalDependencies: webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) @@ -61625,7 +65453,7 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.2(webpack@5.101.0) + webpack-dev-middleware: 7.4.3(webpack@5.101.0) ws: 8.18.3 optionalDependencies: webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) @@ -61636,7 +65464,7 @@ snapshots: - supports-color - utf-8-validate - webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)): + webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -61664,7 +65492,7 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) + webpack-dev-middleware: 7.4.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) ws: 8.18.3 optionalDependencies: webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) @@ -61675,7 +65503,7 @@ snapshots: - utf-8-validate optional: true - webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): + webpack-dev-server@5.2.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -61703,10 +65531,10 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.2(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + webpack-dev-middleware: 7.4.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) ws: 8.18.3 optionalDependencies: - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5) transitivePeerDependencies: - bufferutil - debug @@ -61731,7 +65559,7 @@ snapshots: webpack-livereload-plugin@3.0.2(webpack@5.101.0): dependencies: anymatch: 3.1.3 - portfinder: 1.0.37 + portfinder: 1.0.38 schema-utils: 4.3.2 tiny-lr: 1.1.1 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4) @@ -61740,14 +65568,14 @@ snapshots: webpack-manifest-plugin@4.1.1(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)): dependencies: - tapable: 2.2.2 + tapable: 2.2.3 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0) webpack-sources: 2.3.1 webpack-manifest-plugin@4.1.1(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: - tapable: 2.2.2 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + tapable: 2.2.3 + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) webpack-sources: 2.3.1 webpack-merge@5.10.0: @@ -61756,6 +65584,11 @@ snapshots: flat: 5.0.2 wildcard: 2.0.1 + webpack-merge@5.8.0: + dependencies: + clone-deep: 4.0.1 + wildcard: 2.0.1 + webpack-merge@6.0.1: dependencies: clone-deep: 4.0.1 @@ -61788,7 +65621,7 @@ snapshots: webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.5.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: typed-assert: 1.0.9 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) optionalDependencies: html-webpack-plugin: 5.5.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) @@ -61799,6 +65632,13 @@ snapshots: optionalDependencies: html-webpack-plugin: 5.5.3(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) + webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0))(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)): + dependencies: + typed-assert: 1.0.9 + webpack: 5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4) + optionalDependencies: + html-webpack-plugin: 5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0) + webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)): dependencies: typed-assert: 1.0.9 @@ -61806,19 +65646,19 @@ snapshots: optionalDependencies: html-webpack-plugin: 5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) - webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)): + webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): dependencies: typed-assert: 1.0.9 webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) optionalDependencies: - html-webpack-plugin: 5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) + html-webpack-plugin: 5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) - webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))): + webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.3))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)): dependencies: typed-assert: 1.0.9 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5) optionalDependencies: - html-webpack-plugin: 5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + html-webpack-plugin: 5.6.3(@rspack/core@1.4.11(@swc/helpers@0.5.3))(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) webpack-virtual-modules@0.4.6: {} @@ -61834,7 +65674,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 acorn-import-phases: 1.0.4(acorn@8.15.0) - browserslist: 4.25.2 + browserslist: 4.26.2 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 @@ -61847,7 +65687,7 @@ snapshots: mime-types: 2.1.35 neo-async: 2.6.2 schema-utils: 4.3.2 - tapable: 2.2.2 + tapable: 2.2.3 terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.11))(esbuild@0.17.19)) watchpack: 2.4.4 webpack-sources: 3.3.3 @@ -61856,7 +65696,7 @@ snapshots: - esbuild - uglify-js - webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)): + webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.19): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -61866,7 +65706,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 acorn-import-phases: 1.0.4(acorn@8.15.0) - browserslist: 4.25.2 + browserslist: 4.26.2 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 @@ -61879,8 +65719,8 @@ snapshots: mime-types: 2.1.35 neo-async: 2.6.2 schema-utils: 4.3.2 - tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + tapable: 2.2.3 + terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.19)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) watchpack: 2.4.4 webpack-sources: 3.3.3 transitivePeerDependencies: @@ -61888,7 +65728,7 @@ snapshots: - esbuild - uglify-js - webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.19): + webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -61898,7 +65738,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 acorn-import-phases: 1.0.4(acorn@8.15.0) - browserslist: 4.25.2 + browserslist: 4.26.2 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 @@ -61911,8 +65751,8 @@ snapshots: mime-types: 2.1.35 neo-async: 2.6.2 schema-utils: 4.3.2 - tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.19)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) + tapable: 2.2.3 + terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) watchpack: 2.4.4 webpack-sources: 3.3.3 transitivePeerDependencies: @@ -61920,7 +65760,7 @@ snapshots: - esbuild - uglify-js - webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0): + webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(webpack-cli@5.1.4): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -61930,7 +65770,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 acorn-import-phases: 1.0.4(acorn@8.15.0) - browserslist: 4.25.2 + browserslist: 4.26.2 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 @@ -61943,16 +65783,18 @@ snapshots: mime-types: 2.1.35 neo-async: 2.6.2 schema-utils: 4.3.2 - tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)) + tapable: 2.2.3 + terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(webpack@5.101.0) watchpack: 2.4.4 webpack-sources: 3.3.3 + optionalDependencies: + webpack-cli: 5.1.4(webpack@5.101.0) transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(webpack-cli@5.1.4): + webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.10)(webpack-cli@5.1.4): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -61962,7 +65804,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 acorn-import-phases: 1.0.4(acorn@8.15.0) - browserslist: 4.25.2 + browserslist: 4.26.2 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 @@ -61975,12 +65817,12 @@ snapshots: mime-types: 2.1.35 neo-async: 2.6.2 schema-utils: 4.3.2 - tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.23.0)(webpack@5.101.0) + tapable: 2.2.3 + terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.10)(webpack@5.101.0) watchpack: 2.4.4 webpack-sources: 3.3.3 optionalDependencies: - webpack-cli: 5.1.4(webpack@5.101.0) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.101.0) transitivePeerDependencies: - '@swc/core' - esbuild @@ -61996,7 +65838,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 acorn-import-phases: 1.0.4(acorn@8.15.0) - browserslist: 4.25.2 + browserslist: 4.26.2 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 @@ -62009,8 +65851,8 @@ snapshots: mime-types: 2.1.35 neo-async: 2.6.2 schema-utils: 4.3.2 - tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)) + tapable: 2.2.3 + terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))) watchpack: 2.4.4 webpack-sources: 3.3.3 transitivePeerDependencies: @@ -62018,7 +65860,7 @@ snapshots: - esbuild - uglify-js - webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.9)(webpack-cli@5.1.4): + webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -62028,7 +65870,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 acorn-import-phases: 1.0.4(acorn@8.15.0) - browserslist: 4.25.2 + browserslist: 4.26.2 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 @@ -62041,18 +65883,18 @@ snapshots: mime-types: 2.1.35 neo-async: 2.6.2 schema-utils: 4.3.2 - tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.9)(webpack@5.101.0) + tapable: 2.2.3 + terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack@5.101.0) watchpack: 2.4.4 webpack-sources: 3.3.3 optionalDependencies: - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.101.0) + webpack-cli: 5.1.4(webpack-dev-server@4.11.1)(webpack@5.101.0) transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack-cli@5.1.4): + webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -62062,7 +65904,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 acorn-import-phases: 1.0.4(acorn@8.15.0) - browserslist: 4.25.2 + browserslist: 4.26.2 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 @@ -62075,18 +65917,16 @@ snapshots: mime-types: 2.1.35 neo-async: 2.6.2 schema-utils: 4.3.2 - tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack@5.101.0) + tapable: 2.2.3 + terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) watchpack: 2.4.4 webpack-sources: 3.3.3 - optionalDependencies: - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.101.0) transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19): + webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -62096,7 +65936,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 acorn-import-phases: 1.0.4(acorn@8.15.0) - browserslist: 4.25.2 + browserslist: 4.26.2 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 @@ -62109,8 +65949,8 @@ snapshots: mime-types: 2.1.35 neo-async: 2.6.2 schema-utils: 4.3.2 - tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.17.19)) + tapable: 2.2.3 + terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)(webpack@5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.3))(esbuild@0.25.5)) watchpack: 2.4.4 webpack-sources: 3.3.3 transitivePeerDependencies: @@ -62118,6 +65958,39 @@ snapshots: - esbuild - uglify-js + webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 0.0.51 + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/wasm-edit': 1.11.1 + '@webassemblyjs/wasm-parser': 1.11.1 + acorn: 8.15.0 + acorn-import-assertions: 1.9.0(acorn@8.15.0) + browserslist: 4.26.2 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.18.3 + es-module-lexer: 0.9.3 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.3 + terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack@5.76.1(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.17.8)(webpack-cli@5.1.4)) + watchpack: 2.4.4 + webpack-sources: 3.3.3 + optionalDependencies: + webpack-cli: 5.1.4(webpack-dev-server@4.11.1)(webpack@5.101.0) + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17)): dependencies: '@types/eslint-scope': 3.7.7 @@ -62127,7 +66000,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 acorn-import-assertions: 1.9.0(acorn@8.15.0) - browserslist: 4.25.2 + browserslist: 4.26.2 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 @@ -62140,7 +66013,7 @@ snapshots: mime-types: 2.1.35 neo-async: 2.6.2 schema-utils: 3.3.0 - tapable: 2.2.2 + tapable: 2.2.3 terser-webpack-plugin: 5.3.14(@swc/core@1.11.31(@swc/helpers@0.5.17))(webpack@5.88.2(@swc/core@1.11.31(@swc/helpers@0.5.17))) watchpack: 2.4.4 webpack-sources: 3.3.3 @@ -62190,6 +66063,11 @@ snapshots: tr46: 3.0.0 webidl-conversions: 7.0.0 + whatwg-url@12.0.1: + dependencies: + tr46: 4.1.1 + webidl-conversions: 7.0.0 + whatwg-url@14.2.0: dependencies: tr46: 5.1.1 @@ -62327,8 +66205,8 @@ snapshots: with@7.0.2: dependencies: - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 assert-never: 1.4.0 babel-walk: 3.0.0-canary-5 @@ -62352,7 +66230,7 @@ snapshots: '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) '@babel/core': 7.24.7 '@babel/preset-env': 7.24.7(@babel/core@7.24.7) - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 '@rollup/plugin-babel': 5.3.1(@babel/core@7.24.7)(@types/babel__core@7.20.5)(rollup@2.79.2) '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.2) '@rollup/plugin-replace': 2.4.2(rollup@2.79.2) @@ -62463,7 +66341,7 @@ snapshots: fast-json-stable-stringify: 2.1.0 pretty-bytes: 5.6.0 upath: 1.2.0 - webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17)) + webpack: 5.101.0(@swc/core@1.11.31(@swc/helpers@0.5.17))(esbuild@0.25.5) webpack-sources: 1.4.3 workbox-build: 6.6.0(@types/babel__core@7.20.5) transitivePeerDependencies: @@ -62508,15 +66386,15 @@ snapshots: wrap-ansi@8.1.0: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 string-width: 5.1.2 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 - wrap-ansi@9.0.0: + wrap-ansi@9.0.2: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 string-width: 7.2.0 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 wrappy@1.0.2: {} @@ -62588,6 +66466,8 @@ snapshots: xdg-basedir@3.0.0: {} + xhr2@0.2.1: {} + xml-name-validator@3.0.0: {} xml-name-validator@4.0.0: {} @@ -62596,6 +66476,8 @@ snapshots: xmlchars@2.2.0: {} + xmlhttprequest-ssl@2.1.2: {} + xtend@4.0.2: {} y18n@4.0.3: {} @@ -62655,6 +66537,26 @@ snapshots: y18n: 5.0.8 yargs-parser: 20.2.9 + yargs@17.1.1: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + + yargs@17.6.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + yargs@17.7.2: dependencies: cliui: 8.0.1 @@ -62701,4 +66603,6 @@ snapshots: zod@3.25.76: {} + zone.js@0.14.10: {} + zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 335d6af1093..40ab92a6571 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -8,6 +8,8 @@ packages: - "advanced-api/dynamic-remotes-synchronous-imports/*" - "advanced-api/dynamic-remotes-synchronous-imports" - "angular-universal-ssr" + - "angular-universal-ssr/client-app" + - "angular-universal-ssr/host-app" - "angular11-microfrontends-ngrx" - "angular11-microfrontends-ngxs" - "angular12-microfrontends" diff --git a/quasar-cli-vue3-webpack-javascript/cypress.env.json b/quasar-cli-vue3-webpack-javascript/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/quasar-cli-vue3-webpack-javascript/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/quasar-cli-vue3-webpack-javascript/e2e/CheckAppExposes.cy.ts b/quasar-cli-vue3-webpack-javascript/e2e/CheckAppExposes.cy.ts deleted file mode 100644 index 541e7e54913..00000000000 --- a/quasar-cli-vue3-webpack-javascript/e2e/CheckAppExposes.cy.ts +++ /dev/null @@ -1,179 +0,0 @@ -import { BaseMethods } from '../../cypress-e2e/common/base'; -import { baseSelectors } from '../../cypress-e2e/common/selectors'; -import { selectors } from '../../cypress-e2e/common/selectors'; -import { Constants } from '../../cypress-e2e/fixtures/constants'; -const basePage: BaseMethods = new BaseMethods(); - -const appsData = [ - { - appName: Constants.elementsText.quasarCliApp.appExposes.appName, - appBanner: Constants.elementsText.quasarCliApp.appExposes.banner, - appExposesComponentsButton: Constants.elementsText.quasarCliApp.appExposes.componentsButton, - clickMeButton: Constants.elementsText.quasarCliApp.appButtonClickMeButton, - appListDiv: Constants.elementsText.quasarCliApp.appListDiv, - host: 3001, - }, - { - appName: Constants.elementsText.quasarCliApp.appGeneral.name, - appBanner: Constants.elementsText.quasarCliApp.appGeneral.banner, - appExposesComponentsButton: Constants.elementsText.quasarCliApp.appExposes.componentsButton, - clickMeButton: Constants.elementsText.quasarCliApp.appButtonClickMeButton, - appListDiv: Constants.elementsText.quasarCliApp.appListDiv, - host: 3002, - }, -]; - -appsData.forEach( - (property: { - appName: string; - appBanner: string; - appExposesComponentsButton: string; - clickMeButton: string; - appListDiv: string; - host: number; - }) => { - describe(`Quasar CLI Vue3 Webpack JS`, () => { - context(`Check App Exposes and App General starts and running`, () => { - const listNames = Constants.elementsText.quasarCliApp.names; - - beforeEach(() => { - basePage.openLocalhost({ - number: property.host, - }); - }); - it(`Check ${property.appName} elements`, () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: property.appName, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h4, - text: property.appBanner, - }); - basePage.clickElementBySelector({ - selector: baseSelectors.tags.coreElements.button, - }); - basePage.checkElementVisibility({ - selector: property.appExposesComponentsButton, - isVisible: false, - }); - basePage.clickElementBySelector({ - selector: baseSelectors.tags.coreElements.button, - }); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.link, - text: property.appExposesComponentsButton, - }); - if (property.host === 3002) { - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.link, - text: Constants.elementsText.quasarCliApp.appGeneral.routeButton, - isForce: true, - }); - basePage.checkUrlText(property.host.toString(), true); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.link, - text: property.appExposesComponentsButton, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h5, - text: Constants.elementsText.quasarCliApp.appGeneral.subheader1, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h5, - text: Constants.elementsText.quasarCliApp.appGeneral.subheader2, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.elementsText.quasarCliApp.appGeneral.counter, - }); - } - if (property.host === 3001) { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.commonConstantsData.button, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.elementsText.quasarCliApp.appExposes.list, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.elementsText.quasarCliApp.appButtonDiv, - }); - } - }); - - it(`Check counters in ${property.appName} app`, () => { - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.link, - text: property.appExposesComponentsButton, - }); - basePage.checkElementWithTextPresence({ - selector: selectors.quasarCliVue3WebPackJavaScriptApp.apps.exposes.counter, - text: Constants.commonConstantsData.commonIndexes.zero.toString(), - }); - if (property.host === 3002) { - basePage.checkElementWithTextPresence({ - selector: selectors.quasarCliVue3WebPackJavaScriptApp.apps.general.counter, - text: Constants.commonConstantsData.commonIndexes.zero.toString(), - }); - } - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: property.clickMeButton, - }); - basePage.checkElementWithTextPresence({ - selector: selectors.quasarCliVue3WebPackJavaScriptApp.apps.exposes.counter, - text: Constants.commonConstantsData.commonIndexes.one.toString(), - }); - if (property.host === 3002) { - basePage.checkElementWithTextPresence({ - selector: selectors.quasarCliVue3WebPackJavaScriptApp.apps.general.counter, - text: Constants.commonConstantsData.commonIndexes.one.toString(), - }); - } - basePage.reloadWindow(); - basePage.checkElementWithTextPresence({ - selector: selectors.quasarCliVue3WebPackJavaScriptApp.apps.exposes.counter, - text: Constants.commonConstantsData.commonIndexes.one.toString(), - }); - if (property.host === 3002) { - basePage.checkElementWithTextPresence({ - selector: selectors.quasarCliVue3WebPackJavaScriptApp.apps.general.counter, - text: Constants.commonConstantsData.commonIndexes.zero.toString(), - }); - } - }); - - it(`Check list of elements in ${property.appName} app`, () => { - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.link, - text: property.appExposesComponentsButton, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: property.appListDiv, - }); - listNames.forEach(element => { - basePage.checkElementQuantity({ - selector: selectors.quasarCliVue3WebPackJavaScriptApp.apps.exposes.names, - quantity: element.index, - }); - basePage.clickElementBySelector({ - selector: selectors.quasarCliVue3WebPackJavaScriptApp.apps.exposes.closeButton, - }); - }); - if (property.host === 3002) { - listNames.forEach(element => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: String(element.name), - }); - }); - } - }); - }); - }); - }, -); diff --git a/quasar-cli-vue3-webpack-javascript/e2e/CheckAppExposes.spec.ts b/quasar-cli-vue3-webpack-javascript/e2e/CheckAppExposes.spec.ts new file mode 100644 index 00000000000..c99b0f0e708 --- /dev/null +++ b/quasar-cli-vue3-webpack-javascript/e2e/CheckAppExposes.spec.ts @@ -0,0 +1,202 @@ +import { test } from '../../playwright-e2e/common/testFixtures'; + +import { BaseMethods } from '../../playwright-e2e/common/base'; +import { baseSelectors, selectors } from '../../cypress-e2e/common/selectors'; +import { Constants } from '../../cypress-e2e/fixtures/constants'; + +interface AppData { + appName: string; + appBanner: string; + appExposesComponentsButton: string; + clickMeButton: string; + appListDiv: string; + host: number; +} + +const appsData: AppData[] = [ + { + appName: Constants.elementsText.quasarCliApp.appExposes.appName, + appBanner: Constants.elementsText.quasarCliApp.appExposes.banner, + appExposesComponentsButton: Constants.elementsText.quasarCliApp.appExposes.componentsButton, + clickMeButton: Constants.elementsText.quasarCliApp.appButtonClickMeButton, + appListDiv: Constants.elementsText.quasarCliApp.appListDiv, + host: 3001, + }, + { + appName: Constants.elementsText.quasarCliApp.appGeneral.name, + appBanner: Constants.elementsText.quasarCliApp.appGeneral.banner, + appExposesComponentsButton: Constants.elementsText.quasarCliApp.appExposes.componentsButton, + clickMeButton: Constants.elementsText.quasarCliApp.appButtonClickMeButton, + appListDiv: Constants.elementsText.quasarCliApp.appListDiv, + host: 3002, + }, +]; + +const listNames = Constants.elementsText.quasarCliApp.names; + +async function openComponentsSection(basePage: BaseMethods): Promise { + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.link, + text: Constants.elementsText.quasarCliApp.appExposes.componentsButton, + }); +} + +appsData.forEach(property => { + test.describe(`Quasar CLI Vue3 Webpack JS - ${property.appName}`, () => { + let basePage: BaseMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: property.host }); + }); + + test(`Check ${property.appName} elements`, async ({ page }) => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: property.appName, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h4, + text: property.appBanner, + visibilityState: 'be.visible', + }); + + await page.locator(baseSelectors.tags.coreElements.button).first().click(); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.link, + text: property.appExposesComponentsButton, + isVisible: false, + }); + + await page.locator(baseSelectors.tags.coreElements.button).first().click(); + await openComponentsSection(basePage); + + if (property.host === 3002) { + await page + .locator(baseSelectors.tags.coreElements.link) + .filter({ hasText: Constants.elementsText.quasarCliApp.appGeneral.routeButton }) + .first() + .click({ force: true }); + + await basePage.checkUrlText(property.host.toString(), true); + + await openComponentsSection(basePage); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h5, + text: Constants.elementsText.quasarCliApp.appGeneral.subheader1, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h5, + text: Constants.elementsText.quasarCliApp.appGeneral.subheader2, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: Constants.elementsText.quasarCliApp.appGeneral.counter, + visibilityState: 'be.visible', + }); + } + + if (property.host === 3001) { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: Constants.commonConstantsData.button, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: Constants.elementsText.quasarCliApp.appExposes.list, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: Constants.elementsText.quasarCliApp.appButtonDiv, + visibilityState: 'be.visible', + }); + } + }); + + test(`Check counters in ${property.appName} app`, async () => { + await openComponentsSection(basePage); + + await basePage.checkElementWithTextPresence({ + selector: selectors.quasarCliVue3WebPackJavaScriptApp.apps.exposes.counter, + text: Constants.commonConstantsData.commonIndexes.zero.toString(), + visibilityState: 'be.visible', + }); + + if (property.host === 3002) { + await basePage.checkElementWithTextPresence({ + selector: selectors.quasarCliVue3WebPackJavaScriptApp.apps.general.counter, + text: Constants.commonConstantsData.commonIndexes.zero.toString(), + visibilityState: 'be.visible', + }); + } + + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: property.clickMeButton, + }); + + await basePage.checkElementWithTextPresence({ + selector: selectors.quasarCliVue3WebPackJavaScriptApp.apps.exposes.counter, + text: Constants.commonConstantsData.commonIndexes.one.toString(), + visibilityState: 'be.visible', + }); + + if (property.host === 3002) { + await basePage.checkElementWithTextPresence({ + selector: selectors.quasarCliVue3WebPackJavaScriptApp.apps.general.counter, + text: Constants.commonConstantsData.commonIndexes.one.toString(), + visibilityState: 'be.visible', + }); + } + + await basePage.reloadWindow(); + await basePage.checkElementWithTextPresence({ + selector: selectors.quasarCliVue3WebPackJavaScriptApp.apps.exposes.counter, + text: Constants.commonConstantsData.commonIndexes.one.toString(), + visibilityState: 'be.visible', + }); + + if (property.host === 3002) { + await basePage.checkElementWithTextPresence({ + selector: selectors.quasarCliVue3WebPackJavaScriptApp.apps.general.counter, + text: Constants.commonConstantsData.commonIndexes.zero.toString(), + visibilityState: 'be.visible', + }); + } + }); + + test(`Check list of elements in ${property.appName} app`, async ({ page }) => { + await openComponentsSection(basePage); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: property.appListDiv, + visibilityState: 'be.visible', + }); + + for (const element of listNames) { + await basePage.checkElementQuantity({ + selector: selectors.quasarCliVue3WebPackJavaScriptApp.apps.exposes.names, + quantity: element.index, + }); + await page.locator(selectors.quasarCliVue3WebPackJavaScriptApp.apps.exposes.closeButton).first().click(); + } + + if (property.host === 3002) { + for (const element of listNames) { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: String(element.name), + visibilityState: 'be.visible', + }); + } + } + }); + }); +}); diff --git a/quasar-cli-vue3-webpack-javascript/package.json b/quasar-cli-vue3-webpack-javascript/package.json index b74ea6cd776..bf0e3148cd8 100644 --- a/quasar-cli-vue3-webpack-javascript/package.json +++ b/quasar-cli-vue3-webpack-javascript/package.json @@ -1,4 +1,18 @@ { - "name": "quasar", - "description": "Quasar Framework Example" + "name": "quasar-cli-vue3-webpack-javascript", + "private": true, + "version": "0.0.0", + "description": "Quasar Framework Example", + "scripts": { + "start": "concurrently --kill-others-on-fail \"pnpm --dir app-exposes exec -- env BROWSER=none quasar dev\" \"pnpm --dir app-general exec -- env BROWSER=none quasar dev\"", + "test:e2e": "pnpm exec playwright test", + "test:e2e:ui": "pnpm exec playwright test --ui", + "test:e2e:debug": "pnpm exec playwright test --debug", + "e2e:ci": "pnpm exec playwright install --with-deps && pnpm exec playwright test --reporter=list" + }, + "devDependencies": { + "@playwright/test": "^1.54.2", + "concurrently": "8.2.2", + "playwright": "^1.54.2" + } } diff --git a/quasar-cli-vue3-webpack-javascript/playwright.config.ts b/quasar-cli-vue3-webpack-javascript/playwright.config.ts new file mode 100644 index 00000000000..c4fac33345d --- /dev/null +++ b/quasar-cli-vue3-webpack-javascript/playwright.config.ts @@ -0,0 +1,22 @@ +import { defineConfig } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e', + timeout: 180_000, + expect: { + timeout: 10_000, + }, + retries: process.env.CI ? 1 : 0, + workers: 1, + reporter: 'list', + use: { + baseURL: 'http://localhost:3001', + trace: 'on-first-retry', + }, + webServer: { + command: 'pnpm run start', + url: 'http://localhost:3001', + timeout: 300_000, + reuseExistingServer: !process.env.CI, + }, +}); diff --git a/react-18-code-splitting/cypress.env.json b/react-18-code-splitting/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/react-18-code-splitting/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/react-18-code-splitting/e2e/checkReact18CodeSplittingApp.cy.ts b/react-18-code-splitting/e2e/checkReact18CodeSplittingApp.cy.ts deleted file mode 100644 index 6b448509f55..00000000000 --- a/react-18-code-splitting/e2e/checkReact18CodeSplittingApp.cy.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { Constants } from '../../cypress-e2e/fixtures/constants'; -import { baseSelectors, selectors } from '../../cypress-e2e/common/selectors'; -import { BaseMethods } from '../../cypress-e2e/common/base'; - -const basePage: BaseMethods = new BaseMethods(); - -const appsData = [ - { - appName: Constants.elementsText.react18CodeSplittingApp.app1.appName, - appHeader2: Constants.elementsText.reactApps.app1.subHeader, - host: 3000, - }, - { - appName: Constants.elementsText.react18CodeSplittingApp.app2.appName, - appHeader2: Constants.elementsText.reactApps.app2.subHeader, - host: 3001, - }, -]; - -appsData.forEach(function (property: { appName: string; appHeader2: string; host: number }) { - describe('React 18 Code Splitting', () => { - context(`Check ${property.appName}`, () => { - it('Check App headers and buttons visability', () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: Constants.elementsText.react18CodeSplittingApp.header, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: `${property.appHeader2}`, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h3, - text: Constants.elementsText.reactApps.header3, - visibilityState: 'be.visible', - }); - basePage.checkElementVisibility({ - selector: baseSelectors.tags.inputs.input, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.react18CodeSplittingApp.button, - visibilityState: 'be.visible', - }); - }); - - it('Check that App 2 Content Block with filled text appear', () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.fillField({ - selector: baseSelectors.tags.inputs.input, - text: Constants.commonConstantsData.standardPhrase, - }); - basePage.clickElementBySelector({ - selector: baseSelectors.tags.coreElements.button, - }); - basePage.checkElementWithTextPresence({ - selector: `${selectors.reactApp.app2ContentBlock} ${baseSelectors.tags.headers.h2}`, - text: Constants.elementsText.reactApps.splitedApp.header, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: `${selectors.reactApp.app2ContentBlock} ${baseSelectors.tags.paragraph}`, - text: Constants.elementsText.reactApps.splitedApp.subHeader, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.strong, - text: Constants.commonConstantsData.standardPhrase, - visibilityState: 'be.visible', - }); - }); - }); - }); -}); diff --git a/react-18-code-splitting/e2e/checkReact18CodeSplittingApp.spec.ts b/react-18-code-splitting/e2e/checkReact18CodeSplittingApp.spec.ts new file mode 100644 index 00000000000..84a7f3c0253 --- /dev/null +++ b/react-18-code-splitting/e2e/checkReact18CodeSplittingApp.spec.ts @@ -0,0 +1,55 @@ +import { test, expect } from '@playwright/test'; +import { Constants } from '../../cypress-e2e/fixtures/constants'; +import { baseSelectors, selectors } from '../../cypress-e2e/common/selectors'; + +const appsData = [ + { + appName: Constants.elementsText.react18CodeSplittingApp.app1.appName, + appHeader2: Constants.elementsText.reactApps.app1.subHeader, + host: 3000, + }, + { + appName: Constants.elementsText.react18CodeSplittingApp.app2.appName, + appHeader2: Constants.elementsText.reactApps.app2.subHeader, + host: 3001, + }, +]; + +for (const { appName, appHeader2, host } of appsData) { + test.describe(`React 18 Code Splitting - ${appName}`, () => { + test(`renders static content for ${appName}`, async ({ page }) => { + await page.goto(`http://localhost:${host}/`); + + await expect(page.locator(baseSelectors.tags.headers.h1)).toHaveText( + Constants.elementsText.react18CodeSplittingApp.header, + ); + await expect(page.locator(baseSelectors.tags.headers.h2)).toHaveText(appHeader2); + await expect(page.locator(baseSelectors.tags.headers.h3)).toHaveText( + Constants.elementsText.reactApps.header3, + ); + await expect(page.locator(baseSelectors.tags.inputs.input)).toBeVisible(); + await expect( + page.getByRole('button', { name: Constants.elementsText.react18CodeSplittingApp.button }), + ).toBeVisible(); + }); + + test(`loads remote content for ${appName}`, async ({ page }) => { + await page.goto(`http://localhost:${host}/`); + + const input = page.locator(baseSelectors.tags.inputs.input).first(); + await input.fill(Constants.commonConstantsData.standardPhrase); + await page.getByRole('button', { name: Constants.elementsText.react18CodeSplittingApp.button }).click(); + + const contentBlock = page.locator(selectors.reactApp.app2ContentBlock); + await expect(contentBlock.locator(baseSelectors.tags.headers.h2)).toHaveText( + Constants.elementsText.reactApps.splitedApp.header, + ); + await expect(contentBlock.locator(baseSelectors.tags.paragraph)).toHaveText( + Constants.elementsText.reactApps.splitedApp.subHeader, + ); + await expect(page.locator(baseSelectors.tags.strong)).toHaveText( + Constants.commonConstantsData.standardPhrase, + ); + }); + }); +} diff --git a/react-18-code-splitting/package.json b/react-18-code-splitting/package.json index e0998a0938d..9233a904ee4 100644 --- a/react-18-code-splitting/package.json +++ b/react-18-code-splitting/package.json @@ -8,9 +8,9 @@ "build": "pnpm run --filter react-18-code-splitting_* build", "serve": "pnpm run --filter react-18-code-splitting_* --parallel serve", "clean": "pnpm run --filter react-18-code-splitting_* --parallel clean", - "e2e:ci": "pnpm start & sleep 1 && wait-on tcp:3000 && wait-on tcp:3001 && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome" + "e2e:ci": "pnpm exec playwright test" }, "devDependencies": { - "wait-on": "7.2.0" + "@playwright/test": "^1.54.2" } } diff --git a/react-18-code-splitting/playwright.config.ts b/react-18-code-splitting/playwright.config.ts new file mode 100644 index 00000000000..420ddb73fcc --- /dev/null +++ b/react-18-code-splitting/playwright.config.ts @@ -0,0 +1,37 @@ +import { defineConfig, devices } from '@playwright/test'; + +const isCI = !!process.env.CI; + +export default defineConfig({ + testDir: './e2e', + timeout: 60 * 1000, + expect: { + timeout: 5_000, + }, + fullyParallel: true, + retries: isCI ? 2 : 0, + reporter: isCI ? 'dot' : 'list', + use: { + trace: 'retain-on-failure', + }, + webServer: [ + { + command: 'pnpm run --filter react-18-code-splitting_app1 start', + port: 3000, + reuseExistingServer: !isCI, + timeout: 120 * 1000, + }, + { + command: 'pnpm run --filter react-18-code-splitting_app2 start', + port: 3001, + reuseExistingServer: !isCI, + timeout: 120 * 1000, + }, + ], + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], +}); diff --git a/react-18-server-2-server/cypress.env.json b/react-18-server-2-server/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/react-18-server-2-server/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/react-18-server-2-server/e2e/checkReact18Server2ServerApps.cy.ts b/react-18-server-2-server/e2e/checkReact18Server2ServerApps.cy.ts deleted file mode 100644 index 68502362091..00000000000 --- a/react-18-server-2-server/e2e/checkReact18Server2ServerApps.cy.ts +++ /dev/null @@ -1,124 +0,0 @@ -import { Constants } from '../../cypress-e2e/fixtures/constants'; -import { baseSelectors, selectors } from '../../cypress-e2e/common/selectors'; -import { BaseMethods } from '../../cypress-e2e/common/base'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('React 18 Server 2 Server', () => { - context('Check App1', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3000, - }); - }); - it('Check App headers and buttons visability', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: Constants.elementsText.reactApps.header, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: Constants.elementsText.reactApps.app1.subHeader, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h3, - text: Constants.elementsText.reactApps.header3, - visibilityState: 'be.visible', - }); - basePage.checkElementVisibility({ - selector: baseSelectors.tags.inputs.input, - }); - basePage.checkElementWithTextPresence({ - selector: selectors.react18Server2Server.idField, - text: Constants.elementsText.reactApps.idField, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: selectors.react18Server2Server.NameField, - text: Constants.elementsText.reactApps.nameField, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: selectors.react18Server2Server.CompanyField, - text: Constants.elementsText.reactApps.companyfield, - visibilityState: 'be.visible', - }); - }); - - it('Check that App 2 Content Block with filled text appear', () => { - basePage.fillField({ - selector: baseSelectors.tags.inputs.input, - text: Constants.commonConstantsData.standardPhrase, - }); - basePage.checkElementWithTextPresence({ - selector: `${selectors.reactApp.app2ContentBlock} ${baseSelectors.tags.headers.h2}`, - text: Constants.elementsText.reactApps.splitedApp.header, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: `${selectors.reactApp.app2ContentBlock} ${baseSelectors.tags.paragraph}`, - text: Constants.elementsText.reactApps.splitedApp.subHeader, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.strong, - text: Constants.commonConstantsData.standardPhrase, - visibilityState: 'be.visible', - }); - }); - }); -}); - -describe('React 18 Server 2 Server', () => { - context('Check App2', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3001, - }); - }); - - it('Check App elements visability', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: Constants.elementsText.reactApps.header, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: Constants.elementsText.reactApps.app2.subHeader, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h3, - text: Constants.elementsText.reactApps.header3, - visibilityState: 'be.visible', - }); - basePage.checkElementVisibility({ - selector: baseSelectors.tags.inputs.input, - }); - }); - it('Check that App 2 Content Block with filled text appear', () => { - basePage.fillField({ - selector: baseSelectors.tags.inputs.input, - text: Constants.commonConstantsData.standardPhrase, - }); - basePage.checkElementWithTextPresence({ - selector: `${selectors.reactApp.app2ContentBlock} ${baseSelectors.tags.headers.h2}`, - text: Constants.elementsText.reactApps.splitedApp.header, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: `${selectors.reactApp.app2ContentBlock} ${baseSelectors.tags.paragraph}`, - text: Constants.elementsText.reactApps.splitedApp.subHeader, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.strong, - text: Constants.commonConstantsData.standardPhrase, - visibilityState: 'be.visible', - }); - }); - }); -}); diff --git a/react-18-server-2-server/e2e/checkReact18Server2ServerApps.spec.ts b/react-18-server-2-server/e2e/checkReact18Server2ServerApps.spec.ts new file mode 100644 index 00000000000..627b027f12b --- /dev/null +++ b/react-18-server-2-server/e2e/checkReact18Server2ServerApps.spec.ts @@ -0,0 +1,103 @@ +import { test, expect } from '@playwright/test'; +import { Constants } from '../../cypress-e2e/fixtures/constants'; +import { baseSelectors, selectors } from '../../cypress-e2e/common/selectors'; + +const APP1_PORT = 3000; +const APP2_PORT = 3001; +const STANDARD_PHRASE = Constants.commonConstantsData.standardPhrase; + +const getAppUrl = (port: number) => `http://localhost:${port}/`; + +test.describe('React 18 Server 2 Server - App1', () => { + test.beforeEach(async ({ page }) => { + await page.goto(getAppUrl(APP1_PORT)); + }); + + test('renders initial content', async ({ page }) => { + await expect( + page.getByRole('heading', { level: 1, name: Constants.elementsText.reactApps.header }), + ).toBeVisible(); + + await expect( + page.getByRole('heading', { level: 2, name: Constants.elementsText.reactApps.app1.subHeader }), + ).toBeVisible(); + + await expect( + page.getByRole('heading', { level: 3, name: Constants.elementsText.reactApps.header3 }), + ).toBeVisible(); + + await expect(page.locator(baseSelectors.tags.inputs.input)).toBeVisible(); + + await expect(page.locator(selectors.react18Server2Server.idField)).toContainText( + Constants.elementsText.reactApps.idField, + ); + await expect(page.locator(selectors.react18Server2Server.NameField)).toContainText( + Constants.elementsText.reactApps.nameField, + ); + await expect(page.locator(selectors.react18Server2Server.CompanyField)).toContainText( + Constants.elementsText.reactApps.companyfield, + ); + }); + + test('renders remote content when typing', async ({ page }) => { + const input = page.locator(baseSelectors.tags.inputs.input).first(); + await input.fill(STANDARD_PHRASE); + + const contentBlock = page.locator(selectors.reactApp.app2ContentBlock); + + await expect( + contentBlock.getByRole('heading', { + level: 2, + name: Constants.elementsText.reactApps.splitedApp.header, + }), + ).toBeVisible(); + + await expect(contentBlock.locator(baseSelectors.tags.paragraph).first()).toHaveText( + Constants.elementsText.reactApps.splitedApp.subHeader, + ); + + await expect(contentBlock.locator(baseSelectors.tags.strong)).toHaveText(STANDARD_PHRASE); + }); +}); + +test.describe('React 18 Server 2 Server - App2', () => { + test.beforeEach(async ({ page }) => { + await page.goto(getAppUrl(APP2_PORT)); + }); + + test('renders initial content', async ({ page }) => { + await expect( + page.getByRole('heading', { level: 1, name: Constants.elementsText.reactApps.header }), + ).toBeVisible(); + + await expect( + page.getByRole('heading', { level: 2, name: Constants.elementsText.reactApps.app2.subHeader }), + ).toBeVisible(); + + await expect( + page.getByRole('heading', { level: 3, name: Constants.elementsText.reactApps.header3 }), + ).toBeVisible(); + + await expect(page.locator(baseSelectors.tags.inputs.input)).toBeVisible(); + }); + + test('renders remote content when typing', async ({ page }) => { + const input = page.locator(baseSelectors.tags.inputs.input).first(); + await input.fill(STANDARD_PHRASE); + + const contentBlock = page.locator(selectors.reactApp.app2ContentBlock); + + await expect( + contentBlock.getByRole('heading', { + level: 2, + name: Constants.elementsText.reactApps.splitedApp.header, + }), + ).toBeVisible(); + + await expect(contentBlock.locator(baseSelectors.tags.paragraph).first()).toHaveText( + Constants.elementsText.reactApps.splitedApp.subHeader, + ); + + await expect(contentBlock.locator(baseSelectors.tags.strong)).toHaveText(STANDARD_PHRASE); + }); +}); diff --git a/react-18-server-2-server/package.json b/react-18-server-2-server/package.json index 5572af05ce2..16b82daf5a8 100644 --- a/react-18-server-2-server/package.json +++ b/react-18-server-2-server/package.json @@ -8,9 +8,9 @@ "build": "pnpm run --filter react-18-server-2-server_* build", "serve": "pnpm run --filter react-18-server-2-server_* --parallel serve", "clean": "pnpm run --filter react-18-server-2-server_* --parallel clean", - "e2e:ci:legacy": "pnpm start & wait-on http-get://localhost:3000/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome" + "e2e:ci": "pnpm exec playwright test" }, - "dependencies": { - "wait-on": "^7.2.0" + "devDependencies": { + "@playwright/test": "^1.54.2" } } diff --git a/react-18-server-2-server/playwright.config.ts b/react-18-server-2-server/playwright.config.ts new file mode 100644 index 00000000000..7cf24c3842c --- /dev/null +++ b/react-18-server-2-server/playwright.config.ts @@ -0,0 +1,37 @@ +import { defineConfig, devices } from '@playwright/test'; + +const isCI = !!process.env.CI; + +export default defineConfig({ + testDir: './e2e', + timeout: 60 * 1000, + expect: { + timeout: 5_000, + }, + fullyParallel: true, + retries: isCI ? 2 : 0, + reporter: isCI ? 'dot' : 'list', + use: { + trace: 'retain-on-failure', + }, + webServer: [ + { + command: 'pnpm run --filter react-18-server-2-server_app1 start', + port: 3000, + reuseExistingServer: !isCI, + timeout: 120 * 1000, + }, + { + command: 'pnpm run --filter react-18-server-2-server_app2 start', + port: 3001, + reuseExistingServer: !isCI, + timeout: 120 * 1000, + }, + ], + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], +}); diff --git a/react-in-vue/cypress.env.json b/react-in-vue/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/react-in-vue/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/react-in-vue/e2e/checkReactInVueApps.cy.ts b/react-in-vue/e2e/checkReactInVueApps.cy.ts deleted file mode 100644 index fd1de765153..00000000000 --- a/react-in-vue/e2e/checkReactInVueApps.cy.ts +++ /dev/null @@ -1,135 +0,0 @@ -import { Constants } from '../../cypress-e2e/fixtures/constants'; -import { baseSelectors, commonSelectors } from '../../cypress-e2e/common/selectors'; -import { BaseMethods } from '../../cypress-e2e/common/base'; - -const basePage: BaseMethods = new BaseMethods(); - -const appsData = [ - { - header: Constants.elementsText.reactInVueApp.App1.header, - subHeader: Constants.elementsText.reactInVueApp.App1.subHeader, - checkboxName: Constants.elementsText.reactInVueApp.App1.checkBoxText, - buttonTextInput: Constants.elementsText.reactInVueApp.App1.buttonInputText, - counterText: Constants.elementsText.reactInVueApp.App1.counterText, - buttonHeader: Constants.elementsText.reactInVueApp.App1.buttonHeader, - buttonText: Constants.elementsText.reactInVueApp.App1.buttonText, - host: 3001, - }, - { - header: Constants.commonConstantsData.basicComponents.basicHostRemote, - subHeader: Constants.commonConstantsData.home, - buttonText: Constants.elementsText.reactInVueApp.App2.buttonText, - host: 3002, - }, -]; - -appsData.forEach( - (property: { - header: string; - subHeader: string; - checkboxName?: string; - buttonTextInput?: string; - counterText?: string; - buttonHeader?: string; - buttonText: string; - host: number; - }) => { - describe('React in Vue', () => { - context('Check React in Vue Apps', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: property.host, - }); - }); - - it('Check app build and running & Check apps elements exist', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: property.header, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: property.subHeader, - }); - if (property.host === 3001) { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.spans.span, - text: String(property.checkboxName), - }); - basePage.checkElementVisibility({ - selector: baseSelectors.css.checkbox, - }); - basePage.checkElementState({ - selector: baseSelectors.css.checkbox, - state: 'be.checked', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.spans.span, - text: String(property.buttonTextInput), - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.spans.span, - text: String(property.counterText), - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: String(property.buttonHeader), - }); - } - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: property.buttonText, - }); - }); - - it('Check button visibility after clicking on checkbox', () => { - basePage.skipTestByCondition(property.host === 3002); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: property.buttonText, - }); - basePage.clickElementBySelector({ - selector: baseSelectors.css.checkbox, - }); - basePage.checkElementVisibility({ - selector: baseSelectors.tags.coreElements.button, - isVisible: false, - }); - }); - - it('Check change button name', () => { - basePage.skipTestByCondition(property.host === 3002); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: property.buttonText, - }); - basePage.fillField({ - selector: commonSelectors.formField.replace('{fieldName}', 'BUTTON_TEXT'), - text: Constants.elementsText.reactInVueApp.App1.updatedButtonText, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.reactInVueApp.App1.updatedButtonText, - }); - }); - - it('Check counter value after cliking on button', () => { - basePage.skipTestByCondition(property.host === 3002); - basePage.checkElementContainText({ - selector: commonSelectors.formField.replace('{fieldName}', 'COUNTER'), - text: 0, - checkType: 'have.value', - }); - basePage.clickElementBySelector({ - selector: baseSelectors.tags.coreElements.button, - }); - basePage.checkElementContainText({ - selector: commonSelectors.formField.replace('{fieldName}', 'COUNTER'), - text: 1, - checkType: 'have.value', - }); - }); - }); - }); - }, -); diff --git a/react-in-vue/e2e/checkReactInVueApps.spec.ts b/react-in-vue/e2e/checkReactInVueApps.spec.ts new file mode 100644 index 00000000000..2e63715caa9 --- /dev/null +++ b/react-in-vue/e2e/checkReactInVueApps.spec.ts @@ -0,0 +1,134 @@ +import { expect, test } from '@playwright/test'; +import { Constants } from '../../cypress-e2e/fixtures/constants'; +import { baseSelectors, commonSelectors } from '../../playwright-e2e/common/selectors'; +import { BasePage } from '../../playwright-e2e/common/basePage'; + +interface ReactInVueAppConfig { + header: string; + subHeader: string; + buttonText: string; + port: number; + checkboxLabel?: string; + buttonTextLabel?: string; + counterLabel?: string; + buttonHeader?: string; +} + +const reactButtonText = Constants.elementsText.reactInVueApp.App1.buttonText; +const updatedReactButtonText = Constants.elementsText.reactInVueApp.App1.updatedButtonText; + +const appsUnderTest: ReactInVueAppConfig[] = [ + { + header: Constants.elementsText.reactInVueApp.App1.header, + subHeader: Constants.elementsText.reactInVueApp.App1.subHeader, + checkboxLabel: Constants.elementsText.reactInVueApp.App1.checkBoxText, + buttonTextLabel: Constants.elementsText.reactInVueApp.App1.buttonInputText, + counterLabel: Constants.elementsText.reactInVueApp.App1.counterText, + buttonHeader: Constants.elementsText.reactInVueApp.App1.buttonHeader, + buttonText: reactButtonText, + port: 3001, + }, + { + header: Constants.commonConstantsData.basicComponents.basicHostRemote, + subHeader: Constants.commonConstantsData.home, + buttonText: Constants.elementsText.reactInVueApp.App2.buttonText, + port: 3002, + }, +]; + +const buildFieldSelector = (fieldName: string): string => + commonSelectors.formField.replace('{fieldName}', fieldName); + +const checkboxSelector = baseSelectors.css.checkbox; + +const assertAppHeadings = async (page: BasePage, config: ReactInVueAppConfig): Promise => { + await page.expectElementWithTextPresence({ + selector: baseSelectors.tags.headers.h1, + text: config.header, + }); + + await page.expectElementWithTextPresence({ + selector: baseSelectors.tags.headers.h2, + text: config.subHeader, + }); +}; + +test.describe('React in Vue', () => { + for (const app of appsUnderTest) { + const isPrimaryApp = app.port === 3001; + + test.describe(`app running on port ${app.port}`, () => { + test.beforeEach(async ({ page }) => { + const basePage = new BasePage(page); + await basePage.openLocalhost({ port: app.port }); + }); + + test('renders the expected layout', async ({ page }) => { + const basePage = new BasePage(page); + await assertAppHeadings(basePage, app); + + if (isPrimaryApp) { + await basePage.expectElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.spans.span, + text: app.checkboxLabel!, + }); + + const checkbox = page.locator(checkboxSelector); + await expect(checkbox).toBeVisible(); + await expect(checkbox).toBeChecked(); + + await basePage.expectElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.spans.span, + text: app.buttonTextLabel!, + }); + + await basePage.expectElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.spans.span, + text: app.counterLabel!, + }); + + await basePage.expectElementWithTextPresence({ + selector: baseSelectors.tags.headers.h2, + text: app.buttonHeader!, + }); + } + + await expect(page.getByRole('button', { name: app.buttonText })).toBeVisible(); + }); + + test('hides the button when the checkbox is unchecked', async ({ page }) => { + test.skip(!isPrimaryApp, 'Secondary app does not render the checkbox controlled button'); + + const button = page.getByRole('button', { name: reactButtonText }); + await expect(button).toBeVisible(); + + const checkbox = page.locator(checkboxSelector); + await checkbox.click(); + + await expect(button).toBeHidden(); + }); + + test('updates the button label from the form field', async ({ page }) => { + test.skip(!isPrimaryApp, 'Secondary app does not expose the form field'); + + await expect(page.getByRole('button', { name: reactButtonText })).toBeVisible(); + + const buttonTextField = page.locator(buildFieldSelector('BUTTON_TEXT')); + await buttonTextField.fill(updatedReactButtonText); + + await expect(page.getByRole('button', { name: updatedReactButtonText })).toBeVisible(); + }); + + test('increments the counter after clicking the button', async ({ page }) => { + test.skip(!isPrimaryApp, 'Secondary app does not expose the counter'); + + const counterField = page.locator(buildFieldSelector('COUNTER')); + await expect(counterField).toHaveValue('0'); + + await page.getByRole('button', { name: reactButtonText }).click(); + + await expect(counterField).toHaveValue('1'); + }); + }); + } +}); diff --git a/react-in-vue/package.json b/react-in-vue/package.json index ece81b1cbaf..bf024cea188 100644 --- a/react-in-vue/package.json +++ b/react-in-vue/package.json @@ -8,10 +8,12 @@ "build": "pnpm run --filter react-in-vue_* build", "serve": "pnpm run --filter react-in-vue_* --parallel serve", "clean": "pnpm run --filter react-in-vue_* --parallel clean", - "e2e:ci": "pnpm start & wait-on http-get://localhost:3002/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome" + "e2e:ci": "playwright test --reporter=list", + "e2e": "playwright test" }, "devDependencies": { "@babel/preset-react": "7.24.7", - "wait-on": "7.2.0" + "wait-on": "7.2.0", + "@playwright/test": "^1.54.2" } } diff --git a/react-in-vue/playwright.config.ts b/react-in-vue/playwright.config.ts new file mode 100644 index 00000000000..ffb0892e3d9 --- /dev/null +++ b/react-in-vue/playwright.config.ts @@ -0,0 +1,48 @@ +import { defineConfig, devices } from '@playwright/test'; + +const reuseExistingServer = !process.env.CI; + +export default defineConfig({ + testDir: './e2e', + timeout: 120_000, + expect: { + timeout: 10_000, + }, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 1 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1280, height: 720 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + command: 'pnpm --filter react-in-vue_layout start', + cwd: __dirname, + port: 3001, + reuseExistingServer, + timeout: 120_000, + }, + { + command: 'pnpm --filter react-in-vue_home start', + cwd: __dirname, + port: 3002, + reuseExistingServer, + timeout: 120_000, + }, + ], +}); diff --git a/react-livereload/cypress.env.json b/react-livereload/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/react-livereload/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/react-livereload/e2e/checkHostApp.cy.ts b/react-livereload/e2e/checkHostApp.cy.ts deleted file mode 100644 index 3c48746d34b..00000000000 --- a/react-livereload/e2e/checkHostApp.cy.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { BaseMethods } from '../../cypress-e2e/common/base'; -import { baseSelectors } from '../../cypress-e2e/common/selectors'; -import { Constants } from '../../cypress-e2e/fixtures/constants'; -import { CssAttr } from '../../cypress-e2e/types/cssAttr'; - -const basePage: BaseMethods = new BaseMethods(); - -const hostData = [ - { - linkName: Constants.commonConstantsData.home, - pageContent: '', - link: Constants.commonConstantsData.commonLinks.baseLink, - }, - { - linkName: Constants.commonConstantsData.button, - pageContent: Constants.elementsText.reactHmrApp.host.button, - link: Constants.hrefs.reactHmrApp.button, - }, - { - linkName: Constants.hrefs.reactHmrApp.heading.name, - pageContent: Constants.elementsText.reactHmrApp.host.heading, - link: Constants.hrefs.reactHmrApp.heading.link, - }, -]; - -describe('React HMR', () => { - context('Check host app', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3000, - }); - }); - - it('Check the content of the Home page exists', () => { - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.elementsText.reactHmrApp.host.headerText1, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.elementsText.reactHmrApp.host.headerText2, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.link, - text: Constants.commonConstantsData.home, - link: Constants.commonConstantsData.commonLinks.baseLink, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.link, - text: Constants.commonConstantsData.button, - link: Constants.hrefs.reactHmrApp.button, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.link, - text: Constants.hrefs.reactHmrApp.heading.name, - link: Constants.hrefs.reactHmrApp.heading.link, - }); - basePage.checkElementHaveProperty({ - selector: baseSelectors.ids.root, - text: Constants.elementsText.reactHmrApp.host.headerText1, - prop: CssAttr.backgroundColor, - value: Constants.color.greenyellow, - isParent: true, - }); - }); - - hostData.forEach((property: { linkName: string; pageContent: string; link: string }) => { - const appName = - property.linkName === 'Home' - ? hostData[0].linkName - : property.linkName === 'Button' - ? hostData[1].linkName - : hostData[2].linkName; - - it(`Check the ${appName} navigation link works`, () => { - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.link, - text: property.linkName, - }); - - basePage.checkUrlText(property.link, true); - basePage.checkElementContainText({ - selector: baseSelectors.ids.root, - text: property.pageContent, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.elementsText.reactHmrApp.host.headerText1, - index: 1, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.elementsText.reactHmrApp.host.headerText2, - index: 2, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.link, - text: Constants.commonConstantsData.home, - link: Constants.commonConstantsData.commonLinks.baseLink, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.link, - text: Constants.commonConstantsData.button, - link: Constants.hrefs.reactHmrApp.button, - }); - basePage.checkElementContainText({ - selector: baseSelectors.tags.coreElements.link, - text: Constants.hrefs.reactHmrApp.heading.name, - link: Constants.hrefs.reactHmrApp.heading.link, - }); - basePage.checkElementHaveProperty({ - selector: baseSelectors.ids.root, - text: Constants.elementsText.reactHmrApp.host.headerText1, - prop: CssAttr.backgroundColor, - value: Constants.color.greenyellow, - isParent: true, - }); - }); - }); - }); -}); diff --git a/react-livereload/e2e/checkHostApp.spec.ts b/react-livereload/e2e/checkHostApp.spec.ts new file mode 100644 index 00000000000..678524ceff3 --- /dev/null +++ b/react-livereload/e2e/checkHostApp.spec.ts @@ -0,0 +1,75 @@ +import { expect, test } from '@playwright/test'; +import { BasePage } from '../../playwright-e2e/common/basePage'; +import { baseSelectors } from '../../playwright-e2e/common/selectors'; +import { Constants } from '../../playwright-e2e/fixtures/constants'; + +const HOST_PORT = 3000; + +const navigationTargets = [ + { + name: Constants.commonConstantsData.home, + path: Constants.commonConstantsData.commonLinks.baseLink, + expectedContent: undefined, + }, + { + name: Constants.commonConstantsData.button, + path: Constants.hrefs.reactHmrApp.button, + expectedContent: Constants.elementsText.reactHmrApp.host.button, + }, + { + name: Constants.hrefs.reactHmrApp.heading.name, + path: Constants.hrefs.reactHmrApp.heading.link, + expectedContent: Constants.elementsText.reactHmrApp.host.heading, + }, +]; + +test.describe('React HMR - Host App', () => { + test.beforeEach(async ({ page }) => { + const basePage = new BasePage(page); + await basePage.openLocalhost({ port: HOST_PORT }); + }); + + test('renders the home page structure', async ({ page }) => { + await expect( + page.getByRole('heading', { level: 1, name: Constants.elementsText.reactHmrApp.host.headerText1 }), + ).toBeVisible(); + + const banner = page + .locator('div') + .filter({ + has: page.getByRole('heading', { level: 1, name: Constants.elementsText.reactHmrApp.host.headerText1 }), + }) + .first(); + + await expect(banner).toContainText(Constants.elementsText.reactHmrApp.host.headerText2); + await expect(banner).toHaveCSS('background-color', 'rgb(173, 255, 47)'); + + for (const { name, path } of navigationTargets) { + const link = page.getByRole('link', { name }); + await expect(link).toBeVisible(); + await expect(link).toHaveAttribute('href', path); + } + }); + + for (const { name, path, expectedContent } of navigationTargets) { + test(`navigates to ${name} section`, async ({ page }) => { + await page.getByRole('link', { name }).click(); + + await expect(page).toHaveURL(`http://localhost:${HOST_PORT}${path}`); + + await expect( + page.getByRole('heading', { level: 1, name: Constants.elementsText.reactHmrApp.host.headerText1 }), + ).toBeVisible(); + await expect(page.getByText(Constants.elementsText.reactHmrApp.host.headerText2)).toBeVisible(); + + for (const target of navigationTargets) { + await expect(page.getByRole('link', { name: target.name })).toBeVisible(); + } + + if (expectedContent) { + await expect(page.locator(baseSelectors.ids.root)).toContainText(expectedContent); + } + }); + } +}); + diff --git a/react-livereload/e2e/checkRemoteApp.cy.ts b/react-livereload/e2e/checkRemoteApp.cy.ts deleted file mode 100644 index bfb6bea4be1..00000000000 --- a/react-livereload/e2e/checkRemoteApp.cy.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { BaseMethods } from '../../cypress-e2e/common/base'; -import { baseSelectors } from '../../cypress-e2e/common/selectors'; -import { Constants } from '../../cypress-e2e/fixtures/constants'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('React HMR', () => { - // TODO cy.exec don't build the apps correctly cause lerna executes without exit code. Uncomment after fix this issue! - // before(() => { - // basePage.buildTheSample(Constants.samplesPath.react-livereload) - // }) - - // after(() => { - // basePage.shutdownTheSample(Constants.samplesPath.react-livereload) - // }) - context('Check remote app', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3001, - }); - }); - - it('Check the content of the page exists', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.reactHmrApp.remote.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.tags.headers.h1, - text: Constants.elementsText.reactHmrApp.remote.text + 0, - }); - }); - - it('Check the button works', () => { - for (let i = 1; i < 3; i++) { - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.reactHmrApp.remote.button, - }); - - basePage.checkElementContainText({ - selector: baseSelectors.tags.headers.h1, - text: Constants.elementsText.reactHmrApp.remote.text + i, - }); - } - }); - }); -}); diff --git a/react-livereload/e2e/checkRemoteApp.spec.ts b/react-livereload/e2e/checkRemoteApp.spec.ts new file mode 100644 index 00000000000..d4f8d64725a --- /dev/null +++ b/react-livereload/e2e/checkRemoteApp.spec.ts @@ -0,0 +1,29 @@ +import { expect, test } from '@playwright/test'; +import { BasePage } from '../../playwright-e2e/common/basePage'; +import { Constants } from '../../playwright-e2e/fixtures/constants'; + +const REMOTE_PORT = 3001; +const COUNTER_PREFIX = Constants.elementsText.reactHmrApp.remote.text; +const BUTTON_LABEL = Constants.elementsText.reactHmrApp.remote.button; + +test.describe('React HMR - Remote App', () => { + test.beforeEach(async ({ page }) => { + const basePage = new BasePage(page); + await basePage.openLocalhost({ port: REMOTE_PORT }); + }); + + test('renders the default state', async ({ page }) => { + await expect(page.getByRole('button', { name: BUTTON_LABEL })).toBeVisible(); + await expect(page.getByRole('heading', { level: 1 })).toHaveText(`${COUNTER_PREFIX}0`); + }); + + test('increments the counter when button is clicked', async ({ page }) => { + const incrementButton = page.getByRole('button', { name: BUTTON_LABEL }); + + for (let count = 1; count <= 2; count += 1) { + await incrementButton.click(); + await expect(page.getByRole('heading', { level: 1 })).toHaveText(`${COUNTER_PREFIX}${count}`); + } + }); +}); + diff --git a/react-livereload/e2e/runAll.cy.ts b/react-livereload/e2e/runAll.cy.ts deleted file mode 100644 index 8bb02e73c3a..00000000000 --- a/react-livereload/e2e/runAll.cy.ts +++ /dev/null @@ -1,2 +0,0 @@ -import './checkHostApp.cy'; -import './checkRemoteApp.cy'; diff --git a/react-livereload/e2e/runAll.spec.ts b/react-livereload/e2e/runAll.spec.ts new file mode 100644 index 00000000000..de6ef9001dc --- /dev/null +++ b/react-livereload/e2e/runAll.spec.ts @@ -0,0 +1,4 @@ +import './checkHostApp.spec'; +import './checkRemoteApp.spec'; + +// This file mirrors the previous Cypress entry point so suites can still be executed via a single spec. diff --git a/react-livereload/package.json b/react-livereload/package.json index e9d8c571164..5b722d00824 100644 --- a/react-livereload/package.json +++ b/react-livereload/package.json @@ -9,9 +9,11 @@ "license": "MIT", "scripts": { "start": "pnpm --filter react-hmr* --parallel run start", - "e2e:ci": "pnpm start & wait-on http-get://localhost:3000/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/runAll.cy.ts\" --browser=chrome" + "e2e": "playwright test", + "e2e:ci": "playwright test --reporter=list" }, "devDependencies": { + "@playwright/test": "^1.54.2", "concurrently": "8.2.2", "wait-on": "7.2.0" } diff --git a/react-livereload/playwright.config.ts b/react-livereload/playwright.config.ts new file mode 100644 index 00000000000..97c7423ffb5 --- /dev/null +++ b/react-livereload/playwright.config.ts @@ -0,0 +1,56 @@ +import { defineConfig, devices } from '@playwright/test'; + +const reuseExistingServer = !process.env.CI; + +export default defineConfig({ + testDir: './e2e', + timeout: 120_000, + expect: { + timeout: 10_000, + }, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 1 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost:3000', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1280, height: 720 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + command: 'pnpm --filter react-hmr_libs start', + cwd: __dirname, + port: 3002, + reuseExistingServer, + timeout: 120_000, + }, + { + command: 'pnpm --filter react-hmr_remote1 start', + cwd: __dirname, + port: 3001, + reuseExistingServer, + timeout: 120_000, + }, + { + command: 'pnpm --filter react-hmr_host start', + cwd: __dirname, + port: 3000, + reuseExistingServer, + timeout: 120_000, + }, + ], +}); + diff --git a/react-nextjs/nextjs-host-react-remote/cypress.env.json b/react-nextjs/nextjs-host-react-remote/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/react-nextjs/nextjs-host-react-remote/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/react-nextjs/nextjs-host-react-remote/e2e/tests/commonChecks.cy.ts b/react-nextjs/nextjs-host-react-remote/e2e/tests/commonChecks.cy.ts deleted file mode 100644 index 755b86d3b7f..00000000000 --- a/react-nextjs/nextjs-host-react-remote/e2e/tests/commonChecks.cy.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { BaseMethods } from '../../../../cypress-e2e/common/base'; -import { baseSelectors } from '../../../../cypress-e2e/common/selectors'; -import { CommonTestData } from '../../../../cypress-e2e/fixtures/commonTestData'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('It checks elements visibility', () => { - CommonTestData.commonNextJsAppsData.forEach( - (property: { messageType: string; selector: string; message: string; linkText?: string }) => { - it(`Checks ${property.messageType} message visibility`, () => { - basePage.openLocalhost({ - number: 8080, - }); - basePage.checkElementWithTextPresence({ - selector: property.selector, - text: property.message, - visibilityState: 'be.visible', - }); - }); - - it(`Checks ${property.messageType} message includes texted link`, () => { - basePage.skipTestByCondition(!property.linkText); - basePage.openLocalhost({ - number: 8080, - }); - basePage.checkElementWithTextPresence({ - parentSelector: property.selector, - selector: baseSelectors.tags.coreElements.link, - text: property.linkText, - visibilityState: 'be.visible', - }); - }); - }, - ); -}); diff --git a/react-nextjs/nextjs-host-react-remote/e2e/tests/commonChecks.spec.ts b/react-nextjs/nextjs-host-react-remote/e2e/tests/commonChecks.spec.ts new file mode 100644 index 00000000000..0d6c50142a3 --- /dev/null +++ b/react-nextjs/nextjs-host-react-remote/e2e/tests/commonChecks.spec.ts @@ -0,0 +1,26 @@ +import { test, expect } from '@playwright/test'; +import { baseSelectors } from '../../../../cypress-e2e/common/selectors'; +import { CommonTestData } from '../../../../cypress-e2e/fixtures/commonTestData'; + +const HOST_BASE_URL = 'http://localhost:8080/'; + +test.describe('Common content rendering', () => { + for (const property of CommonTestData.commonNextJsAppsData) { + test(`renders ${property.messageType} message`, async ({ page }) => { + await page.goto(HOST_BASE_URL); + const target = page.locator(property.selector).filter({ hasText: property.message }); + await expect(target).toBeVisible(); + }); + + if (property.linkText) { + test(`renders ${property.messageType} message link`, async ({ page }) => { + await page.goto(HOST_BASE_URL); + const parent = page.locator(property.selector); + const link = parent + .locator(baseSelectors.tags.coreElements.link) + .filter({ hasText: property.linkText! }); + await expect(link).toBeVisible(); + }); + } + } +}); diff --git a/react-nextjs/nextjs-host-react-remote/e2e/tests/hostChecks.cy.ts b/react-nextjs/nextjs-host-react-remote/e2e/tests/hostChecks.cy.ts deleted file mode 100644 index 602d9fd2eab..00000000000 --- a/react-nextjs/nextjs-host-react-remote/e2e/tests/hostChecks.cy.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { BaseMethods } from '../../../../cypress-e2e/common/base'; -import { baseSelectors, commonSelectors } from '../../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../../cypress-e2e/fixtures/constants'; -import { CssAttr } from '../../../../cypress-e2e/types/cssAttr'; -import { CommonTestData } from '../../../../cypress-e2e/fixtures/commonTestData'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('It checks host page', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 8080, - }); - }); - - it('Checks header texted link color', () => { - basePage.checkElementHaveProperty({ - parentSelector: baseSelectors.tags.headers.h1, - selector: baseSelectors.tags.coreElements.link, - prop: CssAttr.color, - value: Constants.color.skyBlue, - text: CommonTestData.nextJsAppsHeaderLinkName, - }); - }); - - it('Checks texted remote component visibility', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.navigation, - text: Constants.commonPhrases.nextJsHostReactRemoteApp.messages.remotes.component, - visibilityState: 'be.visible', - }); - }); - - it('Checks texted remote component color', () => { - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.navigation, - prop: CssAttr.backgroundColor, - value: Constants.color.lightMint, - text: Constants.commonPhrases.nextJsHostReactRemoteApp.messages.remotes.component, - }); - }); - - it('Checks texted links cards quantity', () => { - basePage.checkElementQuantity({ - selector: commonSelectors.nextJsAppsLinkCard, - quantity: Constants.commonConstantsData.commonIndexes.four, - }); - }); - - it('Checks links cards text visibility', () => { - Constants.commonConstantsData.nextJsAppsCommonPhrases.linksCardsText.forEach((text: string) => { - basePage.checkElementWithTextPresence({ - selector: commonSelectors.nextJsAppsLinkCard, - text, - visibilityState: 'be.visible', - }); - }); - }); - - it('Checks hover animation for links cards', () => { - basePage.checkLinkedCardsHoverAnimation(); - }); - - // TODO: Can be flaky - xit('Checks all page links functionality', () => { - basePage.checkLinkedCardsFunctionality(8080); - }); - - it('Checks change root file functionality', () => { - basePage.changeRootFile({ - changedContentFilePath: Constants.filesPath.nextJsHostReactRemoteApp.files.changedContent, - rootFilePath: Constants.filesPath.nextJsHostReactRemoteApp.files.root, - originalContentFilePath: Constants.filesPath.nextJsHostReactRemoteApp.files.originalContent, - }); - }); -}); diff --git a/react-nextjs/nextjs-host-react-remote/e2e/tests/hostChecks.spec.ts b/react-nextjs/nextjs-host-react-remote/e2e/tests/hostChecks.spec.ts new file mode 100644 index 00000000000..36bc0de8423 --- /dev/null +++ b/react-nextjs/nextjs-host-react-remote/e2e/tests/hostChecks.spec.ts @@ -0,0 +1,93 @@ +import { test, expect } from '@playwright/test'; +import { readFile, writeFile } from 'node:fs/promises'; +import path from 'node:path'; +import { baseSelectors, commonSelectors } from '../../../../cypress-e2e/common/selectors'; +import { Constants } from '../../../../cypress-e2e/fixtures/constants'; +import { CommonTestData } from '../../../../cypress-e2e/fixtures/commonTestData'; + +const HOST_BASE_URL = 'http://localhost:8080/'; +const ROOT_FILE_PATH = path.resolve(__dirname, '../../host/pages/index.js'); +const CHANGED_CONTENT_PATH = path.resolve(__dirname, '../fixtures/changedContent.js'); +const START_MESSAGE = Constants.commonConstantsData.nextJsAppsCommonPhrases.messages.start; +const CHANGED_MESSAGE = START_MESSAGE.replace('started', 'TESTED'); + +const remoteComponentMessage = + Constants.commonPhrases.nextJsHostReactRemoteApp.messages.remotes.component; + +test.describe('Host page checks', () => { + test.beforeEach(async ({ page }) => { + await page.goto(HOST_BASE_URL); + }); + + test('header link has expected color', async ({ page }) => { + const headerLink = page + .locator(`${baseSelectors.tags.headers.h1} ${baseSelectors.tags.coreElements.link}`) + .filter({ hasText: CommonTestData.nextJsAppsHeaderLinkName }); + await expect(headerLink).toHaveCSS('color', Constants.color.skyBlue); + }); + + test('remote component message is visible', async ({ page }) => { + const remoteComponent = page + .locator(baseSelectors.tags.navigation) + .filter({ hasText: remoteComponentMessage }); + await expect(remoteComponent).toBeVisible(); + }); + + test('remote component has themed background color', async ({ page }) => { + const remoteComponent = page + .locator(baseSelectors.tags.navigation) + .filter({ hasText: remoteComponentMessage }); + await expect(remoteComponent).toHaveCSS('background-color', Constants.color.lightMint); + }); + + test('renders four link cards', async ({ page }) => { + await expect(page.locator(commonSelectors.nextJsAppsLinkCard)).toHaveCount( + Constants.commonConstantsData.commonIndexes.four, + ); + }); + + test('shows expected link card copy', async ({ page }) => { + for (const text of Constants.commonConstantsData.nextJsAppsCommonPhrases.linksCardsText) { + const card = page.locator(commonSelectors.nextJsAppsLinkCard).filter({ hasText: text }); + await expect(card).toBeVisible(); + } + }); + + test('updates card style on hover', async ({ page }) => { + for (const text of Constants.commonConstantsData.nextJsAppsCommonPhrases.linksCardsText) { + await page.reload(); + const card = page.locator(commonSelectors.nextJsAppsLinkCard).filter({ hasText: text }); + await expect(card).not.toHaveCSS('color', Constants.color.skyBlue); + await card.hover(); + await page.waitForTimeout(2000); + await expect(card).toHaveCSS('color', Constants.color.skyBlue); + } + }); + + test('reflects root file content changes', async ({ page }) => { + const introParagraph = page + .locator(baseSelectors.tags.paragraph) + .filter({ hasText: START_MESSAGE }); + await expect(introParagraph).toBeVisible(); + + const initialContent = await readFile(ROOT_FILE_PATH, 'utf-8'); + const changedContent = await readFile(CHANGED_CONTENT_PATH, 'utf-8'); + + try { + await writeFile(ROOT_FILE_PATH, changedContent, 'utf-8'); + await page.waitForTimeout(1000); + await page.reload(); + const changedParagraph = page + .locator(baseSelectors.tags.paragraph) + .filter({ hasText: CHANGED_MESSAGE }); + await expect(changedParagraph).toBeVisible(); + + await writeFile(ROOT_FILE_PATH, initialContent, 'utf-8'); + await page.waitForTimeout(1000); + await page.reload(); + await expect(introParagraph).toBeVisible(); + } finally { + await writeFile(ROOT_FILE_PATH, initialContent, 'utf-8'); + } + }); +}); diff --git a/react-nextjs/nextjs-host-react-remote/e2e/tests/remoteChecks.cy.ts b/react-nextjs/nextjs-host-react-remote/e2e/tests/remoteChecks.cy.ts deleted file mode 100644 index 9362b1e2f79..00000000000 --- a/react-nextjs/nextjs-host-react-remote/e2e/tests/remoteChecks.cy.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { BaseMethods } from '../../../../cypress-e2e/common/base'; -import { baseSelectors } from '../../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../../cypress-e2e/fixtures/constants'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('It checks remote page', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 8081, - }); - }); - - it('Checks remote app message visibility', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.commonPhrases.nextJsHostReactRemoteApp.messages.remotes.page, - visibilityState: 'be.visible', - }); - }); -}); diff --git a/react-nextjs/nextjs-host-react-remote/e2e/tests/remoteChecks.spec.ts b/react-nextjs/nextjs-host-react-remote/e2e/tests/remoteChecks.spec.ts new file mode 100644 index 00000000000..44959ee30f6 --- /dev/null +++ b/react-nextjs/nextjs-host-react-remote/e2e/tests/remoteChecks.spec.ts @@ -0,0 +1,79 @@ +import { test, expect } from '@playwright/test'; +import { readFile, writeFile } from 'node:fs/promises'; +import path from 'node:path'; +import { baseSelectors, commonSelectors } from '../../../../cypress-e2e/common/selectors'; +import { Constants } from '../../../../cypress-e2e/fixtures/constants'; +import { CommonTestData } from '../../../../cypress-e2e/fixtures/commonTestData'; + +const REMOTE_BASE_URL = 'http://localhost:8081/'; +const REMOTE_ROOT_FILE_PATH = path.resolve(__dirname, '../../remote/pages/index.js'); +const REMOTE_CHANGED_CONTENT_PATH = path.resolve( + __dirname, + '../fixtures/remote/changedContent.js', +); +const START_MESSAGE = Constants.commonConstantsData.nextJsAppsCommonPhrases.messages.start; +const CHANGED_MESSAGE = START_MESSAGE.replace('started', 'TESTED'); + +test.describe('Remote page checks', () => { + test.beforeEach(async ({ page }) => { + await page.goto(REMOTE_BASE_URL); + }); + + test('header link has expected color', async ({ page }) => { + const headerLink = page + .locator(`${baseSelectors.tags.headers.h1} ${baseSelectors.tags.coreElements.link}`) + .filter({ hasText: CommonTestData.nextJsAppsHeaderLinkName }); + await expect(headerLink).toHaveCSS('color', Constants.color.skyBlue); + }); + + test('renders four link cards', async ({ page }) => { + await expect(page.locator(commonSelectors.nextJsAppsLinkCard)).toHaveCount( + Constants.commonConstantsData.commonIndexes.four, + ); + }); + + test('shows expected link card copy', async ({ page }) => { + for (const text of Constants.commonConstantsData.nextJsAppsCommonPhrases.linksCardsText) { + const card = page.locator(commonSelectors.nextJsAppsLinkCard).filter({ hasText: text }); + await expect(card).toBeVisible(); + } + }); + + test('updates card style on hover', async ({ page }) => { + for (const text of Constants.commonConstantsData.nextJsAppsCommonPhrases.linksCardsText) { + await page.reload(); + const card = page.locator(commonSelectors.nextJsAppsLinkCard).filter({ hasText: text }); + await expect(card).not.toHaveCSS('color', Constants.color.skyBlue); + await card.hover(); + await page.waitForTimeout(2000); + await expect(card).toHaveCSS('color', Constants.color.skyBlue); + } + }); + + test('reflects root file content changes', async ({ page }) => { + const introParagraph = page + .locator(baseSelectors.tags.paragraph) + .filter({ hasText: START_MESSAGE }); + await expect(introParagraph).toBeVisible(); + + const initialContent = await readFile(REMOTE_ROOT_FILE_PATH, 'utf-8'); + const changedContent = await readFile(REMOTE_CHANGED_CONTENT_PATH, 'utf-8'); + + try { + await writeFile(REMOTE_ROOT_FILE_PATH, changedContent, 'utf-8'); + await page.waitForTimeout(1000); + await page.reload(); + const changedParagraph = page + .locator(baseSelectors.tags.paragraph) + .filter({ hasText: CHANGED_MESSAGE }); + await expect(changedParagraph).toBeVisible(); + + await writeFile(REMOTE_ROOT_FILE_PATH, initialContent, 'utf-8'); + await page.waitForTimeout(1000); + await page.reload(); + await expect(introParagraph).toBeVisible(); + } finally { + await writeFile(REMOTE_ROOT_FILE_PATH, initialContent, 'utf-8'); + } + }); +}); diff --git a/react-nextjs/nextjs-host-react-remote/e2e/tests/runAll.cy.ts b/react-nextjs/nextjs-host-react-remote/e2e/tests/runAll.cy.ts deleted file mode 100644 index d09541bfd29..00000000000 --- a/react-nextjs/nextjs-host-react-remote/e2e/tests/runAll.cy.ts +++ /dev/null @@ -1,3 +0,0 @@ -import './commonChecks.cy'; -import './hostChecks.cy'; -import './remoteChecks.cy'; diff --git a/react-nextjs/nextjs-host-react-remote/e2e/tests/runAll.spec.ts b/react-nextjs/nextjs-host-react-remote/e2e/tests/runAll.spec.ts new file mode 100644 index 00000000000..a86aa1cfbf4 --- /dev/null +++ b/react-nextjs/nextjs-host-react-remote/e2e/tests/runAll.spec.ts @@ -0,0 +1,7 @@ +import { test } from '@playwright/test'; + +test.describe('Legacy runAll placeholder', () => { + test('Playwright discovers individual specs automatically', async () => { + // This spec exists to preserve the prior file layout used by Cypress runAll imports. + }); +}); diff --git a/react-nextjs/nextjs-host-react-remote/package.json b/react-nextjs/nextjs-host-react-remote/package.json index fb8d1c15662..46b78847393 100644 --- a/react-nextjs/nextjs-host-react-remote/package.json +++ b/react-nextjs/nextjs-host-react-remote/package.json @@ -6,12 +6,14 @@ "main": "index.js", "scripts": { "start": "pnpm --filter nextjs-host-react-remote_* --parallel run start", - "e2e:ci": "pnpm start & wait-on http-get://localhost:8080/ && npx cypress run --config-file ../../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/tests/runAll.cy.ts\" --browser=chrome" + "test:e2e": "playwright test", + "test:e2e:ui": "playwright test --ui" }, "author": "Omher", "license": "ISC", "devDependencies": { "concurrently": "8.2.2", - "wait-on": "7.2.0" + "wait-on": "7.2.0", + "@playwright/test": "^1.54.2" } } diff --git a/react-nextjs/nextjs-host-react-remote/playwright.config.ts b/react-nextjs/nextjs-host-react-remote/playwright.config.ts new file mode 100644 index 00000000000..34ef5f6fcb1 --- /dev/null +++ b/react-nextjs/nextjs-host-react-remote/playwright.config.ts @@ -0,0 +1,48 @@ +import { defineConfig, devices } from '@playwright/test'; + +const isCI = !!process.env.CI; + +export default defineConfig({ + testDir: './e2e/tests', + timeout: 60_000, + expect: { + timeout: 15_000, + }, + fullyParallel: true, + forbidOnly: isCI, + retries: isCI ? 1 : 0, + workers: isCI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost:8080', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1920, height: 1080 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + command: 'pnpm run start', + cwd: 'remote', + port: 8081, + reuseExistingServer: !isCI, + timeout: 180_000, + }, + { + command: 'pnpm run start', + cwd: 'host', + port: 8080, + reuseExistingServer: !isCI, + timeout: 180_000, + }, + ], +}); diff --git a/react-nextjs/nextjs-host-remote/cypress.env.json b/react-nextjs/nextjs-host-remote/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/react-nextjs/nextjs-host-remote/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/react-nextjs/nextjs-host-remote/e2e/tests/commonChecks.cy.ts b/react-nextjs/nextjs-host-remote/e2e/tests/commonChecks.cy.ts deleted file mode 100644 index e13ac341ddd..00000000000 --- a/react-nextjs/nextjs-host-remote/e2e/tests/commonChecks.cy.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { BaseMethods } from '../../../../cypress-e2e/common/base'; -import { baseSelectors } from '../../../../cypress-e2e/common/selectors'; -import { CommonTestData } from '../../../../cypress-e2e/fixtures/commonTestData'; - -const basePage: BaseMethods = new BaseMethods(); - -// TODO: Update this file with similar checks from host/remote checks files -describe('It checks elements visibility', () => { - const hosts = [8080, 8081]; - - CommonTestData.commonNextJsAppsData.forEach( - (property: { messageType: string; selector: string; message: string; linkText?: string }) => { - hosts.forEach((host: number) => { - it(`Checks ${property.messageType} message visibility`, () => { - basePage.skipTestByCondition( - host === 8081 && property.message === CommonTestData.commonNextJsAppsData[3].message, - ); - basePage.openLocalhost({ number: host }); - basePage.checkElementWithTextPresence({ - selector: property.selector, - text: property.message, - visibilityState: 'be.visible', - }); - }); - - it(`Checks ${property.messageType} message includes texted link`, () => { - basePage.skipTestByCondition(!property.linkText); - basePage.openLocalhost({ number: host }); - basePage.checkElementWithTextPresence({ - parentSelector: property.selector, - selector: baseSelectors.tags.coreElements.link, - text: property.linkText, - visibilityState: 'be.visible', - }); - }); - }); - }, - ); -}); diff --git a/react-nextjs/nextjs-host-remote/e2e/tests/commonChecks.spec.ts b/react-nextjs/nextjs-host-remote/e2e/tests/commonChecks.spec.ts new file mode 100644 index 00000000000..af88cde1c1c --- /dev/null +++ b/react-nextjs/nextjs-host-remote/e2e/tests/commonChecks.spec.ts @@ -0,0 +1,34 @@ +import { test, expect } from '@playwright/test'; +import { baseSelectors } from '../../../../cypress-e2e/common/selectors'; +import { CommonTestData } from '../../../../cypress-e2e/fixtures/commonTestData'; + +const HOSTS = [8080, 8081] as const; +const FOOTER_MESSAGE = CommonTestData.commonNextJsAppsData[3].message; + +test.describe('Common content rendering', () => { + for (const property of CommonTestData.commonNextJsAppsData) { + for (const host of HOSTS) { + test(`localhost:${host} renders ${property.messageType} message`, async ({ page }) => { + test.skip( + host === 8081 && property.message === FOOTER_MESSAGE, + 'Remote app does not render the footer message.', + ); + + await page.goto(`http://localhost:${host}/`); + const target = page.locator(property.selector).filter({ hasText: property.message }); + await expect(target).toBeVisible(); + }); + + if (property.linkText) { + test(`localhost:${host} exposes ${property.messageType} link`, async ({ page }) => { + await page.goto(`http://localhost:${host}/`); + const link = page + .locator(property.selector) + .locator(baseSelectors.tags.coreElements.link) + .filter({ hasText: property.linkText! }); + await expect(link).toBeVisible(); + }); + } + } + } +}); diff --git a/react-nextjs/nextjs-host-remote/e2e/tests/hostChecks.cy.ts b/react-nextjs/nextjs-host-remote/e2e/tests/hostChecks.cy.ts deleted file mode 100644 index da5599eb569..00000000000 --- a/react-nextjs/nextjs-host-remote/e2e/tests/hostChecks.cy.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { BaseMethods } from '../../../../cypress-e2e/common/base'; -import { baseSelectors, commonSelectors } from '../../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../../cypress-e2e/fixtures/constants'; -import { CssAttr } from '../../../../cypress-e2e/types/cssAttr'; -import { CommonTestData } from '../../../../cypress-e2e/fixtures/commonTestData'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('It checks host page', () => { - beforeEach(() => { - basePage.openLocalhost({ number: 8080 }); - }); - - it('Checks header texted link color', () => { - basePage.checkElementHaveProperty({ - parentSelector: baseSelectors.tags.headers.h1, - selector: baseSelectors.tags.coreElements.link, - prop: CssAttr.color, - value: Constants.color.skyBlue, - text: CommonTestData.nextJsAppsHeaderLinkName, - }); - }); - - it('Checks texted remote component visibility', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.navigation, - text: Constants.commonPhrases.nextJsHostRemoteApp.remoteComponentMessage, - visibilityState: 'be.visible', - }); - }); - - it('Checks texted remote component color', () => { - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.navigation, - prop: CssAttr.backgroundColor, - value: Constants.color.lightMint, - text: Constants.commonPhrases.nextJsHostRemoteApp.remoteComponentMessage, - }); - }); - - it('Checks texted links cards quantity', () => { - basePage.checkElementQuantity({ - selector: commonSelectors.nextJsAppsLinkCard, - quantity: Constants.commonConstantsData.commonIndexes.four, - }); - }); - - it('Checks links cards text visibility', () => { - Constants.commonConstantsData.nextJsAppsCommonPhrases.linksCardsText.forEach((text: string) => { - basePage.checkElementWithTextPresence({ - selector: commonSelectors.nextJsAppsLinkCard, - text, - visibilityState: 'be.visible', - }); - }); - }); - - it('Checks hover animation for links cards', () => { - basePage.checkLinkedCardsHoverAnimation(); - }); - - // TODO: Can be flaky - xit('Checks all page links functionality', () => { - basePage.checkLinkedCardsFunctionality(8080); - }); - - it('Checks change root file functionality', () => { - basePage.changeRootFile({ - changedContentFilePath: Constants.filesPath.nextJsHostRemoteApp.files.contents.changed.host, - rootFilePath: Constants.filesPath.nextJsHostRemoteApp.files.roots.host, - originalContentFilePath: Constants.filesPath.nextJsHostRemoteApp.files.contents.original.host, - }); - }); -}); diff --git a/react-nextjs/nextjs-host-remote/e2e/tests/hostChecks.spec.ts b/react-nextjs/nextjs-host-remote/e2e/tests/hostChecks.spec.ts new file mode 100644 index 00000000000..f8647ebc771 --- /dev/null +++ b/react-nextjs/nextjs-host-remote/e2e/tests/hostChecks.spec.ts @@ -0,0 +1,92 @@ +import { test, expect } from '@playwright/test'; +import { readFile, writeFile } from 'node:fs/promises'; +import path from 'node:path'; +import { baseSelectors, commonSelectors } from '../../../../cypress-e2e/common/selectors'; +import { Constants } from '../../../../cypress-e2e/fixtures/constants'; +import { CommonTestData } from '../../../../cypress-e2e/fixtures/commonTestData'; + +const HOST_BASE_URL = 'http://localhost:8080/'; +const HOST_ROOT_FILE_PATH = path.resolve(__dirname, '../../host/pages/index.js'); +const HOST_CHANGED_CONTENT_PATH = path.resolve(__dirname, '../fixtures/host/changedContent.js'); +const START_MESSAGE = Constants.commonConstantsData.nextJsAppsCommonPhrases.messages.start; +const CHANGED_MESSAGE = START_MESSAGE.replace('started', 'TESTED'); + +const remoteComponentMessage = Constants.commonPhrases.nextJsHostRemoteApp.remoteComponentMessage; + +test.describe('Host page checks', () => { + test.beforeEach(async ({ page }) => { + await page.goto(HOST_BASE_URL); + }); + + test('header link has expected color', async ({ page }) => { + const headerLink = page + .locator(`${baseSelectors.tags.headers.h1} ${baseSelectors.tags.coreElements.link}`) + .filter({ hasText: CommonTestData.nextJsAppsHeaderLinkName }); + await expect(headerLink).toHaveCSS('color', Constants.color.skyBlue); + }); + + test('remote component message is visible', async ({ page }) => { + const remoteComponent = page + .locator(baseSelectors.tags.navigation) + .filter({ hasText: remoteComponentMessage }); + await expect(remoteComponent).toBeVisible(); + }); + + test('remote component has themed background color', async ({ page }) => { + const remoteComponent = page + .locator(baseSelectors.tags.navigation) + .filter({ hasText: remoteComponentMessage }); + await expect(remoteComponent).toHaveCSS('background-color', Constants.color.lightMint); + }); + + test('renders four link cards', async ({ page }) => { + await expect(page.locator(commonSelectors.nextJsAppsLinkCard)).toHaveCount( + Constants.commonConstantsData.commonIndexes.four, + ); + }); + + test('shows expected link card copy', async ({ page }) => { + for (const text of Constants.commonConstantsData.nextJsAppsCommonPhrases.linksCardsText) { + const card = page.locator(commonSelectors.nextJsAppsLinkCard).filter({ hasText: text }); + await expect(card).toBeVisible(); + } + }); + + test('updates card style on hover', async ({ page }) => { + for (const text of Constants.commonConstantsData.nextJsAppsCommonPhrases.linksCardsText) { + await page.reload(); + const card = page.locator(commonSelectors.nextJsAppsLinkCard).filter({ hasText: text }); + await expect(card).not.toHaveCSS('color', Constants.color.skyBlue); + await card.hover(); + await page.waitForTimeout(2000); + await expect(card).toHaveCSS('color', Constants.color.skyBlue); + } + }); + + test('reflects host root file content changes', async ({ page }) => { + const introParagraph = page + .locator(baseSelectors.tags.paragraph) + .filter({ hasText: START_MESSAGE }); + await expect(introParagraph).toBeVisible(); + + const initialContent = await readFile(HOST_ROOT_FILE_PATH, 'utf-8'); + const changedContent = await readFile(HOST_CHANGED_CONTENT_PATH, 'utf-8'); + + try { + await writeFile(HOST_ROOT_FILE_PATH, changedContent, 'utf-8'); + await page.waitForTimeout(1000); + await page.reload(); + const changedParagraph = page + .locator(baseSelectors.tags.paragraph) + .filter({ hasText: CHANGED_MESSAGE }); + await expect(changedParagraph).toBeVisible(); + + await writeFile(HOST_ROOT_FILE_PATH, initialContent, 'utf-8'); + await page.waitForTimeout(1000); + await page.reload(); + await expect(introParagraph).toBeVisible(); + } finally { + await writeFile(HOST_ROOT_FILE_PATH, initialContent, 'utf-8'); + } + }); +}); diff --git a/react-nextjs/nextjs-host-remote/e2e/tests/remoteChecks.cy.ts b/react-nextjs/nextjs-host-remote/e2e/tests/remoteChecks.cy.ts deleted file mode 100644 index 9d7d6f2cb78..00000000000 --- a/react-nextjs/nextjs-host-remote/e2e/tests/remoteChecks.cy.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { BaseMethods } from '../../../../cypress-e2e/common/base'; -import { baseSelectors, commonSelectors } from '../../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../../cypress-e2e/fixtures/constants'; -import { CssAttr } from '../../../../cypress-e2e/types/cssAttr'; -import { CommonTestData } from '../../../../cypress-e2e/fixtures/commonTestData'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('It checks remote page', () => { - beforeEach(() => { - basePage.openLocalhost({ number: 8081 }); - }); - - it('Checks header texted link color', () => { - basePage.checkElementHaveProperty({ - parentSelector: baseSelectors.tags.headers.h1, - selector: baseSelectors.tags.coreElements.link, - prop: CssAttr.color, - value: Constants.color.skyBlue, - text: CommonTestData.nextJsAppsHeaderLinkName, - }); - }); - - it('Checks texted links cards quantity', () => { - basePage.checkElementQuantity({ - selector: commonSelectors.nextJsAppsLinkCard, - quantity: Constants.commonConstantsData.commonIndexes.four, - }); - }); - - it('Checks links cards text visibility', () => { - Constants.commonConstantsData.nextJsAppsCommonPhrases.linksCardsText.forEach((text: string) => { - basePage.checkElementWithTextPresence({ - selector: commonSelectors.nextJsAppsLinkCard, - text, - visibilityState: 'be.visible', - }); - }); - }); - - it('Checks hover animation for links cards', () => { - basePage.checkLinkedCardsHoverAnimation(); - }); - - // TODO: Can be flaky - xit('Checks all page links functionality', () => { - basePage.checkLinkedCardsFunctionality(8081); - }); - - it('Checks change root file functionality', () => { - basePage.changeRootFile({ - changedContentFilePath: Constants.filesPath.nextJsHostRemoteApp.files.contents.changed.remote, - rootFilePath: Constants.filesPath.nextJsHostRemoteApp.files.roots.remote, - originalContentFilePath: - Constants.filesPath.nextJsHostRemoteApp.files.contents.original.remote, - }); - }); -}); diff --git a/react-nextjs/nextjs-host-remote/e2e/tests/remoteChecks.spec.ts b/react-nextjs/nextjs-host-remote/e2e/tests/remoteChecks.spec.ts new file mode 100644 index 00000000000..d9d1ec54f77 --- /dev/null +++ b/react-nextjs/nextjs-host-remote/e2e/tests/remoteChecks.spec.ts @@ -0,0 +1,79 @@ +import { test, expect } from '@playwright/test'; +import { readFile, writeFile } from 'node:fs/promises'; +import path from 'node:path'; +import { baseSelectors, commonSelectors } from '../../../../cypress-e2e/common/selectors'; +import { Constants } from '../../../../cypress-e2e/fixtures/constants'; +import { CommonTestData } from '../../../../cypress-e2e/fixtures/commonTestData'; + +const REMOTE_BASE_URL = 'http://localhost:8081/'; +const REMOTE_ROOT_FILE_PATH = path.resolve(__dirname, '../../remote/pages/index.js'); +const REMOTE_CHANGED_CONTENT_PATH = path.resolve( + __dirname, + '../fixtures/remote/changedContent.js', +); +const START_MESSAGE = Constants.commonConstantsData.nextJsAppsCommonPhrases.messages.start; +const CHANGED_MESSAGE = START_MESSAGE.replace('started', 'TESTED'); + +test.describe('Remote page checks', () => { + test.beforeEach(async ({ page }) => { + await page.goto(REMOTE_BASE_URL); + }); + + test('header link has expected color', async ({ page }) => { + const headerLink = page + .locator(`${baseSelectors.tags.headers.h1} ${baseSelectors.tags.coreElements.link}`) + .filter({ hasText: CommonTestData.nextJsAppsHeaderLinkName }); + await expect(headerLink).toHaveCSS('color', Constants.color.skyBlue); + }); + + test('renders four link cards', async ({ page }) => { + await expect(page.locator(commonSelectors.nextJsAppsLinkCard)).toHaveCount( + Constants.commonConstantsData.commonIndexes.four, + ); + }); + + test('shows expected link card copy', async ({ page }) => { + for (const text of Constants.commonConstantsData.nextJsAppsCommonPhrases.linksCardsText) { + const card = page.locator(commonSelectors.nextJsAppsLinkCard).filter({ hasText: text }); + await expect(card).toBeVisible(); + } + }); + + test('updates card style on hover', async ({ page }) => { + for (const text of Constants.commonConstantsData.nextJsAppsCommonPhrases.linksCardsText) { + await page.reload(); + const card = page.locator(commonSelectors.nextJsAppsLinkCard).filter({ hasText: text }); + await expect(card).not.toHaveCSS('color', Constants.color.skyBlue); + await card.hover(); + await page.waitForTimeout(2000); + await expect(card).toHaveCSS('color', Constants.color.skyBlue); + } + }); + + test('reflects remote root file content changes', async ({ page }) => { + const introParagraph = page + .locator(baseSelectors.tags.paragraph) + .filter({ hasText: START_MESSAGE }); + await expect(introParagraph).toBeVisible(); + + const initialContent = await readFile(REMOTE_ROOT_FILE_PATH, 'utf-8'); + const changedContent = await readFile(REMOTE_CHANGED_CONTENT_PATH, 'utf-8'); + + try { + await writeFile(REMOTE_ROOT_FILE_PATH, changedContent, 'utf-8'); + await page.waitForTimeout(1000); + await page.reload(); + const changedParagraph = page + .locator(baseSelectors.tags.paragraph) + .filter({ hasText: CHANGED_MESSAGE }); + await expect(changedParagraph).toBeVisible(); + + await writeFile(REMOTE_ROOT_FILE_PATH, initialContent, 'utf-8'); + await page.waitForTimeout(1000); + await page.reload(); + await expect(introParagraph).toBeVisible(); + } finally { + await writeFile(REMOTE_ROOT_FILE_PATH, initialContent, 'utf-8'); + } + }); +}); diff --git a/react-nextjs/nextjs-host-remote/e2e/tests/runAll.cy.ts b/react-nextjs/nextjs-host-remote/e2e/tests/runAll.cy.ts deleted file mode 100644 index d09541bfd29..00000000000 --- a/react-nextjs/nextjs-host-remote/e2e/tests/runAll.cy.ts +++ /dev/null @@ -1,3 +0,0 @@ -import './commonChecks.cy'; -import './hostChecks.cy'; -import './remoteChecks.cy'; diff --git a/react-nextjs/nextjs-host-remote/e2e/tests/runAll.spec.ts b/react-nextjs/nextjs-host-remote/e2e/tests/runAll.spec.ts new file mode 100644 index 00000000000..3a583e548f1 --- /dev/null +++ b/react-nextjs/nextjs-host-remote/e2e/tests/runAll.spec.ts @@ -0,0 +1,7 @@ +import { test } from '@playwright/test'; + +test.describe('Legacy runAll placeholder', () => { + test('Playwright runs individual specs automatically', async () => { + // Maintains backwards compatibility with the former Cypress entry point. + }); +}); diff --git a/react-nextjs/nextjs-host-remote/package.json b/react-nextjs/nextjs-host-remote/package.json index a41397afc7a..1f6f46dec0e 100644 --- a/react-nextjs/nextjs-host-remote/package.json +++ b/react-nextjs/nextjs-host-remote/package.json @@ -6,11 +6,13 @@ "main": "index.js", "scripts": { "start": "concurrently \"cd host; npm run dev\" \"cd remote; npm run dev\"", - "e2e:ci": "pnpm run start & sleep 10 && npx cypress run --config-file ../../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/tests/runAll.cy.ts\" --browser=chrome" + "test:e2e": "playwright test", + "test:e2e:ui": "playwright test --ui" }, "author": "Omher", "license": "ISC", "devDependencies": { - "concurrently": "8.2.2" + "concurrently": "8.2.2", + "@playwright/test": "^1.54.2" } } diff --git a/react-nextjs/nextjs-host-remote/playwright.config.ts b/react-nextjs/nextjs-host-remote/playwright.config.ts new file mode 100644 index 00000000000..3d728dd712d --- /dev/null +++ b/react-nextjs/nextjs-host-remote/playwright.config.ts @@ -0,0 +1,48 @@ +import { defineConfig, devices } from '@playwright/test'; + +const isCI = !!process.env.CI; + +export default defineConfig({ + testDir: './e2e/tests', + timeout: 60_000, + expect: { + timeout: 15_000, + }, + fullyParallel: true, + forbidOnly: isCI, + retries: isCI ? 1 : 0, + workers: isCI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost:8080', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1920, height: 1080 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + command: 'pnpm run dev', + cwd: 'remote', + port: 8081, + reuseExistingServer: !isCI, + timeout: 180_000, + }, + { + command: 'pnpm run dev', + cwd: 'host', + port: 8080, + reuseExistingServer: !isCI, + timeout: 180_000, + }, + ], +}); diff --git a/react-nextjs/react-host-nextjs-remote/cypress.env.json b/react-nextjs/react-host-nextjs-remote/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/react-nextjs/react-host-nextjs-remote/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/react-nextjs/react-host-nextjs-remote/e2e/CommonCheck.cy.ts b/react-nextjs/react-host-nextjs-remote/e2e/CommonCheck.cy.ts deleted file mode 100644 index 698a1654ffc..00000000000 --- a/react-nextjs/react-host-nextjs-remote/e2e/CommonCheck.cy.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; - -const basePage: BaseMethods = new BaseMethods(); -const appsData = [ - { - appName: Constants.elementsText.reactHostNextJsApp.remoteComponents.header, - appNav: Constants.elementsText.reactHostNextJsApp.remoteComponents.nav, - host: 8080, - appType: Constants.commonConstantsData.basicComponents.host, - }, - { - host: 8081, - appType: Constants.commonConstantsData.basicComponents.host, - }, -]; - -appsData.forEach( - (property: { appName?: string; appNav?: string; host: number; appType: string }) => { - describe('React Host NextJS Remote', () => { - context(`Check ${property.appType} App UI elements`, () => { - before(() => { - basePage.openLocalhost({ - number: property.host, - }); - }); - it(`Check ${property.appType} App UI elements`, () => { - basePage.checkUrlText(`http://localhost:${property.host}/`, true); - if (property.host == 8080) { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: String(property.appName), - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.navigation, - text: String(property.appNav), - }); - } - }); - }); - }); - }, -); diff --git a/react-nextjs/react-host-nextjs-remote/e2e/CommonCheck.spec.ts b/react-nextjs/react-host-nextjs-remote/e2e/CommonCheck.spec.ts new file mode 100644 index 00000000000..194997d4d1b --- /dev/null +++ b/react-nextjs/react-host-nextjs-remote/e2e/CommonCheck.spec.ts @@ -0,0 +1,38 @@ +import { test, expect } from '@playwright/test'; +import { baseSelectors } from '../../../cypress-e2e/common/selectors'; +import { Constants } from '../../../cypress-e2e/fixtures/constants'; + +const appsData = [ + { + appName: Constants.elementsText.reactHostNextJsApp.remoteComponents.header, + appNav: Constants.elementsText.reactHostNextJsApp.remoteComponents.nav, + host: 8080, + appType: Constants.commonConstantsData.basicComponents.host, + }, + { + host: 8081, + appType: Constants.commonConstantsData.basicComponents.host, + }, +] as const; + +test.describe('React Host NextJS Remote', () => { + for (const property of appsData) { + test(`renders ${property.appType} app on localhost:${property.host}`, async ({ page }) => { + const url = `http://localhost:${property.host}/`; + await page.goto(url); + await expect(page).toHaveURL(url); + + if (property.host === 8080) { + const header = page + .locator(baseSelectors.tags.coreElements.div) + .filter({ hasText: String(property.appName) }); + await expect(header).toBeVisible(); + + const nav = page + .locator(baseSelectors.tags.navigation) + .filter({ hasText: String(property.appNav) }); + await expect(nav).toBeVisible(); + } + }); + } +}); diff --git a/react-nextjs/react-host-nextjs-remote/package.json b/react-nextjs/react-host-nextjs-remote/package.json index a601a721423..3a231efa4f0 100644 --- a/react-nextjs/react-host-nextjs-remote/package.json +++ b/react-nextjs/react-host-nextjs-remote/package.json @@ -10,12 +10,14 @@ "main": "index.js", "scripts": { "start": "concurrently \"cd host; npm run dev\" \"cd remote; npm run dev\"", - "e2e:ci": "pnpm start & wait-on http-get://localhost:8080/ && npx cypress run --config-file ../../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome" + "test:e2e": "playwright test", + "test:e2e:ui": "playwright test --ui" }, "author": "Omher", "license": "ISC", "devDependencies": { "concurrently": "8.2.2", - "wait-on": "7.2.0" + "wait-on": "7.2.0", + "@playwright/test": "^1.54.2" } } diff --git a/react-nextjs/react-host-nextjs-remote/playwright.config.ts b/react-nextjs/react-host-nextjs-remote/playwright.config.ts new file mode 100644 index 00000000000..e71b66c6feb --- /dev/null +++ b/react-nextjs/react-host-nextjs-remote/playwright.config.ts @@ -0,0 +1,48 @@ +import { defineConfig, devices } from '@playwright/test'; + +const isCI = !!process.env.CI; + +export default defineConfig({ + testDir: './e2e', + timeout: 60_000, + expect: { + timeout: 15_000, + }, + fullyParallel: true, + forbidOnly: isCI, + retries: isCI ? 1 : 0, + workers: isCI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost:8080', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1920, height: 1080 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + command: 'pnpm run dev', + cwd: 'remote', + port: 8081, + reuseExistingServer: !isCI, + timeout: 180_000, + }, + { + command: 'pnpm run dev', + cwd: 'host', + port: 8080, + reuseExistingServer: !isCI, + timeout: 180_000, + }, + ], +}); diff --git a/react-nextjs/react-host-remote/cypress.env.json b/react-nextjs/react-host-remote/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/react-nextjs/react-host-remote/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/react-nextjs/react-host-remote/e2e/CommonCheck.cy.ts b/react-nextjs/react-host-remote/e2e/CommonCheck.cy.ts deleted file mode 100644 index 7dafda74359..00000000000 --- a/react-nextjs/react-host-remote/e2e/CommonCheck.cy.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; - -const basePage: BaseMethods = new BaseMethods(); - -const appsData = [ - { - appName: Constants.elementsText.reactHostRemoteApp.containers.header, - appDiv: Constants.elementsText.reactHostRemoteApp.containers.div, - host: 8080, - }, - - { - appName: Constants.elementsText.reactHostRemoteApp.hostedDiv, - appDiv: Constants.elementsText.reactHostRemoteApp.containers.div, - appButtonInvoices: Constants.elementsText.reactHostRemoteApp.buttons.invoices, - appButtonExpenses: Constants.elementsText.reactHostRemoteApp.buttons.expenses, - appButtonInvoicesH2: Constants.elementsText.reactHostRemoteApp.buttons.invoices, - appButtonExpensesH2: Constants.elementsText.reactHostRemoteApp.buttons.expenses, - host: 8081, - }, -]; - -appsData.forEach( - (property: { - appName: string; - appDiv: string; - host: number; - appButtonInvoices?: string; - appButtonExpenses?: string; - appButtonInvoicesH2?: string; - appButtonExpensesH2?: string; - }) => { - describe(`React NextJS -- React Host Remote`, () => { - context(`Check react-host-remote ${property.appName} starts and running`, () => { - before(() => { - basePage.openLocalhost({ - number: property.host, - }); - }); - it(`Check Host ${property.appName} UI and Invoices, Expenses buttons`, () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: property.appName, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: property.appDiv, - }); - if (property.host == 8081) { - if (property.appButtonInvoices) { - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.link, - text: property.appButtonInvoices, - }); - } - if (property.appButtonInvoicesH2) { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: property.appButtonInvoicesH2, - }); - } - basePage.goBack(); - if (property.appButtonExpenses) { - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.link, - text: property.appButtonExpenses, - }); - } - if (property.appButtonExpensesH2) - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: property.appButtonExpensesH2, - }); - } - }); - }); - }); - }, -); diff --git a/react-nextjs/react-host-remote/e2e/CommonCheck.spec.ts b/react-nextjs/react-host-remote/e2e/CommonCheck.spec.ts new file mode 100644 index 00000000000..df0d2d0950d --- /dev/null +++ b/react-nextjs/react-host-remote/e2e/CommonCheck.spec.ts @@ -0,0 +1,73 @@ +import { test, expect } from '@playwright/test'; +import { baseSelectors } from '../../../cypress-e2e/common/selectors'; +import { Constants } from '../../../cypress-e2e/fixtures/constants'; + +const appsData = [ + { + appName: Constants.elementsText.reactHostRemoteApp.containers.header, + appDiv: Constants.elementsText.reactHostRemoteApp.containers.div, + host: 8080, + }, + { + appName: Constants.elementsText.reactHostRemoteApp.hostedDiv, + appDiv: Constants.elementsText.reactHostRemoteApp.containers.div, + appButtonInvoices: Constants.elementsText.reactHostRemoteApp.buttons.invoices, + appButtonExpenses: Constants.elementsText.reactHostRemoteApp.buttons.expenses, + appButtonInvoicesH2: Constants.elementsText.reactHostRemoteApp.buttons.invoices, + appButtonExpensesH2: Constants.elementsText.reactHostRemoteApp.buttons.expenses, + host: 8081, + }, +] as const; + +test.describe('React Host Remote', () => { + for (const property of appsData) { + test(`renders expected UI on localhost:${property.host}`, async ({ page }) => { + const url = `http://localhost:${property.host}/`; + await page.goto(url); + + const headerDiv = page + .locator(baseSelectors.tags.coreElements.div) + .filter({ hasText: property.appName }); + await expect(headerDiv).toBeVisible(); + + const containerDiv = page + .locator(baseSelectors.tags.coreElements.div) + .filter({ hasText: property.appDiv }); + await expect(containerDiv).toBeVisible(); + + if (property.host === 8081) { + if (property.appButtonInvoices) { + const invoicesLink = page + .locator(baseSelectors.tags.coreElements.link) + .filter({ hasText: property.appButtonInvoices }); + await expect(invoicesLink).toBeVisible(); + await invoicesLink.click(); + } + + if (property.appButtonInvoicesH2) { + const invoicesHeader = page + .locator(baseSelectors.tags.headers.h2) + .filter({ hasText: property.appButtonInvoicesH2 }); + await expect(invoicesHeader).toBeVisible(); + } + + await page.goBack(); + + if (property.appButtonExpenses) { + const expensesLink = page + .locator(baseSelectors.tags.coreElements.link) + .filter({ hasText: property.appButtonExpenses }); + await expect(expensesLink).toBeVisible(); + await expensesLink.click(); + } + + if (property.appButtonExpensesH2) { + const expensesHeader = page + .locator(baseSelectors.tags.headers.h2) + .filter({ hasText: property.appButtonExpensesH2 }); + await expect(expensesHeader).toBeVisible(); + } + } + }); + } +}); diff --git a/react-nextjs/react-host-remote/package.json b/react-nextjs/react-host-remote/package.json index 038dab23f85..2b76c3a635d 100644 --- a/react-nextjs/react-host-remote/package.json +++ b/react-nextjs/react-host-remote/package.json @@ -6,12 +6,14 @@ "main": "index.js", "scripts": { "start": "concurrently \"cd host; npm run dev\" \"cd remote; npm run dev\"", - "e2e:ci:legacy": "pnpm start & wait-on http-get://localhost:8080/ && npx cypress run --config-file ../../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome" + "test:e2e": "playwright test", + "test:e2e:ui": "playwright test --ui" }, "author": "Omher", "license": "ISC", "devDependencies": { "concurrently": "8.2.2", - "wait-on": "7.2.0" + "wait-on": "7.2.0", + "@playwright/test": "^1.54.2" } } diff --git a/react-nextjs/react-host-remote/playwright.config.ts b/react-nextjs/react-host-remote/playwright.config.ts new file mode 100644 index 00000000000..e71b66c6feb --- /dev/null +++ b/react-nextjs/react-host-remote/playwright.config.ts @@ -0,0 +1,48 @@ +import { defineConfig, devices } from '@playwright/test'; + +const isCI = !!process.env.CI; + +export default defineConfig({ + testDir: './e2e', + timeout: 60_000, + expect: { + timeout: 15_000, + }, + fullyParallel: true, + forbidOnly: isCI, + retries: isCI ? 1 : 0, + workers: isCI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost:8080', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1920, height: 1080 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + command: 'pnpm run dev', + cwd: 'remote', + port: 8081, + reuseExistingServer: !isCI, + timeout: 180_000, + }, + { + command: 'pnpm run dev', + cwd: 'host', + port: 8080, + reuseExistingServer: !isCI, + timeout: 180_000, + }, + ], +}); diff --git a/react-storybook/e2e/checkCraApps.cy.ts b/react-storybook/e2e/checkCraApps.cy.ts deleted file mode 100644 index f8c3e5488d2..00000000000 --- a/react-storybook/e2e/checkCraApps.cy.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { baseSelectors } from '../../cypress-e2e/common/selectors'; -import { BaseMethods } from '../../cypress-e2e/common/base'; -import { Constants } from '../../cypress-e2e/fixtures/constants'; - -const basePage: BaseMethods = new BaseMethods(); - -const appsData = [ - { - appNameText: Constants.commonConstantsData.basicComponents.host, - host: 3000, - }, - { - appNameText: Constants.commonConstantsData.basicComponents.remote, - host: 3002, - }, -]; - -appsData.forEach((property: { appNameText: string; host: number }) => { - const appName = property.host === 3000 ? appsData[0].appNameText : appsData[1].appNameText; - - describe(`Check ${appName}`, () => { - beforeEach(() => { - basePage.openLocalhost(property.host); - }); - - it(`Check ${appName} build and running`, () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.h1, - text: Constants.commonConstantsData.basicComponents.basicHostRemote, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.h2, - text: property.appNameText, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.button, - text: Constants.elementsText.craApp.buttonText, - }); - }); - }); -}); diff --git a/react-storybook/e2e/checkCraApps.spec.ts b/react-storybook/e2e/checkCraApps.spec.ts new file mode 100644 index 00000000000..8bf474e7df9 --- /dev/null +++ b/react-storybook/e2e/checkCraApps.spec.ts @@ -0,0 +1,43 @@ +import { test } from '@playwright/test'; +import { BaseMethods } from '../../playwright-e2e/common/base'; +import { baseSelectors } from '../../playwright-e2e/common/selectors'; +import { Constants } from '../../playwright-e2e/fixtures/constants'; + +const appsData = [ + { + appNameText: Constants.commonConstantsData.basicComponents.host, + port: 3000, + }, + { + appNameText: Constants.commonConstantsData.basicComponents.remote, + port: 3002, + }, +]; + +appsData.forEach(({ appNameText, port }) => { + test.describe(`Check ${appNameText}`, () => { + test.beforeEach(async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: port }); + }); + + test(`Check ${appNameText} build and running`, async ({ page }) => { + const basePage = new BaseMethods(page); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h1, + text: Constants.commonConstantsData.basicComponents.basicHostRemote, + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h2, + text: appNameText, + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.elementsText.craApp.buttonText, + }); + }); + }); +}); diff --git a/react-storybook/host/.storybook/main.js b/react-storybook/host/.storybook/main.js index f5ee49708bb..65d347bc551 100644 --- a/react-storybook/host/.storybook/main.js +++ b/react-storybook/host/.storybook/main.js @@ -1,4 +1,5 @@ import { dirname, join } from 'path'; +import { webpack as withModuleFederation } from '@module-federation/storybook-addon'; import moduleFederationConfig from '../modulefederation.config'; /** @@ -19,17 +20,16 @@ const config = { getAbsolutePath('@storybook/addon-essentials'), getAbsolutePath('@chromatic-com/storybook'), getAbsolutePath('@storybook/addon-interactions'), - { - name: '@module-federation/storybook-addon', - options: { - moduleFederationConfig, - }, - } ], framework: { name: getAbsolutePath('@storybook/react-webpack5'), options: {}, }, staticDirs: ['../public'], + webpackFinal: async (baseConfig, options) => + withModuleFederation(baseConfig, { + ...options, + moduleFederationConfig, + }), }; export default config; diff --git a/react-storybook/host/package.json b/react-storybook/host/package.json index 33ce2757bad..0d90b8ac570 100644 --- a/react-storybook/host/package.json +++ b/react-storybook/host/package.json @@ -61,6 +61,7 @@ "prop-types": "15.8.1", "storybook": "^8.2.6", "webpack": "5.101.0", - "webpack-virtual-modules": "0.6.2" + "webpack-virtual-modules": "0.6.2", + "eslint": "8.57.0" } } \ No newline at end of file diff --git a/react-storybook/host/src/App.js b/react-storybook/host/src/App.js index 22b8e1a79f3..3be9d15bde6 100644 --- a/react-storybook/host/src/App.js +++ b/react-storybook/host/src/App.js @@ -7,7 +7,7 @@ const App = () => (

Basic Host-Remote

Host Application

- Click here + Hello from remote ); diff --git a/react-storybook/package.json b/react-storybook/package.json index b6515191fcc..6336a50ec62 100644 --- a/react-storybook/package.json +++ b/react-storybook/package.json @@ -13,9 +13,16 @@ "start": "concurrently 'cd ./host && pnpm start' 'cd ./remote && pnpm start'", "build": "concurrently 'cd ./host && pnpm build' 'cd ./remote && pnpm build'", "serve": "concurrently 'cd ./host && pnpm serve' 'cd ./remote && pnpm serve'", - "clean": "concurrently 'cd ./host && pnpm clean' 'cd ./remote && pnpm clean'" + "clean": "concurrently 'cd ./host && pnpm clean' 'cd ./remote && pnpm clean'", + "test:e2e": "npx playwright test", + "test:e2e:ui": "npx playwright test --ui", + "test:e2e:debug": "npx playwright test --debug", + "e2e:ci": "pnpm build && npx playwright install --with-deps && npx playwright test --reporter=list" }, "devDependencies": { - "concurrently": "8.2.2" + "concurrently": "8.2.2", + "@playwright/test": "^1.54.2", + "playwright": "^1.54.2", + "wait-on": "7.2.0" } } diff --git a/react-storybook/playwright.config.ts b/react-storybook/playwright.config.ts new file mode 100644 index 00000000000..c3f11de49e6 --- /dev/null +++ b/react-storybook/playwright.config.ts @@ -0,0 +1,61 @@ +import { defineConfig, devices } from '@playwright/test'; + +const reuseExistingServer = !process.env.CI; + +export default defineConfig({ + testDir: './e2e', + timeout: 120_000, + expect: { + timeout: 10_000, + }, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 1 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost:3000', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1280, height: 720 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + command: 'pnpm start', + cwd: 'remote', + env: { + BROWSER: 'none', + }, + port: 3002, + reuseExistingServer, + timeout: 120_000, + }, + { + command: 'pnpm start', + cwd: 'host', + env: { + BROWSER: 'none', + }, + port: 3000, + reuseExistingServer, + timeout: 120_000, + }, + { + command: 'pnpm storybook --ci --no-open', + cwd: 'host', + port: 6006, + reuseExistingServer, + timeout: 120_000, + }, + ], +}); diff --git a/react-storybook/remote/package.json b/react-storybook/remote/package.json index d3760831ad8..1d398885079 100644 --- a/react-storybook/remote/package.json +++ b/react-storybook/remote/package.json @@ -14,6 +14,10 @@ "test": "react-scripts test", "eject": "react-scripts eject" }, + "devDependencies": { + "webpack": "5.101.0", + "eslint": "8.57.0" + }, "eslintConfig": { "extends": [ "react-app" diff --git a/react-storybook/remote/src/App.js b/react-storybook/remote/src/App.js index 6e274825978..8e98e776f34 100644 --- a/react-storybook/remote/src/App.js +++ b/react-storybook/remote/src/App.js @@ -4,7 +4,7 @@ const App = () => (

Basic Host-Remote

Remote

- LocalButton + Hello from remote
); diff --git a/redux-reducer-injection/cypress.env.json b/redux-reducer-injection/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/redux-reducer-injection/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/redux-reducer-injection/e2e/checkApplications.cy.ts b/redux-reducer-injection/e2e/checkApplications.cy.ts deleted file mode 100644 index b46c4acdeff..00000000000 --- a/redux-reducer-injection/e2e/checkApplications.cy.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { baseSelectors } from '../../cypress-e2e/common/selectors'; -import { BaseMethods } from '../../cypress-e2e/common/base'; -import { Constants } from '../../cypress-e2e/fixtures/constants'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Redux Reducer Injection', () => { - context('Checks application', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3001, - }); - }); - let appText = [ - { - appText: Constants.commonPhrases.reduxReducerInjectionApp.welcomeMessage, - }, - { - appText: Constants.commonPhrases.reduxReducerInjectionApp.remoteAppText, - }, - { - appText: Constants.commonPhrases.reduxReducerInjectionApp.remoteAppsNameFromReduxStore, - }, - ]; - - appText.forEach(function (property: { appText: string }) { - it(`Check that ${property.appText} text is visible`, () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: property.appText, - visibilityState: 'be.visible', - }); - }); - }); - - it('Checks dispatch RemoteApp NewName Button visibility', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.dispatchRemoteApp.button, - }); - }); - - it('Checks that Remote App name Updated', () => { - basePage.fillField({ - selector: baseSelectors.tags.inputs.input, - text: Constants.elementsText.dispatchRemoteApp.input, - }); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.dispatchRemoteApp.button, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.elementsText.dispatchRemoteApp.input, - }); - }); - }); -}); diff --git a/redux-reducer-injection/e2e/checkApplications.spec.ts b/redux-reducer-injection/e2e/checkApplications.spec.ts new file mode 100644 index 00000000000..de6025ea3b6 --- /dev/null +++ b/redux-reducer-injection/e2e/checkApplications.spec.ts @@ -0,0 +1,55 @@ +import { test } from '@playwright/test'; + +import { BaseMethods } from '../../playwright-e2e/common/base'; +import { baseSelectors } from '../../cypress-e2e/common/selectors'; +import { Constants } from '../../cypress-e2e/fixtures/constants'; + +const host = 3001; +const appTexts = [ + Constants.commonPhrases.reduxReducerInjectionApp.welcomeMessage, + Constants.commonPhrases.reduxReducerInjectionApp.remoteAppText, + Constants.commonPhrases.reduxReducerInjectionApp.remoteAppsNameFromReduxStore, +]; + +test.describe('Redux Reducer Injection', () => { + let basePage: BaseMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: host }); + }); + + appTexts.forEach(text => { + test(`Check that "${text}" text is visible`, async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text, + visibilityState: 'be.visible', + }); + }); + }); + + test('Checks dispatch RemoteApp NewName Button visibility', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.elementsText.dispatchRemoteApp.button, + visibilityState: 'be.visible', + }); + }); + + test('Checks that Remote App name gets updated', async () => { + await basePage.fillField({ + selector: baseSelectors.tags.inputs.input, + text: Constants.elementsText.dispatchRemoteApp.input, + }); + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.elementsText.dispatchRemoteApp.button, + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: Constants.elementsText.dispatchRemoteApp.input, + visibilityState: 'be.visible', + }); + }); +}); diff --git a/redux-reducer-injection/package.json b/redux-reducer-injection/package.json index 9ad1bbd9f6b..d1a6c65dda7 100644 --- a/redux-reducer-injection/package.json +++ b/redux-reducer-injection/package.json @@ -8,10 +8,15 @@ "build": "pnpm run --filter redux-reducer-injection_app* build", "serve": "pnpm run --filter redux-reducer-injection_app* --parallel serve", "clean": "pnpm run --filter redux-reducer-injection_app* --parallel clean", - "e2e:ci": "pnpm start & sleep 5 && wait-on tcp:3001 && wait-on tcp:3002 && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome" + "test:e2e": "pnpm exec playwright test", + "test:e2e:ui": "pnpm exec playwright test --ui", + "test:e2e:debug": "pnpm exec playwright test --debug", + "e2e:ci": "pnpm exec playwright install --with-deps && pnpm exec playwright test --reporter=list" }, "devDependencies": { + "@playwright/test": "^1.54.2", "concurrently": "8.2.2", + "playwright": "^1.54.2", "wait-on": "7.2.0" } } diff --git a/redux-reducer-injection/playwright.config.ts b/redux-reducer-injection/playwright.config.ts new file mode 100644 index 00000000000..6f7541991af --- /dev/null +++ b/redux-reducer-injection/playwright.config.ts @@ -0,0 +1,22 @@ +import { defineConfig } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e', + timeout: 120_000, + expect: { + timeout: 10_000, + }, + retries: process.env.CI ? 1 : 0, + workers: 1, + reporter: 'list', + use: { + baseURL: 'http://localhost:3001', + trace: 'on-first-retry', + }, + webServer: { + command: 'pnpm run start', + url: 'http://localhost:3001', + timeout: 240_000, + reuseExistingServer: !process.env.CI, + }, +}); diff --git a/rspack-webpack-interop/cypress.env.json b/rspack-webpack-interop/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/rspack-webpack-interop/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App1.cy.ts b/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App1.cy.ts deleted file mode 100644 index 05ebf8ba48b..00000000000 --- a/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App1.cy.ts +++ /dev/null @@ -1,328 +0,0 @@ -import { Constants } from '../../cypress-e2e/fixtures/constants'; -import { baseSelectors, selectors } from '../../cypress-e2e/common/selectors'; -import { BaseMethods } from '../../cypress-e2e/common/base'; -import { CssAttr } from '../../cypress-e2e/types/cssAttr'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Comprehencive Demo React 18', () => { - context('Check is Comprehensive Demo App1 working and have elements', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3001, - }); - }); - - it('Check App build and running & Check app elements exist', () => { - basePage.checkElementVisibility({ - selector: selectors.comprehensiveDemoApp.blockSelectors.sideBarBlock, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h6, - text: Constants.elementsText.comprehensiveDemoApp.App1.sideNavHeaderText, - }); - Constants.elementsText.comprehensiveDemoApp.comprehensiveDemoDemoPages.forEach(demoPage => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.spans.span, - text: demoPage.name, - }); - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.coreElements.link, - index: demoPage.index, - attr: Constants.commonConstantsData.commonAttributes.attr, - prop: Constants.commonConstantsData.commonAttributes.href, - value: demoPage.link, - }); - }); - Constants.elementsText.comprehensiveDemoApp.comprehensiveDemoDemoPages.forEach( - application => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.spans.span, - text: application.name, - }); - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.coreElements.link, - index: application.index, - attr: Constants.commonConstantsData.commonAttributes.attr, - prop: Constants.commonConstantsData.commonAttributes.href, - value: application.link, - }); - }, - ); - basePage.checkElementVisibility({ - selector: baseSelectors.tags.headers.header, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h6, - text: Constants.elementsText.comprehensiveDemoApp.App1.mainPage.headerText, - }); - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.headers.header, - prop: CssAttr.backgroundColor, - value: Constants.color.oceanBluePearl, - }); - basePage.checkElementVisibility({ - selector: selectors.comprehensiveDemoApp.alert, - }); - basePage.checkElementWithTextPresence({ - selector: selectors.comprehensiveDemoApp.alert, - text: Constants.elementsText.comprehensiveDemoApp.App1.mainPage.alertMessage, - }); - basePage.checkElementVisibility({ - selector: selectors.comprehensiveDemoApp.closeButton, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: Constants.elementsText.comprehensiveDemoApp.App1.mainPage.paragraphs.first, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: Constants.elementsText.comprehensiveDemoApp.App1.mainPage.paragraphs.second, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: Constants.elementsText.comprehensiveDemoApp.App1.mainPage.paragraphs.third, - }); - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.coreElements.link, - index: Constants.commonConstantsData.commonIndexes.ten, - attr: Constants.commonConstantsData.commonAttributes.attr, - prop: Constants.commonConstantsData.commonAttributes.href, - value: Constants.hrefs.comprehensiveDemoApp.gitHub, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.comprehensiveDemoApp.App1.mainPage.buttonText, - }); - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.coreElements.button, - prop: CssAttr.backgroundColor, - value: Constants.color.paleVioletRed, - }); - }); - - it('Check Main Tab Functionality', () => { - basePage.checkBrowserAlertByText({ - selector: baseSelectors.tags.coreElements.button, - alertMessage: Constants.elementsText.comprehensiveDemoApp.alertMessage, - }); - basePage.clickElementBySelector({ - selector: selectors.comprehensiveDemoApp.closeButton, - }); - basePage.checkElementHaveProperty({ - selector: selectors.comprehensiveDemoApp.alert, - attr: Constants.commonConstantsData.commonAttributes.attr, - prop: Constants.commonConstantsData.commonAttributes.style, - value: Constants.commonConstantsData.commonAttributes.displayNone, - }); - Constants.elementsText.comprehensiveDemoApp.comprehensiveDemoDemoPages.forEach(demoPage => { - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.link, - text: demoPage.name, - }); - basePage.checkUrlText(demoPage.link, true); - }); - Constants.elementsText.comprehensiveDemoApp.comprehensiveDemoDemoPages.forEach( - application => { - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.link, - text: application.name, - }); - basePage.checkUrlText(application.link, true); - basePage.goBack(); - }, - ); - }); - - it('Check UI Library elements', () => { - basePage.openLocalhost({ - number: 3001, - path: Constants.hrefs.comprehensiveDemoApp.uiLibrary, - }); - basePage.checkElementVisibility({ - selector: baseSelectors.tags.headers.header, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h6, - text: Constants.elementsText.comprehensiveDemoApp.App1.uiLibrary.headerText, - }); - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.headers.header, - prop: CssAttr.backgroundColor, - value: Constants.color.oceanBluePearl, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: Constants.elementsText.comprehensiveDemoApp.App1.uiLibrary.paragraphs.first, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: Constants.elementsText.comprehensiveDemoApp.App1.uiLibrary.paragraphs.second, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: Constants.elementsText.comprehensiveDemoApp.App1.uiLibrary.paragraphs.third, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.commonConstantsData.commonButtonWithEmoji, - }); - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.coreElements.link, - index: Constants.commonConstantsData.commonIndexes.ten, - attr: Constants.commonConstantsData.commonAttributes.attr, - prop: Constants.commonConstantsData.commonAttributes.href, - value: Constants.hrefs.comprehensiveDemoApp.app3, - }); - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.coreElements.link, - index: Constants.commonConstantsData.commonIndexes.eleven, - attr: Constants.commonConstantsData.commonAttributes.attr, - prop: Constants.commonConstantsData.commonAttributes.href, - value: Constants.hrefs.comprehensiveDemoApp.routingDemo, - }); - }); - - it('Check Dialog elements', () => { - basePage.openLocalhost({ - number: 3001, - path: Constants.hrefs.comprehensiveDemoApp.demoDialog, - }); - basePage.checkElementVisibility({ - selector: baseSelectors.tags.headers.header, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h6, - text: Constants.elementsText.comprehensiveDemoApp.App1.uiLibrary.dialogHeader, - }); - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.headers.header, - prop: CssAttr.backgroundColor, - value: Constants.color.oceanBluePearl, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: Constants.elementsText.comprehensiveDemoApp.App1.uiLibrary.dialogParagraph, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.comprehensiveDemoApp.App2.openDialogButtonText, - }); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.comprehensiveDemoApp.App2.openDialogButtonText, - }); - basePage.checkElementVisibility({ - selector: selectors.comprehensiveDemoApp.app2Dialog, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: Constants.elementsText.comprehensiveDemoApp.App2.dialogHeader, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: Constants.elementsText.comprehensiveDemoApp.App2.dialogParagraph, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.comprehensiveDemoApp.App2.dialogButtonText, - }); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.comprehensiveDemoApp.App2.dialogButtonText, - }); - }); - - it('Check Svelte Page elements', () => { - basePage.openLocalhost({ - number: 3001, - path: Constants.hrefs.comprehensiveDemoApp.demoSvelte, - }); - basePage.checkElementVisibility({ - selector: baseSelectors.tags.headers.header, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h6, - text: Constants.elementsText.comprehensiveDemoApp.App1.svelte.headerText, - }); - basePage.checkElementVisibility({ - selector: baseSelectors.tags.inputs.input, - }); - basePage.fillField({ - selector: baseSelectors.tags.inputs.input, - text: Constants.commonConstantsData.standardPhrase, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: Constants.updatedConstantsData.baseSvelteIntroMessage, - }); - }); - - it('Check Routing elements', () => { - basePage.openLocalhost({ - number: 3001, - path: Constants.hrefs.comprehensiveDemoApp.routingDemo.replace( - 'http://localhost:3001/', - '', - ), - }); - basePage.checkElementVisibility({ - selector: baseSelectors.tags.headers.header, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h6, - text: Constants.elementsText.comprehensiveDemoApp.App1.routing.headerText, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: Constants.elementsText.comprehensiveDemoApp.App1.routing.paragraphs.first, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: Constants.elementsText.comprehensiveDemoApp.App1.routing.paragraphs.second, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: Constants.elementsText.comprehensiveDemoApp.App1.routing.paragraphs.third, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: Constants.elementsText.comprehensiveDemoApp.App1.routing.paragraphs.forth, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: Constants.elementsText.comprehensiveDemoApp.App1.routing.paragraphs.forth, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.comprehensiveDemoApp.App2.dialogTabs.firstTab.name, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.comprehensiveDemoApp.App2.dialogTabs.firstTab.name, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.elementsText.comprehensiveDemoApp.App2.dialogTabs.firstTab.paragraphText, - }); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.comprehensiveDemoApp.App2.dialogTabs.secondTab.name, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.elementsText.comprehensiveDemoApp.App2.dialogTabs.secondTab.paragraphText, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.comprehensiveDemoApp.App2.dialogTabs.secondTab.buttonText, - }); - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.comprehensiveDemoApp.App2.dialogTabs.secondTab.buttonText, - prop: CssAttr.backgroundColor, - value: Constants.color.paleVioletRed, - }); - }); - }); -}); diff --git a/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App1.spec.ts b/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App1.spec.ts new file mode 100644 index 00000000000..465a42666ec --- /dev/null +++ b/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App1.spec.ts @@ -0,0 +1,194 @@ +import { test, expect } from '@playwright/test'; +import type { Page } from '@playwright/test'; + +const base = 'http://localhost:3001'; + +const demoPages = [ + { name: 'Main', hash: '#/' }, + { name: 'UI Library', hash: '#/ui-library' }, + { name: 'Dialog', hash: '#/dialog' }, + { name: 'Svelte Page', hash: '#/svelte' }, + { name: 'Routing', hash: '#/routing/foo' }, +]; + +const appLinks = [ + { name: 'App #1', href: 'http://localhost:3001' }, + { name: 'App #2', href: 'http://localhost:3002' }, + { name: 'App #3', href: 'http://localhost:3003' }, + { name: 'App #4', href: 'http://localhost:3004' }, + { name: 'App #5', href: 'http://localhost:3005' }, +]; + +const mainPageParagraphs = [ + 'Welcome to the Module Federation Demo!', + 'Click any of the items on the left to get started.', + 'Feel free to leave me feedback', +]; + +const uiLibraryParagraphs = [ + 'Simple example showing host app and external component using separate CSS solutions.', + 'This Button component can be found in App #3.', + 'This button is also used in the routing demo.', +]; + +const routingParagraphs = [ + 'The following tab components are being imported remotely from "bravo-app".', + "Notice that your browser's route is /routing/ depending on which tab is active.", + 'If you open http://localhost:3002 you will see the same tab components at the root level', + 'The "Bar" tab also lazily renders the styled-component Button from the UI Library demo only when rendered.', +]; + +const expectAppBar = async (page: Page, title: string) => { + const appBar = page.locator('header').first(); + await expect(appBar).toBeVisible(); + await expect(appBar).toHaveCSS('background-color', 'rgb(63, 81, 181)'); + await expect(page.getByRole('heading', { name: title })).toBeVisible(); +}; + +test.describe('Comprehensive Demo App1', () => { + test('main page displays sidebar links and elements', async ({ page }) => { + await page.goto(base); + + await expect(page.getByRole('heading', { name: 'SideNav' })).toBeVisible(); + await expect(page.getByText('Demo Pages')).toBeVisible(); + await expect(page.getByText('Apps')).toBeVisible(); + + for (const { name, hash } of demoPages) { + const link = page.locator('a', { hasText: name }).first(); + await expect(link).toBeVisible(); + await expect(link).toHaveAttribute('href', hash); + } + + for (const { name, href } of appLinks) { + const link = page.locator(`a[href="${href}"]`).first(); + await expect(link).toBeVisible(); + await expect(link).toHaveAttribute('href', href); + await expect(link).toContainText(name); + await expect(link).toContainText(href); + } + + await expectAppBar(page, 'Module Federation Demo'); + + const alert = page.locator('.alert'); + await expect(alert).toBeVisible(); + await expect(alert).toHaveText(/Alert from LitElement/); + await expect(page.locator('.closebtn')).toBeVisible(); + + for (const paragraph of mainPageParagraphs) { + await expect(page.locator('p', { hasText: paragraph })).toBeVisible(); + } + + await expect( + page.getByRole('link', { name: 'https://github.com/module-federation/mfe-webpack-demo' }), + ).toHaveAttribute('href', 'https://github.com/module-federation/mfe-webpack-demo'); + + const actionButton = page.locator('action-button button'); + await expect(actionButton).toHaveText('Lit Element Action'); + await expect(actionButton).toHaveCSS('background-color', 'rgb(219, 112, 147)'); + }); + + test('main tab functionality', async ({ page }) => { + await page.goto(base); + + page.once('dialog', async dialog => { + expect(dialog.message()).toBe('You have pressed a button.'); + await dialog.accept(); + }); + + await page.locator('action-button button').click(); + await page.locator('.closebtn').click(); + await expect(page.locator('.alert')).toBeHidden(); + + for (const { name, hash } of demoPages) { + await page.locator('a', { hasText: name }).first().click(); + await expect(page).toHaveURL(`${base}/${hash}`); + } + + await page.locator('a', { hasText: 'Main' }).first().click(); + await expect(page).toHaveURL(`${base}/#/`); + + for (const { href } of appLinks) { + const response = await page.request.get(href); + expect(response.ok()).toBeTruthy(); + } + }); + + test('UI library page renders remote button', async ({ page }) => { + await page.goto(`${base}/#/ui-library`); + + await expectAppBar(page, 'UI Library Demo'); + + for (const paragraph of uiLibraryParagraphs) { + await expect(page.locator('p', { hasText: paragraph })).toBeVisible(); + } + + await expect(page.locator('a[href="http://localhost:3003/"]').first()).toHaveAttribute( + 'href', + 'http://localhost:3003/', + ); + await expect(page.locator('a[href="http://localhost:3001/#/routing/foo"]').first()).toHaveAttribute( + 'href', + 'http://localhost:3001/#/routing/foo', + ); + + const styledButton = page.getByRole('button', { name: '💅 Button' }); + await expect(styledButton).toBeVisible(); + await expect(styledButton).toHaveCSS('background-color', 'rgb(219, 112, 147)'); + }); + + test('dialog page loads and dialog opens', async ({ page }) => { + await page.goto(`${base}/#/dialog`); + + await expectAppBar(page, 'Dialog Demo'); + await expect( + page.locator('p', { + hasText: + 'Clicking the button below will render a Dialog using React Portal. This dialog component is being lazy loaded from the app #2.', + }), + ).toBeVisible(); + + await page.getByRole('button', { name: 'Open Dialog' }).click(); + const dialog = page.locator('[role="dialog"]'); + await expect(dialog.getByRole('heading', { name: 'Dialog Example' })).toBeVisible(); + await expect( + dialog.getByText('This is a dialog from the Material UI app rendered in a React Portal.'), + ).toBeVisible(); + await dialog.getByRole('button', { name: 'Nice' }).click(); + await expect(dialog).not.toBeVisible(); + }); + + test('svelte page updates greeting', async ({ page }) => { + await page.goto(`${base}/#/svelte`); + + await expectAppBar(page, 'Svelte Page'); + + await expect(page.locator('input[type="text"]').first()).toBeVisible(); + await page.fill('input[type="text"]', 'Module Federation rocks!'); + await expect(page.getByRole('heading', { name: 'Hello Module Federation rocks!' })).toBeVisible(); + }); + + test('routing page renders federated tabs', async ({ page }) => { + await page.goto(`${base}/#/routing/foo`); + + await expectAppBar(page, 'Routing Demo'); + + for (const paragraph of routingParagraphs) { + await expect(page.locator('p', { hasText: paragraph })).toBeVisible(); + } + + const fooTab = page.getByRole('tab', { name: 'Foo' }); + const barTab = page.getByRole('tab', { name: 'Bar' }); + await expect(fooTab).toBeVisible(); + await expect(barTab).toBeVisible(); + + await fooTab.click(); + await expect(page.locator('div', { hasText: 'Foo Content' })).toBeVisible(); + + await barTab.click(); + await expect(page.locator('div', { hasText: 'Bar Content' })).toBeVisible(); + await expect(page.getByRole('button', { name: 'Bar Button' })).toHaveCSS( + 'background-color', + 'rgb(219, 112, 147)', + ); + }); +}); diff --git a/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App2.cy.ts b/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App2.cy.ts deleted file mode 100644 index 0fc24d62ef9..00000000000 --- a/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App2.cy.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { selectors } from '../../cypress-e2e/common/selectors'; -import { BaseMethods } from '../../cypress-e2e/common/base'; -import { baseSelectors } from '../../cypress-e2e/common/selectors'; -import { Constants } from '../../cypress-e2e/fixtures/constants'; -import { CssAttr } from '../../cypress-e2e/types/cssAttr'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Comprehencive Demo React 18', () => { - context('Check is Comprehensive Demo App2 working and have elements', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3002, - }); - }); - - it('Check App build and running & Check app elements exist', () => { - basePage.checkElementVisibility({ - selector: selectors.comprehensiveDemoApp.blockSelectors.firstBlock, - }); - basePage.checkElementVisibility({ - selector: baseSelectors.tags.headers.header, - }); - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.headers.header, - prop: CssAttr.backgroundColor, - value: Constants.color.oceanBluePearl, - }); - basePage.checkElementVisibility({ - selector: selectors.comprehensiveDemoApp.blockSelectors.secondBlock, - }); - basePage.checkElementHaveProperty({ - selector: selectors.comprehensiveDemoApp.blockSelectors.secondBlock, - prop: CssAttr.backgroundColor, - value: Constants.color.alabaster, - }); - basePage.checkElementVisibility({ - selector: selectors.comprehensiveDemoApp.blockSelectors.thirdBlock, - }); - basePage.checkElementHaveProperty({ - selector: selectors.comprehensiveDemoApp.blockSelectors.thirdBlock, - prop: CssAttr.backgroundColor, - value: Constants.color.white, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h6, - text: Constants.elementsText.comprehensiveDemoApp.App2.headerText, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h6, - text: Constants.elementsText.comprehensiveDemoApp.App2.paragraphText, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.comprehensiveDemoApp.App2.openDialogButtonText, - }); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.comprehensiveDemoApp.App2.openDialogButtonText, - }); - basePage.checkElementVisibility({ - selector: selectors.comprehensiveDemoApp.app2Dialog, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: Constants.elementsText.comprehensiveDemoApp.App2.dialogHeader, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: Constants.elementsText.comprehensiveDemoApp.App2.dialogParagraph, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.comprehensiveDemoApp.App2.dialogButtonText, - }); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.comprehensiveDemoApp.App2.dialogButtonText, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h6, - text: Constants.elementsText.comprehensiveDemoApp.App2.dialogTabs.headerText, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.comprehensiveDemoApp.App2.dialogTabs.firstTab.name, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.elementsText.comprehensiveDemoApp.App2.dialogTabs.firstTab.paragraphText, - }); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.comprehensiveDemoApp.App2.dialogTabs.secondTab.name, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.comprehensiveDemoApp.App2.dialogTabs.secondTab.name, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.elementsText.comprehensiveDemoApp.App2.dialogTabs.secondTab.paragraphText, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.comprehensiveDemoApp.App2.dialogTabs.secondTab.buttonText, - }); - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.comprehensiveDemoApp.App2.dialogTabs.secondTab.buttonText, - prop: CssAttr.backgroundColor, - value: Constants.color.paleVioletRed, - }); - }); - }); -}); diff --git a/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App2.spec.ts b/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App2.spec.ts new file mode 100644 index 00000000000..059c44e4573 --- /dev/null +++ b/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App2.spec.ts @@ -0,0 +1,39 @@ +import { test, expect } from '@playwright/test'; + +const base = 'http://localhost:3002'; + +test.describe('Comprehensive Demo App2', () => { + test('renders blocks, dialog and tabs', async ({ page }) => { + await page.goto(base); + + await expect(page.locator('header').first()).toHaveCSS('background-color', 'rgb(63, 81, 181)'); + await expect(page.getByRole('heading', { name: 'Material UI App' })).toBeVisible(); + await expect(page.getByRole('heading', { name: 'Dialog Component' })).toBeVisible(); + + const openDialogButton = page.getByRole('button', { name: 'Open Dialog' }); + await expect(openDialogButton).toBeVisible(); + await openDialogButton.click(); + + const dialog = page.locator('[role="dialog"]'); + await expect(dialog.getByRole('heading', { name: 'Dialog Example' })).toBeVisible(); + await expect( + dialog.getByText('This is a dialog from the Material UI app rendered in a React Portal.'), + ).toBeVisible(); + await dialog.getByRole('button', { name: 'Nice' }).click(); + await expect(dialog).not.toBeVisible(); + + await expect(page.getByRole('heading', { name: 'Tabs Component' })).toBeVisible(); + const fooTab = page.getByRole('tab', { name: 'Foo' }); + const barTab = page.getByRole('tab', { name: 'Bar' }); + await expect(fooTab).toBeVisible(); + await expect(barTab).toBeVisible(); + await expect(page.getByText('Foo Content')).toBeVisible(); + + await barTab.click(); + await expect(page.getByText('Bar Content')).toBeVisible(); + await expect(page.getByRole('button', { name: 'Bar Button' })).toHaveCSS( + 'background-color', + 'rgb(219, 112, 147)', + ); + }); +}); diff --git a/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App3.cy.ts b/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App3.cy.ts deleted file mode 100644 index 3c481e20eb0..00000000000 --- a/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App3.cy.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { Constants } from '../../cypress-e2e/fixtures/constants'; -import { baseSelectors, selectors } from '../../cypress-e2e/common/selectors'; -import { BaseMethods } from '../../cypress-e2e/common/base'; -import { CssAttr } from '../../cypress-e2e/types/cssAttr'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Comprehencive Demo React 18', () => { - context('Check is Comprehensive Demo App3 working and have elements', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3003, - }); - }); - - it('Check App build and running & Check app elements exist', () => { - basePage.checkElementVisibility({ - selector: selectors.comprehensiveDemoApp.blockSelectors.firstBlock, - }); - basePage.checkElementVisibility({ - selector: baseSelectors.tags.headers.header, - }); - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.headers.header, - prop: CssAttr.backgroundColor, - value: Constants.color.oceanBluePearl, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h6, - text: Constants.elementsText.comprehensiveDemoApp.App3.headerText, - }); - basePage.checkElementVisibility({ - selector: selectors.comprehensiveDemoApp.blockSelectors.secondBlock, - }); - basePage.checkElementHaveProperty({ - selector: selectors.comprehensiveDemoApp.blockSelectors.secondBlock, - prop: CssAttr.backgroundColor, - value: Constants.color.alabaster, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.commonConstantsData.commonButtonWithEmoji.replace( - Constants.commonConstantsData.button, - Constants.elementsText.comprehensiveDemoApp.App3.buttonText, - ), - }); - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.coreElements.button, - prop: CssAttr.backgroundColor, - value: Constants.color.paleVioletRed, - }); - }); - }); -}); diff --git a/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App3.spec.ts b/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App3.spec.ts new file mode 100644 index 00000000000..fb19a7ad376 --- /dev/null +++ b/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App3.spec.ts @@ -0,0 +1,16 @@ +import { test, expect } from '@playwright/test'; + +const base = 'http://localhost:3003'; + +test.describe('Comprehensive Demo App3', () => { + test('shows styled button', async ({ page }) => { + await page.goto(base); + + await expect(page.locator('header').first()).toHaveCSS('background-color', 'rgb(63, 81, 181)'); + await expect(page.getByRole('heading', { name: 'Styled Components App' })).toBeVisible(); + + const button = page.getByRole('button', { name: '💅 Test Button' }); + await expect(button).toBeVisible(); + await expect(button).toHaveCSS('background-color', 'rgb(219, 112, 147)'); + }); +}); diff --git a/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App4.cy.ts b/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App4.cy.ts deleted file mode 100644 index fdb2b4b78eb..00000000000 --- a/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App4.cy.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Constants } from '../../cypress-e2e/fixtures/constants'; -import { baseSelectors } from '../../cypress-e2e/common/selectors'; -import { BaseMethods } from '../../cypress-e2e/common/base'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Comprehencive Demo React 18', () => { - context('Check is Comprehensive Demo App4 working and have elements', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3004, - }); - }); - - it('Check App build and running & Check app elements exist', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: Constants.elementsText.comprehensiveDemoApp.App4.headerText, - }); - }); - }); -}); diff --git a/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App4.spec.ts b/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App4.spec.ts new file mode 100644 index 00000000000..156c3808b70 --- /dev/null +++ b/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App4.spec.ts @@ -0,0 +1,8 @@ +import { test, expect } from '@playwright/test'; + +test.describe('Comprehensive Demo App4', () => { + test('shows svelte greeting', async ({ page }) => { + await page.goto('http://localhost:3004'); + await expect(page.locator('h1')).toHaveText('Hello From Svelte world!'); + }); +}); diff --git a/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App5.cy.ts b/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App5.cy.ts deleted file mode 100644 index 7e16ffd5e01..00000000000 --- a/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App5.cy.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Constants } from '../../cypress-e2e/fixtures/constants'; -import { baseSelectors, selectors } from '../../cypress-e2e/common/selectors'; -import { BaseMethods } from '../../cypress-e2e/common/base'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Comprehencive Demo React 18', () => { - context('Check is Comprehensive Demo App5 working and have elements', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3005, - }); - }); - - it('Check App build and running & Check app elements exist', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.comprehensiveDemoApp.App5.buttonText, - }); - basePage.checkElementVisibility({ - selector: selectors.comprehensiveDemoApp.alert, - }); - basePage.checkElementWithTextPresence({ - selector: selectors.comprehensiveDemoApp.alert, - text: Constants.elementsText.comprehensiveDemoApp.App5.alertText, - }); - basePage.checkElementVisibility({ - selector: selectors.comprehensiveDemoApp.closeButton, - }); - }); - - it('Check Application functionality (Alert message & close button exist)', () => { - basePage.checkBrowserAlertByText({ - selector: baseSelectors.tags.coreElements.button, - alertMessage: Constants.elementsText.comprehensiveDemoApp.alertMessage, - }); - basePage.clickElementBySelector({ - selector: selectors.comprehensiveDemoApp.closeButton, - }); - basePage.checkElementHaveProperty({ - selector: selectors.comprehensiveDemoApp.alert, - attr: Constants.commonConstantsData.commonAttributes.attr, - prop: Constants.commonConstantsData.commonAttributes.style, - value: Constants.commonConstantsData.commonAttributes.displayNone, - }); - }); - }); -}); diff --git a/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App5.spec.ts b/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App5.spec.ts new file mode 100644 index 00000000000..707dc8e281f --- /dev/null +++ b/rspack-webpack-interop/e2e/checkComrehensiveDemoReact18App5.spec.ts @@ -0,0 +1,27 @@ +import { test, expect } from '@playwright/test'; + +const base = 'http://localhost:3005'; + +test.describe('Comprehensive Demo App5', () => { + test('shows button and alert', async ({ page }) => { + await page.goto(base); + + const button = page.locator('action-button').locator('button'); + await expect(button).toHaveText('bar'); + await expect(page.locator('.alert')).toHaveText(/Hello/); + await expect(page.locator('.closebtn')).toBeVisible(); + }); + + test('button triggers alert and close hides it', async ({ page }) => { + await page.goto(base); + + page.once('dialog', async dialog => { + expect(dialog.message()).toBe('You have pressed a button.'); + await dialog.accept(); + }); + + await page.locator('action-button').locator('button').click(); + await page.locator('.closebtn').click(); + await expect(page.locator('.alert')).toBeHidden(); + }); +}); diff --git a/rspack-webpack-interop/e2e/runAllComprehensiveDemoReact18Tests.cy.ts b/rspack-webpack-interop/e2e/runAllComprehensiveDemoReact18Tests.cy.ts deleted file mode 100644 index 29469f47c24..00000000000 --- a/rspack-webpack-interop/e2e/runAllComprehensiveDemoReact18Tests.cy.ts +++ /dev/null @@ -1,5 +0,0 @@ -import './checkComrehensiveDemoReact18App1.cy'; -import './checkComrehensiveDemoReact18App2.cy'; -import './checkComrehensiveDemoReact18App3.cy'; -import './checkComrehensiveDemoReact18App4.cy'; -import './checkComrehensiveDemoReact18App5.cy'; diff --git a/rspack-webpack-interop/e2e/runAllComprehensiveDemoReact18Tests.spec.ts b/rspack-webpack-interop/e2e/runAllComprehensiveDemoReact18Tests.spec.ts new file mode 100644 index 00000000000..17caba324ed --- /dev/null +++ b/rspack-webpack-interop/e2e/runAllComprehensiveDemoReact18Tests.spec.ts @@ -0,0 +1,18 @@ +import { test, expect } from '@playwright/test'; + +const apps = [ + { port: 3001, name: 'App 1', selector: 'h6', text: 'Module Federation Demo' }, + { port: 3002, name: 'App 2', selector: 'h6', text: 'Material UI App' }, + { port: 3003, name: 'App 3', selector: 'h6', text: 'Styled Components App' }, + { port: 3004, name: 'App 4', selector: 'h1', text: 'Hello From Svelte world!' }, + { port: 3005, name: 'App 5', selector: 'action-button button', text: 'bar' }, +]; + +apps.forEach(({ port, name, selector, text }) => { + test.describe(name, () => { + test(`build and run ${name}`, async ({ page }) => { + await page.goto(`http://localhost:${port}`); + await expect(page.locator(selector, { hasText: text })).toBeVisible(); + }); + }); +}); diff --git a/rspack-webpack-interop/package.json b/rspack-webpack-interop/package.json index d6dc743440f..03734e21823 100644 --- a/rspack-webpack-interop/package.json +++ b/rspack-webpack-interop/package.json @@ -9,10 +9,15 @@ "legacy:build": "pnpm --filter rspack_webpack_app* legacy:build", "serve": "pnpm --filter rspack_webpack_app* --parallel serve", "clean": "pnpm --filter rspack_webpack_app* --parallel clean", - "e2e:ci": "pnpm start & wait-on http-get://localhost:3001/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome" + "test:e2e": "pnpm exec playwright test", + "test:e2e:ui": "pnpm exec playwright test --ui", + "test:e2e:debug": "pnpm exec playwright test --debug", + "e2e:ci": "pnpm exec playwright install --with-deps && pnpm exec playwright test --reporter=list" }, "devDependencies": { + "@playwright/test": "^1.54.2", "concurrently": "8.2.2", + "playwright": "^1.54.2", "wait-on": "7.2.0" } } diff --git a/rspack-webpack-interop/playwright.config.ts b/rspack-webpack-interop/playwright.config.ts new file mode 100644 index 00000000000..c4fac33345d --- /dev/null +++ b/rspack-webpack-interop/playwright.config.ts @@ -0,0 +1,22 @@ +import { defineConfig } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e', + timeout: 180_000, + expect: { + timeout: 10_000, + }, + retries: process.env.CI ? 1 : 0, + workers: 1, + reporter: 'list', + use: { + baseURL: 'http://localhost:3001', + trace: 'on-first-retry', + }, + webServer: { + command: 'pnpm run start', + url: 'http://localhost:3001', + timeout: 300_000, + reuseExistingServer: !process.env.CI, + }, +}); diff --git a/rspack-webpack-offload/cypress.env.json b/rspack-webpack-offload/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/rspack-webpack-offload/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/rspack-webpack-offload/e2e/checkApplication.cy.ts b/rspack-webpack-offload/e2e/checkApplication.cy.ts deleted file mode 100644 index 5909aa9f95c..00000000000 --- a/rspack-webpack-offload/e2e/checkApplication.cy.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { Constants } from './../../cypress-e2e/fixtures/constants'; -import { baseSelectors, selectors } from './../../cypress-e2e/common/selectors'; -import { BaseMethods } from '../../cypress-e2e/common/base'; -import { CssAttr } from '../../cypress-e2e/types/cssAttr'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Complete React case', () => { - context('Check App1', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3002, - }); - }); - - it('Check App build and running', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: Constants.elementsText.completeReactCaseApp.header, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.strong, - text: Constants.elementsText.completeReactCaseApp.paragraphs.firstParagraph, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.strong, - text: Constants.elementsText.completeReactCaseApp.paragraphs.secondParagraph, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h4, - text: Constants.elementsText.completeReactCaseApp.buttons.h4Buttons, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h4, - text: Constants.elementsText.completeReactCaseApp.h4Dialog, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h4, - text: Constants.elementsText.completeReactCaseApp.h4HoverElement, - }); - basePage.checkElementWithTextPresence({ - selector: selectors.completeReactCaseApp.toolTip, - text: Constants.elementsText.completeReactCaseApp.h4HoverElement, - }); - }); - - it('Check App buttons', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.completeReactCaseApp.buttons.primaryButton, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.completeReactCaseApp.buttons.warningButton, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.completeReactCaseApp.buttons.openDialogButton, - }); - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.completeReactCaseApp.buttons.primaryButton, - prop: CssAttr.backgroundColor, - value: Constants.color.lightWashedAzure, - }); - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.completeReactCaseApp.buttons.warningButton, - prop: CssAttr.backgroundColor, - value: Constants.color.lightWashedOrange, - }); - }); - - it('Check App Dialog popup', () => { - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.completeReactCaseApp.buttons.openDialogButton, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.completeReactCaseApp.buttons.closeButton, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.elementsText.completeReactCaseApp.nameMessage, - }); - basePage.fillField({ - selector: baseSelectors.tags.inputs.input, - text: Constants.commonPhrases.completeReactCaseApp.input, - }); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.completeReactCaseApp.buttons.closeButton, - }); - }); - }); -}); diff --git a/rspack-webpack-offload/e2e/checkApplication.spec.ts b/rspack-webpack-offload/e2e/checkApplication.spec.ts new file mode 100644 index 00000000000..76945c47ae8 --- /dev/null +++ b/rspack-webpack-offload/e2e/checkApplication.spec.ts @@ -0,0 +1,71 @@ +import { test, expect } from '@playwright/test'; +import { Constants } from '../../cypress-e2e/fixtures/constants'; + +const selectors = { + header: 'h1', + strong: 'strong', + sectionTitle: 'h4', + tooltip: '.tool-tip', + button: 'button', + input: 'input', +}; + +test.describe('Complete React case', () => { + test.beforeEach(async ({ page }) => { + await page.goto('/'); + }); + + test('Check App build and running', async ({ page }) => { + const { completeReactCaseApp } = Constants.elementsText; + + await expect(page.locator(selectors.header)).toHaveText(completeReactCaseApp.header); + await expect(page.locator(selectors.strong).nth(0)).toHaveText( + completeReactCaseApp.paragraphs.firstParagraph, + ); + await expect(page.locator(selectors.strong).nth(1)).toHaveText( + completeReactCaseApp.paragraphs.secondParagraph, + ); + await expect( + page.locator(selectors.sectionTitle).filter({ hasText: completeReactCaseApp.buttons.h4Buttons }), + ).toBeVisible(); + await expect( + page.locator(selectors.sectionTitle).filter({ hasText: completeReactCaseApp.h4Dialog }), + ).toBeVisible(); + await expect( + page.locator(selectors.sectionTitle).filter({ hasText: completeReactCaseApp.h4HoverElement }), + ).toBeVisible(); + await expect(page.locator(selectors.tooltip)).toHaveText(completeReactCaseApp.h4HoverElement); + }); + + test('Check App buttons', async ({ page }) => { + const { + buttons: { primaryButton, warningButton, openDialogButton }, + } = Constants.elementsText.completeReactCaseApp; + + await expect(page.getByRole('button', { name: primaryButton })).toBeVisible(); + await expect(page.getByRole('button', { name: warningButton })).toBeVisible(); + await expect(page.getByRole('button', { name: openDialogButton })).toBeVisible(); + + await expect(page.getByRole('button', { name: primaryButton })).toHaveCSS( + 'background-color', + Constants.color.lightWashedAzure, + ); + await expect(page.getByRole('button', { name: warningButton })).toHaveCSS( + 'background-color', + Constants.color.lightWashedOrange, + ); + }); + + test('Check App Dialog popup', async ({ page }) => { + const { + buttons: { openDialogButton, closeButton }, + nameMessage, + } = Constants.elementsText.completeReactCaseApp; + + await page.getByRole('button', { name: openDialogButton }).click(); + await expect(page.getByRole('button', { name: closeButton })).toBeVisible(); + await expect(page.getByText(nameMessage)).toBeVisible(); + await page.fill(selectors.input, Constants.commonPhrases.completeReactCaseApp.input); + await page.getByRole('button', { name: closeButton }).click(); + }); +}); diff --git a/rspack-webpack-offload/package.json b/rspack-webpack-offload/package.json index 1125a00f282..b2dc350d8cf 100644 --- a/rspack-webpack-offload/package.json +++ b/rspack-webpack-offload/package.json @@ -8,7 +8,10 @@ "build": "pnpm --filter rspack_offload_* --parallel build", "legacy:build": "pnpm --filter rspack_offload_* --parallel legacy:build", "legacy:start": "pnpm --filter rspack_offload_* --parallel legacy:start", - "e2e:ci": "pnpm start & wait-on http-get://localhost:3002/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome" + "test:e2e": "pnpm exec playwright test", + "test:e2e:ui": "pnpm exec playwright test --ui", + "test:e2e:debug": "pnpm exec playwright test --debug", + "e2e:ci": "pnpm build && pnpm exec playwright install --with-deps && pnpm exec playwright test --reporter=list" }, "keywords": [], "author": "", @@ -18,6 +21,7 @@ }, "homepage": "https://github.com/anderlaw/react-webpack-MF#readme", "devDependencies": { - "wait-on": "7.2.0" + "@playwright/test": "^1.54.2", + "playwright": "^1.54.2" } } diff --git a/rspack-webpack-offload/playwright.config.ts b/rspack-webpack-offload/playwright.config.ts new file mode 100644 index 00000000000..b30cb940ff4 --- /dev/null +++ b/rspack-webpack-offload/playwright.config.ts @@ -0,0 +1,50 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e', + timeout: 60_000, + expect: { + timeout: 15_000, + }, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 1 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost:3002', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1920, height: 1080 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + command: 'cd lib-app && pnpm serve', + port: 3000, + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, + { + command: 'cd component-app && pnpm serve', + port: 3001, + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, + { + command: 'cd main-app && pnpm serve', + port: 3002, + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, + ], +}); diff --git a/runtime-plugins/control-sharing/cypress.env.json b/runtime-plugins/control-sharing/cypress.env.json deleted file mode 100644 index e63233bb67d..00000000000 --- a/runtime-plugins/control-sharing/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../../cypress-e2e/results/allure-results" -} diff --git a/runtime-plugins/control-sharing/e2e/checkAutomaticVendorApps.cy.ts b/runtime-plugins/control-sharing/e2e/checkAutomaticVendorApps.cy.ts deleted file mode 100644 index 9d54ccf4009..00000000000 --- a/runtime-plugins/control-sharing/e2e/checkAutomaticVendorApps.cy.ts +++ /dev/null @@ -1,191 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; - -const basePage: BaseMethods = new BaseMethods(); - -interface AppConfig { - headerSelector: string; - subHeaderSelector: string; - buttonSelector: string; - headerText: string; - appNameText: string; - host: number; -} - -const hostApp: AppConfig = { - headerSelector: baseSelectors.tags.headers.h1, - subHeaderSelector: baseSelectors.tags.headers.h2, - buttonSelector: baseSelectors.tags.coreElements.button, - headerText: Constants.commonConstantsData.controlShare, - appNameText: Constants.commonConstantsData.commonCountAppNames.app1, - host: 3001, -}; - -const remoteApp: AppConfig = { - headerSelector: baseSelectors.tags.headers.h1, - subHeaderSelector: baseSelectors.tags.headers.h2, - buttonSelector: baseSelectors.tags.coreElements.button, - headerText: Constants.commonConstantsData.controlShare, - appNameText: Constants.commonConstantsData.commonCountAppNames.app2, - host: 3002, -}; - -describe('Control Sharing', () => { - before(() => { - // Clear localStorage once before all tests - cy.window().then((win) => { - win.localStorage.removeItem('formDataVMSC'); - }); - }); - - describe('Host Application', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: hostApp.host, - }); - }); - - it('should display correct header and subheader', () => { - basePage.checkElementWithTextPresence({ - selector: hostApp.headerSelector, - text: hostApp.headerText, - }); - basePage.checkElementWithTextPresence({ - selector: hostApp.subHeaderSelector, - text: hostApp.appNameText, - }); - }); - - it('should display version information', () => { - basePage.checkElementWithTextPresence({ - selector: 'h4', - text: 'Host Used React: 17.0.2', - }); - basePage.checkElementWithTextPresence({ - selector: 'h4', - text: 'Host Used ReactDOM: 17.0.2', - }); - basePage.checkElementWithTextPresence({ - selector: 'h4', - text: 'Host Used Lodash: 4.17.21', - }); - }); - - it('should display app cards with package information', () => { - // App1 Card - basePage.checkElementWithTextPresence({ - selector: 'h3', - text: 'app1', - }); - - // Package sections - ['lodash', 'react-dom', 'react'].forEach(pkg => { - basePage.checkElementWithTextPresence({ - selector: 'h4', - text: pkg, - }); - }); - - // Version information - basePage.checkElementWithTextPresence({ - selector: 'p', - text: '4.17.21', - }); - basePage.checkElementWithTextPresence({ - selector: 'p', - text: '17.0.2', - }); - }); - - it('should have functional control buttons', () => { - basePage.checkElementWithTextPresence({ - selector: hostApp.buttonSelector, - text: 'Clear Settings', - }); - basePage.checkElementWithTextPresence({ - selector: hostApp.buttonSelector, - text: 'Save and Reload', - }); - }); - - it('should have version override selects', () => { - // Check if select elements exist for each package - basePage.checkElementWithTextPresence({ - selector: 'label', - text: 'Override Version', - }); - - // Verify select options - basePage.checkElementWithTextPresence({ - selector: 'option', - text: '4.17.21', - }); - basePage.checkElementWithTextPresence({ - selector: 'option', - text: '3.10.1', - }); - basePage.checkElementWithTextPresence({ - selector: 'option', - text: '17.0.2', - }); - basePage.checkElementWithTextPresence({ - selector: 'option', - text: '16.14.0', - }); - }); - - it('should load version from localStorage and display correct button text', () => { - // First verify initial version is 3.10.1 - basePage.checkElementWithTextPresence({ - selector: remoteApp.buttonSelector, - text: 'App 2 Button - lodash 3.10.1', - }); - - // Set localStorage before loading the page - cy.window().then((win) => { - win.localStorage.setItem('formDataVMSC', JSON.stringify({"app2":{"lodash":"4.17.21"}})); - }); - - // Reload the page - cy.reload(); - - // Verify the button shows the correct version - basePage.checkElementWithTextPresence({ - selector: remoteApp.buttonSelector, - text: 'App 2 Button - lodash 4.17.21', - }); - - // Clear localStorage after test - cy.window().then((win) => { - win.localStorage.removeItem('formDataVMSC'); - }); - }); - }); - - describe('Remote Application', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: remoteApp.host, - }); - }); - - it('should display correct header and subheader', () => { - basePage.checkElementWithTextPresence({ - selector: remoteApp.headerSelector, - text: remoteApp.headerText, - }); - basePage.checkElementWithTextPresence({ - selector: remoteApp.subHeaderSelector, - text: remoteApp.appNameText, - }); - }); - - it('should have the correct button text', () => { - basePage.checkElementWithTextPresence({ - selector: remoteApp.buttonSelector, - text: `${remoteApp.appNameText} ${Constants.commonConstantsData.button}`, - }); - }); - }); -}); diff --git a/runtime-plugins/control-sharing/e2e/checkAutomaticVendorApps.spec.ts b/runtime-plugins/control-sharing/e2e/checkAutomaticVendorApps.spec.ts new file mode 100644 index 00000000000..f4b1404d502 --- /dev/null +++ b/runtime-plugins/control-sharing/e2e/checkAutomaticVendorApps.spec.ts @@ -0,0 +1,79 @@ +import { test, expect } from '@playwright/test'; + +const hostUrl = 'http://localhost:3001'; +const remoteUrl = 'http://localhost:3002'; +const controlPanelHeading = 'Share Control Panel'; + +test.describe('Control Sharing', () => { + test.describe('Host Application', () => { + test.beforeEach(async ({ page }) => { + await page.goto(hostUrl); + }); + + test('displays correct header and subheader', async ({ page }) => { + await expect(page.getByRole('heading', { level: 1 })).toContainText(controlPanelHeading); + await expect(page.getByRole('heading', { level: 2, name: 'App 1' })).toBeVisible(); + }); + + test('shows host version information', async ({ page }) => { + await expect(page.getByRole('heading', { level: 4, name: 'Host Used React: 17.0.2' })).toBeVisible(); + await expect(page.getByRole('heading', { level: 4, name: 'Host Used ReactDOM: 17.0.2' })).toBeVisible(); + await expect(page.getByRole('heading', { level: 4, name: 'Host Used Lodash: 4.17.21' })).toBeVisible(); + }); + + test('renders app cards with package information', async ({ page }) => { + await expect(page.getByRole('heading', { level: 3, name: 'app1' })).toBeVisible(); + + for (const pkg of ['lodash', 'react-dom', 'react']) { + await expect(page.locator('h4', { hasText: pkg })).toBeVisible(); + } + + await expect(page.locator('p', { hasText: '4.17.21' })).toBeVisible(); + await expect(page.locator('p', { hasText: '17.0.2' })).toBeVisible(); + }); + + test('exposes control buttons', async ({ page }) => { + await expect(page.getByRole('button', { name: 'Clear Settings' })).toBeVisible(); + await expect(page.getByRole('button', { name: 'Save and Reload' })).toBeVisible(); + }); + + test('lists version override options', async ({ page }) => { + await expect(page.getByText('Override Version')).toBeVisible(); + + for (const option of ['4.17.21', '3.10.1', '17.0.2', '16.14.0']) { + await expect(page.locator('option', { hasText: option })).toBeVisible(); + } + }); + + test('applies version overrides from localStorage', async ({ page }) => { + await expect(page.getByRole('button', { name: 'App 2 Button - lodash 3.10.1' })).toBeVisible(); + + await page.evaluate(() => { + localStorage.setItem('formDataVMSC', JSON.stringify({ app2: { lodash: '4.17.21' } })); + }); + + await page.reload(); + + await expect(page.getByRole('button', { name: 'App 2 Button - lodash 4.17.21' })).toBeVisible(); + + await page.evaluate(() => { + localStorage.removeItem('formDataVMSC'); + }); + }); + }); + + test.describe('Remote Application', () => { + test.beforeEach(async ({ page }) => { + await page.goto(remoteUrl); + }); + + test('displays correct header and subheader', async ({ page }) => { + await expect(page.getByRole('heading', { level: 1 })).toContainText(controlPanelHeading); + await expect(page.getByRole('heading', { level: 2, name: 'App 2' })).toBeVisible(); + }); + + test('shows the remote button text', async ({ page }) => { + await expect(page.getByRole('button', { name: 'App 2 Button' })).toBeVisible(); + }); + }); +}); diff --git a/runtime-plugins/control-sharing/package.json b/runtime-plugins/control-sharing/package.json index 26ce46ac94d..1358550cf45 100644 --- a/runtime-plugins/control-sharing/package.json +++ b/runtime-plugins/control-sharing/package.json @@ -14,11 +14,16 @@ "clean": "pnpm --filter control-sharing_app* --parallel clean", "legacy:start": "pnpm --filter control-sharing_app* --parallel legacy:start", "legacy:build": "pnpm --filter control-sharing_app* --parallel legacy:build", - "e2e:ci": "pnpm start > /dev/null 2>&1 & wait-on tcp:3001 && wait-on tcp:3002 && sleep 5 && npx cypress run --config-file ../../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome", - "legacy:e2e:ci": "pnpm legacy:start > /dev/null 2>&1 & wait-on tcp:3001 && wait-on tcp:3002 && sleep 5 && npx cypress run --config-file ../../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome" + "e2e:ci": "pnpm build && pnpm exec playwright install --with-deps && CI=1 pnpm exec playwright test --reporter=list", + "legacy:e2e:ci": "pnpm legacy:build && pnpm exec playwright install --with-deps && USE_LEGACY=true CI=1 pnpm exec playwright test --reporter=list", + "test:e2e": "pnpm exec playwright test", + "test:e2e:ui": "pnpm exec playwright test --ui", + "test:e2e:debug": "pnpm exec playwright test --debug" }, "devDependencies": { "wait-on": "7.2.0", - "@module-federation/runtime": "0.17.1" + "@module-federation/runtime": "0.17.1", + "@playwright/test": "^1.54.2", + "playwright": "^1.54.2" } -} \ No newline at end of file +} diff --git a/runtime-plugins/control-sharing/playwright.config.ts b/runtime-plugins/control-sharing/playwright.config.ts new file mode 100644 index 00000000000..d158bb006ab --- /dev/null +++ b/runtime-plugins/control-sharing/playwright.config.ts @@ -0,0 +1,47 @@ +import { defineConfig, devices } from '@playwright/test'; + +const useLegacy = process.env.USE_LEGACY === 'true'; +const appCommand = useLegacy ? 'pnpm legacy:start' : 'pnpm start'; + +export default defineConfig({ + testDir: './e2e', + timeout: 60_000, + expect: { + timeout: 15_000, + }, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 1 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost:3001', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1920, height: 1080 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + command: `cd app1 && ${appCommand}`, + port: 3001, + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, + { + command: `cd app2 && ${appCommand}`, + port: 3002, + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, + ], +}); diff --git a/runtime-plugins/isolate-shared-dependencies/cypress.env.json b/runtime-plugins/isolate-shared-dependencies/cypress.env.json deleted file mode 100644 index 64db94a4a64..00000000000 --- a/runtime-plugins/isolate-shared-dependencies/cypress.env.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../../cypress-e2e/results/allure-results" - } - \ No newline at end of file diff --git a/runtime-plugins/isolate-shared-dependencies/e2e/checkIsolatedDependencies.cy.ts b/runtime-plugins/isolate-shared-dependencies/e2e/checkIsolatedDependencies.cy.ts deleted file mode 100644 index ccc804f0b5d..00000000000 --- a/runtime-plugins/isolate-shared-dependencies/e2e/checkIsolatedDependencies.cy.ts +++ /dev/null @@ -1,169 +0,0 @@ -describe('Isolated Shared Dependencies', () => { - beforeEach(() => { - cy.visit('http://localhost:3001'); - // Wait for all apps to load - cy.contains('App 1 loaded', { timeout: 10000 }); - cy.contains('App 2 loaded', { timeout: 10000 }); - cy.contains('App 3 loaded', { timeout: 10000 }); - }); - - it('should load all three apps', () => { - cy.contains('App 1 loaded').should('be.visible'); - cy.contains('App 2 loaded').should('be.visible'); - cy.contains('App 3 loaded').should('be.visible'); - }); - - it('should display instance IDs for all apps', () => { - // Check App 1 instance IDs - cy.contains('App 1 loaded') - .parent() - .within(() => { - cy.contains(/Lib 1 instance ID: \d+/).should('be.visible'); - cy.contains(/Lib 2 instance ID through lib 1: \d+/).should('be.visible'); - cy.contains(/Lib 2 instance ID: \d+/).should('be.visible'); - }); - - // Check App 2 instance IDs - cy.contains('App 2 loaded') - .parent() - .within(() => { - cy.contains(/Lib 1 instance ID: \d+/).should('be.visible'); - cy.contains(/Lib 2 instance ID through lib 1: \d+/).should('be.visible'); - cy.contains(/Lib 2 instance ID: \d+/).should('be.visible'); - }); - - // Check App 3 instance IDs - cy.contains('App 3 loaded') - .parent() - .within(() => { - cy.contains(/Lib 1 instance ID: \d+/).should('be.visible'); - cy.contains(/Lib 2 instance ID through lib 1: \d+/).should('be.visible'); - cy.contains(/Lib 2 instance ID: \d+/).should('be.visible'); - }); - }); - - // Note: This test verifies the current behavior where instances are shared. - // In a proper isolation setup, these IDs should be different. - it('should verify instance sharing behavior across apps', () => { - // Store instance IDs for comparison - const instanceIds: { [key: string]: string } = {}; - - // Get App 1 instance IDs - cy.contains('App 1 loaded') - .parent() - .within(() => { - cy.contains(/Lib 1 instance ID: (\d+)/) - .invoke('text') - .then((text) => { - instanceIds.app1Lib1 = text.match(/\d+/)[0]; - }); - cy.contains(/Lib 2 instance ID: (\d+)/) - .invoke('text') - .then((text) => { - instanceIds.app1Lib2 = text.match(/\d+/)[0]; - }); - }); - - // Get App 2 instance IDs and compare - cy.contains('App 2 loaded') - .parent() - .within(() => { - cy.contains(/Lib 1 instance ID: (\d+)/) - .invoke('text') - .then((text) => { - const app2Lib1 = text.match(/\d+/)[0]; - // Currently instances are shared, so IDs should be equal - expect(app2Lib1).to.equal(instanceIds.app1Lib1); - }); - cy.contains(/Lib 2 instance ID: (\d+)/) - .invoke('text') - .then((text) => { - const app2Lib2 = text.match(/\d+/)[0]; - expect(app2Lib2).to.equal(instanceIds.app1Lib2); - }); - }); - - // Get App 3 instance IDs and compare - cy.contains('App 3 loaded') - .parent() - .within(() => { - cy.contains(/Lib 1 instance ID: (\d+)/) - .invoke('text') - .then((text) => { - const app3Lib1 = text.match(/\d+/)[0]; - expect(app3Lib1).to.equal(instanceIds.app1Lib1); - }); - cy.contains(/Lib 2 instance ID: (\d+)/) - .invoke('text') - .then((text) => { - const app3Lib2 = text.match(/\d+/)[0]; - expect(app3Lib2).to.equal(instanceIds.app1Lib2); - }); - }); - }); - - it('should maintain consistent instance IDs within each app', () => { - // For App 1, verify that lib2 ID through lib1 matches direct lib2 ID - cy.contains('App 1 loaded') - .parent() - .within(() => { - let lib2ThroughLib1: string; - let lib2Direct: string; - - cy.contains(/Lib 2 instance ID through lib 1: (\d+)/) - .invoke('text') - .then((text) => { - lib2ThroughLib1 = text.match(/\d+/)[0]; - }); - - cy.contains(/Lib 2 instance ID: (\d+)/) - .invoke('text') - .then((text) => { - lib2Direct = text.match(/\d+/)[0]; - expect(lib2Direct).to.equal(lib2ThroughLib1); - }); - }); - - // Repeat for App 2 - cy.contains('App 2 loaded') - .parent() - .within(() => { - let lib2ThroughLib1: string; - let lib2Direct: string; - - cy.contains(/Lib 2 instance ID through lib 1: (\d+)/) - .invoke('text') - .then((text) => { - lib2ThroughLib1 = text.match(/\d+/)[0]; - }); - - cy.contains(/Lib 2 instance ID: (\d+)/) - .invoke('text') - .then((text) => { - lib2Direct = text.match(/\d+/)[0]; - expect(lib2Direct).to.equal(lib2ThroughLib1); - }); - }); - - // Repeat for App 3 - cy.contains('App 3 loaded') - .parent() - .within(() => { - let lib2ThroughLib1: string; - let lib2Direct: string; - - cy.contains(/Lib 2 instance ID through lib 1: (\d+)/) - .invoke('text') - .then((text) => { - lib2ThroughLib1 = text.match(/\d+/)[0]; - }); - - cy.contains(/Lib 2 instance ID: (\d+)/) - .invoke('text') - .then((text) => { - lib2Direct = text.match(/\d+/)[0]; - expect(lib2Direct).to.equal(lib2ThroughLib1); - }); - }); - }); -}); \ No newline at end of file diff --git a/runtime-plugins/isolate-shared-dependencies/e2e/checkIsolatedDependencies.spec.ts b/runtime-plugins/isolate-shared-dependencies/e2e/checkIsolatedDependencies.spec.ts new file mode 100644 index 00000000000..cff6e091111 --- /dev/null +++ b/runtime-plugins/isolate-shared-dependencies/e2e/checkIsolatedDependencies.spec.ts @@ -0,0 +1,73 @@ +import { expect, test } from '@playwright/test'; +import type { Locator, Page } from '@playwright/test'; + +const appUrl = '/'; + +const getAppSection = (page: Page, appNumber: number): Locator => + page.getByText(`App ${appNumber} loaded`).locator('..'); + +const expectInstanceLabels = async (section: Locator) => { + await expect(section.getByText(/Lib 1 instance ID: \d+/)).toBeVisible(); + await expect(section.getByText(/Lib 2 instance ID through lib 1: \d+/)).toBeVisible(); + await expect(section.getByText(/Lib 2 instance ID: \d+/)).toBeVisible(); +}; + +const extractInstanceId = async (section: Locator, label: string): Promise => { + const text = await section.getByText(new RegExp(`${label}: (\\d+)`)).innerText(); + const match = text.match(/\d+/); + expect(match, `Expected to find numeric instance ID for ${label}`).not.toBeNull(); + return match![0]; +}; + +test.describe('Isolated Shared Dependencies', () => { + test.beforeEach(async ({ page }) => { + await page.goto(appUrl); + + await Promise.all([ + expect(page.getByText('App 1 loaded')).toBeVisible({ timeout: 10_000 }), + expect(page.getByText('App 2 loaded')).toBeVisible({ timeout: 10_000 }), + expect(page.getByText('App 3 loaded')).toBeVisible({ timeout: 10_000 }), + ]); + }); + + test('should load all three apps', async ({ page }) => { + await expect(page.getByText('App 1 loaded')).toBeVisible(); + await expect(page.getByText('App 2 loaded')).toBeVisible(); + await expect(page.getByText('App 3 loaded')).toBeVisible(); + }); + + test('should display instance IDs for all apps', async ({ page }) => { + for (const appNumber of [1, 2, 3]) { + const section = getAppSection(page, appNumber); + await expectInstanceLabels(section); + } + }); + + test('should verify instance sharing behavior across apps', async ({ page }) => { + const app1Section = getAppSection(page, 1); + const app2Section = getAppSection(page, 2); + const app3Section = getAppSection(page, 3); + + const app1Lib1 = await extractInstanceId(app1Section, 'Lib 1 instance ID'); + const app1Lib2 = await extractInstanceId(app1Section, 'Lib 2 instance ID'); + + const app2Lib1 = await extractInstanceId(app2Section, 'Lib 1 instance ID'); + expect(app2Lib1).toBe(app1Lib1); + const app2Lib2 = await extractInstanceId(app2Section, 'Lib 2 instance ID'); + expect(app2Lib2).toBe(app1Lib2); + + const app3Lib1 = await extractInstanceId(app3Section, 'Lib 1 instance ID'); + expect(app3Lib1).toBe(app1Lib1); + const app3Lib2 = await extractInstanceId(app3Section, 'Lib 2 instance ID'); + expect(app3Lib2).toBe(app1Lib2); + }); + + test('should maintain consistent instance IDs within each app', async ({ page }) => { + for (const appNumber of [1, 2, 3]) { + const section = getAppSection(page, appNumber); + const throughLib1 = await extractInstanceId(section, 'Lib 2 instance ID through lib 1'); + const direct = await extractInstanceId(section, 'Lib 2 instance ID'); + expect(direct).toBe(throughLib1); + } + }); +}); diff --git a/runtime-plugins/isolate-shared-dependencies/package.json b/runtime-plugins/isolate-shared-dependencies/package.json index 04580826d45..b36800cc339 100644 --- a/runtime-plugins/isolate-shared-dependencies/package.json +++ b/runtime-plugins/isolate-shared-dependencies/package.json @@ -11,11 +11,15 @@ ], "scripts": { "start": "pnpm --filter isolate-shared-dependencies_app* --parallel start", - "legacy:e2e:ci": "pnpm start > /dev/null 2>&1 & wait-on tcp:3001 && wait-on tcp:3002 && wait-on tcp:3003 && sleep 5 && npx cypress run --config-file ../../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome", - "e2e:ci": "echo 'no tests'" + "e2e:ci": "pnpm exec playwright install --with-deps && CI=1 pnpm exec playwright test --reporter=list", + "legacy:e2e:ci": "pnpm exec playwright install --with-deps && CI=1 pnpm exec playwright test --reporter=list", + "test:e2e": "pnpm exec playwright test", + "test:e2e:ui": "pnpm exec playwright test --ui", + "test:e2e:debug": "pnpm exec playwright test --debug" }, "devDependencies": { "wait-on": "7.2.0", - "cypress": "^13.6.0" + "@playwright/test": "^1.54.2", + "playwright": "^1.54.2" } } diff --git a/runtime-plugins/isolate-shared-dependencies/playwright.config.ts b/runtime-plugins/isolate-shared-dependencies/playwright.config.ts new file mode 100644 index 00000000000..46fd0442743 --- /dev/null +++ b/runtime-plugins/isolate-shared-dependencies/playwright.config.ts @@ -0,0 +1,50 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e', + timeout: 60_000, + expect: { + timeout: 15_000, + }, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 1 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost:3001', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1920, height: 1080 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + command: 'cd app1 && pnpm start', + port: 3001, + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, + { + command: 'cd app2 && pnpm start', + port: 3002, + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, + { + command: 'cd app3 && pnpm start', + port: 3003, + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, + ], +}); diff --git a/runtime-plugins/multiple-react-versions/e2e/cypress.config.ts b/runtime-plugins/multiple-react-versions/e2e/cypress.config.ts deleted file mode 100644 index 7403287535c..00000000000 --- a/runtime-plugins/multiple-react-versions/e2e/cypress.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { defineConfig } from 'cypress'; - -export default defineConfig({ - e2e: { - specPattern: './e2e/*.cy.{js,jsx,ts,tsx}', - supportFile: false, - }, -}); diff --git a/runtime-plugins/multiple-react-versions/e2e/spec.cy.ts b/runtime-plugins/multiple-react-versions/e2e/spec.cy.ts deleted file mode 100644 index 7d0a65755f3..00000000000 --- a/runtime-plugins/multiple-react-versions/e2e/spec.cy.ts +++ /dev/null @@ -1,63 +0,0 @@ -describe('multiple-react-versions', () => { - beforeEach(() => { - cy.visit('http://localhost:3001'); - }); - it('should load the app', () => { - cy.get('h1').should('contain', 'Basic Host-Remote'); - cy.get('h2').should('contain', 'App 1, Uses react version not compatible with hooks'); - }); - - it('should have runtime plugin wrapper', () => { - cy.get('p').should('contain', 'In RUNTIME PLUGIN WRAPPER'); - }); - - it('should have hooks component', () => { - cy.get('strong').contains( - 'This Component uses hooks, if loaded on localhost:3001, it should work, even though that host does not support React Hooks', - ); - }); - - it('should load the remote button', () => { - cy.get('div').contains('Loading Button').should('not.exist'); - cy.get('button').should('exist'); - }); - - it('should render the host app title', () => { - cy.get('h1').should('have.text', 'Basic Host-Remote'); - }); - - it('should render the input placeholder', () => { - cy.get('input').should('have.attr', 'placeholder', 'Type something into this input'); - }); - - it('should render the modern component wrapper', () => { - cy.get('div').contains('In RUNTIME PLUGIN WRAPPER').should('exist'); - cy.get('div').contains('Host React: 16.6.3 Remote React: 17.0.2').should('exist'); - }); - - it('should render the modern component text', () => { - cy.get('div') - .contains( - 'This Component uses hooks, if loaded on localhost:3001, it should work, even though that host does not support React Hooks', - ) - .should('exist'); - }); - - it('should render the App2 component wrapper', () => { - cy.get('div').contains('In RUNTIME PLUGIN WRAPPER').should('exist'); - cy.get('div').contains('Host React: 16.6.3 Remote React: 17.0.2').should('exist'); - }); - - it('should render the App2 component text', () => { - cy.get('p') - .contains('More react components from App2 using non-legacy React to render') - .should('exist'); - }); - - it('should render the App2 button', () => { - cy.get('button').should('have.text', 'App 2 Button'); - }); - it('should container other wrapped component ', () => { - cy.get('p').contains('More react components from App2 using non-legacy React to render'); - }); -}); diff --git a/runtime-plugins/multiple-react-versions/e2e/spec.spec.ts b/runtime-plugins/multiple-react-versions/e2e/spec.spec.ts new file mode 100644 index 00000000000..6157951279f --- /dev/null +++ b/runtime-plugins/multiple-react-versions/e2e/spec.spec.ts @@ -0,0 +1,46 @@ +import { test, expect } from '@playwright/test'; + +const runtimeWrapperText = 'In RUNTIME PLUGIN WRAPPER'; +const hooksComponentText = + 'This Component uses hooks, if loaded on localhost:3001, it should work, even though that host does not support React Hooks'; +const versionInfoText = 'Host React: 16.6.3 Remote React: 17.0.2'; +const app2ContentText = 'More react components from App2 using non-legacy React to render'; + +test.describe('multiple-react-versions', () => { + test.beforeEach(async ({ page }) => { + await page.goto('/'); + }); + + test('renders the host headings', async ({ page }) => { + await expect(page.getByRole('heading', { level: 1 })).toHaveText('Basic Host-Remote'); + await expect( + page.getByRole('heading', { + level: 2, + name: 'App 1, Uses react version not compatible with hooks', + }), + ).toBeVisible(); + }); + + test('shows the runtime plugin wrapper content', async ({ page }) => { + await expect(page.getByText(runtimeWrapperText)).toBeVisible(); + await expect(page.locator('strong', { hasText: hooksComponentText })).toBeVisible(); + }); + + test('loads the remote button and hides the placeholder', async ({ page }) => { + await expect(page.locator('text=Loading Button')).toHaveCount(0); + await expect(page.getByRole('button', { name: 'App 2 Button' })).toBeVisible(); + }); + + test('renders the host input placeholder', async ({ page }) => { + await expect(page.getByPlaceholder('Type something into this input')).toBeVisible(); + }); + + test('shows version information for host and remote React', async ({ page }) => { + await expect(page.getByText(versionInfoText)).toBeVisible(); + }); + + test('renders additional App 2 content', async ({ page }) => { + await expect(page.locator('div', { hasText: runtimeWrapperText })).toBeVisible(); + await expect(page.locator('p', { hasText: app2ContentText })).toBeVisible(); + }); +}); diff --git a/runtime-plugins/multiple-react-versions/package.json b/runtime-plugins/multiple-react-versions/package.json index a695c1bc0ce..91c034d8260 100644 --- a/runtime-plugins/multiple-react-versions/package.json +++ b/runtime-plugins/multiple-react-versions/package.json @@ -9,10 +9,15 @@ "build": "pnpm --filter multiple-react-versions_* build", "serve": "pnpm --filter multiple-react-versions_* --parallel serve", "clean": "pnpm --filter multiple-react-versions_* --parallel clean", - "legacy:e2e:ci": "pnpm run legacy:build", - "e2e:ci": "pnpm run start & wait-on tcp:3001 && wait-on tcp:3002 && cypress run --config-file e2e/cypress.config.ts" + "legacy:e2e:ci": "pnpm legacy:build && pnpm exec playwright install --with-deps && USE_LEGACY=true CI=1 pnpm exec playwright test --reporter=list", + "e2e:ci": "pnpm build && pnpm exec playwright install --with-deps && CI=1 pnpm exec playwright test --reporter=list", + "test:e2e": "pnpm exec playwright test", + "test:e2e:ui": "pnpm exec playwright test --ui", + "test:e2e:debug": "pnpm exec playwright test --debug" }, "devDependencies": { - "wait-on": "7.2.0" + "wait-on": "7.2.0", + "@playwright/test": "^1.54.2", + "playwright": "^1.54.2" } } diff --git a/runtime-plugins/multiple-react-versions/playwright.config.ts b/runtime-plugins/multiple-react-versions/playwright.config.ts new file mode 100644 index 00000000000..d158bb006ab --- /dev/null +++ b/runtime-plugins/multiple-react-versions/playwright.config.ts @@ -0,0 +1,47 @@ +import { defineConfig, devices } from '@playwright/test'; + +const useLegacy = process.env.USE_LEGACY === 'true'; +const appCommand = useLegacy ? 'pnpm legacy:start' : 'pnpm start'; + +export default defineConfig({ + testDir: './e2e', + timeout: 60_000, + expect: { + timeout: 15_000, + }, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 1 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost:3001', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1920, height: 1080 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + command: `cd app1 && ${appCommand}`, + port: 3001, + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, + { + command: `cd app2 && ${appCommand}`, + port: 3002, + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, + ], +}); diff --git a/runtime-plugins/offline-remote/cypress.env.json b/runtime-plugins/offline-remote/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/runtime-plugins/offline-remote/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/runtime-plugins/offline-remote/e2e/checkAutomaticVendorApps.cy.ts b/runtime-plugins/offline-remote/e2e/checkAutomaticVendorApps.cy.ts deleted file mode 100644 index cd891caa8af..00000000000 --- a/runtime-plugins/offline-remote/e2e/checkAutomaticVendorApps.cy.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; -import { CssAttr } from '../../../cypress-e2e/types/cssAttr'; - -const basePage: BaseMethods = new BaseMethods(); - -const appButtonPosition: number = 0; - -const appsData = [ - { - headerSelector: baseSelectors.tags.headers.h1, - subHeaderSelector: baseSelectors.tags.headers.h2, - buttonSelector: baseSelectors.tags.coreElements.button, - headerText: 'Offline Remote', - appNameText: Constants.commonConstantsData.commonCountAppNames.app1, - buttonColor: Constants.color.red, - host: 3001, - }, -]; - -appsData.forEach( - (property: { - headerSelector: string; - subHeaderSelector: string; - buttonSelector: string; - headerText: string; - appNameText: string; - buttonColor: string; - host: number; - }) => { - const host = property.host === 3002 ? appsData[1].host : appsData[0].host; - const appName = property.host === 3002 ? appsData[1].appNameText : appsData[0].appNameText; - const color = property.host === 3002 ? appsData[1].buttonColor : appsData[0].buttonColor; - - describe(`Endpoint Based Remotes`, () => { - context(`Check ${appName}:${host}`, () => { - beforeEach(() => { - basePage.openLocalhost({ - number: host, - }); - }); - - it(`Check ${appName} header and subheader exist on the page`, () => { - basePage.checkElementWithTextPresence({ - selector: property.headerSelector, - text: property.headerText, - }); - // basePage.checkElementWithTextPresence({ - // selector: property.subHeaderSelector, - // text: `${appName}`, - // }); - }); - - it(`Check buttons in ${appName} exist`, () => { - basePage.checkElementWithTextPresence({ - selector: property.buttonSelector, - text: `${appName} ${Constants.commonConstantsData.button}`, - }); - }); - - it(`Check button property in ${appName}`, () => { - basePage.checkElementContainText({ - selector: property.buttonSelector, - text: `${appName} ${Constants.commonConstantsData.button}`, - index: appButtonPosition, - }); - basePage.checkElementHaveProperty({ - selector: property.buttonSelector, - text: `${appName} ${Constants.commonConstantsData.button}`, - prop: CssAttr.background, - value: color, - }); - }); - }); - }); - }, -); diff --git a/runtime-plugins/offline-remote/e2e/checkAutomaticVendorApps.spec.ts b/runtime-plugins/offline-remote/e2e/checkAutomaticVendorApps.spec.ts new file mode 100644 index 00000000000..09468f6b955 --- /dev/null +++ b/runtime-plugins/offline-remote/e2e/checkAutomaticVendorApps.spec.ts @@ -0,0 +1,27 @@ +import { test, expect } from '@playwright/test'; + +const hostUrl = 'http://localhost:3001'; + +const rgbRed = 'rgb(136, 0, 0)'; + +test.describe('Offline Remote', () => { + test.beforeEach(async ({ page }) => { + await page.goto(hostUrl); + }); + + test('renders the host header and description', async ({ page }) => { + await expect(page.getByRole('heading', { level: 1, name: 'Offline Remote' })).toBeVisible(); + await expect(page.getByRole('heading', { level: 2, name: 'Remotes currently in use' })).toBeVisible(); + await expect(page.getByText(/Click The second button/i)).toBeVisible(); + }); + + test('shows the local button with expected styling', async ({ page }) => { + const button = page.getByRole('button', { name: 'App 1 Button' }); + await expect(button).toBeVisible(); + await expect(button).toHaveCSS('background-color', rgbRed); + }); + + test('displays an offline warning for the remote module', async ({ page }) => { + await expect(page.getByText(/remote app2 is offline/i)).toBeVisible(); + }); +}); diff --git a/runtime-plugins/offline-remote/package.json b/runtime-plugins/offline-remote/package.json index a2bde88b4c2..d5cc9720c06 100644 --- a/runtime-plugins/offline-remote/package.json +++ b/runtime-plugins/offline-remote/package.json @@ -15,10 +15,15 @@ "clean": "pnpm --filter offline-remote_app* --parallel clean", "legacy:start": "pnpm --filter offline-remote_app1 --parallel legacy:start", "legacy:build": "pnpm --filter offline-remote_app* --parallel legacy:build", - "e2e:ci": "pnpm start & wait-on http-get://localhost:3001/ && npx cypress run --config-file ../../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome", - "legacy:e2e:ci": "pnpm legacy:start & wait-on http-get://localhost:3001/ && npx cypress run --config-file ../../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome" + "e2e:ci": "pnpm build && pnpm exec playwright install --with-deps && CI=1 pnpm exec playwright test --reporter=list", + "legacy:e2e:ci": "pnpm legacy:build && pnpm exec playwright install --with-deps && USE_LEGACY=true CI=1 pnpm exec playwright test --reporter=list", + "test:e2e": "pnpm exec playwright test", + "test:e2e:ui": "pnpm exec playwright test --ui", + "test:e2e:debug": "pnpm exec playwright test --debug" }, "devDependencies": { - "wait-on": "7.2.0" + "wait-on": "7.2.0", + "@playwright/test": "^1.54.2", + "playwright": "^1.54.2" } } diff --git a/runtime-plugins/offline-remote/playwright.config.ts b/runtime-plugins/offline-remote/playwright.config.ts new file mode 100644 index 00000000000..eb6d27f715e --- /dev/null +++ b/runtime-plugins/offline-remote/playwright.config.ts @@ -0,0 +1,42 @@ +import { defineConfig, devices } from '@playwright/test'; + +const useLegacy = process.env.USE_LEGACY === 'true'; +const appCommand = useLegacy ? 'pnpm legacy:start' : 'pnpm start'; +const isCI = !!process.env.CI; + +export default defineConfig({ + testDir: './e2e', + timeout: 60_000, + expect: { + timeout: 15_000, + }, + fullyParallel: true, + forbidOnly: isCI, + retries: isCI ? 1 : 0, + workers: isCI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost:3001', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1920, height: 1080 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + command: `cd app1 && ${appCommand}`, + port: 3001, + reuseExistingServer: !isCI, + timeout: 120_000, + }, + ], +}); diff --git a/runtime-plugins/remote-control/README.md b/runtime-plugins/remote-control/README.md index f4f08b1bb0b..419df9c51aa 100644 --- a/runtime-plugins/remote-control/README.md +++ b/runtime-plugins/remote-control/README.md @@ -22,10 +22,11 @@ To give the application a spin, run `pnpm start`. This command will build and se - [localhost:3002](http://localhost:3002/) - [localhost:3003](http://localhost:3003/) -# Running Cypress E2E Tests +# Running Playwright E2E Tests -For running tests in interactive mode, execute `npm run cypress:debug` from the root directory of the project. This will open the Cypress Test Runner and allow you to run tests interactively. [More info about "How to run tests"](../../cypress-e2e/README.md#how-to-run-tests) +- `pnpm test:e2e` runs the Playwright suite locally (headed by default). +- `pnpm test:e2e:ui` opens the Playwright Test Runner UI for interactive debugging. +- `pnpm test:e2e:debug` starts Playwright in debug mode. +- `pnpm e2e:ci` builds the applications and executes the suite in headless mode, the same flow used in CI. -To build the app and run tests in headless mode, run `yarn e2e:ci`. This command will build the app and run tests for this workspace in headless mode. If tests fail, Cypress will create a `cypress` directory in the sample root folder with screenshots and videos. - -["Best Practices, Rules and more interesting information here](../../cypress-e2e/README.md) +Playwright stores traces, screenshots, and videos for failing specs inside `playwright-report` when run in CI mode. diff --git a/runtime-plugins/remote-control/cypress.env.json b/runtime-plugins/remote-control/cypress.env.json deleted file mode 100644 index e63233bb67d..00000000000 --- a/runtime-plugins/remote-control/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../../cypress-e2e/results/allure-results" -} diff --git a/runtime-plugins/remote-control/e2e/checkAutomaticVendorApps.cy.ts b/runtime-plugins/remote-control/e2e/checkAutomaticVendorApps.cy.ts deleted file mode 100644 index 049ccc18917..00000000000 --- a/runtime-plugins/remote-control/e2e/checkAutomaticVendorApps.cy.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; -import { CssAttr } from '../../../cypress-e2e/types/cssAttr'; - -const basePage: BaseMethods = new BaseMethods(); - -const appButtonPosition: number = 0; - -const appsData = [ - { - headerSelector: baseSelectors.tags.headers.h1, - subHeaderSelector: baseSelectors.tags.headers.h2, - buttonSelector: baseSelectors.tags.coreElements.button, - headerText: Constants.commonConstantsData.controlRemote, - appNameText: Constants.commonConstantsData.commonCountAppNames.app1, - buttonColor: Constants.color.red, - host: 3001, - }, - { - headerSelector: baseSelectors.tags.headers.h1, - subHeaderSelector: baseSelectors.tags.headers.h2, - buttonSelector: baseSelectors.tags.coreElements.button, - headerText: Constants.commonConstantsData.controlRemote, - appNameText: Constants.commonConstantsData.commonCountAppNames.app2, - buttonColor: Constants.color.deepBlue, - host: 3002, - }, -]; - -appsData.forEach( - (property: { - headerSelector: string; - subHeaderSelector: string; - buttonSelector: string; - headerText: string; - appNameText: string; - buttonColor: string; - host: number; - }) => { - const host = property.host === 3002 ? appsData[1].host : appsData[0].host; - const appName = property.host === 3002 ? appsData[1].appNameText : appsData[0].appNameText; - const color = property.host === 3002 ? appsData[1].buttonColor : appsData[0].buttonColor; - - describe(`Endpoint Based Remotes`, () => { - context(`Check ${appName}:${host}`, () => { - beforeEach(() => { - basePage.openLocalhost({ - number: host, - }); - }); - - it(`Check ${appName} header and subheader exist on the page`, () => { - basePage.checkElementWithTextPresence({ - selector: property.headerSelector, - text: property.headerText, - }); - // basePage.checkElementWithTextPresence({ - // selector: property.subHeaderSelector, - // text: `${appName}`, - // }); - }); - - it(`Check buttons in ${appName} exist`, () => { - basePage.checkElementWithTextPresence({ - selector: property.buttonSelector, - text: `${appName} ${Constants.commonConstantsData.button}`, - }); - }); - - it(`Check button property in ${appName}`, () => { - basePage.checkElementContainText({ - selector: property.buttonSelector, - text: `${appName} ${Constants.commonConstantsData.button}`, - index: appButtonPosition, - }); - basePage.checkElementHaveProperty({ - selector: property.buttonSelector, - text: `${appName} ${Constants.commonConstantsData.button}`, - prop: CssAttr.background, - value: color, - }); - }); - }); - }); - }, -); diff --git a/runtime-plugins/remote-control/e2e/checkAutomaticVendorApps.spec.ts b/runtime-plugins/remote-control/e2e/checkAutomaticVendorApps.spec.ts new file mode 100644 index 00000000000..5e9f88488c6 --- /dev/null +++ b/runtime-plugins/remote-control/e2e/checkAutomaticVendorApps.spec.ts @@ -0,0 +1,61 @@ +import { test, expect } from '@playwright/test'; + +const hostApp = { + url: 'http://localhost:3001', + header: 'API controlled remote configs', + subheader: 'Remotes currently in use', + buttonLabel: 'App 1 Button', + buttonColor: 'rgb(136, 0, 0)', +}; + +const remoteApp = { + url: 'http://localhost:3002', + header: 'API controlled remote configs', + subheader: 'App 2', + buttonLabel: 'App 2 Button - CLICK ME', + buttonColor: 'rgb(0, 0, 204)', +}; + +test.describe('Backend Controlled Configs', () => { + test.describe('Host application', () => { + test.beforeEach(async ({ page }) => { + await page.goto(hostApp.url); + }); + + test('renders correct headings', async ({ page }) => { + await expect(page.getByRole('heading', { level: 1 })).toHaveText(hostApp.header); + await expect(page.getByRole('heading', { level: 2, name: hostApp.subheader })).toBeVisible(); + }); + + test('shows the local button with expected styling', async ({ page }) => { + const button = page.getByRole('button', { name: hostApp.buttonLabel }); + await expect(button).toBeVisible(); + await expect(button).toHaveCSS('background-color', hostApp.buttonColor); + }); + + test('loads the remote button through the runtime plugin', async ({ page }) => { + await expect(page.getByRole('button', { name: /App [23] Button - CLICK ME/ })).toBeVisible(); + }); + }); + + test.describe('Remote application', () => { + test.beforeEach(async ({ page }) => { + await page.goto(remoteApp.url); + }); + + test('renders correct headings', async ({ page }) => { + await expect(page.getByRole('heading', { level: 1 })).toHaveText(remoteApp.header); + await expect(page.getByRole('heading', { level: 2, name: remoteApp.subheader })).toBeVisible(); + }); + + test('shows the local button with expected styling', async ({ page }) => { + const button = page.getByRole('button', { name: remoteApp.buttonLabel }); + await expect(button).toBeVisible(); + await expect(button).toHaveCSS('background-color', remoteApp.buttonColor); + }); + + test('renders the federated button from the host', async ({ page }) => { + await expect(page.getByRole('button', { name: hostApp.buttonLabel })).toBeVisible(); + }); + }); +}); diff --git a/runtime-plugins/remote-control/package.json b/runtime-plugins/remote-control/package.json index c6d60731eb7..4647811b3fc 100644 --- a/runtime-plugins/remote-control/package.json +++ b/runtime-plugins/remote-control/package.json @@ -14,10 +14,16 @@ "clean": "pnpm --filter backend-control_app* --parallel clean", "legacy:start": "pnpm --filter backend-control_app* --parallel legacy:start", "legacy:build": "pnpm --filter backend-control_app* --parallel legacy:build", - "e2e:ci": "pnpm start & wait-on http-get://localhost:3001/ && npx cypress run --config-file ../../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome", - "disabled:legacy:e2e:ci": "pnpm legacy:start & wait-on http-get://localhost:3001/ && npx cypress run --config-file ../../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome" + "e2e:ci": "pnpm build && pnpm exec playwright install --with-deps && CI=1 pnpm exec playwright test --reporter=list", + "legacy:e2e:ci": "pnpm legacy:build && pnpm exec playwright install --with-deps && USE_LEGACY=true CI=1 pnpm exec playwright test --reporter=list", + "test:e2e": "pnpm exec playwright test", + "test:e2e:ui": "pnpm exec playwright test --ui", + "test:e2e:debug": "pnpm exec playwright test --debug" }, "devDependencies": { - "wait-on": "7.2.0" + "wait-on": "7.2.0", + "@module-federation/runtime": "0.17.1", + "@playwright/test": "^1.54.2", + "playwright": "^1.54.2" } } diff --git a/runtime-plugins/remote-control/playwright.config.ts b/runtime-plugins/remote-control/playwright.config.ts new file mode 100644 index 00000000000..5a0a5fc2783 --- /dev/null +++ b/runtime-plugins/remote-control/playwright.config.ts @@ -0,0 +1,54 @@ +import { defineConfig, devices } from '@playwright/test'; + +const useLegacy = process.env.USE_LEGACY === 'true'; +const appCommand = useLegacy ? 'pnpm legacy:start' : 'pnpm start'; +const isCI = !!process.env.CI; + +export default defineConfig({ + testDir: './e2e', + timeout: 60_000, + expect: { + timeout: 15_000, + }, + fullyParallel: true, + forbidOnly: isCI, + retries: isCI ? 1 : 0, + workers: isCI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost:3001', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1920, height: 1080 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + command: `cd app1 && ${appCommand}`, + port: 3001, + reuseExistingServer: !isCI, + timeout: 120_000, + }, + { + command: `cd app2 && ${appCommand}`, + port: 3002, + reuseExistingServer: !isCI, + timeout: 120_000, + }, + { + command: `cd app3 && ${appCommand}`, + port: 3003, + reuseExistingServer: !isCI, + timeout: 120_000, + }, + ], +}); diff --git a/runtime-plugins/single-runtime/cypress.env.json b/runtime-plugins/single-runtime/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/runtime-plugins/single-runtime/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/runtime-plugins/single-runtime/e2e/checkAutomaticVendorApps.cy.ts b/runtime-plugins/single-runtime/e2e/checkAutomaticVendorApps.cy.ts deleted file mode 100644 index d55c346d828..00000000000 --- a/runtime-plugins/single-runtime/e2e/checkAutomaticVendorApps.cy.ts +++ /dev/null @@ -1,192 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; -import { CssAttr } from '../../../cypress-e2e/types/cssAttr'; - -const basePage: BaseMethods = new BaseMethods(); - -// Helper function to convert hex to RGB for browser comparison -const hexToRgb = (hex: string): string => { - // Remove # if present - const cleanHex = hex.replace('#', ''); - const r = parseInt(cleanHex.slice(0, 2), 16); - const g = parseInt(cleanHex.slice(2, 4), 16); - const b = parseInt(cleanHex.slice(4, 6), 16); - return `rgb(${r}, ${g}, ${b})`; -}; - -describe('Single Runtime Plugin Example', () => { - describe('App 1 (port 3001)', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3001, - }); - }); - - it('should have correct title', () => { - basePage.checkElementWithTextPresence({ - selector: 'h1', - text: 'App 1 - Single Runtime Demo', - }); - }); - - it('should have explanation section', () => { - cy.get('h3').contains("What's Happening Here?").should('be.visible'); - cy.get('div').contains('This is').should('be.visible'); - }); - - it('should have working counter', () => { - cy.contains('Shared State Counter: 0').should('be.visible'); - cy.contains('button', 'Increment Counter').click(); - cy.contains('Shared State Counter: 1').should('be.visible'); - }); - - it('should have local and remote buttons with correct styling', () => { - // Check local button - cy.get('button') - .contains('App 1 Button') - .should('be.visible') - .should('have.css', 'background-color') - .and('eq', hexToRgb('#4a90e2')); - - // Check remote button - cy.get('button') - .contains('App 2 Button') - .should('be.visible') - .should('have.css', 'background-color') - .and('eq', hexToRgb('#e24a90')); - }); - - it('should have working click counters on buttons', () => { - // Check local button counter - cy.get('button').contains('App 1 Button').as('localButton'); - cy.get('@localButton').click(); - cy.get('@localButton').should('contain', 'Clicks: 1'); - - // Check remote button counter - cy.get('button').contains('App 2 Button').as('remoteButton'); - cy.get('@remoteButton').click(); - cy.get('@remoteButton').should('contain', 'Clicks: 1'); - }); - - it('should show correct runtime information', () => { - cy.contains('Runtime Information:').should('be.visible'); - - // Check module names are present - cy.contains('Module: app1').should('be.visible'); - cy.contains('Module: app2').should('be.visible'); - - // Check remote entry URLs - cy.contains('div', 'Module: app1') - .parent() - .contains('Remote Entries:') - .parent() - .contains('app2:') - .parent() - .find('code') - .should('contain', 'http://localhost:3002/remoteEntry.js'); - - cy.contains('div', 'Module: app2') - .parent() - .contains('Remote Entries:') - .parent() - .contains('app1:') - .parent() - .find('code') - .should('contain', 'http://localhost:3001/app1_partial.js'); - }); - - it('should have working navigation between apps', () => { - cy.get('a').contains('Go to App 2') - .should('have.attr', 'href') - .and('include', '3002'); - }); - }); - - describe('App 2 (port 3002)', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3002, - }); - }); - - it('should have correct title', () => { - basePage.checkElementWithTextPresence({ - selector: 'h1', - text: 'App 2 - Single Runtime Demo', - }); - }); - - it('should have explanation section', () => { - cy.get('h3').contains("What's Happening Here?").should('be.visible'); - cy.get('div').contains('This is').should('be.visible'); - }); - - it('should have working counter', () => { - cy.contains('Shared State Counter: 0').should('be.visible'); - cy.contains('button', 'Increment Counter').click(); - cy.contains('Shared State Counter: 1').should('be.visible'); - }); - - it('should have local and remote buttons with correct styling', () => { - // Check local button - cy.get('button') - .contains('App 2 Button') - .should('be.visible') - .should('have.css', 'background-color') - .and('eq', hexToRgb('#e24a90')); - - // Check remote button - cy.get('button') - .contains('App 1 Button') - .should('be.visible') - .should('have.css', 'background-color') - .and('eq', hexToRgb('#4a90e2')); - }); - - it('should have working click counters on buttons', () => { - // Check local button counter - cy.get('button').contains('App 2 Button').as('localButton'); - cy.get('@localButton').click(); - cy.get('@localButton').should('contain', 'Clicks: 1'); - - // Check remote button counter - cy.get('button').contains('App 1 Button').as('remoteButton'); - cy.get('@remoteButton').click(); - cy.get('@remoteButton').should('contain', 'Clicks: 1'); - }); - - it('should show correct runtime information', () => { - cy.contains('Runtime Information:').should('be.visible'); - - // Check module names are present - cy.contains('Module: app1').should('be.visible'); - cy.contains('Module: app2').should('be.visible'); - - // Check remote entry URLs - cy.contains('div', 'Module: app2') - .parent() - .contains('Remote Entries:') - .parent() - .contains('app1:') - .parent() - .find('code') - .should('contain', 'http://localhost:3001/remoteEntry.js'); - - cy.contains('div', 'Module: app1') - .parent() - .contains('Remote Entries:') - .parent() - .contains('app2:') - .parent() - .find('code') - .should('contain', 'http://localhost:3002/remoteEntry.js'); - }); - - it('should have working navigation between apps', () => { - cy.get('a').contains('Go to App 1') - .should('have.attr', 'href') - .and('include', '3001'); - }); - }); -}); diff --git a/runtime-plugins/single-runtime/e2e/checkAutomaticVendorApps.spec.ts b/runtime-plugins/single-runtime/e2e/checkAutomaticVendorApps.spec.ts new file mode 100644 index 00000000000..f496adba4cb --- /dev/null +++ b/runtime-plugins/single-runtime/e2e/checkAutomaticVendorApps.spec.ts @@ -0,0 +1,165 @@ +import { expect, test } from '@playwright/test'; +import type { Page } from '@playwright/test'; + +const app1Url = 'http://localhost:3001'; +const app2Url = 'http://localhost:3002'; + +const hexToRgb = (hex: string): string => { + const cleanHex = hex.replace('#', ''); + const numericValue = parseInt(cleanHex, 16); + const r = (numericValue >> 16) & 255; + const g = (numericValue >> 8) & 255; + const b = numericValue & 255; + return `rgb(${r}, ${g}, ${b})`; +}; + +const preparePage = async (page: Page, url: string) => { + await page.addInitScript(() => { + window.localStorage.clear(); + }); + await page.goto(url); +}; + +const expectRemoteEntry = async ( + page: Page, + moduleName: string, + remoteAlias: string, + expectedEntry: string, +) => { + const moduleContainer = page.getByText(`Module: ${moduleName}`).locator('..'); + await expect(moduleContainer).toBeVisible(); + + const remoteRow = moduleContainer.locator('div', { hasText: `${remoteAlias}:` }); + await expect(remoteRow).toBeVisible(); + await expect(remoteRow.locator('code')).toHaveText(expectedEntry); +}; + +test.describe('Single Runtime Plugin Example', () => { + test.describe('App 1 (port 3001)', () => { + test.beforeEach(async ({ page }) => { + await preparePage(page, app1Url); + }); + + test('should have correct title', async ({ page }) => { + await expect( + page.getByRole('heading', { level: 1, name: 'App 1 - Single Runtime Demo' }), + ).toBeVisible(); + }); + + test('should have explanation section', async ({ page }) => { + await expect( + page.getByRole('heading', { level: 3, name: "What's Happening Here?" }), + ).toBeVisible(); + await expect( + page.locator('p', { hasText: 'This is App1 running on port 3001.' }), + ).toBeVisible(); + }); + + test('should have working counter', async ({ page }) => { + await expect(page.getByRole('heading', { level: 3, name: /Shared State Counter: 0/ })).toBeVisible(); + await page.getByRole('button', { name: 'Increment Counter' }).click(); + await expect(page.getByRole('heading', { level: 3, name: /Shared State Counter: 1/ })).toBeVisible(); + }); + + test('should have local and remote buttons with correct styling', async ({ page }) => { + const localButton = page.getByRole('button', { name: /App 1 Button/ }); + const remoteButton = page.getByRole('button', { name: /App 2 Button/ }); + + await expect(localButton).toBeVisible(); + await expect(localButton).toHaveCSS('background-color', hexToRgb('#4a90e2')); + + await expect(remoteButton).toBeVisible(); + await expect(remoteButton).toHaveCSS('background-color', hexToRgb('#e24a90')); + }); + + test('should have working click counters on buttons', async ({ page }) => { + const localButton = page.getByRole('button', { name: /App 1 Button/ }); + const remoteButton = page.getByRole('button', { name: /App 2 Button/ }); + + await localButton.click(); + await expect(localButton).toContainText('Clicks: 1'); + + await remoteButton.click(); + await expect(remoteButton).toContainText('Clicks: 1'); + }); + + test('should show correct runtime information', async ({ page }) => { + await expect(page.getByRole('heading', { level: 3, name: 'Runtime Information:' })).toBeVisible(); + + await expect(page.getByText('Module: app1')).toBeVisible(); + await expect(page.getByText('Module: app2')).toBeVisible(); + + await expectRemoteEntry(page, 'app1', 'app2', 'http://localhost:3002/remoteEntry.js'); + await expectRemoteEntry(page, 'app2', 'app1', 'http://localhost:3001/app1_partial.js'); + }); + + test('should have working navigation between apps', async ({ page }) => { + const navigationLink = page.getByRole('link', { name: /Go to App 2/ }); + await expect(navigationLink).toHaveAttribute('href', 'http://localhost:3002'); + }); + }); + + test.describe('App 2 (port 3002)', () => { + test.beforeEach(async ({ page }) => { + await preparePage(page, app2Url); + }); + + test('should have correct title', async ({ page }) => { + await expect( + page.getByRole('heading', { level: 1, name: 'App 2 - Single Runtime Demo' }), + ).toBeVisible(); + }); + + test('should have explanation section', async ({ page }) => { + await expect( + page.getByRole('heading', { level: 3, name: "What's Happening Here?" }), + ).toBeVisible(); + await expect( + page.locator('p', { hasText: 'This is App2 running on port 3002.' }), + ).toBeVisible(); + }); + + test('should have working counter', async ({ page }) => { + await expect(page.getByRole('heading', { level: 3, name: /Shared State Counter: 0/ })).toBeVisible(); + await page.getByRole('button', { name: 'Increment Counter' }).click(); + await expect(page.getByRole('heading', { level: 3, name: /Shared State Counter: 1/ })).toBeVisible(); + }); + + test('should have local and remote buttons with correct styling', async ({ page }) => { + const localButton = page.getByRole('button', { name: /App 2 Button/ }); + const remoteButton = page.getByRole('button', { name: /App 1 Button/ }); + + await expect(localButton).toBeVisible(); + await expect(localButton).toHaveCSS('background-color', hexToRgb('#e24a90')); + + await expect(remoteButton).toBeVisible(); + await expect(remoteButton).toHaveCSS('background-color', hexToRgb('#4a90e2')); + }); + + test('should have working click counters on buttons', async ({ page }) => { + const localButton = page.getByRole('button', { name: /App 2 Button/ }); + const remoteButton = page.getByRole('button', { name: /App 1 Button/ }); + + await localButton.click(); + await expect(localButton).toContainText('Clicks: 1'); + + await remoteButton.click(); + await expect(remoteButton).toContainText('Clicks: 1'); + }); + + test('should show correct runtime information', async ({ page }) => { + await expect(page.getByRole('heading', { level: 3, name: 'Runtime Information:' })).toBeVisible(); + + await expect(page.getByText('Module: app1')).toBeVisible(); + await expect(page.getByText('Module: app2')).toBeVisible(); + + await expectRemoteEntry(page, 'app2', 'app1', 'http://localhost:3001/remoteEntry.js'); + await expectRemoteEntry(page, 'app1', 'app2', 'http://localhost:3002/remoteEntry.js'); + }); + + test('should have working navigation between apps', async ({ page }) => { + const navigationLink = page.getByRole('link', { name: /Go to App 1/ }); + await expect(navigationLink).toHaveAttribute('href', 'http://localhost:3001'); + }); + }); +}); diff --git a/runtime-plugins/single-runtime/package.json b/runtime-plugins/single-runtime/package.json index 8631b9ad162..42fe2ab8211 100644 --- a/runtime-plugins/single-runtime/package.json +++ b/runtime-plugins/single-runtime/package.json @@ -14,10 +14,16 @@ "clean": "pnpm --filter single-runtime_app* --parallel clean", "legacy:start": "pnpm --filter single-runtime_app* --parallel legacy:start", "legacy:build": "pnpm --filter single-runtime_app* --parallel legacy:build", - "e2e:ci": "pnpm start > /dev/null 2>&1 & wait-on http-get://localhost:3001/ && npx cypress run --config-file ../../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome", - "legacy:e2e:ci": "pnpm legacy:start > /dev/null 2>&1 & wait-on http-get://localhost:3001/ && npx cypress run --config-file ../../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome" + "e2e:ci": "pnpm build && pnpm exec playwright install --with-deps && CI=1 pnpm exec playwright test --reporter=list", + "legacy:e2e:ci": "pnpm legacy:build && pnpm exec playwright install --with-deps && USE_LEGACY=true CI=1 pnpm exec playwright test --reporter=list", + "test:e2e": "pnpm exec playwright test", + "test:e2e:ui": "pnpm exec playwright test --ui", + "test:e2e:debug": "pnpm exec playwright test --debug" }, "devDependencies": { - "wait-on": "7.2.0" + "wait-on": "7.2.0", + "@module-federation/runtime": "0.17.1", + "@playwright/test": "^1.54.2", + "playwright": "^1.54.2" } } diff --git a/runtime-plugins/single-runtime/playwright.config.ts b/runtime-plugins/single-runtime/playwright.config.ts new file mode 100644 index 00000000000..d158bb006ab --- /dev/null +++ b/runtime-plugins/single-runtime/playwright.config.ts @@ -0,0 +1,47 @@ +import { defineConfig, devices } from '@playwright/test'; + +const useLegacy = process.env.USE_LEGACY === 'true'; +const appCommand = useLegacy ? 'pnpm legacy:start' : 'pnpm start'; + +export default defineConfig({ + testDir: './e2e', + timeout: 60_000, + expect: { + timeout: 15_000, + }, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 1 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost:3001', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1920, height: 1080 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + command: `cd app1 && ${appCommand}`, + port: 3001, + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, + { + command: `cd app2 && ${appCommand}`, + port: 3002, + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, + ], +}); diff --git a/rust-wasm/cypress.env.json b/rust-wasm/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/rust-wasm/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/rust-wasm/e2e/tests/commonChecks.cy.ts b/rust-wasm/e2e/tests/commonChecks.cy.ts deleted file mode 100644 index 6875370d4be..00000000000 --- a/rust-wasm/e2e/tests/commonChecks.cy.ts +++ /dev/null @@ -1,190 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors, selectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; -import { StubTypes } from '../../../cypress-e2e/types/stubTypes'; -import { RustWasmMethods } from '../methods/methods'; - -const basePage: BaseMethods = new BaseMethods(); -const methodsPage: RustWasmMethods = new RustWasmMethods(); - -describe('Rust Wasm', () => { - context('It Checks buttons functionality', () => { - const appsData = [ - { - buttonName: Constants.elementsText.rustWasmApp.buttonsNames[0], - consoleMessage: Constants.commonPhrases.rustWasmApp.consoleMessages.startLoopMessage, - }, - { - buttonName: Constants.elementsText.rustWasmApp.buttonsNames[1], - consoleMessage: Constants.commonPhrases.rustWasmApp.consoleMessages.tickLoopMessage, - index: 1, - }, - { - buttonName: Constants.elementsText.rustWasmApp.buttonsNames[2], - consoleMessage: Constants.commonPhrases.rustWasmApp.consoleMessages.resetLoopMessage, - index: 2, - }, - ]; - - // @ts-ignore - appsData.forEach((property: { buttonName: string; consoleMessage: string; index: number }) => { - const extraPropertyIndex: number = property.index === 1 ? 2 : 1; - - it(`Checks that game board appears after click on ${property.buttonName} button`, () => { - basePage.openLocalhost({ - number: 8080, - }); - basePage.checkElementVisibility({ - selector: selectors.rustWasmApp.gameBoard, - isVisible: false, - notVisibleState: 'not.be.visible', - }); - basePage.checkInfoInConsole(property.consoleMessage, StubTypes.notToBeCalled, false); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: property.buttonName, - }); - basePage.checkElementVisibility({ - selector: selectors.rustWasmApp.gameBoard, - }); - basePage.checkInfoInConsole(property.consoleMessage, StubTypes.beCalled, false, false); - }); - - it(`Checks that game board triggered ${property.buttonName} button disappears after reload`, () => { - basePage.openLocalhost({ - number: 8080, - }); - methodsPage.checkGameBoardAppearsByClick(property.buttonName); - basePage.reloadWindow(); - basePage.checkElementVisibility({ - selector: selectors.rustWasmApp.gameBoard, - isVisible: false, - notVisibleState: 'not.be.visible', - }); - }); - - it(`Checks ${property.buttonName} button still functioning even when game already started`, () => { - basePage.skipTestByCondition(property.buttonName === appsData[0].buttonName); - basePage.openLocalhost({ - number: 8080, - }); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: appsData[0].buttonName, - }); - basePage.checkElementVisibility({ - selector: selectors.rustWasmApp.gameBoard, - }); - basePage.checkInfoInConsole(property.consoleMessage, StubTypes.notToBeCalled, false); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: property.buttonName, - }); - basePage.checkInfoInConsole(property.consoleMessage, StubTypes.beCalled, false, false); - }); - - it(`Checks ${property.buttonName} button still functioning even when game already started and stopped`, () => { - basePage.openLocalhost({ - number: 8080, - }); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: appsData[0].buttonName, - }); - basePage.checkElementVisibility({ - selector: selectors.rustWasmApp.gameBoard, - }); - basePage.checkInfoInConsole(property.consoleMessage, StubTypes.notToBeCalled, false); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.rustWasmApp.buttonsNames[3], - }); - basePage.checkInfoInConsole( - Constants.commonPhrases.rustWasmApp.consoleMessages.stopLoopMessage, - StubTypes.beCalled, - false, - false, - ); - basePage.checkInfoInConsole( - property.consoleMessage, - property.buttonName === Constants.elementsText.rustWasmApp.buttonsNames[0] - ? StubTypes.beCalled - : StubTypes.notToBeCalled, - false, - false, - ); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: property.buttonName, - }); - basePage.checkElementVisibility({ - selector: selectors.rustWasmApp.gameBoard, - }); - basePage.checkInfoInConsole(property.consoleMessage, StubTypes.beCalled, false, false); - }); - - it(`Checks game board triggered by ${ - Constants.elementsText.rustWasmApp.buttonsNames[property.index] - } - can be updated by ${ - Constants.elementsText.rustWasmApp.buttonsNames[extraPropertyIndex] - } `, () => { - const consoleMessage: string = - property.index === 1 ? appsData[2].consoleMessage : appsData[1].consoleMessage; - - basePage.skipTestByCondition(property.buttonName === appsData[0].buttonName); - basePage.openLocalhost({ - number: 8080, - }); - methodsPage.checkGameBoardAppearsByClick( - Constants.elementsText.rustWasmApp.buttonsNames[property.index], - ); - basePage.checkInfoInConsole(consoleMessage, StubTypes.notToBeCalled, false); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.rustWasmApp.buttonsNames[extraPropertyIndex], - }); - basePage.checkInfoInConsole(consoleMessage, StubTypes.beCalled, false, false); - }); - - it(`Checks game triggered by ${property.buttonName} button can be started and stopped by Play button`, () => { - basePage.skipTestByCondition(property.buttonName === appsData[0].buttonName); - basePage.openLocalhost({ - number: 8080, - }); - methodsPage.checkGameBoardAppearsByClick(property.buttonName); - basePage.checkInfoInConsole( - Constants.commonPhrases.rustWasmApp.consoleMessages.startLoopMessage, - StubTypes.notToBeCalled, - false, - ); - basePage.checkInfoInConsole( - Constants.commonPhrases.rustWasmApp.consoleMessages.stopLoopMessage, - StubTypes.notToBeCalled, - false, - false, - ); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: appsData[0].buttonName, - }); - basePage.checkInfoInConsole( - Constants.commonPhrases.rustWasmApp.consoleMessages.startLoopMessage, - StubTypes.beCalled, - false, - false, - ); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.rustWasmApp.buttonsNames[3], - }); - basePage.checkInfoInConsole( - Constants.commonPhrases.rustWasmApp.consoleMessages.stopLoopMessage, - StubTypes.beCalled, - false, - false, - ); - }); - }); - }); -}); diff --git a/rust-wasm/e2e/tests/commonChecks.spec.ts b/rust-wasm/e2e/tests/commonChecks.spec.ts new file mode 100644 index 00000000000..4079f2c0be6 --- /dev/null +++ b/rust-wasm/e2e/tests/commonChecks.spec.ts @@ -0,0 +1,244 @@ +import { expect, test, type Page } from '@playwright/test'; + +import { BaseMethods } from '../../../playwright-e2e/common/base'; +import { baseSelectors, selectors } from '../../../cypress-e2e/common/selectors'; +import { Constants } from '../../../cypress-e2e/fixtures/constants'; + +const ports = { + host: 8080, +}; + +const buttonLabels = Constants.elementsText.rustWasmApp.buttonsNames; +const consoleMessages = Constants.commonPhrases.rustWasmApp.consoleMessages; +const stopButton = buttonLabels[3]; + +interface ButtonTestData { + buttonName: string; + consoleMessage: string; + index?: number; +} + +const buttonsUnderTest: ButtonTestData[] = [ + { + buttonName: buttonLabels[0], + consoleMessage: consoleMessages.startLoopMessage, + }, + { + buttonName: buttonLabels[1], + consoleMessage: consoleMessages.tickLoopMessage, + index: 1, + }, + { + buttonName: buttonLabels[2], + consoleMessage: consoleMessages.resetLoopMessage, + index: 2, + }, +]; + +async function initConsoleSpy(page: Page): Promise { + await page.addInitScript(() => { + const originalLog = window.console.log.bind(window.console); + (window as any).__e2eLogs = []; + window.console.log = (...args: unknown[]) => { + const store: string[] = (window as any).__e2eLogs; + store.push(args.map(String).join(' ')); + originalLog(...args); + }; + }); +} + +async function resetConsoleLogs(page: Page): Promise { + await page.evaluate(() => { + (window as any).__e2eLogs = []; + }); +} + +async function getConsoleLogCount(page: Page, message: string): Promise { + return await page.evaluate(target => { + const logs: string[] = (window as any).__e2eLogs ?? []; + return logs.filter(entry => entry.includes(target)).length; + }, message); +} + +async function waitForConsoleLog(page: Page, message: string, timeout: number = 5_000): Promise { + const start = Date.now(); + while (Date.now() - start < timeout) { + if ((await getConsoleLogCount(page, message)) > 0) { + return; + } + + await page.waitForTimeout(100); + } + + throw new Error(`Console message \"${message}\" not emitted within ${timeout}ms.`); +} + +test.describe('Rust Wasm - Buttons behaviour', () => { + let basePage: BaseMethods; + + test.beforeEach(async ({ page }) => { + await initConsoleSpy(page); + basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: ports.host }); + }); + + buttonsUnderTest.forEach(({ buttonName, consoleMessage }) => { + test(`Checks that game board appears after clicking ${buttonName}`, async ({ page }) => { + await resetConsoleLogs(page); + + await basePage.checkElementVisibility({ + selector: selectors.rustWasmApp.gameBoard, + isVisible: false, + notVisibleState: 'not.be.visible', + }); + // Allow a stray log due to async timers + expect(await getConsoleLogCount(page, consoleMessage)).toBeLessThanOrEqual(1); + + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: buttonName, + }); + + await basePage.checkElementVisibility({ selector: selectors.rustWasmApp.gameBoard }); + await waitForConsoleLog(page, consoleMessage); + }); + + test(`Checks that game board triggered by ${buttonName} disappears after reload`, async ({ page }) => { + await basePage.checkElementVisibility({ + selector: selectors.rustWasmApp.gameBoard, + isVisible: false, + notVisibleState: 'not.be.visible', + }); + + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: buttonName, + }); + await basePage.checkElementVisibility({ selector: selectors.rustWasmApp.gameBoard }); + + await basePage.reloadWindow(); + await basePage.checkElementVisibility({ + selector: selectors.rustWasmApp.gameBoard, + isVisible: false, + notVisibleState: 'not.be.visible', + }); + }); + + test(`Checks ${buttonName} button functions when game already started`, async ({ page }) => { + test.skip(buttonName === buttonLabels[0], 'Play button covered by other tests.'); + + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: buttonLabels[0], + }); + await basePage.checkElementVisibility({ selector: selectors.rustWasmApp.gameBoard }); + + await resetConsoleLogs(page); + // Allow a straggler log from the prior start + expect(await getConsoleLogCount(page, consoleMessage)).toBeLessThanOrEqual(1); + + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: buttonName, + }); + + await waitForConsoleLog(page, consoleMessage); + }); + + test(`Checks ${buttonName} button functions after stopping the game`, async ({ page }) => { + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: buttonLabels[0], + }); + await basePage.checkElementVisibility({ selector: selectors.rustWasmApp.gameBoard }); + + await resetConsoleLogs(page); + expect(await getConsoleLogCount(page, consoleMessage)).toBeLessThanOrEqual(1); + + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: stopButton, + }); + await waitForConsoleLog(page, consoleMessages.stopLoopMessage); + + const logsAfterStop = await getConsoleLogCount(page, consoleMessage); + if (buttonName === buttonLabels[0]) { + expect(logsAfterStop).toBeGreaterThan(0); + } else { + // Occasionally a last log sneaks in right after stop; allow small tolerance. + expect(logsAfterStop).toBeLessThanOrEqual(1); + } + + await resetConsoleLogs(page); + + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: buttonName, + }); + await basePage.checkElementVisibility({ selector: selectors.rustWasmApp.gameBoard }); + await waitForConsoleLog(page, consoleMessage); + }); + }); + + buttonsUnderTest + .filter(({ buttonName }) => buttonName !== buttonLabels[0]) + .forEach(({ buttonName, index = 0 }) => { + const alternateIndex = index === 1 ? 2 : 1; + const alternateMessage = alternateIndex === 2 ? consoleMessages.resetLoopMessage : consoleMessages.tickLoopMessage; + const alternateButton = buttonLabels[alternateIndex]; + + test(`Checks game board triggered by ${buttonName} can be updated by ${alternateButton}`, async ({ page }) => { + await basePage.checkElementVisibility({ + selector: selectors.rustWasmApp.gameBoard, + isVisible: false, + notVisibleState: 'not.be.visible', + }); + + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: buttonName, + }); + await basePage.checkElementVisibility({ selector: selectors.rustWasmApp.gameBoard }); + + await resetConsoleLogs(page); + expect(await getConsoleLogCount(page, alternateMessage)).toBeLessThanOrEqual(1); + + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: alternateButton, + }); + + await waitForConsoleLog(page, alternateMessage); + }); + + test(`Checks game triggered by ${buttonName} can be started and stopped by ${buttonLabels[0]}`, async ({ page }) => { + await basePage.checkElementVisibility({ + selector: selectors.rustWasmApp.gameBoard, + isVisible: false, + notVisibleState: 'not.be.visible', + }); + + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: buttonName, + }); + await basePage.checkElementVisibility({ selector: selectors.rustWasmApp.gameBoard }); + + await resetConsoleLogs(page); + expect(await getConsoleLogCount(page, consoleMessages.startLoopMessage)).toBeLessThanOrEqual(1); + expect(await getConsoleLogCount(page, consoleMessages.stopLoopMessage)).toBeLessThanOrEqual(1); + + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: buttonLabels[0], + }); + await waitForConsoleLog(page, consoleMessages.startLoopMessage); + + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: stopButton, + }); + await waitForConsoleLog(page, consoleMessages.stopLoopMessage); + }); + }); +}); diff --git a/rust-wasm/e2e/tests/hostAppChecks.cy.ts b/rust-wasm/e2e/tests/hostAppChecks.cy.ts deleted file mode 100644 index 5ef209a94fd..00000000000 --- a/rust-wasm/e2e/tests/hostAppChecks.cy.ts +++ /dev/null @@ -1,184 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors, selectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; -import { CssAttr } from '../../../cypress-e2e/types/cssAttr'; -import { StubTypes } from '../../../cypress-e2e/types/stubTypes'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Rust Wasm', () => { - context('It Checks host app', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 8080, - }); - }); - - it('Checks basic console message', () => { - basePage.checkInfoInConsole( - Constants.commonPhrases.rustWasmApp.consoleMessages.baseLoadingMessage, - ); - }); - - it('Checks app header visibility', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: Constants.commonPhrases.rustWasmApp.commonHostAppName, - visibilityState: 'be.visible', - }); - }); - - it('Checks there are three buttons on page', () => { - basePage.checkElementQuantity({ - selector: baseSelectors.tags.coreElements.button, - quantity: 3, - }); - }); - - it('Checks all buttons are not disabled', () => { - basePage.checkElementState({ - selector: baseSelectors.tags.coreElements.button, - state: ':disabled', - isMultiple: true, - jqueryValue: false, - }); - }); - - it('Checks all buttons names visibility', () => { - Constants.elementsText.rustWasmApp.buttonsNames.forEach((name: string) => { - if (name !== Constants.elementsText.rustWasmApp.buttonsNames[3]) { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: name, - visibilityState: 'be.visible', - }); - } - }); - }); - - it('Checks all buttons shares same color', () => { - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.coreElements.button, - prop: CssAttr.css, - value: Constants.color.lightGrey, - isMultiple: true, - }); - }); - - it('Checks that Play button name changed to Stop after click', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.rustWasmApp.buttonsNames[0], - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.rustWasmApp.buttonsNames[3], - isVisible: false, - }); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.rustWasmApp.buttonsNames[0], - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.rustWasmApp.buttonsNames[0], - isVisible: false, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.rustWasmApp.buttonsNames[3], - visibilityState: 'be.visible', - }); - }); - - it('Checks that start button name returns to Play after reload', () => { - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.rustWasmApp.buttonsNames[0], - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.rustWasmApp.buttonsNames[0], - isVisible: false, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.rustWasmApp.buttonsNames[3], - visibilityState: 'be.visible', - }); - basePage.reloadWindow(); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.rustWasmApp.buttonsNames[0], - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.rustWasmApp.buttonsNames[3], - isVisible: false, - }); - }); - - it('Checks infinite looping started on game board after appearing', () => { - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.rustWasmApp.buttonsNames[0], - }); - basePage.checkElementVisibility({ - selector: selectors.rustWasmApp.gameBoard, - }); - basePage.checkInfoInConsole( - Constants.commonPhrases.rustWasmApp.consoleMessages.startLoopMessage, - ); - }); - - it('Checks looping stopped after reload', () => { - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.rustWasmApp.buttonsNames[0], - }); - basePage.checkElementVisibility({ - selector: selectors.rustWasmApp.gameBoard, - }); - basePage.checkInfoInConsole( - Constants.commonPhrases.rustWasmApp.consoleMessages.startLoopMessage, - ); - basePage.reloadWindow(); - basePage.checkElementVisibility({ - selector: selectors.rustWasmApp.gameBoard, - isVisible: false, - notVisibleState: 'not.be.visible', - }); - basePage.checkInfoInConsole( - Constants.commonPhrases.rustWasmApp.consoleMessages.startLoopMessage, - StubTypes.notToBeCalled, - ); - }); - - it('Checks looping can be stopped by Stop button', () => { - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.rustWasmApp.buttonsNames[0], - }); - basePage.checkElementVisibility({ - selector: selectors.rustWasmApp.gameBoard, - }); - basePage.checkInfoInConsole( - Constants.commonPhrases.rustWasmApp.consoleMessages.stopLoopMessage, - StubTypes.notToBeCalled, - false, - ); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.rustWasmApp.buttonsNames[3], - }); - basePage.checkInfoInConsole( - Constants.commonPhrases.rustWasmApp.consoleMessages.stopLoopMessage, - StubTypes.beCalled, - false, - false, - ); - }); - }); -}); diff --git a/rust-wasm/e2e/tests/hostAppChecks.spec.ts b/rust-wasm/e2e/tests/hostAppChecks.spec.ts new file mode 100644 index 00000000000..8891163fcb5 --- /dev/null +++ b/rust-wasm/e2e/tests/hostAppChecks.spec.ts @@ -0,0 +1,219 @@ +import { expect, test, type Page } from '@playwright/test'; + +import { BaseMethods } from '../../../playwright-e2e/common/base'; +import { baseSelectors, selectors } from '../../../cypress-e2e/common/selectors'; +import { Constants } from '../../../cypress-e2e/fixtures/constants'; + +const ports = { + host: 8080, +}; + +const buttonLabels = Constants.elementsText.rustWasmApp.buttonsNames; +const consoleMessages = Constants.commonPhrases.rustWasmApp.consoleMessages; + +async function initConsoleSpy(page: Page): Promise { + await page.addInitScript(() => { + const originalLog = window.console.log.bind(window.console); + (window as any).__e2eLogs = []; + window.console.log = (...args: unknown[]) => { + const store: string[] = (window as any).__e2eLogs; + store.push(args.map(String).join(' ')); + originalLog(...args); + }; + }); +} + +async function resetConsoleLogs(page: Page): Promise { + await page.evaluate(() => { + (window as any).__e2eLogs = []; + }); +} + +async function getConsoleLogCount(page: Page, message: string): Promise { + return await page.evaluate(target => { + const logs: string[] = (window as any).__e2eLogs ?? []; + return logs.filter(entry => entry.includes(target)).length; + }, message); +} + +async function waitForConsoleLog(page: Page, message: string, timeout: number = 5_000): Promise { + const start = Date.now(); + while (Date.now() - start < timeout) { + if ((await getConsoleLogCount(page, message)) > 0) { + return; + } + + await page.waitForTimeout(100); + } + + throw new Error(`Console message \"${message}\" not emitted within ${timeout}ms.`); +} + +test.describe('Rust Wasm - Host app checks', () => { + let basePage: BaseMethods; + + test.beforeEach(async ({ page }) => { + await initConsoleSpy(page); + basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: ports.host }); + }); + + test('Checks basic console message', async ({ page }) => { + await waitForConsoleLog(page, consoleMessages.baseLoadingMessage); + }); + + test('Checks app header visibility', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h1, + text: Constants.commonPhrases.rustWasmApp.commonHostAppName, + visibilityState: 'be.visible', + }); + }); + + test('Checks there are three buttons on page', async () => { + await basePage.checkElementQuantity({ + selector: baseSelectors.tags.coreElements.button, + quantity: 3, + }); + }); + + test('Checks all buttons are not disabled', async () => { + await basePage.checkElementState({ + selector: baseSelectors.tags.coreElements.button, + state: ':disabled', + isMultiple: true, + jqueryValue: false, + }); + }); + + test('Checks all button names visibility', async () => { + for (const name of buttonLabels) { + if (name === buttonLabels[3]) { + continue; + } + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: name, + visibilityState: 'be.visible', + }); + } + }); + + test('Checks all buttons share same color', async () => { + await basePage.checkElementHaveProperty({ + selector: baseSelectors.tags.coreElements.button, + prop: 'background-color', + value: Constants.color.lightGrey, + isMultiple: true, + }); + }); + + test('Checks that Play button name changes to Stop after click', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: buttonLabels[0], + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: buttonLabels[3], + isVisible: false, + }); + + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: buttonLabels[0], + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: buttonLabels[0], + isVisible: false, + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: buttonLabels[3], + visibilityState: 'be.visible', + }); + }); + + test('Checks that Play button name returns after reload', async () => { + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: buttonLabels[0], + }); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: buttonLabels[3], + visibilityState: 'be.visible', + }); + + await basePage.reloadWindow(); + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: buttonLabels[0], + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: buttonLabels[3], + isVisible: false, + }); + }); + + test('Checks infinite looping started after game board appears', async ({ page }) => { + await resetConsoleLogs(page); + + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: buttonLabels[0], + }); + await basePage.checkElementVisibility({ selector: selectors.rustWasmApp.gameBoard }); + + await waitForConsoleLog(page, consoleMessages.startLoopMessage); + }); + + test('Checks looping stopped after reload', async ({ page }) => { + await resetConsoleLogs(page); + + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: buttonLabels[0], + }); + await basePage.checkElementVisibility({ selector: selectors.rustWasmApp.gameBoard }); + + await waitForConsoleLog(page, consoleMessages.startLoopMessage); + + await basePage.reloadWindow(); + await basePage.checkElementVisibility({ + selector: selectors.rustWasmApp.gameBoard, + isVisible: false, + notVisibleState: 'not.be.visible', + }); + + await resetConsoleLogs(page); + await page.waitForTimeout(300); + expect(await getConsoleLogCount(page, consoleMessages.startLoopMessage)).toBe(0); + }); + + test('Checks looping can be stopped by Stop button', async ({ page }) => { + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: buttonLabels[0], + }); + await basePage.checkElementVisibility({ selector: selectors.rustWasmApp.gameBoard }); + + await resetConsoleLogs(page); + expect(await getConsoleLogCount(page, consoleMessages.stopLoopMessage)).toBe(0); + + await basePage.clickElementWithText({ + selector: baseSelectors.tags.coreElements.button, + text: buttonLabels[3], + }); + + await waitForConsoleLog(page, consoleMessages.stopLoopMessage); + }); +}); diff --git a/rust-wasm/e2e/tests/runAll.cy.ts b/rust-wasm/e2e/tests/runAll.cy.ts deleted file mode 100644 index d40d9cec9aa..00000000000 --- a/rust-wasm/e2e/tests/runAll.cy.ts +++ /dev/null @@ -1,2 +0,0 @@ -import './commonChecks.cy'; -import './hostAppChecks.cy'; diff --git a/rust-wasm/package.json b/rust-wasm/package.json index 47136f133b1..e83b4a47ed7 100644 --- a/rust-wasm/package.json +++ b/rust-wasm/package.json @@ -7,10 +7,14 @@ "license": "MIT", "scripts": { "start": "pnpm --parallel --filter rust-wasm_* --stream start", - "e2e:ci": "pnpm start & wait-on http-get://localhost:8080/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/tests/runAll.cy.ts\" --browser=chrome" + "test:e2e": "pnpm exec playwright test", + "test:e2e:ui": "pnpm exec playwright test --ui", + "test:e2e:debug": "pnpm exec playwright test --debug", + "e2e:ci": "pnpm exec playwright install --with-deps && pnpm exec playwright test --reporter=list" }, "devDependencies": { + "@playwright/test": "^1.54.2", "lerna": "8.1.6", - "wait-on": "7.2.0" + "playwright": "^1.54.2" } } diff --git a/rust-wasm/playwright.config.ts b/rust-wasm/playwright.config.ts new file mode 100644 index 00000000000..7a71c2f0b22 --- /dev/null +++ b/rust-wasm/playwright.config.ts @@ -0,0 +1,44 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e/tests', + timeout: 90_000, + expect: { + timeout: 15_000, + }, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 1 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost:8080', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1920, height: 1080 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + command: 'cd remote && pnpm start', + port: 8081, + reuseExistingServer: !process.env.CI, + timeout: 180_000, + }, + { + command: 'cd host && pnpm start', + port: 8080, + reuseExistingServer: !process.env.CI, + timeout: 180_000, + }, + ], +}); diff --git a/scripts/ci-local/run-federated-css-ssr.sh b/scripts/ci-local/run-federated-css-ssr.sh new file mode 100755 index 00000000000..d1f2fc59fde --- /dev/null +++ b/scripts/ci-local/run-federated-css-ssr.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")"/../.. && pwd) +cd "$ROOT_DIR" + +echo "[local-ci] Killing known SSR ports before run…" +node federated-css-react-ssr/scripts/kill-all-ports.cjs || true 2>/dev/null || true + +echo "[local-ci] Sockets before run:" +ss -ltnp || true + +MAX_SECS=$((7*60)) +echo "[local-ci] Running federated-css-react-ssr Playwright tests with ${MAX_SECS}s max timeout…" + +run_with_timeout() { + set +e + ( pnpm --dir federated-css-react-ssr exec playwright test --reporter=list ) & + PW_PID=$! + ( + sleep "$MAX_SECS" + if kill -0 "$PW_PID" 2>/dev/null; then + echo "[local-ci] TIMEOUT reached (${MAX_SECS}s). Killing SSR ports and Playwright (pid=$PW_PID)…" + node federated-css-react-ssr/scripts/kill-all-ports.cjs || true + kill -TERM "$PW_PID" 2>/dev/null || true + sleep 2 + kill -KILL "$PW_PID" 2>/dev/null || true + exit 124 + fi + ) & WATCHDOG=$! + wait "$PW_PID"; STATUS=$? + kill -TERM "$WATCHDOG" 2>/dev/null || true + wait "$WATCHDOG" 2>/dev/null || true + set -e + return $STATUS +} + +run_with_timeout || STATUS=$? + +echo "[local-ci] Sockets after run:" +ss -ltnp || true + +echo "[local-ci] Killing SSR ports after run…" +node federated-css-react-ssr/scripts/kill-all-ports.cjs || true 2>/dev/null || true + +exit ${STATUS:-0} diff --git a/scripts/ci-local/run-federated-css.sh b/scripts/ci-local/run-federated-css.sh new file mode 100755 index 00000000000..d4db1234b61 --- /dev/null +++ b/scripts/ci-local/run-federated-css.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")"/../.. && pwd) +cd "$ROOT_DIR" + +echo "[local-ci] Killing known ports before run…" +node federated-css/scripts/kill-all-ports.cjs || true + +echo "[local-ci] Snapshot of listening sockets before run:" +ss -ltnp || true + +MAX_SECS=$((7*60)) +echo "[local-ci] Running federated-css Playwright tests with ${MAX_SECS}s max timeout…" + +run_with_timeout() { + set +e + ( pnpm --dir federated-css exec playwright test --reporter=list ) & + PW_PID=$! + ( + sleep "$MAX_SECS" + if kill -0 "$PW_PID" 2>/dev/null; then + echo "[local-ci] TIMEOUT reached (${MAX_SECS}s). Killing sub-app ports and Playwright (pid=$PW_PID)…" + node federated-css/scripts/kill-all-ports.cjs || true + kill -TERM "$PW_PID" 2>/dev/null || true + sleep 2 + kill -KILL "$PW_PID" 2>/dev/null || true + exit 124 + fi + ) & WATCHDOG=$! + wait "$PW_PID"; STATUS=$? + kill -TERM "$WATCHDOG" 2>/dev/null || true + wait "$WATCHDOG" 2>/dev/null || true + set -e + return $STATUS +} + +run_with_timeout || STATUS=$? + +echo "[local-ci] Snapshot of listening sockets after run:" +ss -ltnp || true + +echo "[local-ci] Killing ports after run…" +node federated-css/scripts/kill-all-ports.cjs || true + +exit ${STATUS:-0} diff --git a/self-healing/cypress.env.json b/self-healing/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/self-healing/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/self-healing/e2e/tests/commonChecks.cy.ts b/self-healing/e2e/tests/commonChecks.cy.ts deleted file mode 100644 index a377030dca1..00000000000 --- a/self-healing/e2e/tests/commonChecks.cy.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors, updatedSelectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; -import { CssAttr } from '../../../cypress-e2e/types/cssAttr'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Self Healing', () => { - context('It checks self-healing apps', () => { - const appsData = [ - { - host: 3001, - appName: Constants.commonConstantsData.commonCountAppNames.app1, - webpackConfigPath: Constants.filesPath.selfHealingAppsConfigs.app1, - }, - { - host: 3002, - appName: Constants.commonConstantsData.commonCountAppNames.app2, - webpackConfigPath: Constants.filesPath.selfHealingAppsConfigs.app2, - }, - ]; - - appsData.forEach((property: { host: number; appName: string; webpackConfigPath: string }) => { - it(`Checks ${Constants.commonPhrases.selfHealingApp.headerName} header visibility`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.commonPhrases.selfHealingApp.headerName, - visibilityState: 'be.visible', - }); - }); - - it(`Checks ${property.appName} app name visibility`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: property.appName, - visibilityState: 'be.visible', - }); - }); - - it(`Checks button text visibility for ${property.appName} app`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.commonConstantsData.commonButtonWithEmoji, - visibilityState: 'be.visible', - }); - }); - - it(`Checks that button on both apps has pink color`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementHaveProperty({ - selector: baseSelectors.tags.coreElements.button, - prop: CssAttr.backgroundColor, - value: Constants.color.pink, - }); - }); - - it(`Checks that app names is not equal`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.compareInfoBetweenHosts( - updatedSelectors.common.appName, - property.host === 3002 ? appsData[0].host : appsData[1].host, - false, - ); - }); - - it(`Checks that only ${appsData[1].appName} webpack config includes shared styled components`, () => { - basePage.checkValueInReadFile({ - filePath: property.webpackConfigPath, - webpackFileSeparator: Constants.commonPhrases.selfHealingApp.configs.separator, - text: Constants.commonPhrases.selfHealingApp.configs.searchedString, - isContain: !property.webpackConfigPath.includes('1'), - }); - }); - }); - }); -}); diff --git a/self-healing/e2e/tests/commonChecks.spec.ts b/self-healing/e2e/tests/commonChecks.spec.ts new file mode 100644 index 00000000000..3e721749462 --- /dev/null +++ b/self-healing/e2e/tests/commonChecks.spec.ts @@ -0,0 +1,83 @@ +import { expect, test } from '@playwright/test'; +import path from 'path'; +import { readFileSync } from 'fs'; + +import { BaseMethods } from '../../../playwright-e2e/common/base'; +import { baseSelectors, updatedSelectors } from '../../../cypress-e2e/common/selectors'; +import { Constants } from '../../../cypress-e2e/fixtures/constants'; + +const appsData = [ + { + host: 3001, + appName: Constants.commonConstantsData.commonCountAppNames.app1, + webpackConfigPath: Constants.filesPath.selfHealingAppsConfigs.app1, + }, + { + host: 3002, + appName: Constants.commonConstantsData.commonCountAppNames.app2, + webpackConfigPath: Constants.filesPath.selfHealingAppsConfigs.app2, + }, +]; + +const repoRoot = path.resolve(__dirname, '../../..'); + +appsData.forEach(({ host, appName, webpackConfigPath }) => { + test.describe(`Self-Healing app on localhost:${host}`, () => { + let basePage: BaseMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: host }); + }); + + test(`Checks ${Constants.commonPhrases.selfHealingApp.headerName} header visibility`, async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: Constants.commonPhrases.selfHealingApp.headerName, + visibilityState: 'be.visible', + }); + }); + + test(`Checks ${appName} app name visibility`, async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: appName, + visibilityState: 'be.visible', + }); + }); + + test(`Checks button text visibility for ${appName}`, async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.commonConstantsData.commonButtonWithEmoji, + visibilityState: 'be.visible', + }); + }); + + test(`Checks that button on ${appName} has pink color`, async () => { + await basePage.checkElementHaveProperty({ + selector: baseSelectors.tags.coreElements.button, + prop: 'background-color', + value: Constants.color.pink, + }); + }); + + test('Checks that app names are not equal across hosts', async () => { + const otherHost = host === appsData[0].host ? appsData[1].host : appsData[0].host; + await basePage.compareInfoBetweenHosts(updatedSelectors.common.appName, otherHost, false); + }); + }); + + test(`Checks webpack config for ${appName}`, async () => { + const filePath = path.resolve(repoRoot, webpackConfigPath); + const content = readFileSync(filePath, 'utf-8'); + const section = content.split(Constants.commonPhrases.selfHealingApp.configs.separator)[1] ?? ''; + const shouldContain = !webpackConfigPath.includes('app1'); + + if (shouldContain) { + expect(section).toContain(Constants.commonPhrases.selfHealingApp.configs.searchedString); + } else { + expect(section).not.toContain(Constants.commonPhrases.selfHealingApp.configs.searchedString); + } + }); +}); diff --git a/self-healing/package.json b/self-healing/package.json index b959bb6079d..461a76041b4 100644 --- a/self-healing/package.json +++ b/self-healing/package.json @@ -8,9 +8,13 @@ "build": "pnpm run --filter self-healing_app* build", "serve": "pnpm run --filter self-healing_app* --parallel serve", "clean": "pnpm run --filter self-healing_app* --parallel clean", - "e2e:ci": "pnpm start & wait-on http-get://localhost:3001/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/tests/*.cy.ts\" --browser=chrome" + "test:e2e": "pnpm exec playwright test", + "test:e2e:ui": "pnpm exec playwright test --ui", + "test:e2e:debug": "pnpm exec playwright test --debug", + "e2e:ci": "pnpm exec playwright install --with-deps && pnpm exec playwright test --reporter=list" }, "devDependencies": { - "wait-on": "7.2.0" + "@playwright/test": "^1.54.2", + "playwright": "^1.54.2" } } diff --git a/self-healing/playwright.config.ts b/self-healing/playwright.config.ts new file mode 100644 index 00000000000..57d4c873878 --- /dev/null +++ b/self-healing/playwright.config.ts @@ -0,0 +1,44 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e/tests', + timeout: 60_000, + expect: { + timeout: 15_000, + }, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 1 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost:3001', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1920, height: 1080 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + command: 'cd app1 && pnpm start', + port: 3001, + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, + { + command: 'cd app2 && pnpm start', + port: 3002, + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, + ], +}); diff --git a/server-side-render-only/cypress.env.json b/server-side-render-only/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/server-side-render-only/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/server-side-render-only/e2e/tests/checkServersideRenderOnlyApp.cy.ts b/server-side-render-only/e2e/tests/checkServersideRenderOnlyApp.cy.ts deleted file mode 100644 index 91ebc5da3b4..00000000000 --- a/server-side-render-only/e2e/tests/checkServersideRenderOnlyApp.cy.ts +++ /dev/null @@ -1,117 +0,0 @@ -import { baseSelectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; -import { BaseMethods } from '../../../cypress-e2e/common/base'; - -const basePage: BaseMethods = new BaseMethods(); - -const appsData = [ - { - headerText: Constants.elementsText.serverSideRenderOnlyApp.headers.host, - sharedComponentText: Constants.elementsText.serverSideRenderOnlyApp.components.sharedComponent, - updatedSharedComponentText: - Constants.elementsText.serverSideRenderOnlyApp.components.updatedSharedComponent, - host: 3000, - }, - { - headerText: Constants.elementsText.serverSideRenderOnlyApp.headers.remote, - sharedComponentText: Constants.elementsText.serverSideRenderOnlyApp.components.sharedComponent, - updatedSharedComponentText: - Constants.elementsText.serverSideRenderOnlyApp.components.updatedSharedComponent, - host: 3001, - }, -]; - -appsData.forEach( - (property: { - headerText: string; - sharedComponentText: string; - updatedSharedComponentText: string; - host: number; - }) => { - describe('Server Side Render Only', () => { - context(`Check ${property.headerText} App`, () => { - beforeEach(() => { - basePage.openLocalhost({ - number: property.host, - }); - }); - - it(`Check ${property.headerText} app build and running + check elemens exist`, () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: property.headerText, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: property.sharedComponentText, - }); - }); - - it('Update Shared component file', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: property.sharedComponentText, - }); - basePage.writeContentToFile({ - filePath: Constants.filesPath.serverSideRenderOnlyChangeFilePath, - content: Constants.elementsText.serverSideRenderOnlyApp.contents.changedContent, - }); - basePage.reloadWindow(true); - }); - - it(`Check Shared component visibility in ${property.headerText} after updating & check it is not reverted after reload`, () => { - basePage.writeContentToFile({ - filePath: Constants.filesPath.serverSideRenderOnlyChangeFilePath, - content: Constants.elementsText.serverSideRenderOnlyApp.contents.changedContent, - }); - if (property.host === 3000) { - basePage.openLocalhost({ - number: 3001, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: property.updatedSharedComponentText, - }); - basePage.reloadWindow(true); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: property.updatedSharedComponentText, - }); - basePage.writeContentToFile({ - filePath: Constants.filesPath.serverSideRenderOnlyChangeFilePath, - content: Constants.elementsText.serverSideRenderOnlyApp.contents.originalContent, - }); - return; - } - basePage.openLocalhost({ - number: 3000, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: property.updatedSharedComponentText, - }); - basePage.reloadWindow(true); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: property.updatedSharedComponentText, - }); - basePage.writeContentToFile({ - filePath: Constants.filesPath.serverSideRenderOnlyChangeFilePath, - content: Constants.elementsText.serverSideRenderOnlyApp.contents.originalContent, - }); - }); - - it(`Check ${property.headerText} app build and running & check shared component visibility`, () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: property.headerText, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: property.sharedComponentText, - }); - }); - }); - }); - }, -); diff --git a/server-side-render-only/e2e/tests/checkServersideRenderOnlyApp.spec.ts b/server-side-render-only/e2e/tests/checkServersideRenderOnlyApp.spec.ts new file mode 100644 index 00000000000..642a54e37e6 --- /dev/null +++ b/server-side-render-only/e2e/tests/checkServersideRenderOnlyApp.spec.ts @@ -0,0 +1,125 @@ +import { test } from '@playwright/test'; +import path from 'path'; +import { readFileSync, writeFileSync } from 'fs'; + +import { BaseMethods } from '../../../playwright-e2e/common/base'; +import { baseSelectors } from '../../../cypress-e2e/common/selectors'; +import { Constants } from '../../../cypress-e2e/fixtures/constants'; + +const appsData = [ + { + headerText: Constants.elementsText.serverSideRenderOnlyApp.headers.host, + sharedComponentText: Constants.elementsText.serverSideRenderOnlyApp.components.sharedComponent, + updatedSharedComponentText: + Constants.elementsText.serverSideRenderOnlyApp.components.updatedSharedComponent, + host: 3000, + }, + { + headerText: Constants.elementsText.serverSideRenderOnlyApp.headers.remote, + sharedComponentText: Constants.elementsText.serverSideRenderOnlyApp.components.sharedComponent, + updatedSharedComponentText: + Constants.elementsText.serverSideRenderOnlyApp.components.updatedSharedComponent, + host: 3001, + }, +]; + +const repoRoot = path.resolve(__dirname, '../../..'); +const sharedComponentPath = path.resolve( + repoRoot, + Constants.filesPath.serverSideRenderOnlyChangeFilePath, +); +const initialSharedComponentContent = readFileSync(sharedComponentPath, 'utf-8'); + +const writeSharedComponent = (content: string): void => { + writeFileSync(sharedComponentPath, content, 'utf-8'); +}; + +test.describe('Server Side Render Only', () => { + test.describe.configure({ mode: 'serial' }); + + test.beforeAll(() => { + writeSharedComponent(Constants.elementsText.serverSideRenderOnlyApp.contents.originalContent); + }); + + test.afterEach(() => { + writeSharedComponent(initialSharedComponentContent); + }); + + appsData.forEach(({ headerText, sharedComponentText, updatedSharedComponentText, host }) => { + test.describe(`Check ${headerText} App`, () => { + let basePage: BaseMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: host }); + }); + + test('Check app build and running + elements exist', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h1, + text: headerText, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: sharedComponentText, + visibilityState: 'be.visible', + }); + }); + + test('Update Shared component file', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: sharedComponentText, + visibilityState: 'be.visible', + }); + + writeSharedComponent(Constants.elementsText.serverSideRenderOnlyApp.contents.changedContent); + + await basePage.reloadWindow(); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: updatedSharedComponentText, + visibilityState: 'be.visible', + }); + }); + + test('Check Shared component visibility in both apps after updating', async () => { + writeSharedComponent(Constants.elementsText.serverSideRenderOnlyApp.contents.changedContent); + + const otherHost = host === 3000 ? 3001 : 3000; + await basePage.openLocalhost({ number: otherHost }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: updatedSharedComponentText, + visibilityState: 'be.visible', + }); + await basePage.reloadWindow(); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: updatedSharedComponentText, + visibilityState: 'be.visible', + }); + + writeSharedComponent(Constants.elementsText.serverSideRenderOnlyApp.contents.originalContent); + }); + + test('Check app build and running & shared component visibility after reset', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h1, + text: headerText, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: sharedComponentText, + visibilityState: 'be.visible', + }); + }); + }); + }); +}); + +test.afterAll(() => { + writeSharedComponent(Constants.elementsText.serverSideRenderOnlyApp.contents.originalContent); +}); diff --git a/server-side-render-only/package.json b/server-side-render-only/package.json index 33909a7d2cd..9b70c1597ef 100644 --- a/server-side-render-only/package.json +++ b/server-side-render-only/package.json @@ -9,7 +9,10 @@ "startHost": "nodemon hostServer/public/server/server.js", "buildRemote": "webpack --config=remoteServer/webpack.config.js -w", "startRemote": "nodemon remoteServer/public/server/server.js", - "e2e:ci": "pnpm start & wait-on http-get://localhost:3000/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/tests/*.cy.ts\" --browser=chrome" + "test:e2e": "pnpm exec playwright test", + "test:e2e:ui": "pnpm exec playwright test --ui", + "test:e2e:debug": "pnpm exec playwright test --debug", + "e2e:ci": "pnpm exec playwright install --with-deps && pnpm exec playwright test --reporter=list" }, "license": "MIT", "author": { @@ -20,10 +23,11 @@ "@babel/polyfill": "7.12.1", "@babel/preset-env": "7.24.7", "@babel/preset-react": "7.24.7", + "@playwright/test": "^1.54.2", "babel-loader": "9.1.3", "concurrently": "8.2.2", "nodemon": "3.1.4", - "wait-on": "7.2.0", + "playwright": "^1.54.2", "webpack": "5.101.0", "webpack-cli": "5.1.4" }, @@ -32,4 +36,4 @@ "react": "^16.13.0", "react-dom": "^16.13.0" } -} \ No newline at end of file +} diff --git a/server-side-render-only/playwright.config.ts b/server-side-render-only/playwright.config.ts new file mode 100644 index 00000000000..c89c7993815 --- /dev/null +++ b/server-side-render-only/playwright.config.ts @@ -0,0 +1,36 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e/tests', + timeout: 90_000, + expect: { + timeout: 15_000, + }, + fullyParallel: false, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 1 : 0, + workers: 1, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost:3000', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1920, height: 1080 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: { + command: 'pnpm start', + port: 3000, + reuseExistingServer: !process.env.CI, + timeout: 240_000, + }, +}); diff --git a/shared-context/app1/webpack.config.js b/shared-context/app1/webpack.config.js index f356b05209e..e263aa5a6a9 100644 --- a/shared-context/app1/webpack.config.js +++ b/shared-context/app1/webpack.config.js @@ -2,6 +2,8 @@ const HtmlWebpackPlugin = require('html-webpack-plugin'); const ModuleFederationPlugin = require('webpack').container.ModuleFederationPlugin; const path = require('path'); +const deps = require('./package.json').dependencies; + module.exports = { entry: './src/index', mode: 'development', @@ -42,16 +44,21 @@ module.exports = { remotes: { app2: 'app2@http://localhost:3002/remoteEntry.js', }, - shared: [ - 'react', - 'react-dom', - { - 'shared-context_shared-library': { - import: 'shared-context_shared-library', - requiredVersion: require('../shared-library/package.json').version, - }, + shared: { + react: { + singleton: true, + requiredVersion: deps.react, + }, + 'react-dom': { + singleton: true, + requiredVersion: deps['react-dom'], }, - ], + 'shared-context_shared-library': { + import: 'shared-context_shared-library', + requiredVersion: require('../shared-library/package.json').version, + singleton: true, + }, + }, }), new HtmlWebpackPlugin({ template: './public/index.html', diff --git a/shared-context/app2/webpack.config.js b/shared-context/app2/webpack.config.js index 522033b6180..5cfaadc7d4d 100644 --- a/shared-context/app2/webpack.config.js +++ b/shared-context/app2/webpack.config.js @@ -2,6 +2,8 @@ const HtmlWebpackPlugin = require('html-webpack-plugin'); const ModuleFederationPlugin = require('webpack').container.ModuleFederationPlugin; const path = require('path'); +const deps = require('./package.json').dependencies; + module.exports = { entry: './src/index', mode: 'development', @@ -43,16 +45,21 @@ module.exports = { exposes: { './Welcome': './src/Welcome', }, - shared: [ - 'react', - 'react-dom', - { - 'shared-context_shared-library': { - import: 'shared-context_shared-library', - requiredVersion: require('../shared-library/package.json').version, - }, + shared: { + react: { + singleton: true, + requiredVersion: deps.react, + }, + 'react-dom': { + singleton: true, + requiredVersion: deps['react-dom'], }, - ], + 'shared-context_shared-library': { + import: 'shared-context_shared-library', + requiredVersion: require('../shared-library/package.json').version, + singleton: true, + }, + }, }), new HtmlWebpackPlugin({ template: './public/index.html', diff --git a/shared-context/cypress.env.json b/shared-context/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/shared-context/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/shared-context/e2e/checkSharedContextApps.cy.ts b/shared-context/e2e/checkSharedContextApps.cy.ts deleted file mode 100644 index c3b9aba12ca..00000000000 --- a/shared-context/e2e/checkSharedContextApps.cy.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { BaseMethods } from '../../cypress-e2e/common/base'; -import { baseSelectors } from '../../cypress-e2e/common/selectors'; -import { Constants } from '../../cypress-e2e/fixtures/constants'; -const basePage: BaseMethods = new BaseMethods(); - -const appsData = [ - { - header: Constants.elementsText.sharedContextApp.header, - subheader: Constants.commonConstantsData.commonCountAppNames.app1, - paragraph: Constants.elementsText.sharedContextApp.app1.paragraph, - host: 3001, - }, - - { - header: Constants.elementsText.sharedContextApp.header, - subheader: Constants.commonConstantsData.commonCountAppNames.app2, - paragraph: Constants.elementsText.sharedContextApp.app2.paragraph, - host: 3002, - }, -]; - -appsData.forEach( - (property: { header: string; subheader: string; paragraph: string; host: number }) => { - describe('Shared Context', () => { - context(`Check ${property.subheader}`, () => { - beforeEach(() => { - basePage.openLocalhost({ - number: property.host, - }); - }); - it(`Check ${property.subheader} elements (header, subHeader, paragraph)`, () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: property.header, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: property.subheader, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: property.paragraph, - }); - }); - }); - }); - }, -); diff --git a/shared-context/e2e/checkSharedContextApps.spec.ts b/shared-context/e2e/checkSharedContextApps.spec.ts new file mode 100644 index 00000000000..53a0daa441f --- /dev/null +++ b/shared-context/e2e/checkSharedContextApps.spec.ts @@ -0,0 +1,37 @@ +import { Constants } from '../../cypress-e2e/fixtures/constants'; +import { test } from '../../playwright-e2e/common/testFixtures'; +import { SharedContextPage } from './page-objects/sharedContextPage'; + +interface SharedContextAppConfig { + header: string; + subheader: string; + paragraph: string; + port: number; +} + +const appsUnderTest: SharedContextAppConfig[] = [ + { + header: Constants.elementsText.sharedContextApp.header, + subheader: Constants.commonConstantsData.commonCountAppNames.app1, + paragraph: Constants.elementsText.sharedContextApp.app1.paragraph, + port: 3001, + }, + { + header: Constants.elementsText.sharedContextApp.header, + subheader: Constants.commonConstantsData.commonCountAppNames.app2, + paragraph: Constants.elementsText.sharedContextApp.app2.paragraph, + port: 3002, + }, +]; + +test.describe('Shared Context', () => { + for (const app of appsUnderTest) { + test(`renders shared context for ${app.subheader}`, async ({ page }) => { + const sharedContextPage = new SharedContextPage(page); + const { port, ...expectations } = app; + + await sharedContextPage.open(port); + await sharedContextPage.expectSharedContextContent(expectations); + }); + } +}); diff --git a/shared-context/e2e/page-objects/sharedContextPage.ts b/shared-context/e2e/page-objects/sharedContextPage.ts new file mode 100644 index 00000000000..2a0c0dac6b2 --- /dev/null +++ b/shared-context/e2e/page-objects/sharedContextPage.ts @@ -0,0 +1,31 @@ +import { BasePage } from '../../../playwright-e2e/common/basePage'; +import { baseSelectors } from '../../../playwright-e2e/common/selectors'; + +export interface SharedContextAppExpectations { + header: string; + subheader: string; + paragraph: string; +} + +export class SharedContextPage extends BasePage { + async open(port: number): Promise { + await this.openLocalhost({ port }); + } + + async expectSharedContextContent({ header, subheader, paragraph }: SharedContextAppExpectations): Promise { + await this.expectElementWithTextPresence({ + selector: baseSelectors.tags.headers.h1, + text: header, + }); + + await this.expectElementWithTextPresence({ + selector: baseSelectors.tags.headers.h2, + text: subheader, + }); + + await this.expectElementWithTextPresence({ + selector: baseSelectors.tags.paragraph, + text: paragraph, + }); + } +} diff --git a/shared-context/package.json b/shared-context/package.json index 4047811770d..795b5cff0fb 100644 --- a/shared-context/package.json +++ b/shared-context/package.json @@ -8,11 +8,12 @@ "build": "pnpm --filter shared-context_* build", "serve": "pnpm --filter shared-context_* --parallel serve", "clean": "pnpm --filter shared-context_* --parallel clean", - "e2e:ci": "pnpm start & wait-on http-get://localhost:3001/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome" + "e2e": "pnpm exec playwright test", + "e2e:ci": "pnpm exec playwright test --reporter=list" }, "devDependencies": { + "@playwright/test": "^1.54.2", "lerna": "8.1.6", - "wait-on": "7.2.0", "webpack-cli": "5.1.4" } } diff --git a/shared-context/playwright.config.ts b/shared-context/playwright.config.ts new file mode 100644 index 00000000000..04add231c16 --- /dev/null +++ b/shared-context/playwright.config.ts @@ -0,0 +1,45 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e', + timeout: 60_000, + expect: { + timeout: 10_000, + }, + fullyParallel: false, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 1 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1920, height: 1080 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + command: 'pnpm start', + cwd: 'app1', + port: 3001, + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, + { + command: 'pnpm start', + cwd: 'app2', + port: 3002, + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, + ], +}); diff --git a/third-party-scripts/cypress.env.json b/third-party-scripts/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/third-party-scripts/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/third-party-scripts/e2e/tests/basicAppChecks.cy.ts b/third-party-scripts/e2e/tests/basicAppChecks.cy.ts deleted file mode 100644 index 49d1704fd4d..00000000000 --- a/third-party-scripts/e2e/tests/basicAppChecks.cy.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; -import { RequestsTypes } from '../../../cypress-e2e/types/requestsTypes'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Third Party Scripts', () => { - context('It checks basic host-remote app', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3001, - }); - }); - - it('Checks app header visibility', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: Constants.commonConstantsData.basicComponents.basicHostRemote, - visibilityState: 'be.visible', - }); - }); - - it('Checks app description visibility', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.paragraph, - text: Constants.commonPhrases.thirdPartyScriptsApp.description, - visibilityState: 'be.visible', - }); - }); - - it('Checks third party network call created', () => { - basePage.checkNetworkCallCreated( - RequestsTypes.POST, - Constants.hrefs.thirdPartyScriptsPostRequestPath, - 3001, - 200, - ); - }); - }); -}); diff --git a/third-party-scripts/e2e/tests/basicAppChecks.spec.ts b/third-party-scripts/e2e/tests/basicAppChecks.spec.ts new file mode 100644 index 00000000000..752a3a63633 --- /dev/null +++ b/third-party-scripts/e2e/tests/basicAppChecks.spec.ts @@ -0,0 +1,37 @@ +import { expect, test } from '@playwright/test'; + +import { baseSelectors } from '../../../cypress-e2e/common/selectors'; +import { Constants } from '../../../cypress-e2e/fixtures/constants'; + +const analyticsEndpoint = 'https://www.google-analytics.com/j/collect'; + +test.describe('Third Party Scripts', () => { + test.beforeEach(async ({ page }) => { + await page.goto('/'); + }); + + test('Checks app header visibility', async ({ page }) => { + await expect(page.locator(baseSelectors.tags.headers.h1)).toHaveText( + Constants.commonConstantsData.basicComponents.basicHostRemote, + ); + }); + + test('Checks app description visibility', async ({ page }) => { + await expect(page.locator(baseSelectors.tags.paragraph)).toContainText( + Constants.commonPhrases.thirdPartyScriptsApp.description, + ); + }); + + test('Checks third party network call created', async ({ page }) => { + const analyticsRequest = page.waitForResponse(response => { + return ( + response.request().method() === 'POST' && + response.url().startsWith(analyticsEndpoint) && + response.status() === 200 + ); + }); + + await page.reload({ waitUntil: 'networkidle' }); + await analyticsRequest; + }); +}); diff --git a/third-party-scripts/package.json b/third-party-scripts/package.json index fb012818aa5..a39fd4b605d 100644 --- a/third-party-scripts/package.json +++ b/third-party-scripts/package.json @@ -8,7 +8,13 @@ "build": "pnpm --filter third-party-scripts_* --parallel build", "serve": "pnpm --filter third-party-scripts_* --parallel serve", "clean": "pnpm --filter third-party-scripts_* --parallel clean", - "e2e:ci": "pnpm start & wait-on http-get://localhost:3001/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/tests/*.cy.ts\" --browser=chrome" + "test:e2e": "pnpm exec playwright test", + "test:e2e:ui": "pnpm exec playwright test --ui", + "test:e2e:debug": "pnpm exec playwright test --debug", + "e2e:ci": "pnpm exec playwright install --with-deps && pnpm exec playwright test --reporter=list" }, - "devDependencies": {} + "devDependencies": { + "@playwright/test": "^1.54.2", + "playwright": "^1.54.2" + } } diff --git a/third-party-scripts/playwright.config.ts b/third-party-scripts/playwright.config.ts new file mode 100644 index 00000000000..50792c4b690 --- /dev/null +++ b/third-party-scripts/playwright.config.ts @@ -0,0 +1,36 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e/tests', + timeout: 45_000, + expect: { + timeout: 10_000, + }, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 1 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost:3001', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1920, height: 1080 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: { + command: 'cd app1 && pnpm start', + port: 3001, + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, +}); diff --git a/typescript-monorepo/cypress.env.json b/typescript-monorepo/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/typescript-monorepo/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/typescript-monorepo/e2e/tests/checkApplication.cy.ts b/typescript-monorepo/e2e/tests/checkApplication.cy.ts deleted file mode 100644 index 984d6baec59..00000000000 --- a/typescript-monorepo/e2e/tests/checkApplication.cy.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Constants } from '../../../cypress-e2e/fixtures/constants'; -import { BaseMethods } from '../../../cypress-e2e/common/base'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Typescript Monorepo', () => { - context('It checks typescript-monorepo app', () => { - xit('Checks apps package json includes yarn workspaces', () => { - basePage.checkValueInReadFile({ - filePath: Constants.filesPath.typeScriptMonoRepoPackageJsonPath, - text: Constants.commonPhrases.typeScriptMonoRepoApp.yarnWorkspaceDependency, - }); - }); - }); -}); diff --git a/typescript-monorepo/e2e/tests/checkApplication.spec.ts b/typescript-monorepo/e2e/tests/checkApplication.spec.ts new file mode 100644 index 00000000000..c8d60c80999 --- /dev/null +++ b/typescript-monorepo/e2e/tests/checkApplication.spec.ts @@ -0,0 +1,22 @@ +import path from 'node:path'; +import { readFile } from 'node:fs/promises'; +import { expect, test } from '@playwright/test'; +import { Constants } from '../../../playwright-e2e/fixtures/constants'; + +test.describe('Typescript Monorepo', () => { + test('checks example wiring in package.json', async () => { + const packageJsonPath = path.resolve( + __dirname, + '../../..', + Constants.filesPath.typeScriptMonoRepoPackageJsonPath, + ); + + const packageJsonRaw = await readFile(packageJsonPath, 'utf8'); + expect(packageJsonRaw).toContain( + Constants.commonPhrases.typeScriptMonoRepoApp.yarnWorkspaceDependency, + ); + + const packageJson = JSON.parse(packageJsonRaw) as { scripts?: Record }; + expect(packageJson.scripts?.start || '').toContain('typescript-monorepo_app'); + }); +}); diff --git a/typescript-monorepo/e2e/tests/commonChecks.cy.ts b/typescript-monorepo/e2e/tests/commonChecks.cy.ts deleted file mode 100644 index 960ff53e2fc..00000000000 --- a/typescript-monorepo/e2e/tests/commonChecks.cy.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors, updatedSelectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; -import { CommonTestData } from '../../../cypress-e2e/fixtures/commonTestData'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Typescript Monorepo', () => { - context('It checks typescript-monorepo apps', () => { - CommonTestData.commonTypeScriptAppsData.forEach( - (property: { host: number; header: string; appName: string }) => { - it(`Check that both apps shares ${property.header} header`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: property.header, - visibilityState: 'be.visible', - }); - }); - it(`Check ${property.appName} app name visibility`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: property.appName, - visibilityState: 'be.visible', - }); - }); - it(`Check ${property.appName} contains button`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementVisibility({ - selector: baseSelectors.tags.coreElements.button, - }); - }); - - it(`Checks that button in ${property.appName} is not disabled`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementState({ - selector: baseSelectors.tags.coreElements.button, - state: 'not.be.disabled', - }); - }); - - it(`Checks that both apps shares button with same text`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.updatedConstantsData.commonAppWithButton.app2, - visibilityState: 'be.visible', - }); - }); - - it(`Checks that apps names is not equal`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.compareInfoBetweenHosts( - updatedSelectors.common.appName, - property.host === 3002 - ? CommonTestData.commonTypeScriptAppsData[0].host - : CommonTestData.commonTypeScriptAppsData[1].host, - false, - ); - }); - }, - ); - }); -}); diff --git a/typescript-monorepo/e2e/tests/commonChecks.spec.ts b/typescript-monorepo/e2e/tests/commonChecks.spec.ts new file mode 100644 index 00000000000..92db5cbda0f --- /dev/null +++ b/typescript-monorepo/e2e/tests/commonChecks.spec.ts @@ -0,0 +1,92 @@ +import { test } from '@playwright/test'; +import { BaseMethods } from '../../../playwright-e2e/common/base'; +import { baseSelectors, updatedSelectors } from '../../../playwright-e2e/common/selectors'; +import { Constants } from '../../../playwright-e2e/fixtures/constants'; + +const appsUnderTest = [ + { + host: 3001, + header: Constants.commonConstantsData.typeScript.charAt(0).toUpperCase(), + appName: Constants.commonConstantsData.commonCountAppNames.app1, + }, + { + host: 3002, + header: Constants.commonConstantsData.typeScript.charAt(0).toUpperCase(), + appName: Constants.commonConstantsData.commonCountAppNames.app2, + }, +]; +const sharedButtonText = Constants.updatedConstantsData.commonAppWithButton.app2; +const sharedHeader = `${appsUnderTest[0].header}${Constants.commonConstantsData.typeScript.slice(1)}`; + +if (appsUnderTest.length < 2) { + throw new Error('Typescript monorepo scenario requires at least two apps for validation.'); +} + +const otherHost = (currentHost: number) => { + const alternate = appsUnderTest.find(app => app.host !== currentHost)?.host; + if (!alternate) { + throw new Error(`Unable to resolve alternate host for port ${currentHost}.`); + } + return alternate; +}; + +test.describe('Typescript Monorepo', () => { + for (const app of appsUnderTest) { + test(`checks both apps share the ${sharedHeader} header (port: ${app.host})`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: app.host }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h1, + text: sharedHeader, + visibilityState: 'be.visible', + }); + }); + + test(`checks ${app.appName} app name visibility (port: ${app.host})`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: app.host }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h2, + text: app.appName, + visibilityState: 'be.visible', + }); + }); + + test(`checks ${app.appName} renders shared button (port: ${app.host})`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: app.host }); + await basePage.checkElementVisibility({ + selector: baseSelectors.tags.coreElements.button, + }); + }); + + test(`checks ${app.appName} button is enabled (port: ${app.host})`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: app.host }); + await basePage.checkElementState({ + selector: baseSelectors.tags.coreElements.button, + state: 'not.be.disabled', + }); + }); + + test(`checks both apps share the same button text (port: ${app.host})`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: app.host }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: sharedButtonText, + visibilityState: 'be.visible', + }); + }); + + test(`confirms app names differ across hosts when visiting ${app.appName}`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: app.host }); + await basePage.compareInfoBetweenHosts({ + selector: updatedSelectors.common.appName, + extraHost: otherHost(app.host), + isEqual: false, + }); + }); + } +}); diff --git a/typescript-monorepo/e2e/tests/runAll.cy.ts b/typescript-monorepo/e2e/tests/runAll.cy.ts deleted file mode 100644 index 60bd6c5963c..00000000000 --- a/typescript-monorepo/e2e/tests/runAll.cy.ts +++ /dev/null @@ -1,2 +0,0 @@ -import './checkApplication.cy'; -import './commonChecks.cy'; diff --git a/typescript-monorepo/e2e/tests/runAll.spec.ts b/typescript-monorepo/e2e/tests/runAll.spec.ts new file mode 100644 index 00000000000..9478559332d --- /dev/null +++ b/typescript-monorepo/e2e/tests/runAll.spec.ts @@ -0,0 +1,3 @@ +// Removed aggregator imports to avoid Playwright duplicate/recursive test loading. +// Tests are discovered automatically via testMatch/testDir. +export {}; diff --git a/typescript-monorepo/package.json b/typescript-monorepo/package.json index fb05910bf62..b0173926a1a 100644 --- a/typescript-monorepo/package.json +++ b/typescript-monorepo/package.json @@ -8,9 +8,11 @@ "build": "pnpm --filter typescript-monorepo_app* build", "serve": "pnpm --filter typescript-monorepo_app* --parallel serve", "clean": "pnpm --filter typescript-monorepo_app* --parallel clean", - "e2e:ci": "pnpm start & wait-on http-get://localhost:3001/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/tests/runAll.cy.ts\" --browser=chrome" + "e2e": "pnpm exec playwright test", + "e2e:ci": "pnpm exec playwright test --reporter=list" }, "devDependencies": { - "wait-on": "7.2.0" + "@playwright/test": "^1.54.2", + "allure-playwright": "^2.13.10" } } diff --git a/typescript-monorepo/playwright.config.ts b/typescript-monorepo/playwright.config.ts new file mode 100644 index 00000000000..24fa03b42e1 --- /dev/null +++ b/typescript-monorepo/playwright.config.ts @@ -0,0 +1,46 @@ +import path from 'node:path'; +import { defineConfig, devices } from '@playwright/test'; + +const isCI = !!process.env.CI; + +export default defineConfig({ + testDir: './e2e/tests', + timeout: 60_000, + expect: { + timeout: 10_000, + }, + fullyParallel: true, + forbidOnly: isCI, + retries: isCI ? 1 : 0, + workers: isCI ? 1 : undefined, + reporter: [ + [isCI ? 'dot' : 'list'], + [ + 'allure-playwright', + { outputFolder: path.resolve(__dirname, '../cypress-e2e/results/allure-results') }, + ], + ], + use: { + navigationTimeout: 60_000, + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1920, height: 1080 }, + baseURL: 'http://localhost', + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + command: 'pnpm start', + cwd: __dirname, + port: 3001, + reuseExistingServer: !isCI, + timeout: 240_000, + }, + ], +}); diff --git a/typescript-project-references/cypress.env.json b/typescript-project-references/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/typescript-project-references/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/typescript-project-references/e2e/tests/commonChecks.cy.ts b/typescript-project-references/e2e/tests/commonChecks.cy.ts deleted file mode 100644 index 5440aa82548..00000000000 --- a/typescript-project-references/e2e/tests/commonChecks.cy.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors, updatedSelectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; -import { CommonTestData } from '../../../cypress-e2e/fixtures/commonTestData'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Typescript Project Reference', () => { - context('It checks typescript-project-references apps', () => { - CommonTestData.commonTypeScriptAppsData.forEach( - (property: { host: number; header: string; appName: string }) => { - it(`Check that both apps shares ${property.header} header`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: property.header, - visibilityState: 'be.visible', - }); - }); - it(`Check ${property.appName} app name visibility`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: property.appName, - visibilityState: 'be.visible', - }); - }); - it(`Check ${property.appName} contains button`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementVisibility({ - selector: baseSelectors.tags.coreElements.button, - }); - }); - - it(`Checks that button in ${property.appName} is not disabled`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementState({ - selector: baseSelectors.tags.coreElements.button, - state: 'not.be.disabled', - }); - }); - - it(`Checks that both apps shares button with same text`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.updatedConstantsData.commonAppWithButton.app2, - visibilityState: 'be.visible', - }); - }); - - it(`Checks that apps names is not equal`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.compareInfoBetweenHosts( - updatedSelectors.common.appName, - property.host === 3002 - ? CommonTestData.commonTypeScriptAppsData[0].host - : CommonTestData.commonTypeScriptAppsData[1].host, - false, - ); - }); - }, - ); - }); -}); diff --git a/typescript-project-references/e2e/tests/commonChecks.spec.ts b/typescript-project-references/e2e/tests/commonChecks.spec.ts new file mode 100644 index 00000000000..b68f2d9f545 --- /dev/null +++ b/typescript-project-references/e2e/tests/commonChecks.spec.ts @@ -0,0 +1,88 @@ +import { test, expect } from '@playwright/test'; +import { baseSelectors, updatedSelectors } from '../../../playwright-e2e/common/selectors'; +import { Constants } from '../../../playwright-e2e/fixtures/constants'; +// Inline app config to remove Cypress-specific imports +type TypeScriptAppConfig = { host: number; header: string; appName: string }; + +const buildUrl = (port: number): string => `http://localhost:${port}/`; + +const typeScriptApps: TypeScriptAppConfig[] = [ + { + host: 3001, + header: Constants.commonConstantsData.typeScript.charAt(0).toUpperCase(), + appName: Constants.commonConstantsData.commonCountAppNames.app1, + }, + { + host: 3002, + header: Constants.commonConstantsData.typeScript.charAt(0).toUpperCase(), + appName: Constants.commonConstantsData.commonCountAppNames.app2, + }, +]; + +const sharedButtonText = Constants.updatedConstantsData.commonAppWithButton.app2; + +const getAlternatePort = (currentPort: number): number => { + const [firstApp, secondApp] = typeScriptApps; + return currentPort === secondApp.host ? firstApp.host : secondApp.host; +}; + +test.describe('TypeScript project reference apps', () => { + for (const app of typeScriptApps) { + test.describe(`port ${app.host}`, () => { + test(`renders shared header ${app.header}`, async ({ page }) => { + await page.goto(buildUrl(app.host), { waitUntil: 'domcontentloaded' }); + + const headerLocator = page.locator(baseSelectors.tags.coreElements.div, { + hasText: app.header, + }); + await expect(headerLocator.first()).toBeVisible(); + }); + + test(`renders app name ${app.appName}`, async ({ page }) => { + await page.goto(buildUrl(app.host), { waitUntil: 'domcontentloaded' }); + + const appNameLocator = page.locator(baseSelectors.tags.coreElements.div, { + hasText: app.appName, + }); + await expect(appNameLocator.first()).toBeVisible(); + }); + + test('renders button', async ({ page }) => { + await page.goto(buildUrl(app.host), { waitUntil: 'domcontentloaded' }); + + await expect(page.locator(baseSelectors.tags.coreElements.button).first()).toBeVisible(); + }); + + test('button is enabled', async ({ page }) => { + await page.goto(buildUrl(app.host), { waitUntil: 'domcontentloaded' }); + + await expect(page.locator(baseSelectors.tags.coreElements.button).first()).toBeEnabled(); + }); + + test(`button displays shared text "${sharedButtonText}"`, async ({ page }) => { + await page.goto(buildUrl(app.host), { waitUntil: 'domcontentloaded' }); + + await expect(page.getByRole('button', { name: sharedButtonText })).toBeVisible(); + }); + + test('app names differ between hosts', async ({ page }) => { + await page.goto(buildUrl(app.host), { waitUntil: 'domcontentloaded' }); + + const currentAppName = await page + .locator(updatedSelectors.common.appName) + .first() + .textContent(); + + const alternatePort = getAlternatePort(app.host); + await page.goto(buildUrl(alternatePort), { waitUntil: 'domcontentloaded' }); + + const alternateAppName = await page + .locator(updatedSelectors.common.appName) + .first() + .textContent(); + + expect(currentAppName?.trim()).not.toEqual(alternateAppName?.trim()); + }); + }); + } +}); diff --git a/typescript-project-references/package.json b/typescript-project-references/package.json index 1010bcd1152..6299ce25d15 100644 --- a/typescript-project-references/package.json +++ b/typescript-project-references/package.json @@ -8,9 +8,11 @@ "build": "pnpm --filter typescript-project-references_app* build", "serve": "pnpm --filter typescript-project-references_app* --parallel serve", "clean": "pnpm --filter typescript-project-references_app* --parallel clean", - "e2e:ci": "pnpm start & wait-on http-get://localhost:3001/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/tests/*.cy.ts\" --browser=chrome" + "e2e": "pnpm exec playwright test", + "e2e:headed": "pnpm exec playwright test --headed", + "e2e:ci": "pnpm exec playwright test --reporter=list" }, "devDependencies": { - "wait-on": "7.2.0" + "@playwright/test": "^1.54.2" } } diff --git a/typescript-project-references/playwright.config.ts b/typescript-project-references/playwright.config.ts new file mode 100644 index 00000000000..a7443c7b6d7 --- /dev/null +++ b/typescript-project-references/playwright.config.ts @@ -0,0 +1,49 @@ +import { defineConfig, devices } from '@playwright/test'; + +const reuseExisting = !process.env.CI; + +export default defineConfig({ + testDir: './e2e/tests', + testMatch: '**/*.spec.ts', + timeout: 120_000, + expect: { + timeout: 15_000, + }, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 1 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1280, height: 720 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + command: 'pnpm --filter typescript-project-references_app1 start', + cwd: __dirname, + port: 3001, + reuseExistingServer: reuseExisting, + timeout: 240_000, + }, + { + command: 'pnpm --filter typescript-project-references_app2 start', + cwd: __dirname, + port: 3002, + reuseExistingServer: reuseExisting, + timeout: 240_000, + }, + ], +}); diff --git a/typescript-react-fallback/cypress.env.json b/typescript-react-fallback/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/typescript-react-fallback/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/typescript-react-fallback/e2e/tests/commonChecks.cy.ts b/typescript-react-fallback/e2e/tests/commonChecks.cy.ts deleted file mode 100644 index 5440aa82548..00000000000 --- a/typescript-react-fallback/e2e/tests/commonChecks.cy.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors, updatedSelectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; -import { CommonTestData } from '../../../cypress-e2e/fixtures/commonTestData'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Typescript Project Reference', () => { - context('It checks typescript-project-references apps', () => { - CommonTestData.commonTypeScriptAppsData.forEach( - (property: { host: number; header: string; appName: string }) => { - it(`Check that both apps shares ${property.header} header`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: property.header, - visibilityState: 'be.visible', - }); - }); - it(`Check ${property.appName} app name visibility`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: property.appName, - visibilityState: 'be.visible', - }); - }); - it(`Check ${property.appName} contains button`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementVisibility({ - selector: baseSelectors.tags.coreElements.button, - }); - }); - - it(`Checks that button in ${property.appName} is not disabled`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementState({ - selector: baseSelectors.tags.coreElements.button, - state: 'not.be.disabled', - }); - }); - - it(`Checks that both apps shares button with same text`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.updatedConstantsData.commonAppWithButton.app2, - visibilityState: 'be.visible', - }); - }); - - it(`Checks that apps names is not equal`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.compareInfoBetweenHosts( - updatedSelectors.common.appName, - property.host === 3002 - ? CommonTestData.commonTypeScriptAppsData[0].host - : CommonTestData.commonTypeScriptAppsData[1].host, - false, - ); - }); - }, - ); - }); -}); diff --git a/typescript-react-fallback/e2e/tests/commonChecks.spec.ts b/typescript-react-fallback/e2e/tests/commonChecks.spec.ts new file mode 100644 index 00000000000..e693c2e3095 --- /dev/null +++ b/typescript-react-fallback/e2e/tests/commonChecks.spec.ts @@ -0,0 +1,75 @@ +import { test, expect, type Locator } from '@playwright/test'; +import { baseSelectors, updatedSelectors } from '../../../cypress-e2e/common/selectors'; +import { Constants } from '../../../cypress-e2e/fixtures/constants'; +import { CommonTestData } from '../../../cypress-e2e/fixtures/commonTestData'; + +type TypeScriptFallbackApp = (typeof CommonTestData.commonTypeScriptAppsData)[number]; + +const buildUrl = (port: number): string => `http://localhost:${port}/`; + +const fallbackApps: TypeScriptFallbackApp[] = CommonTestData.commonTypeScriptAppsData; + +const sharedButtonText = Constants.updatedConstantsData.commonAppWithButton.app2; + +const getAlternatePort = (currentPort: number): number => { + const alternateApp = fallbackApps.find(({ host }) => host !== currentPort); + return alternateApp?.host ?? currentPort; +}; + +const getTrimmedText = async (locator: Locator): Promise => { + const content = await locator.first().textContent(); + return content?.trim() ?? ''; +}; + +test.describe('TypeScript React fallback apps', () => { + for (const app of fallbackApps) { + test.describe(`port ${app.host}`, () => { + test(`renders shared header ${app.header}`, async ({ page }) => { + await page.goto(buildUrl(app.host), { waitUntil: 'domcontentloaded' }); + + await expect( + page.locator(baseSelectors.tags.coreElements.div, { hasText: app.header }).first(), + ).toBeVisible(); + }); + + test(`renders app name ${app.appName}`, async ({ page }) => { + await page.goto(buildUrl(app.host), { waitUntil: 'domcontentloaded' }); + + await expect( + page.locator(baseSelectors.tags.coreElements.div, { hasText: app.appName }).first(), + ).toBeVisible(); + }); + + test('renders button', async ({ page }) => { + await page.goto(buildUrl(app.host), { waitUntil: 'domcontentloaded' }); + + await expect(page.locator(baseSelectors.tags.coreElements.button).first()).toBeVisible(); + }); + + test('button is enabled', async ({ page }) => { + await page.goto(buildUrl(app.host), { waitUntil: 'domcontentloaded' }); + + await expect(page.locator(baseSelectors.tags.coreElements.button).first()).toBeEnabled(); + }); + + test(`button displays shared text "${sharedButtonText}"`, async ({ page }) => { + await page.goto(buildUrl(app.host), { waitUntil: 'domcontentloaded' }); + + await expect(page.getByRole('button', { name: sharedButtonText })).toBeVisible(); + }); + + test('app names differ between hosts', async ({ page }) => { + await page.goto(buildUrl(app.host), { waitUntil: 'domcontentloaded' }); + + const currentAppName = await getTrimmedText(page.locator(updatedSelectors.common.appName)); + + const alternatePort = getAlternatePort(app.host); + await page.goto(buildUrl(alternatePort), { waitUntil: 'domcontentloaded' }); + + const alternateAppName = await getTrimmedText(page.locator(updatedSelectors.common.appName)); + + expect(currentAppName).not.toEqual(alternateAppName); + }); + }); + } +}); diff --git a/typescript-react-fallback/package.json b/typescript-react-fallback/package.json index cc8b0f68cbc..0e644512c8f 100644 --- a/typescript-react-fallback/package.json +++ b/typescript-react-fallback/package.json @@ -8,9 +8,11 @@ "build": "pnpm run --filter typescript-react-fallback_app* build", "serve": "pnpm run --filter typescript-react-fallback_app* --parallel serve", "clean": "pnpm run --filter typescript-react-fallback_app* --parallel clean", - "e2e:ci": "pnpm start & wait-on http-get://localhost:3001/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/tests/*.cy.ts\" --browser=chrome" + "e2e": "pnpm exec playwright test", + "e2e:headed": "pnpm exec playwright test --headed", + "e2e:ci": "pnpm exec playwright test --reporter=list" }, "devDependencies": { - "wait-on": "7.2.0" + "@playwright/test": "^1.54.2" } } diff --git a/typescript-react-fallback/playwright.config.ts b/typescript-react-fallback/playwright.config.ts new file mode 100644 index 00000000000..90bd2663808 --- /dev/null +++ b/typescript-react-fallback/playwright.config.ts @@ -0,0 +1,49 @@ +import { defineConfig, devices } from '@playwright/test'; + +const reuseExisting = !process.env.CI; + +export default defineConfig({ + testDir: './e2e/tests', + testMatch: '**/*.spec.ts', + timeout: 120_000, + expect: { + timeout: 15_000, + }, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 1 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1280, height: 720 }, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + command: 'pnpm --filter typescript-react-fallback_app1 start', + cwd: __dirname, + port: 3001, + reuseExistingServer: reuseExisting, + timeout: 240_000, + }, + { + command: 'pnpm --filter typescript-react-fallback_app2 start', + cwd: __dirname, + port: 3002, + reuseExistingServer: reuseExisting, + timeout: 240_000, + }, + ], +}); diff --git a/typescript/app1/webpack.config.js b/typescript/app1/webpack.config.js index 41e8f3a9398..9091a89a326 100644 --- a/typescript/app1/webpack.config.js +++ b/typescript/app1/webpack.config.js @@ -1,5 +1,7 @@ const HtmlWebpackPlugin = require('html-webpack-plugin'); const { FederatedTypesPlugin } = require('@module-federation/typescript'); +const { container } = require('webpack'); +const { ModuleFederationPlugin } = container; const path = require('path'); const pkg = require('./package.json'); @@ -37,7 +39,30 @@ module.exports = { ], }, plugins: [ + // Define federation config once and use for both plugins + new ModuleFederationPlugin({ + name: 'app1', + filename: 'remoteEntry.js', + remotes: { + app2: 'app2@http://localhost:3002/remoteEntry.js', + }, + shared: [ + { + react: { + singleton: true, + requiredVersion: pkg.dependencies.react, + }, + }, + { + 'react-dom': { + singleton: true, + requiredVersion: pkg.dependencies['react-dom'], + }, + }, + ], + }), new FederatedTypesPlugin({ + disableDownloadingRemoteTypes: true, federationConfig: { name: 'app1', filename: 'remoteEntry.js', diff --git a/typescript/app2/webpack.config.js b/typescript/app2/webpack.config.js index d4982a2292a..e7aafc22d4c 100644 --- a/typescript/app2/webpack.config.js +++ b/typescript/app2/webpack.config.js @@ -1,5 +1,7 @@ const HtmlWebpackPlugin = require('html-webpack-plugin'); const { FederatedTypesPlugin } = require('@module-federation/typescript'); +const { container } = require('webpack'); +const { ModuleFederationPlugin } = container; const path = require('path'); const pkg = require('./package.json'); @@ -37,7 +39,29 @@ module.exports = { ], }, plugins: [ + new ModuleFederationPlugin({ + name: 'app2', + filename: 'remoteEntry.js', + exposes: { + './Button': './src/Button', + }, + shared: [ + { + react: { + singleton: true, + requiredVersion: pkg.dependencies.react, + }, + }, + { + 'react-dom': { + singleton: true, + requiredVersion: pkg.dependencies['react-dom'], + }, + }, + ], + }), new FederatedTypesPlugin({ + disableDownloadingRemoteTypes: true, federationConfig: { name: 'app2', filename: 'remoteEntry.js', diff --git a/typescript/cypress.env.json b/typescript/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/typescript/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/typescript/e2e/tests/commonChecks.cy.ts b/typescript/e2e/tests/commonChecks.cy.ts deleted file mode 100644 index a75ea259e6f..00000000000 --- a/typescript/e2e/tests/commonChecks.cy.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; -import { CommonTestData } from '../../../cypress-e2e/fixtures/commonTestData'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Typescript', () => { - context('It checks typescript apps', () => { - const appsData = [ - { - host: 3001, - appName: Constants.commonConstantsData.commonCountAppNames.app1, - smallButton: Constants.updatedConstantsData.typeScriptApp.buttons.small, - largeButton: Constants.updatedConstantsData.typeScriptApp.buttons.large, - }, - { - host: 3002, - appName: Constants.commonConstantsData.commonCountAppNames.app2, - }, - ]; - - appsData.forEach( - (property: { host: number; appName: string; smallButton?: string; largeButton?: string }) => { - it(`Checks both apps shares same header`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: CommonTestData.commonTypeScriptAppsData[0].header, - visibilityState: 'be.visible', - }); - }); - - it(`Checks app name visibility`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h2, - text: property.appName, - visibilityState: 'be.visible', - }); - }); - - it(`Checks both apps shares ${appsData[0].smallButton}`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: appsData[0].smallButton, - visibilityState: 'be.visible', - }); - }); - - it(`Checks ${appsData[0].smallButton} is not disabled`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementState({ - selector: baseSelectors.tags.coreElements.button, - text: appsData[0].smallButton, - state: 'not.be.disabled', - }); - }); - - it(`Checks only ${appsData[0].appName} includes ${appsData[0].largeButton}`, () => { - basePage.openLocalhost({ - number: property.host, - }); - if (property.host === appsData[0].host) { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: appsData[0].largeButton, - visibilityState: 'be.visible', - }); - basePage.checkElementState({ - selector: baseSelectors.tags.coreElements.button, - text: appsData[0].largeButton, - state: 'not.be.disabled', - }); - - return; - } - - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: appsData[0].largeButton, - isVisible: false, - }); - }); - }, - ); - }); -}); diff --git a/typescript/e2e/tests/commonChecks.spec.ts b/typescript/e2e/tests/commonChecks.spec.ts new file mode 100644 index 00000000000..6b3b177f394 --- /dev/null +++ b/typescript/e2e/tests/commonChecks.spec.ts @@ -0,0 +1,82 @@ +import { expect, test, type Page } from '@playwright/test'; +import { baseSelectors } from '../../../cypress-e2e/common/selectors'; +import { Constants } from '../../../cypress-e2e/fixtures/constants'; +import { CommonTestData } from '../../../cypress-e2e/fixtures/commonTestData'; + +interface TypescriptAppConfig { + host: number; + appName: string; + smallButton?: string; + largeButton?: string; +} + +const appsUnderTest: TypescriptAppConfig[] = [ + { + host: 3001, + appName: Constants.commonConstantsData.commonCountAppNames.app1, + smallButton: Constants.updatedConstantsData.typeScriptApp.buttons.small, + largeButton: Constants.updatedConstantsData.typeScriptApp.buttons.large, + }, + { + host: 3002, + appName: Constants.commonConstantsData.commonCountAppNames.app2, + }, +]; + +const primaryApp = appsUnderTest[0]; + +if (!primaryApp.smallButton || !primaryApp.largeButton) { + throw new Error('Primary TypeScript app configuration is missing button labels.'); +} + +const primaryAppButtons = { + small: primaryApp.smallButton, + large: primaryApp.largeButton, +}; + +const navigateToApp = async (page: Page, port: number) => { + await page.goto(`http://localhost:${port}/`, { waitUntil: 'networkidle' }); +}; + +test.describe('Typescript', () => { + for (const app of appsUnderTest) { + test(`checks both apps share the same header (port: ${app.host})`, async ({ page }) => { + await navigateToApp(page, app.host); + + await expect(page.locator(baseSelectors.tags.headers.h1)).toHaveText( + CommonTestData.commonTypeScriptAppsData[0].header, + ); + }); + + test(`checks app name visibility (port: ${app.host})`, async ({ page }) => { + await navigateToApp(page, app.host); + + await expect(page.locator(baseSelectors.tags.headers.h2)).toHaveText(app.appName); + }); + + test(`checks both apps share ${primaryAppButtons.small} (port: ${app.host})`, async ({ page }) => { + await navigateToApp(page, app.host); + + await expect(page.getByRole('button', { name: primaryAppButtons.small })).toBeVisible(); + }); + + test(`checks ${primaryAppButtons.small} is not disabled (port: ${app.host})`, async ({ page }) => { + await navigateToApp(page, app.host); + + await expect(page.getByRole('button', { name: primaryAppButtons.small })).toBeEnabled(); + }); + + test(`checks only ${primaryApp.appName} includes ${primaryAppButtons.large} (port: ${app.host})`, async ({ page }) => { + await navigateToApp(page, app.host); + + const largeButton = page.getByRole('button', { name: primaryAppButtons.large }); + + if (app.host === primaryApp.host) { + await expect(largeButton).toBeVisible(); + await expect(largeButton).toBeEnabled(); + } else { + await expect(largeButton).toHaveCount(0); + } + }); + } +}); diff --git a/typescript/package.json b/typescript/package.json index 7dbee4dae58..7f5e249331e 100644 --- a/typescript/package.json +++ b/typescript/package.json @@ -8,9 +8,10 @@ "build": "pnpm --filter typescript_* build", "serve": "pnpm --filter typescript_* --parallel serve", "clean": "pnpm --filter typescript_* --parallel clean", - "e2e:ci": "pnpm start & wait-on http-get://localhost:3001/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/tests/*.cy.ts\" --browser=chrome" + "e2e:ci": "pnpm exec playwright test" }, - "dependencies": { - "wait-on": "^7.1.0" + "devDependencies": { + "@playwright/test": "^1.54.2", + "allure-playwright": "^2.13.10" } } diff --git a/typescript/playwright.config.ts b/typescript/playwright.config.ts new file mode 100644 index 00000000000..ba2a3d8b74b --- /dev/null +++ b/typescript/playwright.config.ts @@ -0,0 +1,48 @@ +import path from 'node:path'; +import { defineConfig, devices } from '@playwright/test'; + +const isCI = !!process.env.CI; + +export default defineConfig({ + testDir: './e2e/tests', + timeout: 60_000, + expect: { + timeout: 10_000, + }, + fullyParallel: true, + forbidOnly: isCI, + retries: isCI ? 1 : 0, + workers: isCI ? 1 : undefined, + reporter: [ + [isCI ? 'dot' : 'list'], + [ + 'allure-playwright', + { outputFolder: path.resolve(__dirname, '../cypress-e2e/results/allure-results') }, + ], + ], + use: { + navigationTimeout: 60_000, + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1920, height: 1080 }, + baseURL: 'http://localhost', + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + // Build once for both apps, then start both servers and wait + command: + "bash -lc 'pnpm --filter typescript_app1 build && pnpm --filter typescript_app2 build && pnpm --filter typescript_app1 serve & pnpm --filter typescript_app2 serve & wait'", + cwd: __dirname, + port: 3001, + reuseExistingServer: !isCI, + timeout: 240_000, + }, + ], +}); diff --git a/umd-federation/app1/package.json b/umd-federation/app1/package.json index acfde44b3fd..b73c09af68f 100644 --- a/umd-federation/app1/package.json +++ b/umd-federation/app1/package.json @@ -10,7 +10,8 @@ }, "dependencies": { "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "module-federation-runtime": "1.2.4" }, "devDependencies": { "@babel/core": "7.24.7", diff --git a/umd-federation/cypress.env.json b/umd-federation/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/umd-federation/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/umd-federation/e2e/checkUmdFederationApps.cy.ts b/umd-federation/e2e/checkUmdFederationApps.cy.ts deleted file mode 100644 index bb44ffc2a6a..00000000000 --- a/umd-federation/e2e/checkUmdFederationApps.cy.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { BaseMethods } from '../../cypress-e2e/common/base'; -import { baseSelectors } from '../../cypress-e2e/common/selectors'; -import { Constants } from '../../cypress-e2e/fixtures/constants'; -const basePage: BaseMethods = new BaseMethods(); - -const appsData = [ - { - header1: Constants.elementsText.umdFederationApp.App1.firstHeader, - header2: Constants.elementsText.umdFederationApp.App1.secondHeader, - header3: Constants.elementsText.umdFederationApp.App1.thirdHeader, - host: 9001, - }, - - { - host: 9002, - }, -]; - -appsData.forEach( - (property: { header1?: string; header2?: string; header3?: string; host: number }) => { - describe(`UMD Federation`, () => { - context(`Check app1 and app2 starts and running + emenets exist on the page`, () => { - beforeEach(() => { - basePage.openLocalhost({ - number: property.host, - }); - }); - it(`Check App1 elements`, () => { - basePage.skipTestByCondition(property.host === 9002); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: String(property.header1), - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: String(property.header2), - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h1, - text: String(property.header3), - }); - }); - it(`Check App URL`, () => { - basePage.checkUrlText(`http://localhost:${property.host}/`, true); - }); - }); - }); - }, -); diff --git a/umd-federation/e2e/checkUmdFederationApps.spec.ts b/umd-federation/e2e/checkUmdFederationApps.spec.ts new file mode 100644 index 00000000000..e56a34d9b07 --- /dev/null +++ b/umd-federation/e2e/checkUmdFederationApps.spec.ts @@ -0,0 +1,44 @@ +import { expect, test } from '@playwright/test'; + +import { baseSelectors } from '../../cypress-e2e/common/selectors'; +import { Constants } from '../../cypress-e2e/fixtures/constants'; + +const appsData = [ + { + header1: Constants.elementsText.umdFederationApp.App1.firstHeader, + header2: Constants.elementsText.umdFederationApp.App1.secondHeader, + header3: Constants.elementsText.umdFederationApp.App1.thirdHeader, + host: 9001, + }, + { + host: 9002, + }, +]; + +test.describe('UMD Federation', () => { + appsData.forEach(({ header1, header2, header3, host }) => { + test.describe(`Check application on localhost:${host}`, () => { + const baseUrl = `http://localhost:${host}/`; + + test.beforeEach(async ({ page }) => { + await page.goto(baseUrl, { waitUntil: 'networkidle' }); + }); + + test('Check App elements', async ({ page }) => { + if (!header1 || !header2 || !header3) { + test.skip('App 2 renders external remote content without headers.'); + } else { + const headerLocator = page.locator(baseSelectors.tags.headers.h1); + + for (const text of [header1, header2, header3]) { + await expect(headerLocator.filter({ hasText: text })).toBeVisible(); + } + } + }); + + test('Check App URL', async ({ page }) => { + await expect.poll(() => page.url()).toContain(baseUrl); + }); + }); + }); +}); diff --git a/umd-federation/package.json b/umd-federation/package.json index 02b02635ffd..e08661541c5 100644 --- a/umd-federation/package.json +++ b/umd-federation/package.json @@ -8,13 +8,17 @@ "preinstall": "pnpm install --ignore-scripts", "test": "echo \"Error: no test specified\" && exit 1", "start": "pnpm --filter umd-federation_app* --parallel start", - "e2e:ci": "pnpm start & wait-on tcp:9001 && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome" + "test:e2e": "pnpm exec playwright test", + "test:e2e:ui": "pnpm exec playwright test --ui", + "test:e2e:debug": "pnpm exec playwright test --debug", + "e2e:ci": "pnpm exec playwright install --with-deps && pnpm exec playwright test --reporter=list" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { - "wait-on": "7.2.0", + "@playwright/test": "^1.54.2", + "playwright": "^1.54.2", "umfjs": "0.3.7" } } diff --git a/umd-federation/playwright.config.ts b/umd-federation/playwright.config.ts new file mode 100644 index 00000000000..f0f32bb4cd6 --- /dev/null +++ b/umd-federation/playwright.config.ts @@ -0,0 +1,45 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e', + timeout: 60_000, + expect: { + timeout: 15_000, + }, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 1 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: 'http://localhost:9001', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + viewport: { width: 1920, height: 1080 }, + ignoreHTTPSErrors: true, + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: [ + { + command: 'cd app1 && pnpm start', + port: 9001, + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, + { + command: 'cd app2 && pnpm start', + port: 9002, + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, + ], +}); diff --git a/umd-federation/pnpm-lock.yaml b/umd-federation/pnpm-lock.yaml index ca0277f774e..6c4598c8c96 100644 --- a/umd-federation/pnpm-lock.yaml +++ b/umd-federation/pnpm-lock.yaml @@ -8,15 +8,21 @@ importers: .: devDependencies: + '@playwright/test': + specifier: ^1.54.2 + version: 1.55.0 + playwright: + specifier: ^1.54.2 + version: 1.55.0 umfjs: specifier: 0.3.7 version: 0.3.7 - wait-on: - specifier: 7.2.0 - version: 7.2.0 app1: dependencies: + module-federation-runtime: + specifier: 1.2.4 + version: 1.2.4 react: specifier: ^18.2.0 version: 18.2.0 @@ -32,10 +38,10 @@ importers: version: 7.24.7(@babel/core@7.24.7) babel-loader: specifier: 9.1.3 - version: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0(webpack-cli@5.1.4)) + version: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0) html-webpack-plugin: specifier: 5.6.0 - version: 5.6.0(webpack@5.101.0(webpack-cli@5.1.4)) + version: 5.6.0(webpack@5.101.0) semverhook: specifier: 1.2.0 version: 1.2.0 @@ -69,10 +75,10 @@ importers: version: 7.24.7(@babel/core@7.24.7) babel-loader: specifier: 9.1.3 - version: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0(webpack-cli@5.1.4)) + version: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0) html-webpack-plugin: specifier: 5.6.0 - version: 5.6.0(webpack@5.101.0(webpack-cli@5.1.4)) + version: 5.6.0(webpack@5.101.0) universal-module-federation-plugin: specifier: 1.0.9 version: 1.0.9 @@ -227,12 +233,6 @@ packages: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} - '@hapi/hoek@9.3.0': - resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} - - '@hapi/topo@5.1.0': - resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} - '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -283,14 +283,10 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@sideway/address@4.1.5': - resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} - - '@sideway/formula@3.0.1': - resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} - - '@sideway/pinpoint@2.0.0': - resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + '@playwright/test@1.55.0': + resolution: {integrity: sha512-04IXzPwHrW69XusN/SIdDdKZBzMfOT9UNT/YiJit/xpy2VuAoB8NHc8Aplb96zsWDddLnbkPL3TsmrS04ZU2xQ==} + engines: {node: '>=18'} + hasBin: true '@types/body-parser@1.19.5': resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} @@ -511,12 +507,6 @@ packages: array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - axios@1.6.8: - resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} - babel-loader@9.1.3: resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} engines: {node: '>= 14.15.0'} @@ -625,10 +615,6 @@ packages: colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - commander@10.0.1: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} @@ -724,10 +710,6 @@ packages: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} @@ -912,10 +894,6 @@ packages: resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==} engines: {node: '>=14'} - form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} - forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -924,6 +902,11 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -1159,9 +1142,6 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} - joi@17.12.2: - resolution: {integrity: sha512-RonXAIzCiHLc8ss3Ibuz45u28GOsWE1UpfDXLbN/9NKbL4tCJf8TWYVKsoYuuh+sAUt7fsSNpA+r2+TBA6Wjmw==} - js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -1265,9 +1245,6 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} @@ -1418,6 +1395,16 @@ packages: resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} engines: {node: '>=14.16'} + playwright-core@1.55.0: + resolution: {integrity: sha512-GvZs4vU3U5ro2nZpeiwyb0zuFaqb9sUiAJuyrWpcGouD8y9/HLgGbNRjIph7zU9D3hnPaisMl9zG9CgFi/biIg==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.55.0: + resolution: {integrity: sha512-sdCWStblvV1YU909Xqx0DhOjPZE4/5lJsIS84IfN9dAZfcl/CIZ5O8l3o0j7hPMjDvqoTF8ZUcc+i/GL5erstA==} + engines: {node: '>=18'} + hasBin: true + pretty-error@4.0.0: resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} @@ -1432,9 +1419,6 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -1517,9 +1501,6 @@ packages: resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} engines: {node: '>=18'} - rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -1784,11 +1765,6 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - wait-on@7.2.0: - resolution: {integrity: sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==} - engines: {node: '>=12.0.0'} - hasBin: true - watchpack@2.4.1: resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} engines: {node: '>=10.13.0'} @@ -2093,12 +2069,6 @@ snapshots: '@discoveryjs/json-ext@0.5.7': {} - '@hapi/hoek@9.3.0': {} - - '@hapi/topo@5.1.0': - dependencies: - '@hapi/hoek': 9.3.0 - '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -2151,13 +2121,9 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@sideway/address@4.1.5': + '@playwright/test@1.55.0': dependencies: - '@hapi/hoek': 9.3.0 - - '@sideway/formula@3.0.1': {} - - '@sideway/pinpoint@2.0.0': {} + playwright: 1.55.0 '@types/body-parser@1.19.5': dependencies: @@ -2330,17 +2296,17 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 - '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4(webpack-dev-server@5.0.4)(webpack@5.101.0))(webpack@5.101.0(webpack-cli@5.1.4))': + '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.101.0)': dependencies: webpack: 5.101.0(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.101.0) - '@webpack-cli/info@2.0.2(webpack-cli@5.1.4(webpack-dev-server@5.0.4)(webpack@5.101.0))(webpack@5.101.0(webpack-cli@5.1.4))': + '@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.101.0)': dependencies: webpack: 5.101.0(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.101.0) - '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4(webpack-dev-server@5.0.4)(webpack@5.101.0))(webpack-dev-server@5.0.4(webpack-cli@5.1.4)(webpack@5.101.0))(webpack@5.101.0(webpack-cli@5.1.4))': + '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.0.4)(webpack@5.101.0)': dependencies: webpack: 5.101.0(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.101.0) @@ -2403,17 +2369,7 @@ snapshots: array-flatten@1.1.1: {} - asynckit@0.4.0: {} - - axios@1.6.8: - dependencies: - follow-redirects: 1.15.6 - form-data: 4.0.0 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - - babel-loader@9.1.3(@babel/core@7.24.7)(webpack@5.101.0(webpack-cli@5.1.4)): + babel-loader@9.1.3(@babel/core@7.24.7)(webpack@5.101.0): dependencies: '@babel/core': 7.24.7 find-cache-dir: 4.0.0 @@ -2543,10 +2499,6 @@ snapshots: colorette@2.0.20: {} - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - commander@10.0.1: {} commander@2.20.3: {} @@ -2630,8 +2582,6 @@ snapshots: define-lazy-prop@3.0.0: {} - delayed-stream@1.0.0: {} - depd@1.1.2: {} depd@2.0.0: {} @@ -2827,16 +2777,13 @@ snapshots: cross-spawn: 7.0.3 signal-exit: 4.1.0 - form-data@4.0.0: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - forwarded@0.2.0: {} fresh@0.5.2: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -2921,7 +2868,7 @@ snapshots: relateurl: 0.2.7 terser: 5.30.0 - html-webpack-plugin@5.6.0(webpack@5.101.0(webpack-cli@5.1.4)): + html-webpack-plugin@5.6.0(webpack@5.101.0): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -3060,14 +3007,6 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - joi@17.12.2: - dependencies: - '@hapi/hoek': 9.3.0 - '@hapi/topo': 5.1.0 - '@sideway/address': 4.1.5 - '@sideway/formula': 3.0.1 - '@sideway/pinpoint': 2.0.0 - js-tokens@4.0.0: {} jsesc@2.5.2: {} @@ -3151,8 +3090,6 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimist@1.2.8: {} - minipass@7.1.2: {} module-federation-runtime@1.2.4: @@ -3283,6 +3220,14 @@ snapshots: dependencies: find-up: 6.3.0 + playwright-core@1.55.0: {} + + playwright@1.55.0: + dependencies: + playwright-core: 1.55.0 + optionalDependencies: + fsevents: 2.3.2 + pretty-error@4.0.0: dependencies: lodash: 4.17.21 @@ -3297,8 +3242,6 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 - proxy-from-env@1.1.0: {} - punycode@2.3.1: {} qs@6.11.0: @@ -3386,10 +3329,6 @@ snapshots: run-applescript@7.0.0: {} - rxjs@7.8.1: - dependencies: - tslib: 2.6.2 - safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} @@ -3588,7 +3527,7 @@ snapshots: tapable@2.2.1: {} - terser-webpack-plugin@5.3.14(webpack@5.101.0(webpack-cli@5.1.4)): + terser-webpack-plugin@5.3.14(webpack@5.101.0): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 @@ -3680,16 +3619,6 @@ snapshots: vary@1.1.2: {} - wait-on@7.2.0: - dependencies: - axios: 1.6.8 - joi: 17.12.2 - lodash: 4.17.21 - minimist: 1.2.8 - rxjs: 7.8.1 - transitivePeerDependencies: - - debug - watchpack@2.4.1: dependencies: glob-to-regexp: 0.4.1 @@ -3702,9 +3631,9 @@ snapshots: webpack-cli@5.1.4(webpack-dev-server@5.0.4)(webpack@5.101.0): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4(webpack-dev-server@5.0.4)(webpack@5.101.0))(webpack@5.101.0(webpack-cli@5.1.4)) - '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4(webpack-dev-server@5.0.4)(webpack@5.101.0))(webpack@5.101.0(webpack-cli@5.1.4)) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4(webpack-dev-server@5.0.4)(webpack@5.101.0))(webpack-dev-server@5.0.4(webpack-cli@5.1.4)(webpack@5.101.0))(webpack@5.101.0(webpack-cli@5.1.4)) + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.101.0) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.101.0) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.0.4)(webpack@5.101.0) colorette: 2.0.20 commander: 10.0.1 cross-spawn: 7.0.3 @@ -3718,7 +3647,7 @@ snapshots: optionalDependencies: webpack-dev-server: 5.0.4(webpack-cli@5.1.4)(webpack@5.101.0) - webpack-dev-middleware@7.3.0(webpack@5.101.0(webpack-cli@5.1.4)): + webpack-dev-middleware@7.3.0(webpack@5.101.0): dependencies: colorette: 2.0.20 memfs: 4.9.4 @@ -3759,7 +3688,7 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.3.0(webpack@5.101.0(webpack-cli@5.1.4)) + webpack-dev-middleware: 7.3.0(webpack@5.101.0) ws: 8.16.0 optionalDependencies: webpack: 5.101.0(webpack-cli@5.1.4) @@ -3804,7 +3733,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.2 tapable: 2.2.1 - terser-webpack-plugin: 5.3.14(webpack@5.101.0(webpack-cli@5.1.4)) + terser-webpack-plugin: 5.3.14(webpack@5.101.0) watchpack: 2.4.1 webpack-sources: 3.3.3 optionalDependencies: diff --git a/vue-cli/consumer/vue.config.js b/vue-cli/consumer/vue.config.js index 892cc8699df..e6de3c7a762 100644 --- a/vue-cli/consumer/vue.config.js +++ b/vue-cli/consumer/vue.config.js @@ -1,6 +1,7 @@ const ModuleFederationPlugin = require('webpack').container.ModuleFederationPlugin; module.exports = { + lintOnSave: false, publicPath: 'http://localhost:8080/', configureWebpack: { optimization: { diff --git a/vue-cli/core/vue.config.js b/vue-cli/core/vue.config.js index c5c3f4a9aa4..fc13ec5dfa1 100644 --- a/vue-cli/core/vue.config.js +++ b/vue-cli/core/vue.config.js @@ -1,6 +1,7 @@ const ModuleFederationPlugin = require('webpack').container.ModuleFederationPlugin; module.exports = { + lintOnSave: false, publicPath: 'http://localhost:9000/', configureWebpack: { optimization: { diff --git a/vue-cli/cypress.env.json b/vue-cli/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/vue-cli/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/vue-cli/e2e/methods/methods.ts b/vue-cli/e2e/methods/methods.ts index fa8a6d06533..316bdb7c17d 100644 --- a/vue-cli/e2e/methods/methods.ts +++ b/vue-cli/e2e/methods/methods.ts @@ -1,9 +1,14 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; +import { Page } from '@playwright/test'; +import { BaseMethods } from '../../../playwright-e2e/common/base'; +import { baseSelectors } from '../../../playwright-e2e/common/selectors'; +import { Constants } from '../../../playwright-e2e/fixtures/constants'; export class VueCliMethods extends BaseMethods { - public checkBrowserAlertForMultipleHosts({ + constructor(page: Page) { + super(page); + } + + public async checkBrowserAlertForMultipleHosts({ selector, message, isEqual = true, @@ -17,59 +22,55 @@ export class VueCliMethods extends BaseMethods { index?: number; host: number; wait?: number; - }): void { - this.checkBrowserAlertByText({ + }): Promise { + await super.checkBrowserAlertForMultipleHosts({ selector, alertMessage: message, isEqual, index, + host, + wait, }); - cy.origin( - Cypress.env(`localhost${host}`), - { args: { selector, message, wait } }, - ({ selector, message, wait }) => { - cy.visit('/'); - cy.get(selector).wait(wait).click(); - cy.on('window:alert', (alertText: string) => { - if (isEqual) { - expect(alertText).to.be.eq(message); - } else { - expect(alertText).not.to.be.eq(message); - } - }); - }, - ); } - public checkCodeTagAppearance(): void { - this.checkElementContainText({ + public async checkCodeTagAppearance(): Promise { + await this.checkElementContainText({ selector: baseSelectors.tags.section, text: Constants.elementsText.vueCliApp.otherSectionCodeBlock, index: 0, isContain: false, }); - this.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.vueCliApp.buttonsText.otherSectionButton, - }); - this.checkElementVisibility({ - parentSelector: baseSelectors.tags.section, - selector: baseSelectors.tags.code, - }); - this.checkElementWithTextPresence({ + + const buttonLocator = this.page + .locator(baseSelectors.tags.section) + .locator(baseSelectors.tags.coreElements.button) + .filter({ hasText: Constants.elementsText.vueCliApp.buttonsText.otherSectionButton }) + .first(); + + const [dialog] = await Promise.all([ + this.page.waitForEvent('dialog', { timeout: 5_000 }), + buttonLocator.click(), + ]); + + await dialog.accept(); + + await this.checkElementWithTextPresence({ parentSelector: baseSelectors.tags.section, selector: baseSelectors.tags.code, text: Constants.elementsText.vueCliApp.otherSectionCodeBlock, visibilityState: 'be.visible', }); - this.reloadWindow(); - this.checkElementContainText({ + + await this.reloadWindow(); + + await this.checkElementContainText({ selector: baseSelectors.tags.section, text: Constants.elementsText.vueCliApp.otherSectionCodeBlock, index: 0, isContain: false, }); - this.checkElementVisibility({ + + await this.checkElementVisibility({ parentSelector: baseSelectors.tags.section, selector: baseSelectors.tags.code, isVisible: false, diff --git a/vue-cli/e2e/tests/commonChecks.cy.ts b/vue-cli/e2e/tests/commonChecks.cy.ts deleted file mode 100644 index 88d11168dd5..00000000000 --- a/vue-cli/e2e/tests/commonChecks.cy.ts +++ /dev/null @@ -1,139 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { VueCliMethods } from '../methods/methods'; -import { baseSelectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; - -const basePage: BaseMethods = new BaseMethods(); -const methodsPage: VueCliMethods = new VueCliMethods(); - -describe('Vue CLI', () => { - context('It checks elements appearing and accessibility', () => { - const appsData = [ - { - host: 8080, - }, - { - host: 9000, - }, - { - host: 9001, - }, - ]; - - appsData.forEach((property: { host: number }) => { - it('Checks that fetched code appears on click and disappears after reload', () => { - basePage.skipTestByCondition(property.host === 9000); - basePage.openLocalhost({ - number: property.host, - }); - methodsPage.checkCodeTagAppearance(); - }); - - it('Checks core section visibility & core section description header', () => { - basePage.skipTestByCondition(property.host === 9001); - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.section, - text: Constants.elementsText.vueCliApp.sectionsDescriptions.coreSection, - visibilityState: 'be.visible', - }); - }); - - it('Checks core section includes button with text', () => { - basePage.skipTestByCondition(property.host === 9001); - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - parentSelector: baseSelectors.tags.section, - selector: baseSelectors.tags.coreElements.button, - text: - property.host === 8080 - ? Constants.elementsText.vueCliApp.buttonsText.consumerCoreSectionButton - : Constants.commonConstantsData.button, - visibilityState: 'be.visible', - }); - }); - - it('Checks core section button is not disabled', () => { - basePage.skipTestByCondition(property.host === 9001); - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementState({ - selector: baseSelectors.tags.coreElements.button, - text: - property.host === 8080 - ? Constants.elementsText.vueCliApp.buttonsText.otherSectionButton - : Constants.commonConstantsData.button, - state: 'not.be.disabled', - }); - }); - - it('Checks other section with description visibility', () => { - basePage.skipTestByCondition(property.host === 9000); - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.section, - text: Constants.elementsText.vueCliApp.sectionsDescriptions.otherSection, - visibilityState: 'be.visible', - }); - }); - - it('Checks that other section does not contain name header', () => { - basePage.skipTestByCondition(property.host === 9000); - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementVisibility({ - parentSelector: baseSelectors.tags.section, - selector: baseSelectors.tags.headers.h1, - isVisible: false, - text: Constants.elementsText.vueCliApp.sectionsDescriptions.otherSection, - }); - }); - - it('Checks that other section includes button', () => { - basePage.skipTestByCondition(property.host === 9000); - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - parentSelector: baseSelectors.tags.section, - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.vueCliApp.buttonsText.otherSectionButton, - visibilityState: 'be.visible', - }); - }); - - it('Checks other section button text', () => { - basePage.skipTestByCondition(property.host === 9000); - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - parentSelector: baseSelectors.tags.section, - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.vueCliApp.buttonsText.otherSectionButton, - visibilityState: 'be.visible', - }); - }); - - it('Checks other section button is not disabled', () => { - basePage.skipTestByCondition(property.host === 9000); - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementState({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.vueCliApp.buttonsText.otherSectionButton, - state: 'not.be.disabled', - }); - }); - }); - }); -}); diff --git a/vue-cli/e2e/tests/commonChecks.spec.ts b/vue-cli/e2e/tests/commonChecks.spec.ts new file mode 100644 index 00000000000..ead2fb057ed --- /dev/null +++ b/vue-cli/e2e/tests/commonChecks.spec.ts @@ -0,0 +1,132 @@ +import { test } from '@playwright/test'; +import { BaseMethods } from '../../../playwright-e2e/common/base'; +import { VueCliMethods } from '../methods/methods'; +import { baseSelectors } from '../../../playwright-e2e/common/selectors'; +import { Constants } from '../../../playwright-e2e/fixtures/constants'; + +test.describe('Vue CLI', () => { + const appsData = [ + { host: 8080 }, + { host: 9000 }, + { host: 9001 }, + ]; + + test.describe('It checks elements appearing and accessibility', () => { + appsData.forEach(({ host }) => { + test(`Checks that fetched code appears on click and disappears after reload on ${host}`, async ({ page }) => { + const basePage = new BaseMethods(page); + const methodsPage = new VueCliMethods(page); + basePage.skipTestByCondition(host === 9000); + + await basePage.openLocalhost({ number: host }); + await methodsPage.checkCodeTagAppearance(); + }); + + test(`Checks core section visibility & description on ${host}`, async ({ page }) => { + const basePage = new BaseMethods(page); + basePage.skipTestByCondition(host === 9001); + + await basePage.openLocalhost({ number: host }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.section, + text: Constants.elementsText.vueCliApp.sectionsDescriptions.coreSection, + visibilityState: 'be.visible', + }); + }); + + test(`Checks core section includes button with text on ${host}`, async ({ page }) => { + const basePage = new BaseMethods(page); + basePage.skipTestByCondition(host === 9001); + + await basePage.openLocalhost({ number: host }); + await basePage.checkElementWithTextPresence({ + parentSelector: baseSelectors.tags.section, + selector: baseSelectors.tags.coreElements.button, + text: + host === 8080 + ? Constants.elementsText.vueCliApp.buttonsText.consumerCoreSectionButton + : Constants.commonConstantsData.button, + visibilityState: 'be.visible', + }); + }); + + test(`Checks core section button is not disabled on ${host}`, async ({ page }) => { + const basePage = new BaseMethods(page); + basePage.skipTestByCondition(host === 9001); + + await basePage.openLocalhost({ number: host }); + await basePage.checkElementState({ + selector: baseSelectors.tags.coreElements.button, + text: + host === 8080 + ? Constants.elementsText.vueCliApp.buttonsText.otherSectionButton + : Constants.commonConstantsData.button, + state: 'not.be.disabled', + }); + }); + + test(`Checks other section with description visibility on ${host}`, async ({ page }) => { + const basePage = new BaseMethods(page); + basePage.skipTestByCondition(host === 9000); + + await basePage.openLocalhost({ number: host }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.section, + text: Constants.elementsText.vueCliApp.sectionsDescriptions.otherSection, + visibilityState: 'be.visible', + }); + }); + + test(`Checks that other section does not contain name header on ${host}`, async ({ page }) => { + const basePage = new BaseMethods(page); + basePage.skipTestByCondition(host === 9000); + + await basePage.openLocalhost({ number: host }); + await basePage.checkElementVisibility({ + parentSelector: baseSelectors.tags.section, + selector: baseSelectors.tags.headers.h1, + isVisible: false, + text: Constants.elementsText.vueCliApp.sectionsDescriptions.otherSection, + }); + }); + + test(`Checks that other section includes button on ${host}`, async ({ page }) => { + const basePage = new BaseMethods(page); + basePage.skipTestByCondition(host === 9000); + + await basePage.openLocalhost({ number: host }); + await basePage.checkElementWithTextPresence({ + parentSelector: baseSelectors.tags.section, + selector: baseSelectors.tags.coreElements.button, + text: Constants.elementsText.vueCliApp.buttonsText.otherSectionButton, + visibilityState: 'be.visible', + }); + }); + + test(`Checks other section button text on ${host}`, async ({ page }) => { + const basePage = new BaseMethods(page); + basePage.skipTestByCondition(host === 9000); + + await basePage.openLocalhost({ number: host }); + await basePage.checkElementWithTextPresence({ + parentSelector: baseSelectors.tags.section, + selector: baseSelectors.tags.coreElements.button, + text: Constants.elementsText.vueCliApp.buttonsText.otherSectionButton, + visibilityState: 'be.visible', + }); + }); + + test(`Checks other section button is not disabled on ${host}`, async ({ page }) => { + const basePage = new BaseMethods(page); + basePage.skipTestByCondition(host === 9000); + + await basePage.openLocalhost({ number: host }); + await basePage.checkElementState({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.elementsText.vueCliApp.buttonsText.otherSectionButton, + state: 'not.be.disabled', + }); + }); + }); + }); +}); diff --git a/vue-cli/e2e/tests/consumerAppChecks.cy.ts b/vue-cli/e2e/tests/consumerAppChecks.cy.ts deleted file mode 100644 index 2dae4e57287..00000000000 --- a/vue-cli/e2e/tests/consumerAppChecks.cy.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors, updatedSelectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; -import { VueCliMethods } from '../methods/methods'; - -const basePage: BaseMethods = new BaseMethods(); -const methodsPage: VueCliMethods = new VueCliMethods(); - -describe('Vue CLI', () => { - context('It checks consumer app', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 8080, - }); - }); - - it('Checks consumer page header visibility', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.elementsText.vueCliApp.consumerSection.header, - visibilityState: 'be.visible', - }); - }); - - it('Checks core imported part message visibility', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h4, - text: Constants.elementsText.vueCliApp.consumerSection.importMessages.core, - visibilityState: 'be.visible', - }); - }); - - it('Checks that imported and basic core component names are equal', () => { - basePage.compareInfoBetweenHosts(updatedSelectors.vueCliApp.sectionElements.name, 9000); - }); - - it('Checks that imported core section button text is not equal to base core section button text', () => { - basePage.compareInfoBetweenHosts( - updatedSelectors.vueCliApp.sectionElements.button, - 9000, - false, - ); - }); - - it('Checks core section description visibility', () => { - basePage.checkElementState({ - selector: baseSelectors.tags.section, - text: Constants.elementsText.vueCliApp.sectionsDescriptions.consumerCoreSection, - state: 'not.be.disabled', - }); - }); - - it('Checks other part message visibility', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.headers.h4, - text: Constants.elementsText.vueCliApp.consumerSection.importMessages.other, - visibilityState: 'be.visible', - }); - }); - - it('Checks that imported and basic other component descriptions are equal', () => { - basePage.compareInfoBetweenHosts(baseSelectors.tags.section, 9001, true, 1); - }); - - it('Checks that imported other section button text is equal to base other section button text', () => { - basePage.compareInfoBetweenHosts(baseSelectors.tags.coreElements.button, 9001, true, 1); - }); - - it('Checks that on imported and base other sections same code block appears by click', () => { - basePage.checkElementContainText({ - selector: baseSelectors.tags.section, - text: Constants.elementsText.vueCliApp.otherSectionCodeBlock, - index: 0, - isContain: false, - }); - basePage.clickElementWithText({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.vueCliApp.buttonsText.otherSectionButton, - wait: 1500, - }); - basePage.compareInfoBetweenHosts( - baseSelectors.tags.code, - 9001, - true, - 0, - baseSelectors.tags.coreElements.button, - 1500, - ); - }); - - it('Checks that on imported and base other sections same browser alert appears by click on button', () => { - methodsPage.checkBrowserAlertForMultipleHosts({ - selector: baseSelectors.tags.coreElements.button, - message: Constants.commonPhrases.vueCliApp.otherAppAlertMessage, - index: 1, - host: 9001, - wait: 1500, - }); - }); - }); -}); diff --git a/vue-cli/e2e/tests/consumerAppChecks.spec.ts b/vue-cli/e2e/tests/consumerAppChecks.spec.ts new file mode 100644 index 00000000000..c812be9ecb9 --- /dev/null +++ b/vue-cli/e2e/tests/consumerAppChecks.spec.ts @@ -0,0 +1,118 @@ +import { test } from '@playwright/test'; +import { BaseMethods } from '../../../playwright-e2e/common/base'; +import { baseSelectors, updatedSelectors } from '../../../playwright-e2e/common/selectors'; +import { Constants } from '../../../playwright-e2e/fixtures/constants'; +import { VueCliMethods } from '../methods/methods'; + +test.describe('Vue CLI', () => { + test.describe('It checks consumer app', () => { + let basePage: BaseMethods; + let methodsPage: VueCliMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + methodsPage = new VueCliMethods(page); + await basePage.openLocalhost({ number: 8080 }); + }); + + test('Checks consumer page header visibility', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: Constants.elementsText.vueCliApp.consumerSection.header, + visibilityState: 'be.visible', + }); + }); + + test('Checks core imported part message visibility', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h4, + text: Constants.elementsText.vueCliApp.consumerSection.importMessages.core, + visibilityState: 'be.visible', + }); + }); + + test('Checks that imported and basic core component names are equal', async () => { + await basePage.compareInfoBetweenHosts({ + selector: updatedSelectors.vueCliApp.sectionElements.name, + extraHost: 9000, + }); + }); + + test('Checks that imported core section button text is not equal to base core section button text', async () => { + await basePage.compareInfoBetweenHosts({ + selector: updatedSelectors.vueCliApp.sectionElements.button, + extraHost: 9000, + isEqual: false, + }); + }); + + test('Checks core section description visibility', async () => { + await basePage.checkElementState({ + selector: baseSelectors.tags.section, + text: Constants.elementsText.vueCliApp.sectionsDescriptions.consumerCoreSection, + state: 'not.be.disabled', + }); + }); + + test('Checks other part message visibility', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.headers.h4, + text: Constants.elementsText.vueCliApp.consumerSection.importMessages.other, + visibilityState: 'be.visible', + }); + }); + + test('Checks that imported and basic other component descriptions are equal', async () => { + await basePage.compareInfoBetweenHosts({ + selector: baseSelectors.tags.section, + extraHost: 9001, + isEqual: true, + index: 1, + }); + }); + + test('Checks that imported other section button text is equal to base other section button text', async () => { + await basePage.compareInfoBetweenHosts({ + selector: baseSelectors.tags.coreElements.button, + extraHost: 9001, + isEqual: true, + index: 1, + }); + }); + + test('Checks that on imported and base other sections same code block appears by click', async () => { + await basePage.checkElementContainText({ + selector: baseSelectors.tags.section, + text: Constants.elementsText.vueCliApp.otherSectionCodeBlock, + index: 0, + isContain: false, + }); + + await basePage.checkBrowserAlertByText({ + parentSelector: baseSelectors.tags.section, + selector: baseSelectors.tags.coreElements.button, + alertMessage: Constants.commonPhrases.vueCliApp.otherAppAlertMessage, + index: 1, + }); + + await basePage.compareInfoBetweenHosts({ + selector: baseSelectors.tags.code, + extraHost: 9001, + isEqual: true, + index: 0, + clickSelector: baseSelectors.tags.coreElements.button, + wait: 1500, + }); + }); + + test('Checks that on imported and base other sections same browser alert appears by click on button', async () => { + await methodsPage.checkBrowserAlertForMultipleHosts({ + selector: baseSelectors.tags.coreElements.button, + message: Constants.commonPhrases.vueCliApp.otherAppAlertMessage, + index: 1, + host: 9001, + wait: 1500, + }); + }); + }); +}); diff --git a/vue-cli/e2e/tests/otherAppChecks.cy.ts b/vue-cli/e2e/tests/otherAppChecks.cy.ts deleted file mode 100644 index 2c31834da8b..00000000000 --- a/vue-cli/e2e/tests/otherAppChecks.cy.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Vue CLI', () => { - context('It checks other app', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 9001, - }); - }); - - it('Checks other section browser alert text', () => { - basePage.checkBrowserAlertByText({ - selector: baseSelectors.tags.coreElements.button, - alertMessage: Constants.commonPhrases.vueCliApp.otherAppAlertMessage, - }); - }); - }); -}); diff --git a/vue-cli/e2e/tests/otherAppChecks.spec.ts b/vue-cli/e2e/tests/otherAppChecks.spec.ts new file mode 100644 index 00000000000..318e68366c4 --- /dev/null +++ b/vue-cli/e2e/tests/otherAppChecks.spec.ts @@ -0,0 +1,22 @@ +import { test } from '@playwright/test'; +import { BaseMethods } from '../../../playwright-e2e/common/base'; +import { baseSelectors } from '../../../playwright-e2e/common/selectors'; +import { Constants } from '../../../playwright-e2e/fixtures/constants'; + +test.describe('Vue CLI', () => { + test.describe('It checks other app', () => { + let basePage: BaseMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: 9001 }); + }); + + test('Checks other section browser alert text', async () => { + await basePage.checkBrowserAlertByText({ + selector: baseSelectors.tags.coreElements.button, + alertMessage: Constants.commonPhrases.vueCliApp.otherAppAlertMessage, + }); + }); + }); +}); diff --git a/vue-cli/e2e/tests/runAll.cy.ts b/vue-cli/e2e/tests/runAll.cy.ts deleted file mode 100644 index 8b8146b0878..00000000000 --- a/vue-cli/e2e/tests/runAll.cy.ts +++ /dev/null @@ -1,3 +0,0 @@ -import './commonChecks.cy'; -import './consumerAppChecks.cy'; -import './otherAppChecks.cy'; diff --git a/vue-cli/other/src/components/MainComponent.vue b/vue-cli/other/src/components/MainComponent.vue index 319b6748942..43d551844c0 100644 --- a/vue-cli/other/src/components/MainComponent.vue +++ b/vue-cli/other/src/components/MainComponent.vue @@ -11,23 +11,97 @@ diff --git a/vue-cli/other/vue.config.js b/vue-cli/other/vue.config.js index 16b11b826f8..3990d17b9a7 100644 --- a/vue-cli/other/vue.config.js +++ b/vue-cli/other/vue.config.js @@ -1,6 +1,7 @@ const ModuleFederationPlugin = require('webpack').container.ModuleFederationPlugin; module.exports = { + lintOnSave: false, publicPath: 'http://localhost:9001/', configureWebpack: { optimization: { diff --git a/vue-cli/package.json b/vue-cli/package.json index d345729b215..8e9451d09a8 100644 --- a/vue-cli/package.json +++ b/vue-cli/package.json @@ -13,7 +13,11 @@ "build": "pnpm --filter @vue-cli/* build", "serve": "pnpm --filter @vue-cli/* --parallel serve", "clean": "pnpm --filter @vue-cli/* --parallel clean", - "e2e:ci": "pnpm start & wait-on http-get://localhost:8080/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/tests/runAll.cy.ts\" --browser=chrome" + "test:e2e": "pnpm exec playwright test", + "test:e2e:ui": "pnpm exec playwright test --ui", + "e2e:ci": "pnpm exec playwright test --reporter=line" }, - "devDependencies": {} + "devDependencies": { + "@playwright/test": "^1.54.2" + } } diff --git a/vue-cli/playwright.config.ts b/vue-cli/playwright.config.ts new file mode 100644 index 00000000000..e9c6a036fb6 --- /dev/null +++ b/vue-cli/playwright.config.ts @@ -0,0 +1,27 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e/tests', + testMatch: '**/*.spec.ts', + fullyParallel: true, + retries: process.env.CI ? 1 : 0, + use: { + baseURL: 'http://localhost:8080', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + }, + webServer: { + command: 'pnpm serve', + cwd: __dirname, + port: 8080, + reuseExistingServer: !process.env.CI, + timeout: 240_000, + }, + projects: [ + { + name: 'Chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], +}); diff --git a/vue2-in-vue3/cypress.env.json b/vue2-in-vue3/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/vue2-in-vue3/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/vue2-in-vue3/e2e/tests/commonChecks.cy.ts b/vue2-in-vue3/e2e/tests/commonChecks.cy.ts deleted file mode 100644 index 4a24e26b456..00000000000 --- a/vue2-in-vue3/e2e/tests/commonChecks.cy.ts +++ /dev/null @@ -1,165 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; - -const basePage: BaseMethods = new BaseMethods(); -const clicksCounter = 1; - -describe('Vue 2 in Vue 3', () => { - context('It checks vue2-in-vue3 connection sample', () => { - const appsData = [ - { - headerName: Constants.commonPhrases.vue2InVue3App.appsNames.vue2, - componentState: Constants.commonPhrases.vue2InVue3App.componentState, - host: 3001, - }, - { - headerName: Constants.commonPhrases.vue2InVue3App.appsNames.vue3, - componentState: Constants.commonConstantsData.commonVueAppComponentState, - host: 3002, - }, - ]; - - appsData.forEach((property: { headerName: string; componentState: string; host: number }) => { - it(`Check ${property.headerName} header visibility`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: property.headerName, - visibilityState: 'be.visible', - }); - }); - - it(`Check that both apps shares the button with same text`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.elementsText.vue2InVue3App.commonButtonText, - visibilityState: 'be.visible', - }); - }); - - it(`Check that in ${property.headerName} button is active`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementState({ - selector: baseSelectors.tags.coreElements.button, - state: 'not.be.disabled', - }); - }); - - it(`Check that in ${property.headerName} app by default counter set to 0`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.commonPhrases.vue2InVue3App.defaultCounterText, - visibilityState: 'be.visible', - }); - }); - - it(`Checks component state visibility for ${property.headerName}`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: property.componentState, - }); - }); - - it(`Checks that only 'vue3' app recognises button as remote component`, () => { - basePage.openLocalhost({ - number: property.host, - }); - if (property.headerName === Constants.commonPhrases.vue2InVue3App.appsNames.vue3) { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.commonConstantsData.commonVueAppComponentState, - visibilityState: 'be.visible', - }); - - return; - } - - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.commonPhrases.vue2InVue3App.componentState, - visibilityState: 'be.visible', - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.commonConstantsData.commonVueAppComponentState, - isVisible: false, - }); - }); - - it(`Check that in ${property.headerName} app color of component info set to red`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.css.style.replace('{style}', Constants.color.nonRgbValues.red), - text: Constants.commonPhrases.vue2InVue3App.defaultCounterText, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.css.style.replace('{style}', Constants.color.nonRgbValues.red), - text: property.componentState, - }); - }); - - it(`Checks counter on ${property.headerName} changes after click and returns to default after reload`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkCounterFunctionality({ - button: baseSelectors.tags.coreElements.button, - counterElement: baseSelectors.tags.coreElements.div, - counterText: Constants.commonPhrases.vue2InVue3App.defaultCounterText, - isButtonTexted: false, - isReloaded: true, - }); - }); - - it(`Compares counter on ${property.headerName} with quantity of clicks`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkCounterFunctionality({ - button: baseSelectors.tags.coreElements.button, - counterElement: baseSelectors.tags.coreElements.div, - counterText: Constants.commonPhrases.vue2InVue3App.defaultCounterText, - isButtonTexted: false, - isValueCompared: true, - }); - }); - - it(`Checks that clicks counter is not shared between apps`, () => { - const host = property.host === 3001 ? appsData[1].host : appsData[0].host; - const defaultCounterText = Constants.commonPhrases.vue2InVue3App.defaultCounterText; - - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkCounterFunctionality({ - button: baseSelectors.tags.coreElements.button, - counterElement: baseSelectors.tags.coreElements.div, - counterText: Constants.commonPhrases.vue2InVue3App.defaultCounterText, - isButtonTexted: false, - }); - basePage.checkInfoOnNonDefaultHost( - host, - baseSelectors.tags.coreElements.div, - defaultCounterText, - defaultCounterText.replace(/[0-9]/g, clicksCounter.toString()), - ); - }); - }); - }); -}); diff --git a/vue2-in-vue3/e2e/tests/commonChecks.spec.ts b/vue2-in-vue3/e2e/tests/commonChecks.spec.ts new file mode 100644 index 00000000000..7e0720ca4dd --- /dev/null +++ b/vue2-in-vue3/e2e/tests/commonChecks.spec.ts @@ -0,0 +1,159 @@ +import { test, expect } from '@playwright/test'; +import { BaseMethods } from '../../../playwright-e2e/common/base'; +import { baseSelectors } from '../../../playwright-e2e/common/selectors'; +import { Constants } from '../../../playwright-e2e/fixtures/constants'; + +const clicksCounter = 1; + +test.describe('Vue 2 in Vue 3', () => { + const appsData = [ + { + headerName: Constants.commonPhrases.vue2InVue3App.appsNames.vue2, + componentState: Constants.commonPhrases.vue2InVue3App.componentState, + host: 3001, + }, + { + headerName: Constants.commonPhrases.vue2InVue3App.appsNames.vue3, + componentState: Constants.commonConstantsData.commonVueAppComponentState, + host: 3002, + }, + ]; + + test.describe('It checks vue2-in-vue3 connection sample', () => { + appsData.forEach(property => { + test(`Check ${property.headerName} header visibility`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: property.host }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: property.headerName, + visibilityState: 'be.visible', + }); + }); + + test(`Check that both apps shares the button with same text (${property.headerName})`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: property.host }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.elementsText.vue2InVue3App.commonButtonText, + visibilityState: 'be.visible', + }); + }); + + test(`Check that in ${property.headerName} button is active`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: property.host }); + await basePage.checkElementState({ + selector: baseSelectors.tags.coreElements.button, + state: 'not.be.disabled', + }); + }); + + test(`Check that in ${property.headerName} app counter is rendered`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: property.host }); + const counter = page + .locator(baseSelectors.tags.coreElements.div) + .filter({ hasText: 'count:' }) + .first(); + await expect(counter).toBeVisible(); + const text = (await counter.innerText()).trim(); + const match = text.match(/count:\s*(\d+)/); + expect(match).not.toBeNull(); + }); + + test(`Checks component state visibility for ${property.headerName}`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: property.host }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: property.componentState, + }); + }); + + test(`Checks that only 'vue3' app recognises button as remote component (${property.headerName})`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: property.host }); + if (property.headerName === Constants.commonPhrases.vue2InVue3App.appsNames.vue3) { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: Constants.commonConstantsData.commonVueAppComponentState, + visibilityState: 'be.visible', + }); + + return; + } + + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: Constants.commonPhrases.vue2InVue3App.componentState, + visibilityState: 'be.visible', + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: Constants.commonConstantsData.commonVueAppComponentState, + isVisible: false, + }); + }); + + test(`Check that in ${property.headerName} app color of component info set to red`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: property.host }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.css.style.replace('{style}', Constants.color.nonRgbValues.red), + text: Constants.commonPhrases.vue2InVue3App.defaultCounterText, + }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.css.style.replace('{style}', Constants.color.nonRgbValues.red), + text: property.componentState, + }); + }); + + test(`Checks counter on ${property.headerName} changes after click and returns to default after reload`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: property.host }); + await basePage.checkCounterFunctionality({ + button: baseSelectors.tags.coreElements.button, + counterElement: baseSelectors.tags.coreElements.div, + counterText: Constants.commonPhrases.vue2InVue3App.defaultCounterText, + isButtonTexted: false, + isReloaded: true, + }); + }); + + test(`Compares counter on ${property.headerName} with quantity of clicks`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: property.host }); + await basePage.checkCounterFunctionality({ + button: baseSelectors.tags.coreElements.button, + counterElement: baseSelectors.tags.coreElements.div, + counterText: Constants.commonPhrases.vue2InVue3App.defaultCounterText, + isButtonTexted: false, + isValueCompared: true, + }); + }); + + test(`Checks that clicks counter is not shared between apps (${property.headerName})`, async ({ page }) => { + const basePage = new BaseMethods(page); + const host = property.host === 3001 ? appsData[1].host : appsData[0].host; + const defaultCounterText = Constants.commonPhrases.vue2InVue3App.defaultCounterText; + + await basePage.openLocalhost({ number: property.host }); + await basePage.checkCounterFunctionality({ + button: baseSelectors.tags.coreElements.button, + counterElement: baseSelectors.tags.coreElements.div, + counterText: Constants.commonPhrases.vue2InVue3App.defaultCounterText, + isButtonTexted: false, + }); + + await basePage.checkInfoOnNonDefaultHost({ + host, + element: baseSelectors.tags.coreElements.div, + existedText: defaultCounterText, + notExistedText: defaultCounterText.replace(/[0-9]/g, clicksCounter.toString()), + }); + }); + }); + }); +}); diff --git a/vue2-in-vue3/package.json b/vue2-in-vue3/package.json index 164c030d598..cbafa18879d 100644 --- a/vue2-in-vue3/package.json +++ b/vue2-in-vue3/package.json @@ -8,9 +8,12 @@ "build": "pnpm --filter vue2-in-vue3_vue* build", "serve": "pnpm --filter vue2-in-vue3_vue* --parallel serve", "clean": "pnpm --filter vue2-in-vue3_vue* --parallel clean", - "e2e:ci": "pnpm start & wait-on http-get://localhost:3002/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/tests/*.cy.ts\" --browser=chrome" + "test:e2e": "node scripts/run-playwright.cjs test", + "test:e2e:ui": "node scripts/run-playwright.cjs test --ui", + "e2e:ci": "node scripts/run-playwright.cjs test --reporter=line" }, "devDependencies": { + "@playwright/test": "^1.54.2", "wait-on": "7.2.0" } } diff --git a/vue2-in-vue3/playwright.config.ts b/vue2-in-vue3/playwright.config.ts new file mode 100644 index 00000000000..4bfdcca2d75 --- /dev/null +++ b/vue2-in-vue3/playwright.config.ts @@ -0,0 +1,28 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e/tests', + testMatch: '**/*.spec.ts', + expect: { timeout: 15_000 }, + fullyParallel: true, + retries: process.env.CI ? 1 : 0, + use: { + baseURL: 'http://localhost:3001', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + }, + webServer: { + command: 'node scripts/start-all.cjs', + cwd: __dirname, + port: 3001, + reuseExistingServer: !process.env.CI, + timeout: 300_000, + }, + projects: [ + { + name: 'Chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], +}); diff --git a/vue2-in-vue3/scripts/register-playwright-alias.cjs b/vue2-in-vue3/scripts/register-playwright-alias.cjs new file mode 100644 index 00000000000..4eca138d8cc --- /dev/null +++ b/vue2-in-vue3/scripts/register-playwright-alias.cjs @@ -0,0 +1,30 @@ +const path = require('node:path'); +const { createRequire } = require('node:module'); + +const requireFromHere = createRequire(__filename); +const repoRoot = path.resolve(__dirname, '..', '..'); + +function aliasModule(request) { + let localPath; + try { + localPath = requireFromHere.resolve(request); + } catch { + return; + } + + // Ensure the module is loaded so the cache entry exists. + requireFromHere(request); + + try { + const rootPath = requireFromHere.resolve(request, { paths: [repoRoot] }); + if (rootPath !== localPath && require.cache[localPath]) { + require.cache[rootPath] = require.cache[localPath]; + } + } catch { + // The root dependency might not exist when running this example in + // isolation. That's fine; in that case nothing extra is needed. + } +} + +aliasModule('@playwright/test'); +aliasModule('playwright'); diff --git a/vue2-in-vue3/scripts/run-playwright.cjs b/vue2-in-vue3/scripts/run-playwright.cjs new file mode 100755 index 00000000000..6994d370159 --- /dev/null +++ b/vue2-in-vue3/scripts/run-playwright.cjs @@ -0,0 +1,17 @@ +#!/usr/bin/env node +const { spawn } = require('node:child_process'); +const path = require('node:path'); + +const cli = require.resolve('@playwright/test/cli'); +const aliasHook = path.resolve(__dirname, 'register-playwright-alias.cjs'); +const args = process.argv.slice(2); + +const child = spawn(process.execPath, ['--require', aliasHook, cli, ...args], { + stdio: 'inherit', +}); + +child.on('exit', code => { + if (code !== null) { + process.exit(code); + } +}); diff --git a/vue2-in-vue3/scripts/start-all.cjs b/vue2-in-vue3/scripts/start-all.cjs new file mode 100644 index 00000000000..c83b9672e12 --- /dev/null +++ b/vue2-in-vue3/scripts/start-all.cjs @@ -0,0 +1,28 @@ +const { spawn } = require('node:child_process'); +const waitOn = require('wait-on'); +const path = require('node:path'); + +const root = path.resolve(__dirname, '..'); + +function run(cmd, args) { + return spawn(cmd, args, { stdio: 'inherit', cwd: root, shell: true }); +} + +async function main() { + // Use dev servers to reduce CPU/IO load in CI + console.log('[vue2-in-vue3] starting dev servers for vue2 and vue3...'); + const pStart = run('pnpm', ['--filter', '"vue2-in-vue3_vue*"', '-r', 'run', 'start']); + + await waitOn({ + resources: ['http://localhost:3001', 'http://localhost:3002'], + timeout: 300000, + validateStatus: s => s >= 200 && s < 500, + }); + console.log('[vue2-in-vue3] ports 3001 and 3002 are up.'); + + process.on('SIGINT', () => pStart.kill('SIGINT')); + process.on('SIGTERM', () => pStart.kill('SIGTERM')); + await new Promise(() => {}); +} + +main().catch(err => { console.error(err); process.exit(1); }); diff --git a/vue3-cli-demo/cypress.env.json b/vue3-cli-demo/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/vue3-cli-demo/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/vue3-cli-demo/e2e/tests/vue3CliDemoChecks.cy.ts b/vue3-cli-demo/e2e/tests/vue3CliDemoChecks.cy.ts deleted file mode 100644 index 8347c23c507..00000000000 --- a/vue3-cli-demo/e2e/tests/vue3CliDemoChecks.cy.ts +++ /dev/null @@ -1,212 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors, selectors, updatedSelectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Vue 3 CLI Demo', () => { - context('It checks certain texted button contains link and not disabled', () => { - const textedLinks = [ - { - text: Constants.hrefs.vueCliApp.documentation.name, - link: Constants.hrefs.vueCliApp.documentation.link, - }, - { - text: Constants.hrefs.vueCliApp.babel.name, - link: Constants.hrefs.vueCliApp.babel.link, - }, - { - text: Constants.hrefs.vueCliApp.router.name, - link: Constants.hrefs.vueCliApp.router.link, - }, - { - text: Constants.hrefs.vueCliApp.vuex.name, - link: Constants.hrefs.vueCliApp.vuex.link, - }, - { - text: Constants.hrefs.vueCliApp.esLint.name, - link: Constants.hrefs.vueCliApp.esLint.link, - }, - { - text: Constants.commonConstantsData.typeScript, - link: Constants.hrefs.vueCliApp.typeScript, - }, - { - text: Constants.hrefs.vueCliApp.coreDocs.name, - link: Constants.hrefs.vueCliApp.coreDocs.link, - }, - { - text: Constants.hrefs.vueCliApp.forum.name, - link: Constants.hrefs.vueCliApp.forum.link, - }, - { - text: Constants.hrefs.vueCliApp.communityChat.name, - link: Constants.hrefs.vueCliApp.communityChat.link, - }, - { - text: Constants.hrefs.vueCliApp.twitter.name, - link: Constants.hrefs.vueCliApp.twitter.link, - }, - { - text: Constants.hrefs.vueCliApp.news.name, - link: Constants.hrefs.vueCliApp.news.link, - }, - { - text: Constants.hrefs.vueCliApp.vueRouter.name, - link: Constants.hrefs.vueCliApp.vueRouter.link, - }, - { - text: Constants.hrefs.vueCliApp.vuex.name, - link: Constants.hrefs.vueCliApp.ecosystemVuex, - }, - { - text: Constants.hrefs.vueCliApp.vueDevTools.name, - link: Constants.hrefs.vueCliApp.vueDevTools.link, - }, - { - text: Constants.hrefs.vueCliApp.vueLoader.name, - link: Constants.hrefs.vueCliApp.vueLoader.link, - }, - { - text: Constants.hrefs.vueCliApp.awesomeVue.name, - link: Constants.hrefs.vueCliApp.awesomeVue.link, - }, - ]; - - textedLinks.forEach((property: { text: string; link: string }) => { - it(`Check that ${property.text} text includes link and not disabled`, () => { - basePage.openLocalhost({ - number: 8081, - }); - basePage.checkElementContainText({ - selector: updatedSelectors.vue3CliDemoApp.linkContainer, - text: property.text, - link: property.link, - }); - }); - }); - }); -}); - -describe('Vue 3 CLI Demo', () => { - context('It checks messages on page visibility', () => { - const messages = [ - { - message: Constants.commonPhrases.vueCliApp.welcomeMessage, - }, - { - message: Constants.commonPhrases.vueCliApp.configurationMessage, - }, - { - message: Constants.commonPhrases.vueCliApp.installedCliPluginsMessage, - }, - { - message: Constants.commonPhrases.vueCliApp.essentialLinksMessage, - }, - { - message: Constants.commonPhrases.vueCliApp.ecosystemLinksMessage, - }, - ]; - - messages.forEach((property: { message: string }) => { - it(`Check that ${property.message} text is visible`, () => { - basePage.openLocalhost({ - number: 8081, - }); - basePage.checkElementWithTextPresence({ - selector: selectors.vue3CliDemoApp.tabs.home, - text: property.message, - visibilityState: 'be.visible', - }); - }); - }); - }); -}); - -describe('Vue 3 CLI Demo', () => { - context('Checks tabs and logo', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 8081, - }); - }); - - it('Checks vue logo visibility', () => { - basePage.checkElementVisibility({ - selector: baseSelectors.tags.coreElements.image, - }); - }); - - it('Checks that host link is not contain `about` if `about` tab is not active', () => { - basePage.checkElementWithTextPresence({ - selector: updatedSelectors.vue3CliDemoApp.navigationActiveStateTab, - text: Constants.elementsText.vue3CliDemoApp.aboutTab, - isVisible: false, - }); - basePage.checkUrlText(Constants.elementsText.vue3CliDemoApp.aboutTab.toLowerCase()); - }); - - it('Checks that host link is contain `about` if `about` tab is active', () => { - basePage.checkElementWithTextPresence({ - selector: updatedSelectors.vue3CliDemoApp.navigationActiveStateTab, - text: Constants.elementsText.vue3CliDemoApp.aboutTab, - isVisible: false, - }); - basePage.checkUrlText(Constants.elementsText.vue3CliDemoApp.aboutTab.toLowerCase()); - basePage.clickElementBySelector({ - selector: baseSelectors.css.href.replace('{link}', Constants.hrefs.vueCliApp.aboutTab), - }); - basePage.checkElementWithTextPresence({ - selector: updatedSelectors.vue3CliDemoApp.navigationActiveStateTab, - text: Constants.elementsText.vue3CliDemoApp.aboutTab, - }); - basePage.checkUrlText(Constants.elementsText.vue3CliDemoApp.aboutTab.toLowerCase(), true); - }); - - it('Checks text on active about tab', () => { - basePage.clickElementBySelector({ - selector: baseSelectors.css.href.replace('{link}', Constants.hrefs.vueCliApp.aboutTab), - }); - basePage.checkElementWithTextPresence({ - selector: updatedSelectors.vue3CliDemoApp.navigationActiveStateTab, - text: Constants.elementsText.vue3CliDemoApp.aboutTab, - }); - basePage.checkElementWithTextPresence({ - selector: selectors.vue3CliDemoApp.tabs.about, - text: Constants.commonPhrases.vueCliApp.aboutTabMessage, - visibilityState: 'be.visible', - }); - }); - - it('Checks that both tabs are not disabled', () => { - basePage.checkElementState({ - selector: baseSelectors.css.href.replace('{link}', Constants.hrefs.vueCliApp.aboutTab), - state: 'not.be.disabled', - }); - basePage.clickElementBySelector({ - selector: baseSelectors.css.href.replace('{link}', Constants.hrefs.vueCliApp.aboutTab), - }); - basePage.checkElementWithTextPresence({ - selector: updatedSelectors.vue3CliDemoApp.navigationActiveStateTab, - text: Constants.elementsText.vue3CliDemoApp.aboutTab, - }); - basePage.checkElementState({ - selector: baseSelectors.css.href.replace( - '{link}', - Constants.commonConstantsData.commonLinks.cellLink, - ), - state: 'not.be.disabled', - }); - basePage.clickElementBySelector({ - selector: baseSelectors.css.href.replace( - '{link}', - Constants.commonConstantsData.commonLinks.cellLink, - ), - }); - basePage.checkElementWithTextPresence({ - selector: updatedSelectors.vue3CliDemoApp.navigationActiveStateTab, - text: Constants.commonConstantsData.home, - }); - }); - }); -}); diff --git a/vue3-cli-demo/e2e/tests/vue3CliDemoChecks.spec.ts b/vue3-cli-demo/e2e/tests/vue3CliDemoChecks.spec.ts new file mode 100644 index 00000000000..d34f1908475 --- /dev/null +++ b/vue3-cli-demo/e2e/tests/vue3CliDemoChecks.spec.ts @@ -0,0 +1,155 @@ +import { test } from '@playwright/test'; +import { BaseMethods } from '../../../playwright-e2e/common/base'; +import { baseSelectors, selectors, updatedSelectors } from '../../../playwright-e2e/common/selectors'; +import { Constants } from '../../../playwright-e2e/fixtures/constants'; + +test.describe('Vue 3 CLI Demo', () => { + test.describe('It checks certain texted button contains link and not disabled', () => { + const textedLinks = [ + { text: Constants.hrefs.vueCliApp.documentation.name, link: Constants.hrefs.vueCliApp.documentation.link }, + { text: Constants.hrefs.vueCliApp.babel.name, link: Constants.hrefs.vueCliApp.babel.link }, + { text: Constants.hrefs.vueCliApp.router.name, link: Constants.hrefs.vueCliApp.router.link }, + { text: Constants.hrefs.vueCliApp.vuex.name, link: Constants.hrefs.vueCliApp.vuex.link }, + { text: Constants.hrefs.vueCliApp.esLint.name, link: Constants.hrefs.vueCliApp.esLint.link }, + { text: Constants.commonConstantsData.typeScript, link: Constants.hrefs.vueCliApp.typeScript }, + { text: Constants.hrefs.vueCliApp.coreDocs.name, link: Constants.hrefs.vueCliApp.coreDocs.link }, + { text: Constants.hrefs.vueCliApp.forum.name, link: Constants.hrefs.vueCliApp.forum.link }, + { text: Constants.hrefs.vueCliApp.communityChat.name, link: Constants.hrefs.vueCliApp.communityChat.link }, + { text: Constants.hrefs.vueCliApp.twitter.name, link: Constants.hrefs.vueCliApp.twitter.link }, + { text: Constants.hrefs.vueCliApp.news.name, link: Constants.hrefs.vueCliApp.news.link }, + { text: Constants.hrefs.vueCliApp.vueRouter.name, link: Constants.hrefs.vueCliApp.vueRouter.link }, + { text: Constants.hrefs.vueCliApp.vuex.name, link: Constants.hrefs.vueCliApp.ecosystemVuex }, + { text: Constants.hrefs.vueCliApp.vueDevTools.name, link: Constants.hrefs.vueCliApp.vueDevTools.link }, + { text: Constants.hrefs.vueCliApp.vueLoader.name, link: Constants.hrefs.vueCliApp.vueLoader.link }, + { text: Constants.hrefs.vueCliApp.awesomeVue.name, link: Constants.hrefs.vueCliApp.awesomeVue.link }, + ]; + + textedLinks.forEach(({ text, link }) => { + test(`Check that ${text} text includes link and not disabled`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: 8081 }); + await basePage.checkElementContainText({ + selector: updatedSelectors.vue3CliDemoApp.linkContainer, + text, + link, + }); + }); + }); + }); + + test.describe('It checks messages on page visibility', () => { + const messages = [ + { message: Constants.commonPhrases.vueCliApp.welcomeMessage }, + { message: Constants.commonPhrases.vueCliApp.configurationMessage }, + { message: Constants.commonPhrases.vueCliApp.installedCliPluginsMessage }, + { message: Constants.commonPhrases.vueCliApp.essentialLinksMessage }, + { message: Constants.commonPhrases.vueCliApp.ecosystemLinksMessage }, + ]; + + messages.forEach(({ message }) => { + test(`Check that ${message} text is visible`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: 8081 }); + await basePage.checkElementWithTextPresence({ + selector: selectors.vue3CliDemoApp.tabs.home, + text: message, + visibilityState: 'be.visible', + }); + }); + }); + }); + + test.describe('Checks tabs and logo', () => { + let basePage: BaseMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: 8081 }); + }); + + test('Checks vue logo visibility', async () => { + await basePage.checkElementVisibility({ + selector: baseSelectors.tags.coreElements.image, + }); + }); + + test('Checks that host link does not contain about if tab is not active', async () => { + await basePage.checkElementWithTextPresence({ + selector: updatedSelectors.vue3CliDemoApp.navigationActiveStateTab, + text: Constants.elementsText.vue3CliDemoApp.aboutTab, + isVisible: false, + }); + await basePage.checkUrlText({ + url: Constants.elementsText.vue3CliDemoApp.aboutTab.toLowerCase(), + }); + }); + + test('Checks that host link contains about when about tab is active', async () => { + await basePage.checkElementWithTextPresence({ + selector: updatedSelectors.vue3CliDemoApp.navigationActiveStateTab, + text: Constants.elementsText.vue3CliDemoApp.aboutTab, + isVisible: false, + }); + await basePage.checkUrlText({ + url: Constants.elementsText.vue3CliDemoApp.aboutTab.toLowerCase(), + }); + await basePage.clickElementBySelector({ + selector: baseSelectors.css.href.replace('{link}', Constants.hrefs.vueCliApp.aboutTab), + }); + await basePage.checkElementWithTextPresence({ + selector: updatedSelectors.vue3CliDemoApp.navigationActiveStateTab, + text: Constants.elementsText.vue3CliDemoApp.aboutTab, + }); + await basePage.checkUrlText({ + url: Constants.elementsText.vue3CliDemoApp.aboutTab.toLowerCase(), + isInclude: true, + }); + }); + + test('Checks text on active about tab', async () => { + await basePage.clickElementBySelector({ + selector: baseSelectors.css.href.replace('{link}', Constants.hrefs.vueCliApp.aboutTab), + }); + await basePage.checkElementWithTextPresence({ + selector: updatedSelectors.vue3CliDemoApp.navigationActiveStateTab, + text: Constants.elementsText.vue3CliDemoApp.aboutTab, + }); + await basePage.checkElementWithTextPresence({ + selector: selectors.vue3CliDemoApp.tabs.about, + text: Constants.commonPhrases.vueCliApp.aboutTabMessage, + visibilityState: 'be.visible', + }); + }); + + test('Checks that both tabs are not disabled', async () => { + await basePage.checkElementState({ + selector: baseSelectors.css.href.replace('{link}', Constants.hrefs.vueCliApp.aboutTab), + state: 'not.be.disabled', + }); + await basePage.clickElementBySelector({ + selector: baseSelectors.css.href.replace('{link}', Constants.hrefs.vueCliApp.aboutTab), + }); + await basePage.checkElementWithTextPresence({ + selector: updatedSelectors.vue3CliDemoApp.navigationActiveStateTab, + text: Constants.elementsText.vue3CliDemoApp.aboutTab, + }); + await basePage.checkElementState({ + selector: baseSelectors.css.href.replace( + '{link}', + Constants.commonConstantsData.commonLinks.cellLink, + ), + state: 'not.be.disabled', + }); + await basePage.clickElementBySelector({ + selector: baseSelectors.css.href.replace( + '{link}', + Constants.commonConstantsData.commonLinks.cellLink, + ), + }); + await basePage.checkElementWithTextPresence({ + selector: updatedSelectors.vue3CliDemoApp.navigationActiveStateTab, + text: Constants.commonConstantsData.home, + }); + }); + }); +}); diff --git a/vue3-cli-demo/package.json b/vue3-cli-demo/package.json index 75165c682de..42894c5e5ba 100644 --- a/vue3-cli-demo/package.json +++ b/vue3-cli-demo/package.json @@ -1,4 +1,13 @@ { "name": "vue3-cli-demo", - "description": "Vue 3 using vue-cli OR rsbuild" + "description": "Vue 3 using vue-cli OR rsbuild", + "private": true, + "scripts": { + "test:e2e": "pnpm exec playwright test", + "test:e2e:ui": "pnpm exec playwright test --ui", + "e2e:ci": "pnpm exec playwright test --reporter=line" + }, + "devDependencies": { + "@playwright/test": "^1.54.2" + } } diff --git a/vue3-cli-demo/playwright.config.ts b/vue3-cli-demo/playwright.config.ts new file mode 100644 index 00000000000..3aba903ba45 --- /dev/null +++ b/vue3-cli-demo/playwright.config.ts @@ -0,0 +1,36 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e/tests', + testMatch: '**/*.spec.ts', + fullyParallel: true, + retries: process.env.CI ? 1 : 0, + use: { + baseURL: 'http://localhost:8081', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + }, + webServer: [ + { + command: 'pnpm --filter app-exposes serve', + cwd: __dirname, + port: 8082, + reuseExistingServer: !process.env.CI, + timeout: 240_000, + }, + { + command: 'pnpm --filter app-general serve', + cwd: __dirname, + port: 8081, + reuseExistingServer: !process.env.CI, + timeout: 240_000, + }, + ], + projects: [ + { + name: 'Chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], +}); diff --git a/vue3-demo/cypress.env.json b/vue3-demo/cypress.env.json deleted file mode 100644 index c65e6cd032e..00000000000 --- a/vue3-demo/cypress.env.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allure": true, - "allureResultsPath": "../cypress-e2e/results/allure-results" -} diff --git a/vue3-demo/e2e/tests/commonChecks.cy.ts b/vue3-demo/e2e/tests/commonChecks.cy.ts deleted file mode 100644 index e98e086c171..00000000000 --- a/vue3-demo/e2e/tests/commonChecks.cy.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Vue 3 Demo', () => { - context('It checks app names & messages', () => { - const appsData = [ - { - host: 3001, - appName: Constants.commonPhrases.vue3DemoApp.appsNames.layout, - }, - { - host: 3002, - appName: Constants.commonPhrases.vue3DemoApp.appsNames.remote, - }, - ]; - - appsData.forEach((property: { host: number; appName: string }) => { - it('Checks apps name visibility', () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: property.appName, - visibilityState: 'be.visible', - }); - }); - - it('Checks component state message visibility', () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.commonConstantsData.commonVueAppComponentState, - visibilityState: 'be.visible', - }); - }); - - it('Checks component state message style', () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.css.style.replace('{style}', Constants.color.nonRgbValues.red), - text: Constants.commonConstantsData.commonVueAppComponentState, - visibilityState: 'be.visible', - }); - }); - - it('Checks button visibility', () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementVisibility({ - selector: baseSelectors.tags.coreElements.button, - }); - }); - - it(`Checks that button is not disabled`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementState({ - selector: baseSelectors.tags.coreElements.button, - state: 'not.be.disabled', - }); - }); - - it(`Checks button text`, () => { - basePage.openLocalhost({ - number: property.host, - }); - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.button, - text: Constants.commonConstantsData.helloWorldMessage, - visibilityState: 'be.visible', - }); - }); - }); - }); -}); diff --git a/vue3-demo/e2e/tests/commonChecks.spec.ts b/vue3-demo/e2e/tests/commonChecks.spec.ts new file mode 100644 index 00000000000..3d4806fc1c2 --- /dev/null +++ b/vue3-demo/e2e/tests/commonChecks.spec.ts @@ -0,0 +1,69 @@ +import { test } from '@playwright/test'; +import { BaseMethods } from '../../../playwright-e2e/common/base'; +import { baseSelectors } from '../../../playwright-e2e/common/selectors'; +import { Constants } from '../../../playwright-e2e/fixtures/constants'; + +test.describe('Vue 3 Demo', () => { + const appsData = [ + { host: 3001, appName: Constants.commonPhrases.vue3DemoApp.appsNames.layout }, + { host: 3002, appName: Constants.commonPhrases.vue3DemoApp.appsNames.remote }, + ]; + + test.describe('It checks app names & messages', () => { + appsData.forEach(({ host, appName }) => { + test(`Checks apps name visibility (${appName})`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: host }); + const nameSelector = host === 3001 ? baseSelectors.tags.headers.h1 : baseSelectors.tags.headers.h3; + await basePage.checkElementWithTextPresence({ selector: nameSelector, text: appName, visibilityState: 'be.visible' }); + }); + + test(`Checks component state message visibility (${appName})`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: host }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: Constants.commonConstantsData.commonVueAppComponentState, + visibilityState: 'be.visible', + }); + }); + + test(`Checks component state message style (${appName})`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: host }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.css.style.replace('{style}', Constants.color.nonRgbValues.red), + text: Constants.commonConstantsData.commonVueAppComponentState, + visibilityState: 'be.visible', + }); + }); + + test(`Checks button visibility (${appName})`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: host }); + await basePage.checkElementVisibility({ + selector: baseSelectors.tags.coreElements.button, + }); + }); + + test(`Checks that button is not disabled (${appName})`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: host }); + await basePage.checkElementState({ + selector: baseSelectors.tags.coreElements.button, + state: 'not.be.disabled', + }); + }); + + test(`Checks button text (${appName})`, async ({ page }) => { + const basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: host }); + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.button, + text: Constants.commonConstantsData.helloWorldMessage, + visibilityState: 'be.visible', + }); + }); + }); + }); +}); diff --git a/vue3-demo/e2e/tests/layoutChecks.cy.ts b/vue3-demo/e2e/tests/layoutChecks.cy.ts deleted file mode 100644 index 7abb6382887..00000000000 --- a/vue3-demo/e2e/tests/layoutChecks.cy.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { BaseMethods } from '../../../cypress-e2e/common/base'; -import { baseSelectors, selectors } from '../../../cypress-e2e/common/selectors'; -import { Constants } from '../../../cypress-e2e/fixtures/constants'; - -const basePage: BaseMethods = new BaseMethods(); - -describe('Vue 3 Demo', () => { - context('It checks layout app', () => { - beforeEach(() => { - basePage.openLocalhost({ - number: 3001, - }); - }); - - it('Checks page header with text visibility', () => { - basePage.checkElementWithTextPresence({ - selector: baseSelectors.tags.coreElements.div, - text: Constants.commonPhrases.vue3DemoApp.appsHeaders.host, - visibilityState: 'be.visible', - }); - }); - - it('Checks vue app logo visibility', () => { - basePage.checkElementVisibility({ - selector: baseSelectors.tags.coreElements.image, - }); - }); - - it('Checks layout app includes remote component', () => { - basePage.checkElementVisibility({ - parentSelector: selectors.vue3DemoApp.components.layout, - selector: selectors.vue3DemoApp.components.remote, - }); - }); - - it('Checks remote component includes remote header', () => { - basePage.checkElementContainText({ - parentSelector: selectors.vue3DemoApp.components.remote, - selector: baseSelectors.tags.coreElements.div, - text: Constants.commonPhrases.vue3DemoApp.appsHeaders.remote, - }); - }); - - it('Checks remote component includes component state message', () => { - basePage.checkElementContainText({ - parentSelector: selectors.vue3DemoApp.components.remote, - selector: baseSelectors.tags.coreElements.div, - text: Constants.commonConstantsData.commonVueAppComponentState, - index: Constants.commonConstantsData.commonIndexes.one, - }); - }); - - it('Checks remote component includes button with text', () => { - basePage.checkElementContainText({ - parentSelector: selectors.vue3DemoApp.components.remote, - selector: baseSelectors.tags.coreElements.button, - text: Constants.commonConstantsData.helloWorldMessage, - }); - }); - }); -}); diff --git a/vue3-demo/e2e/tests/layoutChecks.spec.ts b/vue3-demo/e2e/tests/layoutChecks.spec.ts new file mode 100644 index 00000000000..44d08dcec76 --- /dev/null +++ b/vue3-demo/e2e/tests/layoutChecks.spec.ts @@ -0,0 +1,67 @@ +import { test } from '@playwright/test'; +import { BaseMethods } from '../../../playwright-e2e/common/base'; +import { baseSelectors, selectors } from '../../../playwright-e2e/common/selectors'; +import { Constants } from '../../../playwright-e2e/fixtures/constants'; + +test.describe('Vue 3 Demo', () => { + test.describe('It checks layout app', () => { + let basePage: BaseMethods; + + test.beforeEach(async ({ page }) => { + basePage = new BaseMethods(page); + await basePage.openLocalhost({ number: 3001 }); + // Wait for layout to mount and remote component to render + await basePage.checkElementVisibility({ selector: selectors.vue3DemoApp.components.layout }); + await basePage.checkElementVisibility({ + parentSelector: selectors.vue3DemoApp.components.layout, + selector: selectors.vue3DemoApp.components.remote, + }); + }); + + test('Checks page header with text visibility', async () => { + await basePage.checkElementWithTextPresence({ + selector: baseSelectors.tags.coreElements.div, + text: Constants.commonPhrases.vue3DemoApp.appsHeaders.host, + visibilityState: 'be.visible', + }); + }); + + test('Checks vue app logo visibility', async () => { + await basePage.checkElementVisibility({ + selector: baseSelectors.tags.coreElements.image, + }); + }); + + test('Checks layout app includes remote component', async () => { + await basePage.checkElementVisibility({ + parentSelector: selectors.vue3DemoApp.components.layout, + selector: selectors.vue3DemoApp.components.remote, + }); + }); + + test('Checks remote component includes remote header', async () => { + await basePage.checkElementContainText({ + parentSelector: selectors.vue3DemoApp.components.remote, + selector: '.app-label', + text: Constants.commonPhrases.vue3DemoApp.appsHeaders.remote, + }); + }); + + test('Checks remote component includes component state message', async () => { + await basePage.checkElementContainText({ + parentSelector: selectors.vue3DemoApp.components.remote, + selector: baseSelectors.tags.coreElements.div, + text: Constants.commonConstantsData.commonVueAppComponentState, + index: Constants.commonConstantsData.commonIndexes.one, + }); + }); + + test('Checks remote component includes button with text', async () => { + await basePage.checkElementContainText({ + parentSelector: selectors.vue3DemoApp.components.remote, + selector: baseSelectors.tags.coreElements.button, + text: Constants.commonConstantsData.helloWorldMessage, + }); + }); + }); +}); diff --git a/vue3-demo/e2e/tests/runAll.cy.ts b/vue3-demo/e2e/tests/runAll.cy.ts deleted file mode 100644 index 38320a72d9e..00000000000 --- a/vue3-demo/e2e/tests/runAll.cy.ts +++ /dev/null @@ -1,2 +0,0 @@ -import './commonChecks.cy'; -import './layoutChecks.cy'; diff --git a/vue3-demo/e2e/tests/runAll.spec.ts b/vue3-demo/e2e/tests/runAll.spec.ts new file mode 100644 index 00000000000..8d649cd56c4 --- /dev/null +++ b/vue3-demo/e2e/tests/runAll.spec.ts @@ -0,0 +1 @@ +// Removed aggregator imports to avoid Playwright duplicate/recursive test loading. diff --git a/vue3-demo/package.json b/vue3-demo/package.json index a7f429bcc98..b52c329d730 100644 --- a/vue3-demo/package.json +++ b/vue3-demo/package.json @@ -7,9 +7,11 @@ "build": "pnpm --filter vue3-demo_* --parallel build", "serve": "pnpm --filter vue3-demo_* --parallel serve", "clean": "pnpm --filter vue3-demo_* --parallel clean", - "e2e:ci": "pnpm start & wait-on http-get://localhost:3001/ && npx cypress run --config-file ../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/tests/runAll.cy.ts\" --browser=chrome" + "test:e2e": "pnpm exec playwright test", + "test:e2e:ui": "pnpm exec playwright test --ui", + "e2e:ci": "pnpm exec playwright test --reporter=line" }, "devDependencies": { - "wait-on": "7.2.0" + "@playwright/test": "^1.54.2" } } diff --git a/vue3-demo/playwright.config.ts b/vue3-demo/playwright.config.ts new file mode 100644 index 00000000000..08870ad3703 --- /dev/null +++ b/vue3-demo/playwright.config.ts @@ -0,0 +1,37 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e/tests', + testMatch: '**/*.spec.ts', + expect: { timeout: 15_000 }, + fullyParallel: true, + retries: process.env.CI ? 1 : 0, + use: { + baseURL: 'http://localhost:3001', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + }, + webServer: [ + { + command: 'pnpm --filter vue3-demo_home start', + cwd: __dirname, + port: 3002, + reuseExistingServer: !process.env.CI, + timeout: 240_000, + }, + { + command: 'pnpm --filter vue3-demo_layout start', + cwd: __dirname, + port: 3001, + reuseExistingServer: !process.env.CI, + timeout: 240_000, + }, + ], + projects: [ + { + name: 'Chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], +});