diff --git a/.drone.yml b/.drone.yml index ac751937..55e0ca47 100644 --- a/.drone.yml +++ b/.drone.yml @@ -386,5 +386,3 @@ name: cloud_access_policy_token --- kind: signature hmac: 198b7c7d2c94fc5698b22a722e7748181990207755cf1778b2290137e262518c - -... diff --git a/.github/workflows/daily-e2e-tests.yml b/.github/workflows/daily-e2e-tests.yml index 037ea5e0..a3620844 100644 --- a/.github/workflows/daily-e2e-tests.yml +++ b/.github/workflows/daily-e2e-tests.yml @@ -21,18 +21,21 @@ jobs: - 9.3.16 - 9.4.13 - 9.5.7 - - 10.0.2 - - # NOTE: don't run on > 10.0.3 until this issue is fixed. It appears that something was changed - # with the plugin-proxy that caused it to start throwing HTTP 502s from time to time - # https://raintank-corp.slack.com/archives/C01C4K8DETW/p1692279329797149 + - 10.0.11 + - 10.1.7 + # TODO: fix issues with running e2e tests against Grafana v10.2.x and v10.3.x + # - 10.2.4 # - latest fail-fast: false uses: ./.github/workflows/e2e-tests.yml with: grafana-image-tag: ${{ matrix.grafana-image-tag }} run-expensive-tests: true - browsers: "chromium firefox webkit" + # TODO: fix issues with some tests on firefox and webkit + # example CI build with firefox/webkit failing tests + # https://github.com/grafana/oncall/actions/runs/8022194346/job/21915964672#step:19:905 + # browsers: "chromium firefox webkit" + browsers: "chromium" secrets: inherit post-status-to-slack: @@ -40,19 +43,22 @@ jobs: needs: end-to-end-tests if: always() steps: + # Useful references + # https://stackoverflow.com/questions/59073850/github-actions-get-url-of-test-build + # https://github.com/orgs/community/discussions/26822#discussioncomment-3305794 + # - uses: slackapi/slack-github-action@v1.24.0 with: - channel-id: irm-amixr-flux + channel-id: gops-oncall-dev # yamllint disable rule:line-length payload: | { - "text": "Daily e2e tests build result: ${{ job.status }}\n${{ github.event.pull_request.html_url || github.event.head_commit.url }}", "blocks": [ { "type": "section", "text": { "type": "mrkdwn", - "text": "Daily e2e tests build result: ${{ job.status }}\n${{ github.event.pull_request.html_url || github.event.head_commit.url }}" + "text": "Daily e2e tests build result: ${{ needs.end-to-end-tests.result == 'success' && ':check:' || ':alert:' }}\n${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" } } ] diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 4c4b3737..cf38e2d5 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -37,6 +37,15 @@ jobs: - name: Checkout uses: actions/checkout@v3 + # TODO: re-enable this when we get the docker build build-context caching working.. see other TODO comment below + # - uses: actions/setup-python@v4 + # with: + # python-version: "3.11.4" + # cache: "pip" + # cache-dependency-path: | + # engine/requirements.txt + # engine/requirements-dev.txt + - name: Collect Workflow Telemetry uses: runforesight/workflow-telemetry-action@v1 with: @@ -90,6 +99,16 @@ jobs: push: false tags: oncall/engine:latest outputs: type=docker,dest=/tmp/oncall-engine.tar + # TODO: figure out how to get this to work.. this will substantially speed up building our docker image here + # because right now most time is spent building wheels for python dependencies + # (even though they rarely change).. this portion "should" work however I haven't yet figured out how to + # get the cache bind mount in engine/Dockerfile to work optionally (ie. when we don't specify + # the --build-context flag to docker build.. otherwise it fails if pip_cache is not available) + # + # references + # https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/reference.md#run---mounttypecache + # https://stackoverflow.com/a/71846527 + # build-contexts: pip_cache=/home/runner/.cache/pip - name: Load engine Docker image on the nodes of the cluster run: kind load image-archive --name=chart-testing /tmp/oncall-engine.tar @@ -119,7 +138,7 @@ jobs: uses: actions/cache@v3 with: path: "~/.cache/ms-playwright" - key: ${{ runner.os }}-playwright-${{ env.PLAYWRIGHT_VERSION }}-chromium-firefox-webkit + key: ${{ runner.os }}-playwright-${{ env.PLAYWRIGHT_VERSION }}-${{ inputs.browsers }} # For the next two steps, use the binary directly from node_modules/.bin as opposed to npx playwright # due to this bug (https://github.com/microsoft/playwright/issues/13188) @@ -206,6 +225,6 @@ jobs: - uses: actions/upload-artifact@v3 if: failure() with: - name: playwright-report + name: playwright-report-${{ inputs.grafana-image-tag }} path: ./grafana-plugin/playwright-report/ retention-days: 30 diff --git a/.github/workflows/linting-and-tests.yml b/.github/workflows/linting-and-tests.yml index 9306db4d..0136f58e 100644 --- a/.github/workflows/linting-and-tests.yml +++ b/.github/workflows/linting-and-tests.yml @@ -319,10 +319,9 @@ jobs: name: End to end tests uses: ./.github/workflows/e2e-tests.yml with: - # NOTE: don't run on > 10.0.3 until this issue is fixed. It appears that something was changed - # with the plugin-proxy that caused it to start throwing HTTP 502s from time to time - # https://raintank-corp.slack.com/archives/C01C4K8DETW/p1692279329797149 - grafana-image-tag: 10.0.2 + # TODO: fix issues with running e2e tests against Grafana v10.2.x and v10.3.x + grafana-image-tag: 10.1.7 + # grafana-image-tag: 10.3.3 run-expensive-tests: false browsers: "chromium" secrets: inherit diff --git a/docker-compose-developer.yml b/docker-compose-developer.yml index e7189dcc..64300b4f 100644 --- a/docker-compose-developer.yml +++ b/docker-compose-developer.yml @@ -59,9 +59,6 @@ services: volumes: - ./grafana-plugin:/etc/app - node_modules_dev:/etc/app/node_modules - # https://stackoverflow.com/a/60456034 - # see the explaination above that uses the $ENTERPRISE_ENGINE env var - - ${ENTERPRISE_FRONTEND:-/dev/null}:${ENTERPRISE_FRONTEND_VOLUME_MOUNT_DEST_DIR:-/tmp/empty:ro} profiles: - oncall_ui diff --git a/engine/Dockerfile b/engine/Dockerfile index e1b90cc5..4910c8ae 100644 --- a/engine/Dockerfile +++ b/engine/Dockerfile @@ -13,10 +13,14 @@ RUN apk add bash \ mariadb-connector-c-dev \ libffi-dev \ git \ - postgresql-dev + postgresql-dev WORKDIR /etc/app COPY ./requirements.txt ./ + +# TODO: figure out how to get this to work.. see comment in .github/workflows/e2e-tests.yml +# https://stackoverflow.com/a/71846527 +# RUN --mount=type=cache,target=/root/.cache/pip,from=pip_cache pip install -r requirements.txt RUN pip install -r requirements.txt # we intentionally have two COPY commands, this is to have the requirements.txt in a separate build step @@ -47,9 +51,15 @@ ENV prometheus_multiproc_dir "/tmp/prometheus_django_metrics" FROM base AS dev RUN apk add sqlite mysql-client postgresql-client +# TODO: figure out how to get this to work.. see comment in .github/workflows/e2e-tests.yml +# https://stackoverflow.com/a/71846527 +# RUN --mount=type=cache,target=/root/.cache/pip,from=pip_cache pip install -r requirements-dev.txt RUN pip install -r requirements-dev.txt FROM dev AS dev-enterprise +# TODO: figure out how to get this to work.. see comment in .github/workflows/e2e-tests.yml +# https://stackoverflow.com/a/71846527 +# RUN --mount=type=cache,target=/root/.cache/pip,from=pip_cache pip install -r requirements-enterprise-docker.txt RUN pip install -r requirements-enterprise-docker.txt FROM base AS prod diff --git a/grafana-plugin/e2e-tests/fixtures.ts b/grafana-plugin/e2e-tests/fixtures.ts index 12087944..fde536a9 100644 --- a/grafana-plugin/e2e-tests/fixtures.ts +++ b/grafana-plugin/e2e-tests/fixtures.ts @@ -1,4 +1,4 @@ -import { test as base, Browser, Page, TestInfo } from '@playwright/test'; +import { test as base, Browser, Fixtures, Page, TestInfo } from '@playwright/test'; import { VIEWER_USER_STORAGE_STATE, EDITOR_USER_STORAGE_STATE, ADMIN_USER_STORAGE_STATE } from '../playwright.config'; @@ -7,8 +7,6 @@ import { GRAFANA_ADMIN_USERNAME, GRAFANA_EDITOR_USERNAME, GRAFANA_VIEWER_USERNAM import * as fs from 'fs'; import * as path from 'path'; - - export class BaseRolePage { page: Page; userName: string; @@ -32,11 +30,14 @@ class AdminRolePage extends BaseRolePage { userName = GRAFANA_ADMIN_USERNAME; } -type Fixtures = { +interface TestFixtures extends Fixtures { + // currentGrafanaVersion: string; viewerRolePage: ViewerRolePage; editorRolePage: EditorRolePage; adminRolePage: AdminRolePage; -}; +} + +interface WorkerFixtures extends Fixtures {} /** * NOTE: currently videos are not generated automatically because of how we generate a browserContext within our @@ -77,11 +78,16 @@ const _recordTestVideo = async ( }; export * from '@playwright/test'; -export const test = base.extend({ +export const test = base.extend({ viewerRolePage: ({ browser }, use, testInfo) => _recordTestVideo(browser, use, testInfo, VIEWER_USER_STORAGE_STATE, ViewerRolePage), editorRolePage: async ({ browser }, use, testInfo) => _recordTestVideo(browser, use, testInfo, EDITOR_USER_STORAGE_STATE, EditorRolePage), adminRolePage: async ({ browser }, use, testInfo) => _recordTestVideo(browser, use, testInfo, ADMIN_USER_STORAGE_STATE, AdminRolePage), + /** + * add back this fixture once this bug is fixed + * https://github.com/microsoft/playwright/issues/29608 + */ + // currentGrafanaVersion: ({}, use) => use('9.0.0'), }); diff --git a/grafana-plugin/e2e-tests/globalSetup.ts b/grafana-plugin/e2e-tests/globalSetup.ts index dd10d953..0bba7dc6 100644 --- a/grafana-plugin/e2e-tests/globalSetup.ts +++ b/grafana-plugin/e2e-tests/globalSetup.ts @@ -12,7 +12,7 @@ import { getOnCallApiUrl } from 'utils/consts'; import { VIEWER_USER_STORAGE_STATE, EDITOR_USER_STORAGE_STATE, ADMIN_USER_STORAGE_STATE } from '../playwright.config'; -import GrafanaAPIClient from './utils/clients/grafana'; +import grafanaApiClient from './utils/clients/grafana'; import { GRAFANA_ADMIN_PASSWORD, GRAFANA_ADMIN_USERNAME, @@ -26,8 +26,6 @@ import { import { clickButton, getInputByName } from './utils/forms'; import { goToGrafanaPage } from './utils/navigation'; -const grafanaApiClient = new GrafanaAPIClient(GRAFANA_ADMIN_USERNAME, GRAFANA_ADMIN_PASSWORD); - enum OrgRole { None = 'None', Viewer = 'Viewer', @@ -154,5 +152,18 @@ setup('Configure Grafana OnCall plugin', async ({ request }, { config }) => { await configureOnCallPlugin(adminPage); } + /** + * determine the current Grafana version of the stack in question and set it such that it can be used in the tests + * to conditionally skip certain tests. + * + * According to the Playwright docs, the best way to set config like this on the fly, is to set values + * on process.env https://playwright.dev/docs/test-global-setup-teardown#example + * + * TODO: when this bug is fixed in playwright https://github.com/microsoft/playwright/issues/29608 + * move this to the currentGrafanaVersion fixture + */ + const currentGrafanaVersion = await grafanaApiClient.getGrafanaVersion(adminAuthedRequest); + process.env.CURRENT_GRAFANA_VERSION = currentGrafanaVersion; + await adminBrowserContext.close(); }); diff --git a/grafana-plugin/e2e-tests/insights/insights.test.ts b/grafana-plugin/e2e-tests/insights/insights.test.ts index 6700b684..e9655de4 100644 --- a/grafana-plugin/e2e-tests/insights/insights.test.ts +++ b/grafana-plugin/e2e-tests/insights/insights.test.ts @@ -1,3 +1,4 @@ +import semver from 'semver'; import { test, expect } from '../fixtures'; import { resolveFiringAlert } from '../utils/alertGroup'; import { createEscalationChain, EscalationStep } from '../utils/escalationChain'; @@ -6,6 +7,18 @@ import { createIntegrationAndSendDemoAlert } from '../utils/integrations'; import { goToGrafanaPage, goToOnCallPage } from '../utils/navigation'; import { createOnCallSchedule } from '../utils/schedule'; +/** + * Insights is dependent on Scenes which were only added in Grafana 10.0.0 + * https://grafana.com/docs/grafana/latest/whatsnew/whats-new-in-v10-0/#scenes + * TODO: remove the process.env.CURRENT_GRAFANA_VERSION portion + * and use the currentGrafanaVersion fixture once this bugged is patched in playwright + * https://github.com/microsoft/playwright/issues/29608 + */ +test.skip( + () => semver.lt(process.env.CURRENT_GRAFANA_VERSION, '10.0.0'), + 'Insights is only available in Grafana 10.0.0 and above' +); + test.describe('Insights', () => { test.beforeAll(async ({ adminRolePage: { page, userName } }) => { const DATASOURCE_NAME = 'OnCall Prometheus'; diff --git a/grafana-plugin/e2e-tests/integrations/heartbeat.test.ts b/grafana-plugin/e2e-tests/integrations/heartbeat.test.ts index 4b5737ba..f2968383 100644 --- a/grafana-plugin/e2e-tests/integrations/heartbeat.test.ts +++ b/grafana-plugin/e2e-tests/integrations/heartbeat.test.ts @@ -7,8 +7,7 @@ const HEARTBEAT_SETTINGS_FORM_TEST_ID = 'heartbeat-settings-form'; test.describe("updating an integration's heartbeat interval works", async () => { const _openHeartbeatSettingsForm = async (page: Page) => { - await page.getByTestId('integration-settings-context-menu-wrapper').getByRole('img').click(); - await page.waitForTimeout(1000); + await page.getByTestId('integration-settings-context-menu-wrapper').click(); await page.getByTestId('integration-heartbeat-settings').click(); }; diff --git a/grafana-plugin/e2e-tests/integrations/maintenanceMode.test.ts b/grafana-plugin/e2e-tests/integrations/maintenanceMode.test.ts index 88d0c76c..b78e3d22 100644 --- a/grafana-plugin/e2e-tests/integrations/maintenanceMode.test.ts +++ b/grafana-plugin/e2e-tests/integrations/maintenanceMode.test.ts @@ -81,11 +81,7 @@ test.describe('maintenance mode works', () => { await page.getByText('Stop Maintenance').click(); // in the modal popup, confirm that we want to stop it - await clickButton({ - page, - buttonText: 'Stop', - startingLocator: page.getByRole('dialog'), - }); + await page.locator('button >> text=Stop').click(); await getRemainingTimeTooltip(page).waitFor({ state: 'hidden' }); }; diff --git a/grafana-plugin/e2e-tests/utils/clients/grafana.ts b/grafana-plugin/e2e-tests/utils/clients/grafana.ts index a9a2d0fd..862d88fb 100644 --- a/grafana-plugin/e2e-tests/utils/clients/grafana.ts +++ b/grafana-plugin/e2e-tests/utils/clients/grafana.ts @@ -1,7 +1,7 @@ import { OrgRole } from '@grafana/data'; import { expect, APIRequestContext } from '@playwright/test'; -import { BASE_URL } from '../constants'; +import { BASE_URL, GRAFANA_ADMIN_PASSWORD, GRAFANA_ADMIN_USERNAME } from '../constants'; type UsersLookupResponse = { id: number; @@ -11,6 +11,12 @@ type CreateUserResponse = { id: number; }; +type GetSettingsResponse = { + buildInfo: { + version: string; + }; +}; + class GrafanaApiException extends Error { constructor(message: string) { super(message); @@ -18,7 +24,7 @@ class GrafanaApiException extends Error { } } -export default class GrafanaAPIClient { +class GrafanaAPIClient { userName: string; password: string; @@ -113,4 +119,16 @@ export default class GrafanaAPIClient { }); expect(res.ok()).toBeTruthy(); }; + + // https://grafana.com/docs/grafana/latest/developers/http_api/other/#get-settings + getGrafanaVersion = async (request: APIRequestContext): Promise => { + const res = await request.get(`${BASE_URL}/api/frontend/settings`); + expect(res.ok()).toBeTruthy(); + + const data: GetSettingsResponse = await res.json(); + return data.buildInfo.version; + }; } + +const grafanaAPIClient = new GrafanaAPIClient(GRAFANA_ADMIN_USERNAME, GRAFANA_ADMIN_PASSWORD); +export default grafanaAPIClient; diff --git a/grafana-plugin/e2e-tests/utils/modals.ts b/grafana-plugin/e2e-tests/utils/modals.ts index 9b6277f6..443aae24 100644 --- a/grafana-plugin/e2e-tests/utils/modals.ts +++ b/grafana-plugin/e2e-tests/utils/modals.ts @@ -1,5 +1,17 @@ import { Page } from '@playwright/test'; -// close the currently opened modal +/** + * in Grafana v9 the aria-label is "Close dialog" + * in Grafana v10.0 the aria-label is "Close dialogue" + * in Grafana v10.1 the aria-label is "Close" + * 🙄 + * + * https://playwright.dev/docs/other-locators#css-elements-matching-one-of-the-conditions + */ +const POSSIBLE_CLOSE_MODAL_BUTTON_DIALOGUE_ARIA_LABELS = ['Close dialog', 'Close dialogue', 'Close']; +const CLOSE_MODAL_BUTTON_ARIA_LABEL_SELECTOR = POSSIBLE_CLOSE_MODAL_BUTTON_DIALOGUE_ARIA_LABELS.map( + (ariaLabel) => `button[aria-label="${ariaLabel}"]` +).join(', '); + export const closeModal = async (page: Page): Promise => - (await page.waitForSelector('button[aria-label="Close dialogue"]')).click(); + (await page.waitForSelector(CLOSE_MODAL_BUTTON_ARIA_LABEL_SELECTOR))?.click(); diff --git a/grafana-plugin/e2e-tests/utils/userSettings.ts b/grafana-plugin/e2e-tests/utils/userSettings.ts index a3141549..d24cdfbb 100644 --- a/grafana-plugin/e2e-tests/utils/userSettings.ts +++ b/grafana-plugin/e2e-tests/utils/userSettings.ts @@ -10,7 +10,6 @@ type NotifyBy = 'SMS' | 'Phone call'; const openUserSettingsModal = async (page: Page): Promise => { await goToOnCallPage(page, 'users'); await clickButton({ page, buttonText: 'View my profile' }); - await page.locator('text=To edit user details such as Username, email, and role').waitFor({ state: 'visible' }); }; const getForgetPhoneNumberButton = (page: Page): Locator => page.locator('button >> text=Forget Phone Number'); @@ -55,11 +54,9 @@ export const verifyUserPhoneNumber = async (page: Page): Promise => { * and then gets the notification type dropdown */ const getFirstDefaultNotificationSettingTypeDropdown = async (page: Page): Promise => { - const defaultNotificationSettingsList = page.locator('ul[class*="Timeline-module"] >> nth=0'); - await defaultNotificationSettingsList.waitFor({ state: 'visible' }); - - const firstDefaultNotificationSettingRow = defaultNotificationSettingsList.locator('li >> nth=0'); - await firstDefaultNotificationSettingRow.waitFor({ state: 'visible' }); + const firstDefaultNotificationSettingRow = page + .getByTestId('default-personal-notification-settings') + .locator('li >> nth=0'); // get the notification type dropdown specifically return firstDefaultNotificationSettingRow.locator('div[class*="input-wrapper"] >> nth=1'); @@ -69,18 +66,6 @@ export const configureUserNotificationSettings = async (page: Page, notifyBy: No // open the user settings modal await openUserSettingsModal(page); - /** - * see if we already have a default notification setting - * if we don't click the Add Notification Step button and add one - * otherwise update the existing one - */ - const defaultNotificationsAddNotificationStepButton = page.locator( - 'div[class*="PersonalNotificationSettings"] >> nth=0 text=Add Notification Step' - ); - if (await defaultNotificationsAddNotificationStepButton.isVisible()) { - await defaultNotificationsAddNotificationStepButton.click(); - } - // select our notification type const firstDefaultNotificationTypeDropdopdown = await getFirstDefaultNotificationSettingTypeDropdown(page); await selectDropdownValue({ diff --git a/grafana-plugin/package.json b/grafana-plugin/package.json index 727c440b..6417ea7e 100644 --- a/grafana-plugin/package.json +++ b/grafana-plugin/package.json @@ -49,7 +49,7 @@ "@grafana/eslint-config": "^6.0.0", "@grafana/tsconfig": "^1.2.0-rc1", "@jest/globals": "^27.5.1", - "@playwright/test": "^1.39.0", + "@playwright/test": "^1.41.0", "@swc/core": "^1.3.90", "@swc/helpers": "^0.5.0", "@swc/jest": "^0.2.26", @@ -102,6 +102,7 @@ "replace-in-file-webpack-plugin": "^1.0.6", "sass": "1.63.2", "sass-loader": "13.3.1", + "semver": "^7.6.0", "style-loader": "3.3.3", "stylelint-config-prettier": "^9.0.3", "stylelint-prettier": "^2.0.0", diff --git a/grafana-plugin/src/containers/UserSettings/parts/tabs/NotificationSettingsTab.tsx b/grafana-plugin/src/containers/UserSettings/parts/tabs/NotificationSettingsTab.tsx index ad3a434d..49fa36bb 100644 --- a/grafana-plugin/src/containers/UserSettings/parts/tabs/NotificationSettingsTab.tsx +++ b/grafana-plugin/src/containers/UserSettings/parts/tabs/NotificationSettingsTab.tsx @@ -17,8 +17,12 @@ export const NotificationSettingsTab = (props: { id: User['pk'] }) => { return (
- - +
+ +
+
+ +
); }; diff --git a/grafana-plugin/yarn.lock b/grafana-plugin/yarn.lock index 53f43eec..b96f245d 100644 --- a/grafana-plugin/yarn.lock +++ b/grafana-plugin/yarn.lock @@ -1650,13 +1650,6 @@ "@types/node" "*" jest-mock "^29.7.0" -"@jest/expect-utils@^29.3.1": - version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.3.1.tgz#531f737039e9b9e27c42449798acb5bba01935b6" - integrity sha512-wlrznINZI5sMjwvUoLVk617ll/UYfGIZNxmbU+Pa7wmkL4vYzhV9R2pwVqUh4NWWuLQWkI8+8mOkxs//prKQ3g== - dependencies: - jest-get-type "^29.2.0" - "@jest/expect-utils@^29.7.0": version "29.7.0" resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" @@ -2236,12 +2229,12 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@playwright/test@^1.39.0": - version "1.39.0" - resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.39.0.tgz#d10ba8e38e44104499e25001945f07faa9fa91cd" - integrity sha512-3u1iFqgzl7zr004bGPYiN/5EZpRUSFddQBra8Rqll5N0/vfpqlP9I9EXqAoGacuAbX6c9Ulg/Cjqglp5VkK6UQ== +"@playwright/test@^1.41.0": + version "1.41.2" + resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.41.2.tgz#bd9db40177f8fd442e16e14e0389d23751cdfc54" + integrity sha512-qQB9h7KbibJzrDpkXkYvsmiDJK14FULCCZgEcoe2AvFAS64oCirWTwzTlAYEbKaRxWs5TFesE1Na6izMv3HfGg== dependencies: - playwright "1.39.0" + playwright "1.41.2" "@polka/url@^1.0.0-next.20": version "1.0.0-next.21" @@ -2662,79 +2655,79 @@ remark "^13.0.0" unist-util-find-all-after "^3.0.2" -"@swc/core-darwin-arm64@1.3.107": - version "1.3.107" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.107.tgz#abac4c19816751de1dcbaab456710ca55e580782" - integrity sha512-47tD/5vSXWxPd0j/ZllyQUg4bqalbQTsmqSw0J4dDdS82MWqCAwUErUrAZPRjBkjNQ6Kmrf5rpCWaGTtPw+ngw== +"@swc/core-darwin-arm64@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.2.tgz#3b5677c5b9c5a7a91d953b96cd603c94064e2835" + integrity sha512-1uSdAn1MRK5C1m/TvLZ2RDvr0zLvochgrZ2xL+lRzugLlCTlSA+Q4TWtrZaOz+vnnFVliCpw7c7qu0JouhgQIw== -"@swc/core-darwin-x64@1.3.107": - version "1.3.107" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.107.tgz#4c0df233ebf293429cd2f10224d6a870a5cc019e" - integrity sha512-hwiLJ2ulNkBGAh1m1eTfeY1417OAYbRGcb/iGsJ+LuVLvKAhU/itzsl535CvcwAlt2LayeCFfcI8gdeOLeZa9A== +"@swc/core-darwin-x64@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.4.2.tgz#bbc8bbf420389b12541151255a50f319cc17ef96" + integrity sha512-TYD28+dCQKeuxxcy7gLJUCFLqrwDZnHtC2z7cdeGfZpbI2mbfppfTf2wUPzqZk3gEC96zHd4Yr37V3Tvzar+lQ== -"@swc/core-linux-arm-gnueabihf@1.3.107": - version "1.3.107" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.107.tgz#81004cca4c7554007ea5ac51e276147e958e3e9f" - integrity sha512-I2wzcC0KXqh0OwymCmYwNRgZ9nxX7DWnOOStJXV3pS0uB83TXAkmqd7wvMBuIl9qu4Hfomi9aDM7IlEEn9tumQ== +"@swc/core-linux-arm-gnueabihf@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.2.tgz#aa9a18f130820717df08c9dd882043fc47e8d35a" + integrity sha512-Eyqipf7ZPGj0vplKHo8JUOoU1un2sg5PjJMpEesX0k+6HKE2T8pdyeyXODN0YTFqzndSa/J43EEPXm+rHAsLFQ== -"@swc/core-linux-arm64-gnu@1.3.107": - version "1.3.107" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.107.tgz#c01d75df662067fb7805bfdfa66c2f17f2b3185f" - integrity sha512-HWgnn7JORYlOYnGsdunpSF8A+BCZKPLzLtEUA27/M/ZuANcMZabKL9Zurt7XQXq888uJFAt98Gy+59PU90aHKg== +"@swc/core-linux-arm64-gnu@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.2.tgz#5ef1de0ca7cc3a034aa3a1c3c1794b78e6ca207e" + integrity sha512-wZn02DH8VYPv3FC0ub4my52Rttsus/rFw+UUfzdb3tHMHXB66LqN+rR0ssIOZrH6K+VLN6qpTw9VizjyoH0BxA== -"@swc/core-linux-arm64-musl@1.3.107": - version "1.3.107" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.107.tgz#5e0c4fe3fcc49a7bb77ffafa680622e53c982e0a" - integrity sha512-vfPF74cWfAm8hyhS8yvYI94ucMHIo8xIYU+oFOW9uvDlGQRgnUf/6DEVbLyt/3yfX5723Ln57U8uiMALbX5Pyw== +"@swc/core-linux-arm64-musl@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.2.tgz#5dfd2a8c0483770a307de0ccb6019a082ff0d902" + integrity sha512-3G0D5z9hUj9bXNcwmA1eGiFTwe5rWkuL3DsoviTj73TKLpk7u64ND0XjEfO0huVv4vVu9H1jodrKb7nvln/dlw== -"@swc/core-linux-x64-gnu@1.3.107": - version "1.3.107" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.107.tgz#afb4a656a1717170b2c8b76c9b2349b5077630b4" - integrity sha512-uBVNhIg0ip8rH9OnOsCARUFZ3Mq3tbPHxtmWk9uAa5u8jQwGWeBx5+nTHpDOVd3YxKb6+5xDEI/edeeLpha/9g== +"@swc/core-linux-x64-gnu@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.2.tgz#314aa76b7c1208e315e3156ab57b7188fb605bc2" + integrity sha512-LFxn9U8cjmYHw3jrdPNqPAkBGglKE3tCZ8rA7hYyp0BFxuo7L2ZcEnPm4RFpmSCCsExFH+LEJWuMGgWERoktvg== -"@swc/core-linux-x64-musl@1.3.107": - version "1.3.107" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.107.tgz#3f9bce2fe13691be39fddc39bba8558fe6308823" - integrity sha512-mvACkUvzSIB12q1H5JtabWATbk3AG+pQgXEN95AmEX2ZA5gbP9+B+mijsg7Sd/3tboHr7ZHLz/q3SHTvdFJrEw== +"@swc/core-linux-x64-musl@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.2.tgz#b2b226657f6a8d48f561cb3dbe2d414cfbafe467" + integrity sha512-dp0fAmreeVVYTUcb4u9njTPrYzKnbIH0EhH2qvC9GOYNNREUu2GezSIDgonjOXkHiTCvopG4xU7y56XtXj4VrQ== -"@swc/core-win32-arm64-msvc@1.3.107": - version "1.3.107" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.107.tgz#5b485e9ce2de6f27ce2fbc1ba8c0b4e98009318d" - integrity sha512-J3P14Ngy/1qtapzbguEH41kY109t6DFxfbK4Ntz9dOWNuVY3o9/RTB841ctnJk0ZHEG+BjfCJjsD2n8H5HcaOA== +"@swc/core-win32-arm64-msvc@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.2.tgz#582f79fa328ce0f426ab8313b3d881e7315fab2f" + integrity sha512-HlVIiLMQkzthAdqMslQhDkoXJ5+AOLUSTV6fm6shFKZKqc/9cJvr4S8UveNERL9zUficA36yM3bbfo36McwnvQ== -"@swc/core-win32-ia32-msvc@1.3.107": - version "1.3.107" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.107.tgz#1bbe3ce6784b3e4203bf89443c33411c27389b56" - integrity sha512-ZBUtgyjTHlz8TPJh7kfwwwFma+ktr6OccB1oXC8fMSopD0AxVnQasgun3l3099wIsAB9eEsJDQ/3lDkOLs1gBA== +"@swc/core-win32-ia32-msvc@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.2.tgz#15c8289e1c18857f79b9b888100ab1f871bf58f6" + integrity sha512-WCF8faPGjCl4oIgugkp+kL9nl3nUATlzKXCEGFowMEmVVCFM0GsqlmGdPp1pjZoWc9tpYanoXQDnp5IvlDSLhA== -"@swc/core-win32-x64-msvc@1.3.107": - version "1.3.107" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.107.tgz#c89640b16504ddda1f1faf573a7ed7193dc87485" - integrity sha512-Eyzo2XRqWOxqhE1gk9h7LWmUf4Bp4Xn2Ttb0ayAXFp6YSTxQIThXcT9kipXZqcpxcmDwoq8iWbbf2P8XL743EA== +"@swc/core-win32-x64-msvc@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.2.tgz#c999ca7b68124d058b40a1431cdd6f56779670d5" + integrity sha512-oV71rwiSpA5xre2C5570BhCsg1HF97SNLsZ/12xv7zayGzqr3yvFALFJN8tHKpqUdCB4FGPjoP3JFdV3i+1wUw== "@swc/core@^1.3.90": - version "1.3.107" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.107.tgz#081697224ec3bffa63c33209d242e4f0b2c49e78" - integrity sha512-zKhqDyFcTsyLIYK1iEmavljZnf4CCor5pF52UzLAz4B6Nu/4GLU+2LQVAf+oRHjusG39PTPjd2AlRT3f3QWfsQ== + version "1.4.2" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.4.2.tgz#310b0d5e93e47ca72f54150c8f9efcb434c39b17" + integrity sha512-vWgY07R/eqj1/a0vsRKLI9o9klGZfpLNOVEnrv4nrccxBgYPjcf22IWwAoaBJ+wpA7Q4fVjCUM8lP0m01dpxcg== dependencies: - "@swc/counter" "^0.1.1" + "@swc/counter" "^0.1.2" "@swc/types" "^0.1.5" optionalDependencies: - "@swc/core-darwin-arm64" "1.3.107" - "@swc/core-darwin-x64" "1.3.107" - "@swc/core-linux-arm-gnueabihf" "1.3.107" - "@swc/core-linux-arm64-gnu" "1.3.107" - "@swc/core-linux-arm64-musl" "1.3.107" - "@swc/core-linux-x64-gnu" "1.3.107" - "@swc/core-linux-x64-musl" "1.3.107" - "@swc/core-win32-arm64-msvc" "1.3.107" - "@swc/core-win32-ia32-msvc" "1.3.107" - "@swc/core-win32-x64-msvc" "1.3.107" + "@swc/core-darwin-arm64" "1.4.2" + "@swc/core-darwin-x64" "1.4.2" + "@swc/core-linux-arm-gnueabihf" "1.4.2" + "@swc/core-linux-arm64-gnu" "1.4.2" + "@swc/core-linux-arm64-musl" "1.4.2" + "@swc/core-linux-x64-gnu" "1.4.2" + "@swc/core-linux-x64-musl" "1.4.2" + "@swc/core-win32-arm64-msvc" "1.4.2" + "@swc/core-win32-ia32-msvc" "1.4.2" + "@swc/core-win32-x64-msvc" "1.4.2" -"@swc/counter@^0.1.1": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.2.tgz#bf06d0770e47c6f1102270b744e17b934586985e" - integrity sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw== +"@swc/counter@^0.1.2", "@swc/counter@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" + integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== "@swc/helpers@^0.5.0": version "0.5.2" @@ -2744,11 +2737,12 @@ tslib "^2.4.0" "@swc/jest@^0.2.26": - version "0.2.34" - resolved "https://registry.yarnpkg.com/@swc/jest/-/jest-0.2.34.tgz#1d459171887b11855ec01d73c647f2e9ecaffd7b" - integrity sha512-MrS4m3yHFfnkYjxr3eqxshWi6fVhPViHQsb6XfiTO81niwEqYXeR58YhGJee6R0bfQHC69cv5OJ9+dYTYaYKRg== + version "0.2.36" + resolved "https://registry.yarnpkg.com/@swc/jest/-/jest-0.2.36.tgz#2797450a30d28b471997a17e901ccad946fe693e" + integrity sha512-8X80dp81ugxs4a11z1ka43FPhP+/e+mJNXJSxiNYk8gIX/jPBtY4gQTrKu/KIoco8bzKuPI5lUxjfLiGsfvnlw== dependencies: "@jest/create-cache-key-function" "^29.7.0" + "@swc/counter" "^0.1.3" jsonc-parser "^3.2.0" "@swc/types@^0.1.5": @@ -3000,15 +2994,7 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@*": - version "29.2.2" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.2.2.tgz#874e7dc6702fa6a3fe6107792aa98636dcc480b4" - integrity sha512-og1wAmdxKoS71K2ZwSVqWPX6OVn3ihZ6ZT2qvZvZQm90lJVDyXIjYcu4Khx2CNIeaFv12rOU/YObOsI3VOkzog== - dependencies: - expect "^29.0.0" - pretty-format "^29.0.0" - -"@types/jest@^29.5.0": +"@types/jest@*", "@types/jest@^29.5.0": version "29.5.12" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544" integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== @@ -3142,9 +3128,9 @@ "@types/react" "*" "@types/react-dom@^18.0.0": - version "18.2.18" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.18.tgz#16946e6cd43971256d874bc3d0a72074bb8571dd" - integrity sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw== + version "18.2.19" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.19.tgz#b84b7c30c635a6c26c6a6dfbb599b2da9788be58" + integrity sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA== dependencies: "@types/react" "*" @@ -4508,7 +4494,22 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3: +"chokidar@>=3.0.0 <4.0.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -5421,11 +5422,6 @@ diff-sequences@^27.5.1: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== -diff-sequences@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.3.1.tgz#104b5b95fe725932421a9c6e5b4bef84c3f2249e" - integrity sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ== - diff-sequences@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" @@ -6271,18 +6267,7 @@ expect@^27.5.1: jest-matcher-utils "^27.5.1" jest-message-util "^27.5.1" -expect@^29.0.0: - version "29.3.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.3.1.tgz#92877aad3f7deefc2e3f6430dd195b92295554a6" - integrity sha512-gGb1yTgU30Q0O/tQq+z30KBWv24ApkMgFUpvKBkyLUBL68Wv8dHdJxTBZFl/iT8K/bqDHvUYRH6IIN3rToopPA== - dependencies: - "@jest/expect-utils" "^29.3.1" - jest-get-type "^29.2.0" - jest-matcher-utils "^29.3.1" - jest-message-util "^29.3.1" - jest-util "^29.3.1" - -expect@^29.7.0: +expect@^29.0.0, expect@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== @@ -7266,9 +7251,9 @@ immutable@4.3.1: integrity sha512-lj9cnmB/kVS0QHsJnYKD1uo3o39nrbKxszjnqS9Fr6NB7bZzW45U6WSGBPKXDL/CvDKqDNPA4r3DoDQ8GTxo2A== immutable@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" - integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== + version "4.3.5" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" + integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw== import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" @@ -8015,16 +8000,6 @@ jest-diff@^27.5.1: jest-get-type "^27.5.1" pretty-format "^27.5.1" -jest-diff@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.3.1.tgz#d8215b72fed8f1e647aed2cae6c752a89e757527" - integrity sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.3.1" - jest-get-type "^29.2.0" - pretty-format "^29.3.1" - jest-diff@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" @@ -8084,11 +8059,6 @@ jest-get-type@^27.5.1: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== -jest-get-type@^29.2.0: - version "29.2.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.2.0.tgz#726646f927ef61d583a3b3adb1ab13f3a5036408" - integrity sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA== - jest-get-type@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" @@ -8131,16 +8101,6 @@ jest-matcher-utils@^27.5.1: jest-get-type "^27.5.1" pretty-format "^27.5.1" -jest-matcher-utils@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.3.1.tgz#6e7f53512f80e817dfa148672bd2d5d04914a572" - integrity sha512-fkRMZUAScup3txIKfMe3AIZZmPEjWEdsPJFK3AIy5qRohWqQFg1qrmKfYXR9qEkNc7OdAu2N4KPHibEmy4HPeQ== - dependencies: - chalk "^4.0.0" - jest-diff "^29.3.1" - jest-get-type "^29.2.0" - pretty-format "^29.3.1" - jest-matcher-utils@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" @@ -8166,21 +8126,6 @@ jest-message-util@^27.5.1: slash "^3.0.0" stack-utils "^2.0.3" -jest-message-util@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.3.1.tgz#37bc5c468dfe5120712053dd03faf0f053bd6adb" - integrity sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.3.1" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.3.1" - slash "^3.0.0" - stack-utils "^2.0.3" - jest-message-util@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" @@ -8339,7 +8284,7 @@ jest-util@^27.5.1: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-util@^29.0.0, jest-util@^29.3.1: +jest-util@^29.0.0: version "29.3.1" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.3.1.tgz#1dda51e378bbcb7e3bc9d8ab651445591ed373e1" integrity sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ== @@ -9970,17 +9915,17 @@ pkg-dir@^7.0.0: dependencies: find-up "^6.3.0" -playwright-core@1.39.0: - version "1.39.0" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.39.0.tgz#efeaea754af4fb170d11845b8da30b2323287c63" - integrity sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw== +playwright-core@1.41.2: + version "1.41.2" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.41.2.tgz#db22372c708926c697acc261f0ef8406606802d9" + integrity sha512-VaTvwCA4Y8kxEe+kfm2+uUUw5Lubf38RxF7FpBxLPmGe5sdNkSg5e3ChEigaGrX7qdqT3pt2m/98LiyvU2x6CA== -playwright@1.39.0: - version "1.39.0" - resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.39.0.tgz#184c81cd6478f8da28bcd9e60e94fcebf566e077" - integrity sha512-naE5QT11uC/Oiq0BwZ50gDmy8c8WLPRTEWuSSFVG2egBka/1qMoSqYQcROMT9zLwJ86oPofcTH2jBY/5wWOgIw== +playwright@1.41.2: + version "1.41.2" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.41.2.tgz#4e760b1c79f33d9129a8c65cc27953be6dd35042" + integrity sha512-v0bOa6H2GJChDL8pAeLa/LZC4feoAMbSQm1/jF/ySsWWoaNItvrMP7GEkvEEFyCTUYKMxjQKaTSg5up7nR6/8A== dependencies: - playwright-core "1.39.0" + playwright-core "1.41.2" optionalDependencies: fsevents "2.3.2" @@ -10186,16 +10131,7 @@ pretty-format@^27.0.2, pretty-format@^27.5.1: ansi-styles "^5.0.0" react-is "^17.0.1" -pretty-format@^29.0.0, pretty-format@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.3.1.tgz#1841cac822b02b4da8971dacb03e8a871b4722da" - integrity sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg== - dependencies: - "@jest/schemas" "^29.0.0" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -pretty-format@^29.7.0: +pretty-format@^29.0.0, pretty-format@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== @@ -11559,6 +11495,13 @@ semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== +semver@^7.6.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + sentence-case@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-2.1.1.tgz#1f6e2dda39c168bf92d13f86d4a918933f667ed4"