From 4e324a3b983bd3763ed44740a16a5d3a3cb34aa7 Mon Sep 17 00:00:00 2001 From: Duncan Watson Date: Wed, 23 Oct 2024 15:17:21 +0100 Subject: [PATCH 01/12] EES-4877 - updating performance tests to work with MSAL authentication (following removal of Identity Server 4) --- tests/performance-tests/README.md | 87 ++++++++++--------- .../src/auth/getAuthDetails.ts | 42 ++++++--- .../src/auth/refreshAuthTokens.ts | 25 +++--- .../src/auth/storeEnvironmentDetails.ts | 7 +- .../src/tests/admin/import/import.test.ts | 17 +--- .../table-tool/adminTableBuilderQuery.test.ts | 18 ++-- .../tests/healthchecks/refreshTokens.test.ts | 10 +-- .../src/tests/maintenance/cleanUp.test.ts | 9 +- .../publicTableBuilderQuery.test.ts | 13 +-- .../src/utils/adminService.ts | 2 +- .../src/utils/getOrRefreshAccessTokens.ts | 10 --- .../performance-tests/src/utils/httpClient.ts | 22 +++++ tests/performance-tests/src/utils/types.ts | 5 ++ 13 files changed, 134 insertions(+), 133 deletions(-) diff --git a/tests/performance-tests/README.md b/tests/performance-tests/README.md index 49d7fddc6ed..70ed56a6baf 100644 --- a/tests/performance-tests/README.md +++ b/tests/performance-tests/README.md @@ -1,6 +1,6 @@ # EES performance tests -The performance test suite is built using [k6](https://k6.io/) and visualised using +The performance test suite is built using [k6](https://k6.io/) and visualised using [Grafana](https://grafana.com/) and [InfluxDB](https://www.influxdata.com/). ## How it works @@ -50,11 +50,12 @@ some load, for example. npm start ``` -To stop them later, run `npm stop`. Note that this will not destroy any data. To remove any data, run `npm run stop-and-clear-data`. +To stop them later, run `npm stop`. Note that this will not destroy any data. To remove any data, +run `npm run stop-and-clear-data`. ### Compile the tests -The tests are written in Typescript so we need to transpile them to work in K6 (which as an aside is +The tests are written in Typescript so we need to transpile them to work in K6 (which as an aside is Go-based, not Node JS-based). We use Webpack and Babel for this. ```bash @@ -64,7 +65,7 @@ npm run webpack # use "npm run webpack watch" instead if wanting to continue run ### Run the tests -#### Create environment-specific .env..json files +#### Create environment-specific .env..json files This step is only required if running performance tests that require access to the Admin API. These files will store environment-specific user credentials for accessing Admin. @@ -76,15 +77,15 @@ be any value that we can load test against. As an example, if doing load testing development against a local environment, we would create a file called `tests/performance-tests/.env.local.json` and supply the local user credentials within the file. -#### Allow access to host ports from containers +#### Allow access to host ports from containers This step is only required if running performance tests locally against the host machine. If running Ubuntu and running the tests against your local machine, ports under test from K6 will be protected by default by `Ubuntu Firewall`. -To grant access to these ports from containers on the -[K6 subnet as defined in docker-compose.yml](docker-compose.yml), +To grant access to these ports from containers on the +[K6 subnet as defined in docker-compose.yml](docker-compose.yml), run the following commands: ```bash @@ -92,7 +93,7 @@ sudo ufw allow from 172.30.0.0/24 to any port 3000 # Public site sudo ufw allow from 172.30.0.0/24 to any port 5000 # Data API sudo ufw allow from 172.30.0.0/24 to any port 5010 # Content API sudo ufw allow from 172.30.0.0/24 to any port 5021 # Admin site / Admin API -sudo ufw allow from 172.30.0.0/24 to any port 5030 # Keycloak +sudo ufw allow from 172.30.0.0/24 to any port 5031 # Keycloak ``` #### Obtain auth tokens for Admin testing and data creation during test setup @@ -108,11 +109,11 @@ This obtains an `access_token` and a `refresh_token` that can be used to access in the Admin API. The `refresh_token` allows long-running tests to refresh their access token if it's going to expire mid-test. -This will look in the `.env..json` file for a user with `"name": ""` and use +This will look in the `.env..json` file for a user with `"name": ""` and use that user's credentials to log into Admin in order to obtain their auth tokens. Details of the environment and the users' access tokens can then be found in a generated file -named `dist/.environment-details..json`. This file is then used by the tests +named `dist/.environment-details..json`. This file is then used by the tests themselves to run against the same environment. As a concrete example: @@ -134,8 +135,8 @@ npm run test dist/import.test.js --environment=local ``` Each test script is runnable against any environment. They will find existing or set up new -dependent data before the test's VUs begin running, and will tear down any data that cannot be -reused by a subsequent run when the tests finish. This is achieved using K6's `setup()` and +dependent data before the test's VUs begin running, and will tear down any data that cannot be +reused by a subsequent run when the tests finish. This is achieved using K6's `setup()` and `teardown()` lifecycles. ### Monitor the test results @@ -146,7 +147,7 @@ View the results of real-time or historic test runs by visiting: http://localhost:3005/d/ees-dashboard/ees-dashboard?orgId=1&refresh=5s ``` -This Dashboard shows EES-specific custom metrics, such as the length of time it takes to +This Dashboard shows EES-specific custom metrics, such as the length of time it takes to complete table tool queries, the stages of progress that importing data files have reached so far, and so on. @@ -159,16 +160,16 @@ http://localhost:3005/d/k6/k6-load-testing-results?orgId=1&refresh=5s This is an out-of-the-box Grafana / K6 Dashboard that captures general low-level performance statistics. -## Command-line test parameters +## Command-line test parameters Some variables are available in certain tests to allow the running of the tests with different test data should we need to do so, but without needing to alter the test code. We use environment -variables to supply the tests with variables using the `-e` flag. All variables have default +variables to supply the tests with variables using the `-e` flag. All variables have default values to fall back on. -Note that in various tests that deal with file imports, we allow the selection of data files to -use with that test on the command line. We can supply large data files as ZIP files using the naming -convention of `big-file1.zip`, `big-file2.zip` etc, and place them in the +Note that in various tests that deal with file imports, we allow the selection of data files to +use with that test on the command line. We can supply large data files as ZIP files using the naming +convention of `big-file1.zip`, `big-file2.zip` etc, and place them in the [imports assets folder](src/tests/admin/import/assets). With this naming convention, they will be ignored by Git. @@ -192,7 +193,7 @@ for a given duration. See [rampingRequestRateProfile.ts](src/configuration/rampingRequestRateProfile.ts). -This is typically used for stress testing, where traffic starts from zero requests per minute and +This is typically used for stress testing, where traffic starts from zero requests per minute and slowly increases over time, to find the point at which the system under test becomes unstable. * RPS - the rate of requests generated per second at the point of maximum stress (the end of the main @@ -205,7 +206,7 @@ slowly increases over time, to find the point at which the system under test bec See [spikeProfile.ts](src/configuration/spikeProfile.ts). This is typically used to test sudden spikes in traffic, the immediate effect on the system under test -and the recovery time post-spike. +and the recovery time post-spike. * PRE_SPIKE_DURATION_MINS - the duration of the stage prior to the traffic spike. * SPIKE_DURATION_MINS - the duration of the traffic spike. @@ -220,7 +221,7 @@ See [sequentialRequestsProfile.ts](src/configuration/sequentialRequestsProfile.t This is used to execute the main test script one at a time, with no concurrency. This is typically used to be able to measure performance on an individual request basis. -* MAIN_TEST_STAGE_DURATION_MINS - the duration of the main stage of the test. There is no +* MAIN_TEST_STAGE_DURATION_MINS - the duration of the main stage of the test. There is no cooldown period with this profile. ### Individual test options @@ -230,10 +231,10 @@ Full sets of options per test are available below as examples: #### import.test.js * PUBLICATION_TITLE - default value is "import.test.ts". -* DATA_FILE - default value is "small-file.csv" which is in source control. See notes above on the use +* DATA_FILE - default value is "small-file.csv" which is in source control. See notes above on the use of large ZIP files. -`npm run test dist/import.test.js --environment=dev --users=bau1 -- +`npm run test dist/import.test.js --environment=dev --users=bau1 -- -e PUBLICATION_TITLE="Import publication" -e DATA_FILE="big-file1.zip"` #### getReleasePage.test.js @@ -245,7 +246,7 @@ This test supports various different performance testing scenarios. * PROFILE - supported values are "load", "stress", "spike", "sequential". Each of these profiles has a default set of configuration out-of-the-box. They can however be -fine-tuned further using the common override parameters defined in +fine-tuned further using the common override parameters defined in [Common load profiles](#common-load-profiles). #### publicTableBuilderQuery.test.js @@ -275,12 +276,12 @@ This test supports various different performance testing scenarios. * PROFILE - supported values are "load", "stress", "spike", "sequential". Each of these profiles has a default set of configuration out-of-the-box. They can however be -fine-tuned further using the common override parameters defined in +fine-tuned further using the common override parameters defined in [Common load profiles](#common-load-profiles). ##### Query generation -This test generates queries for the Public API. There are 2 out-of-the-box scenarios for the types of +This test generates queries for the Public API. There are 2 out-of-the-box scenarios for the types of queries that can be generated: * QUERIES - default value is "simple", which generates simple small queries. Other value is "complex" @@ -288,23 +289,23 @@ queries that can be generated: ##### Data set selection -This test by default targets any data sets that are discoverable via the Public API. The data sets used +This test by default targets any data sets that are discoverable via the Public API. The data sets used by the tests can be filtered down however using the following parameters: * DATA_SET_TITLES - a comma-separated list of data set titles, which will cause the test to only use those - data sets during the run. The default value is undefined, which does not filter data sets by title. -* DATA_SET_MAX_ROWS - the maximum number of rows for data sets to be used in this run. The default value + data sets during the run. The default value is undefined, which does not filter data sets by title. +* DATA_SET_MAX_ROWS - the maximum number of rows for data sets to be used in this run. The default value is undefined, which does not filter data sets by their size. ##### Max results per data set -This test can be configured to bring back a certain amount of query results for any data set being -queried. This may require more than one query depending on the number of results desired and the +This test can be configured to bring back a certain amount of query results for any data set being +queried. This may require more than one query depending on the number of results desired and the page size of the query response being used. * MAX_RESULTS_PER_DATA_SET - the maximum results to retrieve for a data set being queried. For instance, - if 20,000 is configured, it would result in 2 queries of the data set for page 1 and 2 at a page size - of 10,000 results (assuming that there were at least 20,000 results that matched the query). + if 20,000 is configured, it would result in 2 queries of the data set for page 1 and 2 at a page size + of 10,000 results (assuming that there were at least 20,000 results that matched the query). `npm run test dist/publicApiDataSetQuery.test.js --environment=dev -- -e PROFILE=load -e QUERIES=complex -e DATA_SET_MAX_ROWS=500000` @@ -315,33 +316,33 @@ The tests are written in Typescript so we need to transpile them to work in K6 ( Go-based, not Node JS-based). By default, k6 can only run ES5.1 JavaScript code. To use TypeScript, we set up a bundler that converts TypeScript to JavaScript code. -If you want to learn more, check out +If you want to learn more, check out [Bundling node modules in k6](https://k6.io/docs/using-k6/modules#bundling-node-modules). -We also have some Typescript Node scripts that are used directly by Node.js that require bundling and +We also have some Typescript Node scripts that are used directly by Node.js that require bundling and transpiling in the same fashion. ## Troubleshooting ### Exceptions and stacktraces in Typescript code -We can use source maps to be able to trace errors back to the original Typescript source when -encountering errors in transpiled Javascript code. This is provided via the `source-map-support` +We can use source maps to be able to trace errors back to the original Typescript source when +encountering errors in transpiled Javascript code. This is provided via the `source-map-support` package. -To enable this in Node, we can supply the `-r source-map-support/register` option whilst running the +To enable this in Node, we can supply the `-r source-map-support/register` option whilst running the problem script. For example: ```bash node -r source-map-support/register dist/logAuthTokens.js local bau1 ``` -would result in stacktraces that point back to the original `src/auth/logAuthTokens.ts` Typescript +would result in stacktraces that point back to the original `src/auth/logAuthTokens.ts` Typescript file. ### Healthcheck tests -We have some test scripts that ascertain that the infrastructure of the environment we're testing +We have some test scripts that ascertain that the infrastructure of the environment we're testing against and our own utils and helper scripts are behaving themselves. #### Refresh token support @@ -370,9 +371,9 @@ The output should look like: ### Client-side errors when generating load -Errors can be encountered when generating load from a host machine due to insufficient resources. K6 has +Errors can be encountered when generating load from a host machine due to insufficient resources. K6 has a guide for [running large tests](https://k6.io/docs/testing-guides/running-large-tests/) which makes some -suggestions as to how to fine-tune a machine for load generation. The following settings changes can make +suggestions as to how to fine-tune a machine for load generation. The following settings changes can make a big difference on a Linux machine: As root: @@ -382,4 +383,4 @@ sysctl -w net.ipv4.ip_local_port_range="1024 65535" sysctl -w net.ipv4.tcp_tw_reuse=1 sysctl -w net.ipv4.tcp_timestamps=1 ulimit -n 250000 -``` \ No newline at end of file +``` diff --git a/tests/performance-tests/src/auth/getAuthDetails.ts b/tests/performance-tests/src/auth/getAuthDetails.ts index 1db50d75c93..4ad915a7674 100644 --- a/tests/performance-tests/src/auth/getAuthDetails.ts +++ b/tests/performance-tests/src/auth/getAuthDetails.ts @@ -43,7 +43,7 @@ export const getAuthTokens = async ( await page.goto(adminUrl); await page.waitForXPath('//*[.="Sign in"]', { - timeout: 5000, + timeout: 10000, }); await page.click('button[class="govuk-button govuk-button--start"]'); @@ -61,15 +61,35 @@ export const getAuthTokens = async ( } return await page.evaluate(() => { + let idToken = ''; + let accessToken = ''; + let refreshToken = ''; + let expiry = 0; + for (let i = 0; i < localStorage.length; i += 1) { const key = localStorage.key(i) as string; - const value = localStorage.getItem(key) as string; - const json = JSON.parse(value); - if (json.access_token) { - return json; + const json = JSON.parse(localStorage.getItem(key) as string); + + if (key.includes('-accesstoken-')) { + accessToken = json.secret; + expiry = json.expiresOn; + } + + if (key.includes('-refreshtoken-')) { + refreshToken = json.secret; + } + + if (key.includes('-idtoken-')) { + idToken = json.secret; } } - return null; + + return { + id_token: idToken, + access_token: accessToken, + refresh_token: refreshToken, + expires_at: new Date(expiry * 1000), + }; }); } finally { await browser.close(); @@ -83,7 +103,7 @@ const getAuthTokensAzure = async ( ) => { await page.waitForXPath("//*[.='Sign in']", { visible: true, - timeout: 5000, + timeout: 10000, }); const emailInput = await page.$x("//*[@name='loginfmt']"); @@ -96,7 +116,7 @@ const getAuthTokensAzure = async ( try { await page.waitForXPath("//*[.='Enter password']", { visible: true, - timeout: 5000, + timeout: 10000, }); } catch (e) { const content = await page.content(); @@ -121,7 +141,7 @@ const getAuthTokensAzure = async ( try { await page.waitForXPath("//*[.='Stay signed in?']", { visible: true, - timeout: 5000, + timeout: 10000, }); } catch (e) { const content = await page.content(); @@ -152,7 +172,7 @@ const getAuthTokensKeycloak = async ( ) => { await page.waitForXPath("//*[contains(text(), 'Sign in to your account')]", { visible: true, - timeout: 5000, + timeout: 10000, }); const emailInput = await page.$x("//*[@id='username']"); @@ -166,7 +186,7 @@ const getAuthTokensKeycloak = async ( await page.waitForXPath("//*[.='Dashboard']", { visible: true, - timeout: 5000, + timeout: 10000, }); }; diff --git a/tests/performance-tests/src/auth/refreshAuthTokens.ts b/tests/performance-tests/src/auth/refreshAuthTokens.ts index 7d56947e9db..b620ccb3497 100644 --- a/tests/performance-tests/src/auth/refreshAuthTokens.ts +++ b/tests/performance-tests/src/auth/refreshAuthTokens.ts @@ -2,40 +2,37 @@ /* eslint-disable camelcase */ import http from 'k6/http'; import { AuthDetails } from './getAuthDetails'; +import getEnvironmentAndUsersFromFile from '../utils/environmentAndUsers'; + +const environmentAndUsers = getEnvironmentAndUsersFromFile( + __ENV.TEST_ENVIRONMENT, +); interface RefreshTokenParams { userName: string; - adminUrl: string; - clientId: string; - clientSecret: string; refreshToken: string; - supportsRefreshTokens: boolean; } export default function refreshAuthTokens({ userName, - adminUrl, - clientId, - clientSecret, refreshToken, - supportsRefreshTokens, }: RefreshTokenParams): AuthDetails | undefined { - if (!supportsRefreshTokens) { - throw new Error(`Environment ${adminUrl} does not support refresh tokens`); - } + const { openIdConnect } = environmentAndUsers.environment; + const { refreshTokenUrl, clientId } = openIdConnect; const requestBody = { client_id: clientId, - client_secret: clientSecret, grant_type: 'refresh_token', refresh_token: refreshToken, }; - const response = http.post(`${adminUrl}/connect/token`, requestBody); + const response = http.post(refreshTokenUrl, requestBody); if (response.status !== 200) { console.log( - `Unable to refresh access token. Got response ${response.json()}`, + `Unable to refresh access token. Got response ${JSON.stringify( + response.json(), + )}`, ); return undefined; } diff --git a/tests/performance-tests/src/auth/storeEnvironmentDetails.ts b/tests/performance-tests/src/auth/storeEnvironmentDetails.ts index 31ba6ecdd22..0100634baf1 100644 --- a/tests/performance-tests/src/auth/storeEnvironmentDetails.ts +++ b/tests/performance-tests/src/auth/storeEnvironmentDetails.ts @@ -16,9 +16,12 @@ export interface Environment { contentApiUrl: string; dataApiUrl: string; publicApiUrl: string; - idp: IdpOption; users: User[]; - supportsRefreshTokens: boolean; + idp: IdpOption; + openIdConnect: { + clientId: string; + refreshTokenUrl: string; + }; } const getEnvironmentAndUsers = async ( diff --git a/tests/performance-tests/src/tests/admin/import/import.test.ts b/tests/performance-tests/src/tests/admin/import/import.test.ts index 4922cdce6e2..1e8a8b0ef78 100644 --- a/tests/performance-tests/src/tests/admin/import/import.test.ts +++ b/tests/performance-tests/src/tests/admin/import/import.test.ts @@ -84,7 +84,7 @@ const processingStages: { const environmentAndUsers = getEnvironmentAndUsersFromFile( __ENV.TEST_ENVIRONMENT, ); -const { adminUrl, supportsRefreshTokens } = environmentAndUsers.environment; +const { adminUrl } = environmentAndUsers.environment; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const { authTokens, userName } = environmentAndUsers.users.find( @@ -114,12 +114,7 @@ export function setup(): SetupData { } const performTest = ({ themeId, publicationId }: SetupData) => { - const accessToken = getOrRefreshAccessTokens( - supportsRefreshTokens, - userName, - adminUrl, - authTokens, - ); + const accessToken = getOrRefreshAccessTokens(userName, authTokens); const uniqueId = Date.now(); const subjectName = `subject-${uniqueId}`; @@ -222,12 +217,7 @@ const performTest = ({ themeId, publicationId }: SetupData) => { export const teardown = ({ themeId }: SetupData) => { if (tearDownData) { - const accessToken = getOrRefreshAccessTokens( - supportsRefreshTokens, - userName, - adminUrl, - authTokens, - ); + const accessToken = getOrRefreshAccessTokens(userName, authTokens); const adminService = createAdminService(adminUrl, accessToken); @@ -242,4 +232,5 @@ export function handleSummary(data: unknown) { 'import.html': htmlReport(data), }; } + export default performTest; diff --git a/tests/performance-tests/src/tests/admin/table-tool/adminTableBuilderQuery.test.ts b/tests/performance-tests/src/tests/admin/table-tool/adminTableBuilderQuery.test.ts index 62dc9d48f71..74f29f818dd 100644 --- a/tests/performance-tests/src/tests/admin/table-tool/adminTableBuilderQuery.test.ts +++ b/tests/performance-tests/src/tests/admin/table-tool/adminTableBuilderQuery.test.ts @@ -61,7 +61,7 @@ export const tableQueryFailureCount = new Counter( const environmentAndUsers = getEnvironmentAndUsersFromFile( __ENV.TEST_ENVIRONMENT, ); -const { adminUrl, supportsRefreshTokens } = environmentAndUsers.environment; +const { adminUrl } = environmentAndUsers.environment; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const { authTokens, userName } = environmentAndUsers.users.find( @@ -133,12 +133,7 @@ export function setup(): SetupData { } const performTest = ({ releaseId, subjectId, subjectMeta }: SetupData) => { - const accessToken = getOrRefreshAccessTokens( - supportsRefreshTokens, - userName, - adminUrl, - authTokens, - ); + const accessToken = getOrRefreshAccessTokens(userName, authTokens); const adminService = createAdminService(adminUrl, accessToken); @@ -176,12 +171,7 @@ const performTest = ({ releaseId, subjectId, subjectMeta }: SetupData) => { export const teardown = ({ themeId }: SetupData) => { if (tearDownData) { - const accessToken = getOrRefreshAccessTokens( - supportsRefreshTokens, - userName, - adminUrl, - authTokens, - ); + const accessToken = getOrRefreshAccessTokens(userName, authTokens); const adminService = createAdminService(adminUrl, accessToken); @@ -190,9 +180,11 @@ export const teardown = ({ themeId }: SetupData) => { console.log(`Deleted Theme ${themeId}`); } }; + export function handleSummary(data: unknown) { return { 'adminTableBuilderQuery.html': htmlReport(data), }; } + export default performTest; diff --git a/tests/performance-tests/src/tests/healthchecks/refreshTokens.test.ts b/tests/performance-tests/src/tests/healthchecks/refreshTokens.test.ts index 004c545a027..f6f73096bdc 100644 --- a/tests/performance-tests/src/tests/healthchecks/refreshTokens.test.ts +++ b/tests/performance-tests/src/tests/healthchecks/refreshTokens.test.ts @@ -17,7 +17,7 @@ export const errorRate = new Rate('errors'); const environmentAndUsers = getEnvironmentAndUsersFromFile( __ENV.TEST_ENVIRONMENT, ); -const { adminUrl } = environmentAndUsers.environment; +const { adminUrl, refreshTokenUrl } = environmentAndUsers.environment; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const { authTokens, userName } = environmentAndUsers.users.find( @@ -42,11 +42,7 @@ const performTest = () => { const refreshedTokens1 = refreshAuthTokens({ userName, - adminUrl, - clientId: 'GovUk.Education.ExploreEducationStatistics.Admin', - clientSecret: '', refreshToken: authTokens.refreshToken, - supportsRefreshTokens: true, }); if ( @@ -93,11 +89,7 @@ const performTest = () => { const refreshedTokens2 = refreshAuthTokens({ userName, - adminUrl, - clientId: 'GovUk.Education.ExploreEducationStatistics.Admin', - clientSecret: '', refreshToken: refreshedTokens1.authTokens.refreshToken, - supportsRefreshTokens: true, }); if ( diff --git a/tests/performance-tests/src/tests/maintenance/cleanUp.test.ts b/tests/performance-tests/src/tests/maintenance/cleanUp.test.ts index 2d3432533cd..a3df9329ff6 100644 --- a/tests/performance-tests/src/tests/maintenance/cleanUp.test.ts +++ b/tests/performance-tests/src/tests/maintenance/cleanUp.test.ts @@ -17,19 +17,14 @@ const environmentAndUsers = getEnvironmentAndUsersFromFile( const performTest = () => {}; export const teardown = () => { - const { adminUrl, supportsRefreshTokens } = environmentAndUsers.environment; + const { adminUrl } = environmentAndUsers.environment; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const { authTokens, userName } = environmentAndUsers.users.find( user => user.userName === 'bau1', )!; - const accessToken = getOrRefreshAccessTokens( - supportsRefreshTokens, - userName, - adminUrl, - authTokens, - ); + const accessToken = getOrRefreshAccessTokens(userName, authTokens); const adminService = createAdminService(adminUrl, accessToken); diff --git a/tests/performance-tests/src/tests/public/table-tool/publicTableBuilderQuery.test.ts b/tests/performance-tests/src/tests/public/table-tool/publicTableBuilderQuery.test.ts index da64502c099..ce7b6009998 100644 --- a/tests/performance-tests/src/tests/public/table-tool/publicTableBuilderQuery.test.ts +++ b/tests/performance-tests/src/tests/public/table-tool/publicTableBuilderQuery.test.ts @@ -1,7 +1,7 @@ /* eslint-disable no-console */ import { check } from 'k6'; import exec from 'k6/execution'; -import { Counter, Rate, Trend } from 'k6/metrics'; +import { Counter, Trend } from 'k6/metrics'; import { Options } from 'k6/options'; import { htmlReport } from 'https://raw.githubusercontent.com/benc-uk/k6-reporter/main/dist/bundle.js'; import createAdminService, { @@ -45,7 +45,6 @@ interface SetupData { subjectMeta: SubjectMeta; } -export const errorRate = new Rate('ees_errors'); export const tableQuerySpeedTrend = new Trend( 'ees_public_table_query_speed', true, @@ -60,8 +59,7 @@ export const tableQueryFailureCount = new Counter( const environmentAndUsers = getEnvironmentAndUsersFromFile( __ENV.TEST_ENVIRONMENT, ); -const { adminUrl, dataApiUrl, supportsRefreshTokens } = - environmentAndUsers.environment; +const { adminUrl, dataApiUrl } = environmentAndUsers.environment; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const { authTokens, userName } = environmentAndUsers.users.find( @@ -196,12 +194,7 @@ const performTest = ({ subjectId, subjectMeta }: SetupData) => { export const teardown = ({ themeId }: SetupData) => { if (tearDownData) { - const accessToken = getOrRefreshAccessTokens( - supportsRefreshTokens, - userName, - adminUrl, - authTokens, - ); + const accessToken = getOrRefreshAccessTokens(userName, authTokens); const adminService = createAdminService(adminUrl, accessToken); diff --git a/tests/performance-tests/src/utils/adminService.ts b/tests/performance-tests/src/utils/adminService.ts index a3100475d39..c0409a74ca7 100644 --- a/tests/performance-tests/src/utils/adminService.ts +++ b/tests/performance-tests/src/utils/adminService.ts @@ -122,7 +122,7 @@ export class AdminService { title, contact: { contactName: 'Team Contact', - contactTelNo: '12345', + contactTelNo: '01234 567890', teamEmail: 'team@example.com', teamName: 'Team', }, diff --git a/tests/performance-tests/src/utils/getOrRefreshAccessTokens.ts b/tests/performance-tests/src/utils/getOrRefreshAccessTokens.ts index a539723ca93..e19c5e2a39f 100644 --- a/tests/performance-tests/src/utils/getOrRefreshAccessTokens.ts +++ b/tests/performance-tests/src/utils/getOrRefreshAccessTokens.ts @@ -4,22 +4,12 @@ import { AuthTokens } from '../auth/getAuthDetails'; // Note that this would be best invoked from within httpClient.ts prior to any HTTP requests going out. Currently // it is invoked directly from the tests themselves. export default function getOrRefreshAccessTokens( - supportsRefreshTokens: boolean, userName: string, - adminUrl: string, authTokens: AuthTokens, ): string { - if (!supportsRefreshTokens) { - return authTokens.accessToken; - } - const refreshedTokens = refreshAuthTokens({ userName, - adminUrl, - clientId: 'GovUk.Education.ExploreEducationStatistics.Admin', - clientSecret: '', refreshToken: authTokens.refreshToken, - supportsRefreshTokens, }); if (!refreshedTokens) { diff --git a/tests/performance-tests/src/utils/httpClient.ts b/tests/performance-tests/src/utils/httpClient.ts index 94d58d8982b..6e90dd38f27 100644 --- a/tests/performance-tests/src/utils/httpClient.ts +++ b/tests/performance-tests/src/utils/httpClient.ts @@ -45,6 +45,7 @@ export default class HttpClient { (this.checkResponseStatus && response.status < 200) || response.status > 204 ) { + this.logErrorResponse(response); throw response; } @@ -77,6 +78,7 @@ export default class HttpClient { this.checkResponseStatus && (response.status < 200 || response.status > 204) ) { + this.logErrorResponse(response); throw response; } @@ -107,6 +109,7 @@ export default class HttpClient { (this.checkResponseStatus && response.status < 200) || response.status > 204 ) { + this.logErrorResponse(response); throw response; } @@ -131,6 +134,7 @@ export default class HttpClient { }); if (this.checkResponseStatus && response.status !== 204) { + this.logErrorResponse(response); throw response; } @@ -149,4 +153,22 @@ export default class HttpClient { }, }; } + + private logErrorResponse(response: RefinedResponse<'text'>) { + if (response.headers['Www-Authenticate']) { + console.log( + `Got response with status "${ + response.status + }" and message "${JSON.stringify( + response.headers['Www-Authenticate'], + )}"`, + ); + } else { + console.log( + `Got response with status "${response.status}" - "${JSON.stringify( + response, + )}"`, + ); + } + } } diff --git a/tests/performance-tests/src/utils/types.ts b/tests/performance-tests/src/utils/types.ts index 77def3bb59a..dddf1efa507 100644 --- a/tests/performance-tests/src/utils/types.ts +++ b/tests/performance-tests/src/utils/types.ts @@ -70,4 +70,9 @@ export interface Publication { themeId: string; } +export interface Theme { + id: string; + title: string; +} + export default {}; From f267d063434ad66254fe865ceb438e2f6cf44758 Mon Sep 17 00:00:00 2001 From: Duncan Watson Date: Wed, 23 Oct 2024 15:52:03 +0100 Subject: [PATCH 02/12] EES-4877 - streamlining the gathering of login tokens and running tests with less commands if they do not require authentication --- tests/performance-tests/.env.example.json | 29 +++++++++---------- tests/performance-tests/README.md | 12 ++++---- tests/performance-tests/package.json | 2 +- .../src/auth/storeEnvironmentDetails.ts | 25 ++++------------ .../src/utils/environmentAndUsers.ts | 14 +++++++-- tests/performance-tests/webpack.config.js | 5 ++++ 6 files changed, 44 insertions(+), 43 deletions(-) diff --git a/tests/performance-tests/.env.example.json b/tests/performance-tests/.env.example.json index 60461c4f86f..b6f22960a43 100644 --- a/tests/performance-tests/.env.example.json +++ b/tests/performance-tests/.env.example.json @@ -1,17 +1,16 @@ { - "environment": { - "idp": "keycloak", - "adminUrl": "https://ees.local:5021", - "publicUrl": "http://ees.local:3000", - "contentApiUrl": "http://ees.local:5010/api", - "dataApiUrl": "http://ees.local:5000/api", - "publicApiUrl": "http://ees.local:8000/api", - "supportsRefreshTokens": true, - "users": [ - { - "name": "bau1", - "email": "ees-test.bau1@education.gov.uk", - "password": "password" - }] - } + "idp": "keycloak", + "adminUrl": "https://ees.local:5021", + "publicUrl": "http://ees.local:3000", + "contentApiUrl": "http://ees.local:5010/api", + "dataApiUrl": "http://ees.local:5000/api", + "publicApiUrl": "http://ees.local:8000/api", + "supportsRefreshTokens": true, + "users": [ + { + "name": "bau1", + "email": "ees-test.bau1@education.gov.uk", + "password": "password" + } + ] } diff --git a/tests/performance-tests/README.md b/tests/performance-tests/README.md index 70ed56a6baf..07196769e7d 100644 --- a/tests/performance-tests/README.md +++ b/tests/performance-tests/README.md @@ -99,10 +99,10 @@ sudo ufw allow from 172.30.0.0/24 to any port 5031 # Keycloak #### Obtain auth tokens for Admin testing and data creation during test setup This step is only required if running performance tests that require access to the Admin API. -It requires the above step of creating environment-specific .env.json files first. +It requires the above step of creating environment-specific .env..json files first. ```bash -npm run store-environment-details --environment= --users= +npm run login --environment= --users= ``` This obtains an `access_token` and a `refresh_token` that can be used to access protected resources @@ -113,15 +113,17 @@ This will look in the `.env..json` file for a user with `"name": "< that user's credentials to log into Admin in order to obtain their auth tokens. Details of the environment and the users' access tokens can then be found in a generated file -named `dist/.environment-details..json`. This file is then used by the tests +named `dist/.login-tokens..json`. This file is then used by the tests themselves to run against the same environment. As a concrete example: ```bash -npm run store-environment-details --environment=local --users=bau1 +npm run login --environment=local --users=bau1 ``` +will store access and refresh tokens for the user `bau1` against the local environment. + #### Run individual tests ```bash @@ -351,7 +353,7 @@ Run the following to test that the environment under test supports refresh token in your `.env..json file). ```bash -npm run store-environment-details --environment= --users=bau1) +npm run login --environment= --users=bau1) npm run test dist/refreshTokens.test.js --environment=local ``` diff --git a/tests/performance-tests/package.json b/tests/performance-tests/package.json index 33310284df7..8440dcc0dab 100644 --- a/tests/performance-tests/package.json +++ b/tests/performance-tests/package.json @@ -7,7 +7,7 @@ "start": "docker-compose up -d influxdb grafana", "stop": "docker-compose down", "stop-and-clear-data": "docker-compose down -v", - "store-environment-details": "docker-compose run --rm --user \"$(id -u):$(id -g)\" node -r source-map-support/register dist/storeEnvironmentDetails.js ${npm_config_environment} ${npm_config_users}", + "login": "docker-compose run --rm --user \"$(id -u):$(id -g)\" node -r source-map-support/register dist/storeEnvironmentDetails.js ${npm_config_environment} ${npm_config_users}", "test": "cross-env TEST_ENVIRONMENT=${npm_config_environment} docker-compose run --rm k6 run", "tsc": "tsc --noEmit" }, diff --git a/tests/performance-tests/src/auth/storeEnvironmentDetails.ts b/tests/performance-tests/src/auth/storeEnvironmentDetails.ts index 0100634baf1..83ead1d6579 100644 --- a/tests/performance-tests/src/auth/storeEnvironmentDetails.ts +++ b/tests/performance-tests/src/auth/storeEnvironmentDetails.ts @@ -1,7 +1,6 @@ #!/usr/bin/env node import fs from 'fs'; import dotenvJson from 'dotenv-json-complex'; -import { EnvironmentAndUsers } from '../utils/environmentAndUsers'; import getAuthDetails, { IdpOption } from './getAuthDetails'; export interface User { @@ -24,10 +23,10 @@ export interface Environment { }; } -const getEnvironmentAndUsers = async ( +const writeLoginCredentialsToFile = async ( environmentName: string, userNames: string[], -): Promise => { +): Promise => { dotenvJson({ environment: environmentName }); const environment = JSON.parse( @@ -48,23 +47,9 @@ const getEnvironmentAndUsers = async ( }), ); - return { - environment, - users: authTokens, - }; -}; - -const writeEnvironmentDetailsToFile = async ( - environmentName: string, - userNames: string[], -): Promise => { - const environmentAndUsers = await getEnvironmentAndUsers( - environmentName, - userNames, - ); - const filepath = `/home/node/app/dist/.environment-details.${environmentName}.json`; - fs.writeFileSync(filepath, JSON.stringify(environmentAndUsers)); + const loginCredentialsFilePath = `/home/node/app/dist/.login-tokens.${environmentName}.json`; + fs.writeFileSync(loginCredentialsFilePath, JSON.stringify(authTokens)); }; const [environment, ...userNames] = process.argv.slice(2); -writeEnvironmentDetailsToFile(environment, userNames); +writeLoginCredentialsToFile(environment, userNames); diff --git a/tests/performance-tests/src/utils/environmentAndUsers.ts b/tests/performance-tests/src/utils/environmentAndUsers.ts index fdc5b64425c..8d8cdabbc1d 100644 --- a/tests/performance-tests/src/utils/environmentAndUsers.ts +++ b/tests/performance-tests/src/utils/environmentAndUsers.ts @@ -10,6 +10,16 @@ export interface EnvironmentAndUsers { export default function getEnvironmentAndUsersFromFile( environmentName: string, ): EnvironmentAndUsers { - const environmentAndUsersFilePath = `.environment-details.${environmentName}.json`; - return JSON.parse(open(environmentAndUsersFilePath)) as EnvironmentAndUsers; + const environmentFilePath = `.env.${environmentName}.json`; + const environment = JSON.parse(open(environmentFilePath)) as Environment; + + const loginCredentialsPath = `.login-tokens.${environmentName}.json`; + const loginCredentials = JSON.parse( + open(loginCredentialsPath), + ) as AuthDetails[]; + + return { + environment, + users: loginCredentials, + }; } diff --git a/tests/performance-tests/webpack.config.js b/tests/performance-tests/webpack.config.js index 9d34aa34f6e..e49ceae1e7f 100644 --- a/tests/performance-tests/webpack.config.js +++ b/tests/performance-tests/webpack.config.js @@ -37,6 +37,11 @@ module.exports = { from: '**/*.(csv|zip)', to: path.join(__dirname, 'dist'), }, + { + context: __dirname, + from: '.env.*.json', + to: path.join(__dirname, 'dist'), + }, ], }), ], From 33ce737f8b33deec44596810f9c84de8be9b2b84 Mon Sep 17 00:00:00 2001 From: Duncan Watson Date: Wed, 23 Oct 2024 20:34:41 +0100 Subject: [PATCH 03/12] EES-4877 - fixing Public API queries test to work with Public API changes. General tidy-up of K6 code. --- tests/performance-tests/.env.example.json | 31 +- tests/performance-tests/README.md | 14 +- .../dashboards/ees-dashboard.json | 2286 +++++++++-------- tests/performance-tests/package.json | 2 +- ...vironmentDetails.ts => storeAuthTokens.ts} | 0 .../sequentialRequestsProfile.ts | 1 + .../tests/healthchecks/refreshTokens.test.ts | 2 +- .../tests/public-api/data-set-query/config.ts | 4 - .../publicApiDataSetQuery.test.ts | 76 +- .../data-set-query/queryGenerators.ts | 24 +- .../src/utils/environmentAndUsers.ts | 5 +- .../src/utils/publicApiService.ts | 87 +- 12 files changed, 1272 insertions(+), 1260 deletions(-) rename tests/performance-tests/src/auth/{storeEnvironmentDetails.ts => storeAuthTokens.ts} (100%) diff --git a/tests/performance-tests/.env.example.json b/tests/performance-tests/.env.example.json index b6f22960a43..ca49ac233df 100644 --- a/tests/performance-tests/.env.example.json +++ b/tests/performance-tests/.env.example.json @@ -1,16 +1,21 @@ { - "idp": "keycloak", - "adminUrl": "https://ees.local:5021", - "publicUrl": "http://ees.local:3000", - "contentApiUrl": "http://ees.local:5010/api", - "dataApiUrl": "http://ees.local:5000/api", - "publicApiUrl": "http://ees.local:8000/api", - "supportsRefreshTokens": true, - "users": [ - { - "name": "bau1", - "email": "ees-test.bau1@education.gov.uk", - "password": "password" + "environment": { + "idp": "keycloak", + "adminUrl": "https://ees.local:5021", + "publicUrl": "http://ees.local:3000", + "contentApiUrl": "http://ees.local:5010/api", + "dataApiUrl": "http://ees.local:5000/api", + "publicApiUrl": "http://ees.local:5051/api", + "users": [ + { + "name": "bau1", + "email": "ees-test.bau1@education.gov.uk", + "password": "password" + } + ], + "openIdConnect": { + "clientId": "ees-admin-client", + "refreshTokenUrl": "https://ees.local:5031/auth/realms/ees-realm/protocol/openid-connect/token" } - ] + } } diff --git a/tests/performance-tests/README.md b/tests/performance-tests/README.md index 07196769e7d..69c2d762cfa 100644 --- a/tests/performance-tests/README.md +++ b/tests/performance-tests/README.md @@ -94,6 +94,7 @@ sudo ufw allow from 172.30.0.0/24 to any port 5000 # Data API sudo ufw allow from 172.30.0.0/24 to any port 5010 # Content API sudo ufw allow from 172.30.0.0/24 to any port 5021 # Admin site / Admin API sudo ufw allow from 172.30.0.0/24 to any port 5031 # Keycloak +sudo ufw allow from 172.30.0.0/24 to any port 5051 # Public API ``` #### Obtain auth tokens for Admin testing and data creation during test setup @@ -299,19 +300,6 @@ by the tests can be filtered down however using the following parameters: * DATA_SET_MAX_ROWS - the maximum number of rows for data sets to be used in this run. The default value is undefined, which does not filter data sets by their size. -##### Max results per data set - -This test can be configured to bring back a certain amount of query results for any data set being -queried. This may require more than one query depending on the number of results desired and the -page size of the query response being used. - -* MAX_RESULTS_PER_DATA_SET - the maximum results to retrieve for a data set being queried. For instance, - if 20,000 is configured, it would result in 2 queries of the data set for page 1 and 2 at a page size - of 10,000 results (assuming that there were at least 20,000 results that matched the query). - -`npm run test dist/publicApiDataSetQuery.test.js --environment=dev -- --e PROFILE=load -e QUERIES=complex -e DATA_SET_MAX_ROWS=500000` - ## Transpiling and Bundling The tests are written in Typescript so we need to transpile them to work in K6 (which as an aside is diff --git a/tests/performance-tests/dashboards/ees-dashboard.json b/tests/performance-tests/dashboards/ees-dashboard.json index ba7d7ea2e05..96b2fcc18f5 100644 --- a/tests/performance-tests/dashboards/ees-dashboard.json +++ b/tests/performance-tests/dashboards/ees-dashboard.json @@ -167,8 +167,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -260,8 +259,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -386,8 +384,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -511,8 +508,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -605,8 +601,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -699,8 +694,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -797,8 +791,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -895,8 +888,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -993,8 +985,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -1090,8 +1081,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -1217,8 +1207,7 @@ "mode": "absolute", "steps": [ { - "color": "super-light-red", - "value": null + "color": "super-light-red" }, { "color": "red", @@ -1342,8 +1331,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -1481,8 +1469,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -1607,8 +1594,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -1747,8 +1733,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -1873,8 +1858,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -2329,7 +2313,7 @@ "type": "row" }, { - "collapsed": true, + "collapsed": false, "gridPos": { "h": 1, "w": 24, @@ -2337,1150 +2321,1256 @@ "y": 4 }, "id": 42, - "panels": [ + "panels": [], + "title": "Public API - Data Set queries", + "type": "row" + }, + { + "datasource": { + "type": "influxdb", + "uid": "P76A45B24F43298D1" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 5 + }, + "id": 44, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ { "datasource": { "type": "influxdb", "uid": "P76A45B24F43298D1" }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] + "query": "SELECT count(\"value\") FROM \"ees_public_api_individual_query_complete_count\" WHERE $timeFilter GROUP BY time(1m) fill(none)", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Public API Data Set - queries per minute", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "P76A45B24F43298D1" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 30 } - }, - "overrides": [] + ] }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 5 + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 5 + }, + "id": 46, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "P76A45B24F43298D1" }, - "id": 44, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" + "query": "SELECT mean(\"value\") FROM \"ees_public_api_individual_query_speed\" WHERE $timeFilter GROUP BY time(10s) fill(null)", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Public API Data Set - average query response time", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "P76A45B24F43298D1" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" } }, - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "P76A45B24F43298D1" - }, - "query": "SELECT count(\"value\") FROM \"ees_public_api_individual_query_complete_count\" WHERE $timeFilter GROUP BY time(1m) fill(none)", - "rawQuery": true, - "refId": "A", - "resultFormat": "time_series" - } - ], - "title": "Public API Data Set - queries per minute", - "type": "timeseries" + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 13 + }, + "id": 54, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ { "datasource": { "type": "influxdb", "uid": "P76A45B24F43298D1" }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 30 - } - ] - }, - "unit": "ms" - }, - "overrides": [] + "query": "SELECT count(\"value\") FROM \"ees_public_api_individual_query_request_count\" WHERE $timeFilter GROUP BY time(1s) fill(none)", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Public API Data Set - queries per second", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "P76A45B24F43298D1" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 5 + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 30 + } + ] }, - "id": 46, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 13 + }, + "id": 67, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "P76A45B24F43298D1" }, - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "P76A45B24F43298D1" - }, - "query": "SELECT mean(\"value\") FROM \"ees_public_api_individual_query_speed\" WHERE $timeFilter GROUP BY time(10s) fill(null)", - "rawQuery": true, - "refId": "A", - "resultFormat": "time_series" + "query": "SELECT mean(\"value\") FROM \"ees_public_api_individual_query_speed\" WHERE $timeFilter GROUP BY time(10s) fill(null)", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Public API Data Set - average query response time", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "P76A45B24F43298D1" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" } - ], - "title": "Public API Data Set - average query response time", - "type": "timeseries" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 21 + }, + "id": 50, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ { "datasource": { "type": "influxdb", "uid": "P76A45B24F43298D1" }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] + "query": "SELECT count(\"value\") FROM \"ees_public_api_individual_query_complete_count\" WHERE $timeFilter GROUP BY time(1s) fill(none)", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Public API Data Set - queries completed per second", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "P76A45B24F43298D1" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 } - }, - "overrides": [] + ] }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 13 + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 21 + }, + "id": 53, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "P76A45B24F43298D1" }, - "id": 54, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" + "query": "SELECT max(\"value\") FROM \"ees_public_api_individual_query_response_rows\" WHERE $timeFilter GROUP BY time(10s) fill(null)", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Public API Data Set - average rows in responses", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "P76A45B24F43298D1" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "red", + "mode": "fixed" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" } }, - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "P76A45B24F43298D1" - }, - "query": "SELECT count(\"value\") FROM \"ees_public_api_individual_query_request_count\" WHERE $timeFilter GROUP BY time(1s) fill(none)", - "rawQuery": true, - "refId": "A", - "resultFormat": "time_series" - } + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "light-red", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 29 + }, + "id": 63, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "P76A45B24F43298D1" + }, + "query": "SELECT count(\"value\") FROM \"ees_public_api_query_connection_reset_count\" WHERE $timeFilter GROUP BY time(1m) fill(none)", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Public API Data Set - query \"connection reset\" errors per minute", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "P76A45B24F43298D1" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 29 + }, + "id": 58, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" ], - "title": "Public API Data Set - queries per second", - "type": "timeseries" + "fields": "", + "values": false }, + "textMode": "auto" + }, + "pluginVersion": "9.3.2", + "targets": [ { "datasource": { "type": "influxdb", "uid": "P76A45B24F43298D1" }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "ms" - }, - "overrides": [] + "query": "SELECT sum(\"value\") FROM \"ees_public_api_individual_query_complete_count\" WHERE $timeFilter fill(none)", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Public API Data Set - total queries successfully completed", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "P76A45B24F43298D1" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "red", + "mode": "fixed" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 13 + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "light-red", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 37 + }, + "id": 65, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "P76A45B24F43298D1" }, - "id": 53, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" + "query": "SELECT count(\"value\") FROM \"ees_public_api_query_http2_stream_error_count\" WHERE $timeFilter GROUP BY time(1m) fill(none)", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Public API Data Set - query \"http2: stream\" errors per minute", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "P76A45B24F43298D1" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "red", + "mode": "fixed" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" } }, - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "P76A45B24F43298D1" - }, - "query": "SELECT max(\"value\") FROM \"ees_public_api_individual_query_speed\" WHERE $timeFilter GROUP BY time(10s) fill(null)", - "rawQuery": true, - "refId": "A", - "resultFormat": "time_series" - } + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "light-red", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 37 + }, + "id": 60, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "P76A45B24F43298D1" + }, + "query": "SELECT count(\"value\") FROM \"ees_public_api_query_connection_refused_count\" WHERE $timeFilter GROUP BY time(1m) fill(none)", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Public API Data Set - query \"connection refused\" errors per minute", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "P76A45B24F43298D1" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "light-red", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 45 + }, + "id": 64, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" ], - "title": "Public API Data Set - maximum query response time", - "type": "timeseries" + "fields": "", + "values": false }, + "textMode": "auto" + }, + "pluginVersion": "9.3.2", + "targets": [ { "datasource": { "type": "influxdb", "uid": "P76A45B24F43298D1" }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 21 - }, - "id": 50, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "P76A45B24F43298D1" - }, - "query": "SELECT count(\"value\") FROM \"ees_public_api_individual_query_complete_count\" WHERE $timeFilter GROUP BY time(1s) fill(none)", - "rawQuery": true, - "refId": "A", - "resultFormat": "time_series" - } - ], - "title": "Public API Data Set - queries completed per second", - "type": "timeseries" - }, - { - "datasource": { - "type": "influxdb", - "uid": "P76A45B24F43298D1" - }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 21 - }, - "id": 58, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "pluginVersion": "9.3.2", - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "P76A45B24F43298D1" - }, - "query": "SELECT sum(\"value\") FROM \"ees_public_api_individual_query_complete_count\" WHERE $timeFilter fill(none)", - "rawQuery": true, - "refId": "A", - "resultFormat": "time_series" - } - ], - "title": "Public API Data Set - total queries successfully completed", - "type": "stat" - }, - { - "datasource": { - "type": "influxdb", - "uid": "P76A45B24F43298D1" - }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "fixedColor": "red", - "mode": "fixed" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "light-red" - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 29 - }, - "id": 63, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "P76A45B24F43298D1" - }, - "query": "SELECT count(\"value\") FROM \"ees_public_api_query_connection_reset_count\" WHERE $timeFilter GROUP BY time(1m) fill(none)", - "rawQuery": true, - "refId": "A", - "resultFormat": "time_series" - } - ], - "title": "Public API Data Set - query \"connection reset\" errors per minute", - "type": "timeseries" - }, - { - "datasource": { - "type": "influxdb", - "uid": "P76A45B24F43298D1" - }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "fixedColor": "red", - "mode": "fixed" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "light-red" - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 29 - }, - "id": 60, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "P76A45B24F43298D1" - }, - "query": "SELECT count(\"value\") FROM \"ees_public_api_query_connection_refused_count\" WHERE $timeFilter GROUP BY time(1m) fill(none)", - "rawQuery": true, - "refId": "A", - "resultFormat": "time_series" - } - ], - "title": "Public API Data Set - query \"connection refused\" errors per minute", - "type": "timeseries" - }, - { - "datasource": { - "type": "influxdb", - "uid": "P76A45B24F43298D1" - }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "fixedColor": "red", - "mode": "fixed" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "light-red" - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 37 - }, - "id": 65, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "P76A45B24F43298D1" - }, - "query": "SELECT count(\"value\") FROM \"ees_public_api_query_http2_stream_error_count\" WHERE $timeFilter GROUP BY time(1m) fill(none)", - "rawQuery": true, - "refId": "A", - "resultFormat": "time_series" - } - ], - "title": "Public API Data Set - query \"http2: stream\" errors per minute", - "type": "timeseries" - }, - { - "datasource": { - "type": "influxdb", - "uid": "P76A45B24F43298D1" - }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "fixedColor": "red", - "mode": "fixed" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "light-red" - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 37 - }, - "id": 49, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "P76A45B24F43298D1" - }, - "query": "SELECT count(\"value\") FROM \"ees_public_api_query_failure_count\" WHERE $timeFilter GROUP BY time(1m) fill(none)", - "rawQuery": true, - "refId": "A", - "resultFormat": "time_series" + "query": "SELECT sum(\"value\") FROM \"ees_public_api_query_connection_reset_count\" WHERE $timeFilter fill(none)", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Public API Data Set - query \"connection reset\" errors", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "P76A45B24F43298D1" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "red", + "mode": "fixed" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" } - ], - "title": "Public API Data Set - query errors per minute", - "type": "timeseries" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "light-red", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 45 + }, + "id": 49, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ { "datasource": { "type": "influxdb", "uid": "P76A45B24F43298D1" }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "light-red" - }, - { - "color": "red", - "value": 80 - } - ] + "query": "SELECT count(\"value\") FROM \"ees_public_api_query_failure_count\" WHERE $timeFilter GROUP BY time(1m) fill(none)", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Public API Data Set - query errors per minute", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "P76A45B24F43298D1" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "light-red", + "value": null + }, + { + "color": "red", + "value": 80 } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 45 - }, - "id": 64, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "pluginVersion": "9.3.2", - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "P76A45B24F43298D1" - }, - "query": "SELECT sum(\"value\") FROM \"ees_public_api_query_connection_reset_count\" WHERE $timeFilter fill(none)", - "rawQuery": true, - "refId": "A", - "resultFormat": "time_series" - } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 53 + }, + "id": 66, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" ], - "title": "Public API Data Set - query \"connection reset\" errors", - "type": "stat" + "fields": "", + "values": false }, + "textMode": "auto" + }, + "pluginVersion": "9.3.2", + "targets": [ { "datasource": { "type": "influxdb", "uid": "P76A45B24F43298D1" }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "light-red" - }, - { - "color": "red", - "value": 80 - } - ] + "query": "SELECT sum(\"value\") FROM \"ees_public_api_query_http2_stream_error_count\" WHERE $timeFilter fill(none)", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Public API Data Set - query \"http2: stream\" errors", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "P76A45B24F43298D1" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "light-red", + "value": null + }, + { + "color": "red", + "value": 80 } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 45 - }, - "id": 62, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "pluginVersion": "9.3.2", - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "P76A45B24F43298D1" - }, - "query": "SELECT sum(\"value\") FROM \"ees_public_api_query_connection_refused_count\" WHERE $timeFilter fill(none)", - "rawQuery": true, - "refId": "A", - "resultFormat": "time_series" - } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 53 + }, + "id": 62, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" ], - "title": "Public API Data Set - query \"connection refused\" errors", - "type": "stat" + "fields": "", + "values": false }, + "textMode": "auto" + }, + "pluginVersion": "9.3.2", + "targets": [ { "datasource": { "type": "influxdb", "uid": "P76A45B24F43298D1" }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "light-red" - }, - { - "color": "red", - "value": 80 - } - ] + "query": "SELECT sum(\"value\") FROM \"ees_public_api_query_connection_refused_count\" WHERE $timeFilter fill(none)", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Public API Data Set - query \"connection refused\" errors", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "P76A45B24F43298D1" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "light-red", + "value": null + }, + { + "color": "red", + "value": 80 } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 53 - }, - "id": 66, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "pluginVersion": "9.3.2", - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "P76A45B24F43298D1" - }, - "query": "SELECT sum(\"value\") FROM \"ees_public_api_query_http2_stream_error_count\" WHERE $timeFilter fill(none)", - "rawQuery": true, - "refId": "A", - "resultFormat": "time_series" - } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 61 + }, + "id": 57, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" ], - "title": "Public API Data Set - query \"http2: stream\" errors", - "type": "stat" + "fields": "", + "values": false }, + "textMode": "auto" + }, + "pluginVersion": "9.3.2", + "targets": [ { "datasource": { "type": "influxdb", "uid": "P76A45B24F43298D1" }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "light-red" - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 53 - }, - "id": 57, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "pluginVersion": "9.3.2", - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "P76A45B24F43298D1" - }, - "query": "SELECT sum(\"value\") FROM \"ees_public_api_query_failure_count\" WHERE $timeFilter fill(none)", - "rawQuery": true, - "refId": "A", - "resultFormat": "time_series" - } - ], - "title": "Public API Data Set - total failed queries", - "type": "stat" + "query": "SELECT sum(\"value\") FROM \"ees_public_api_query_failure_count\" WHERE $timeFilter fill(none)", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" } ], - "title": "Public API - Data Set queries", - "type": "row" + "title": "Public API Data Set - total failed queries", + "type": "stat" }, { "collapsed": true, @@ -3488,7 +3578,7 @@ "h": 1, "w": 24, "x": 0, - "y": 5 + "y": 69 }, "id": 12, "panels": [ @@ -3876,6 +3966,6 @@ "timezone": "", "title": "EES dashboard", "uid": "ees-dashboard", - "version": 2, + "version": 1, "weekStart": "" -} \ No newline at end of file +} diff --git a/tests/performance-tests/package.json b/tests/performance-tests/package.json index 8440dcc0dab..188217f5818 100644 --- a/tests/performance-tests/package.json +++ b/tests/performance-tests/package.json @@ -7,7 +7,7 @@ "start": "docker-compose up -d influxdb grafana", "stop": "docker-compose down", "stop-and-clear-data": "docker-compose down -v", - "login": "docker-compose run --rm --user \"$(id -u):$(id -g)\" node -r source-map-support/register dist/storeEnvironmentDetails.js ${npm_config_environment} ${npm_config_users}", + "login": "docker-compose run --rm --user \"$(id -u):$(id -g)\" node -r source-map-support/register dist/storeAuthTokens.js ${npm_config_environment} ${npm_config_users}", "test": "cross-env TEST_ENVIRONMENT=${npm_config_environment} docker-compose run --rm k6 run", "tsc": "tsc --noEmit" }, diff --git a/tests/performance-tests/src/auth/storeEnvironmentDetails.ts b/tests/performance-tests/src/auth/storeAuthTokens.ts similarity index 100% rename from tests/performance-tests/src/auth/storeEnvironmentDetails.ts rename to tests/performance-tests/src/auth/storeAuthTokens.ts diff --git a/tests/performance-tests/src/configuration/sequentialRequestsProfile.ts b/tests/performance-tests/src/configuration/sequentialRequestsProfile.ts index bb6f7dcfd3b..572b4293202 100644 --- a/tests/performance-tests/src/configuration/sequentialRequestsProfile.ts +++ b/tests/performance-tests/src/configuration/sequentialRequestsProfile.ts @@ -21,5 +21,6 @@ export default function sequentialRequestProfile( return { duration: `${mainStageDurationMinutes}m`, vus: 1, + insecureSkipTLSVerify: true, }; } diff --git a/tests/performance-tests/src/tests/healthchecks/refreshTokens.test.ts b/tests/performance-tests/src/tests/healthchecks/refreshTokens.test.ts index f6f73096bdc..396ef26dcb7 100644 --- a/tests/performance-tests/src/tests/healthchecks/refreshTokens.test.ts +++ b/tests/performance-tests/src/tests/healthchecks/refreshTokens.test.ts @@ -17,7 +17,7 @@ export const errorRate = new Rate('errors'); const environmentAndUsers = getEnvironmentAndUsersFromFile( __ENV.TEST_ENVIRONMENT, ); -const { adminUrl, refreshTokenUrl } = environmentAndUsers.environment; +const { adminUrl } = environmentAndUsers.environment; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const { authTokens, userName } = environmentAndUsers.users.find( diff --git a/tests/performance-tests/src/tests/public-api/data-set-query/config.ts b/tests/performance-tests/src/tests/public-api/data-set-query/config.ts index 7eb5f68fce0..f3fecad420a 100644 --- a/tests/performance-tests/src/tests/public-api/data-set-query/config.ts +++ b/tests/performance-tests/src/tests/public-api/data-set-query/config.ts @@ -20,8 +20,6 @@ const queries = (__ENV.QUERIES ?? 'simple') as 'simple' | 'complex'; const limitToDataSetTitles = __ENV.DATA_SET_TITLES?.split(','); const maxDataSetRows = parseIntOptional(__ENV.DATA_SET_MAX_ROWS); -const maxResultsToReturnPerDataSet = - parseIntOptional(__ENV.MAX_RESULTS_PER_DATA_SET) || 10000; function getOptions(): Options { switch (profile) { @@ -84,7 +82,6 @@ function getQueryConfig(): QueryGeneratorConfig { export interface DataSetConfig { limitToTitles?: string[]; maxRows?: number; - maxResultsPerDataSet?: number; } export interface Config { @@ -99,7 +96,6 @@ const config: Config = { dataSetConfig: { limitToTitles: limitToDataSetTitles, maxRows: maxDataSetRows, - maxResultsPerDataSet: maxResultsToReturnPerDataSet, }, }; diff --git a/tests/performance-tests/src/tests/public-api/data-set-query/publicApiDataSetQuery.test.ts b/tests/performance-tests/src/tests/public-api/data-set-query/publicApiDataSetQuery.test.ts index 764257c9552..889d8dece00 100644 --- a/tests/performance-tests/src/tests/public-api/data-set-query/publicApiDataSetQuery.test.ts +++ b/tests/performance-tests/src/tests/public-api/data-set-query/publicApiDataSetQuery.test.ts @@ -25,6 +25,10 @@ export const individualQuerySpeedTrend = new Trend( 'ees_public_api_individual_query_speed', true, ); +export const individualQueryResponseRowsTrend = new Trend( + 'ees_public_api_individual_query_response_rows', + false, +); export const individualQueryRequestCount = new Counter( 'ees_public_api_individual_query_request_count', ); @@ -139,44 +143,32 @@ const performTest = ({ publications }: SetupData) => { const query = queryGenerator.generateQuery(dataSetMeta); - let totalResultsReturned = 0; - let totalPagesReturned = 0; - let allResultsFound = false; - let currentPage = 1; - const startTime = Date.now(); try { - while (!allResultsFound) { - individualQueryRequestCount.add(1); + individualQueryRequestCount.add(1); - const { results } = publicApiService.queryDataSet({ - dataSetId: dataSetMeta.id, - query, - page: currentPage, - }); + const { results } = publicApiService.queryDataSet({ + dataSetId: dataSetMeta.id, + query, + }); - const requestTime = Date.now() - startTime; - - individualQuerySpeedTrend.add(requestTime); - individualQueryCompleteCount.add(1); - - totalPagesReturned += 1; - totalResultsReturned += results.results.length; - - if (results.paging.totalResults === 0) { - allResultsFound = true; - } else if (results.paging.page === results.paging.totalPages) { - allResultsFound = true; - } else if ( - dataSetConfig.maxResultsPerDataSet && - totalResultsReturned >= dataSetConfig.maxResultsPerDataSet - ) { - allResultsFound = true; - } else { - currentPage += 1; - } - } + const requestTime = Date.now() - startTime; + + individualQuerySpeedTrend.add(requestTime); + individualQueryCompleteCount.add(1); + individualQueryResponseRowsTrend.add(results.results.length); + + const totalResponsesTimeMillis = Date.now() - startTime; + + logQueryResponse({ + publication, + dataSetName: dataSetMeta.name, + query, + totalResultsReturned: results.results.length, + totalPagesReturned: 1, + totalResponsesTimeMillis, + }); } catch (error: unknown) { if (isRefinedResponse(error)) { if (error.error_code === 1211) { @@ -208,10 +200,7 @@ const performTest = ({ publications }: SetupData) => { } else { logErrorObject(error); - const url = publicApiService.getDataSetQueryUrl({ - dataSetId: dataSetMeta.id, - page: currentPage, - }); + const url = `/v1/data-sets/${dataSetMeta.id}/query`; queryFailureCount.add(1); errorRate.add(1); @@ -223,20 +212,7 @@ const performTest = ({ publications }: SetupData) => { requestBody: query, }); } - - return; } - - const totalResponsesTimeMillis = Date.now() - startTime; - - logQueryResponse({ - publication, - dataSetName: dataSetMeta.name, - query, - totalResultsReturned, - totalPagesReturned, - totalResponsesTimeMillis, - }); }; export const teardown = ({ testConfig }: SetupData) => { diff --git a/tests/performance-tests/src/tests/public-api/data-set-query/queryGenerators.ts b/tests/performance-tests/src/tests/public-api/data-set-query/queryGenerators.ts index 8a810c65a3e..5cef757b8b1 100644 --- a/tests/performance-tests/src/tests/public-api/data-set-query/queryGenerators.ts +++ b/tests/performance-tests/src/tests/public-api/data-set-query/queryGenerators.ts @@ -55,14 +55,14 @@ class DataSetQueryGenerator { this.comparableOperators = comparableOperators; } - generateQuery(dataSetMeta: DataSetMeta) { + generateQuery(dataSetMeta: DataSetMeta): DataSetQueryRequest { const indicatorRange = new Range(0.1, 0.5); const indicators = pickRandomItems( dataSetMeta.indicators, Math.min(indicatorRange.random(), this.maxArrayItems), ); return { - facets: this.generateDataSetQueryNode({ + criteria: this.generateDataSetQueryNode({ dataSetMeta, currentDepth: 1, }), @@ -105,8 +105,8 @@ class DataSetQueryGenerator { } } - private generateIdListClause( - idList: string[], + private generateIdListClause( + idList: T[], range: Range, ): DataSetQueryIdPredicate { const operator = pickRandom(this.idOperators); @@ -179,13 +179,18 @@ class DataSetQueryGenerator { const timePeriodsRange = new Range(0.1, 0.5); const geographicLevelRange = new Range(0.1, 0.5); - const flatLocations = Object.values(dataSetMeta.locations) - .flat() - .map(l => l.id); + const flatLocations = dataSetMeta.locations.flatMap(locationLevel => + locationLevel.options.map(locationOption => ({ + level: locationLevel.level.code, + id: locationOption.id, + })), + ); + const flatFilterItems = pickRandomItems( dataSetMeta.filters, filterRange.random(), ).flatMap(f => f.options); + const availableGeographicLevels = Object.keys(dataSetMeta.locations); const filterItems = this.generateIdListClause( @@ -203,7 +208,10 @@ class DataSetQueryGenerator { : undefined; const timePeriods = this.generateComparableListClause( - dataSetMeta.timePeriods, + dataSetMeta.timePeriods.map(tp => ({ + code: tp.code, + period: tp.period, + })), timePeriodsRange, ); diff --git a/tests/performance-tests/src/utils/environmentAndUsers.ts b/tests/performance-tests/src/utils/environmentAndUsers.ts index 8d8cdabbc1d..632355b1e53 100644 --- a/tests/performance-tests/src/utils/environmentAndUsers.ts +++ b/tests/performance-tests/src/utils/environmentAndUsers.ts @@ -1,6 +1,6 @@ /* eslint-disable no-restricted-globals */ import { AuthDetails } from '../auth/getAuthDetails'; -import { Environment } from '../auth/storeEnvironmentDetails'; +import { Environment } from '../auth/storeAuthTokens'; export interface EnvironmentAndUsers { environment: Environment; @@ -11,7 +11,8 @@ export default function getEnvironmentAndUsersFromFile( environmentName: string, ): EnvironmentAndUsers { const environmentFilePath = `.env.${environmentName}.json`; - const environment = JSON.parse(open(environmentFilePath)) as Environment; + const environment = JSON.parse(open(environmentFilePath)) + .environment as Environment; const loginCredentialsPath = `.login-tokens.${environmentName}.json`; const loginCredentials = JSON.parse( diff --git a/tests/performance-tests/src/utils/publicApiService.ts b/tests/performance-tests/src/utils/publicApiService.ts index 24bc266f176..67b28725367 100644 --- a/tests/performance-tests/src/utils/publicApiService.ts +++ b/tests/performance-tests/src/utils/publicApiService.ts @@ -1,4 +1,3 @@ -import { RefinedResponse } from 'k6/http'; import HttpClient from './httpClient'; const applicationJsonHeaders = { @@ -54,16 +53,14 @@ export interface Paged { results: T[]; } -interface Location { - id: string; - level: string; - options: GeographicLevelLocations[]; - label: string; - code: string; -} - interface GeographicLevelLocations { - [level: string]: Location[]; + level: { + code: string; + label: string; + }; + options: { + id: string; + }[]; } export interface DataSetMeta { @@ -92,8 +89,8 @@ export interface DataSetMeta { decimalPlaces: 0; }, ]; - locations: GeographicLevelLocations; - timePeriods: (TimePeriod & { label: string })[]; + locations: GeographicLevelLocations[]; + timePeriods: TimePeriod[]; } export interface DataSetQueryIdPredicate { @@ -141,11 +138,11 @@ export type DataSetQueryNode = interface TimePeriod { code: string; - year: number; + period: string; } export interface DataSetQueryRequest { - facets: DataSetQueryNode; + criteria: DataSetQueryNode; indicators?: string[]; sort?: [ { @@ -173,33 +170,6 @@ export interface DataSetQueryResponse { }[]; } -// Some Publications and their data sets are currently not discoverable via -// the API, so we can include them manually here. -const hiddenPublications: Publication[] = [ - { - id: '1681557f-510f-446e-bc9a-f2c7a59d1cfa', - slug: 'benchmark-publication', - title: 'Benchmark Publication', - }, -]; - -const hiddenDataSets: { [publicationId: string]: { dataSets: DataSet[] } } = { - '1681557f-510f-446e-bc9a-f2c7a59d1cfa': { - dataSets: [ - { - id: 'a96044e5-2310-4890-a601-8ca0b67d2964', - title: 'QUA01', - description: '', - geographicLevels: ['National'], - timePeriods: { - start: '2013/14', - end: '2018/19', - }, - }, - ], - }, -}; - class PublicApiService { private readonly client: HttpClient; @@ -214,31 +184,18 @@ class PublicApiService { const { response, json } = this.client.get>( '/v1/publications?pageSize=40', ); - const publications: Publication[] = [ - ...json.results, - ...hiddenPublications, - ]; return { - publications, + publications: json.results, response, }; } listDataSets(publicationId: string) { - let response: RefinedResponse<'text'> | undefined; - let json: DataSet[]; - - if (Object.keys(hiddenDataSets).includes(publicationId)) { - json = hiddenDataSets[publicationId].dataSets; - } else { - const result = this.client.get( - `/v1/publications/${publicationId}/data-sets`, - ); - response = result.response; - json = result.json; - } + const { response, json } = this.client.get>( + `/v1/publications/${publicationId}/data-sets`, + ); return { - dataSets: json, + dataSets: json.results, response, }; } @@ -253,25 +210,15 @@ class PublicApiService { }; } - getDataSetQueryUrl({ dataSetId, page }: { dataSetId: string; page: number }) { - return `/v1/data-sets/${dataSetId}/query?page=${page}&pageSize=10000`; - } - queryDataSet({ dataSetId, query, - page = 1, }: { dataSetId: string; query: DataSetQueryRequest; - page?: number; }) { - const url = this.getDataSetQueryUrl({ - dataSetId, - page, - }); const { response, json } = this.client.post>( - url, + `/v1/data-sets/${dataSetId}/query`, JSON.stringify(query), applicationJsonHeaders, ); From 9b97b7744bdbd1e66592461dc1bc09ceca52663c Mon Sep 17 00:00:00 2001 From: Duncan Watson Date: Wed, 23 Oct 2024 22:38:13 +0100 Subject: [PATCH 04/12] EES-4877 - updated instructions to use PNPM rather than NPM. Updated performance test README with quick start instructions. --- pnpm-lock.yaml | 837 +++++++++++++++--- pnpm-workspace.yaml | 1 + tests/performance-tests/.env.example.json | 2 +- .../Dockerfile-node-chromium | 4 +- tests/performance-tests/README.md | 76 +- tests/performance-tests/package.json | 6 +- .../src/auth/storeAuthTokens.ts | 2 +- .../src/utils/environmentAndUsers.ts | 2 +- 8 files changed, 782 insertions(+), 148 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 041617ce83d..1d9e0f92320 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -376,7 +376,7 @@ importers: version: 0.9.0(immer@10.0.2)(react@18.2.0) webpack: specifier: ^5.88.1 - version: 5.88.1(webpack-cli@5.1.4) + version: 5.88.1 webpack-dev-server: specifier: ^4.15.1 version: 4.15.1(webpack@5.88.1) @@ -1059,6 +1059,91 @@ importers: specifier: ^4.3.1 version: 4.11.1(webpack@5.75.0) + tests/performance-tests: + dependencies: + buffer-from: + specifier: ^1.1.2 + version: 1.1.2 + lodash: + specifier: ^4.17.21 + version: 4.17.21 + source-map: + specifier: ^0.7.4 + version: 0.7.4 + source-map-support: + specifier: ^0.5.21 + version: 0.5.21 + devDependencies: + '@babel/core': + specifier: ^7.19.0 + version: 7.22.8 + '@babel/plugin-proposal-class-properties': + specifier: ^7.18.6 + version: 7.18.6(@babel/core@7.22.8) + '@babel/plugin-proposal-object-rest-spread': + specifier: 7.18.9 + version: 7.18.9(@babel/core@7.22.8) + '@babel/plugin-transform-runtime': + specifier: ^7.18.10 + version: 7.19.6(@babel/core@7.22.8) + '@babel/preset-env': + specifier: ^7.19.0 + version: 7.20.2(@babel/core@7.22.8) + '@babel/preset-typescript': + specifier: ^7.18.6 + version: 7.22.5(@babel/core@7.22.8) + '@types/k6': + specifier: ^0.39.1 + version: 0.39.1 + '@types/lodash': + specifier: ^4.14.191 + version: 4.14.195 + '@types/webpack': + specifier: ^5.28.0 + version: 5.28.5(webpack-cli@4.10.0) + babel-loader: + specifier: ^8.2.5 + version: 8.3.0(@babel/core@7.22.8)(webpack@5.88.1) + bufferutil: + specifier: ^4.0.6 + version: 4.0.8 + clean-webpack-plugin: + specifier: ^4.0.0 + version: 4.0.0(webpack@5.88.1) + copy-webpack-plugin: + specifier: ^11.0.0 + version: 11.0.0(webpack@5.88.1) + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + dotenv: + specifier: ^16.0.2 + version: 16.4.5 + dotenv-json-complex: + specifier: ^1.0.4 + version: 1.0.4 + k6: + specifier: ^0.0.0 + version: 0.0.0 + puppeteer: + specifier: ^14.4.0 + version: 14.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + typescript: + specifier: ^4.8.3 + version: 4.9.5 + utf-8-validate: + specifier: ^5.0.9 + version: 5.0.10 + webpack: + specifier: ^5.74.0 + version: 5.88.1(webpack-cli@4.10.0) + webpack-cli: + specifier: ^4.10.0 + version: 4.10.0(webpack@5.88.1) + webpack-glob-entries: + specifier: ^1.0.1 + version: 1.0.1 + packages: /@adobe/css-tools@4.3.3: @@ -1234,7 +1319,7 @@ packages: '@babel/types': 7.22.5 '@nicolo-ribaudo/semver-v6': 6.3.3 convert-source-map: 1.9.0 - debug: 4.3.4 + debug: 4.3.7 gensync: 1.0.0-beta.2 json5: 2.2.3 transitivePeerDependencies: @@ -1301,7 +1386,6 @@ packages: browserslist: 4.21.9 lru-cache: 5.1.1 semver: 6.3.0 - dev: false /@babel/helper-compilation-targets@7.22.6(@babel/core@7.20.12): resolution: {integrity: sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==} @@ -1364,7 +1448,6 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 transitivePeerDependencies: - supports-color - dev: false /@babel/helper-create-class-features-plugin@7.22.6(@babel/core@7.20.12): resolution: {integrity: sha512-iwdzgtSiBxF6ni6mzVnZCF3xt5qE6cEA0J7nFt8QOAWZ0zjCFceEgpn3vtb2V7WFR6QzP2jmIFOHMTRo7eNJjQ==} @@ -1403,7 +1486,6 @@ packages: '@nicolo-ribaudo/semver-v6': 6.3.3 transitivePeerDependencies: - supports-color - dev: false /@babel/helper-create-regexp-features-plugin@7.20.5(@babel/core@7.20.12): resolution: {integrity: sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==} @@ -1424,7 +1506,6 @@ packages: '@babel/core': 7.22.8 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.0 - dev: false /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.20.12): resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} @@ -1449,13 +1530,12 @@ packages: '@babel/core': 7.22.8 '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.8) '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4 + debug: 4.3.7 lodash.debounce: 4.0.8 resolve: 1.22.2 semver: 6.3.0 transitivePeerDependencies: - supports-color - dev: false /@babel/helper-environment-visitor@7.18.9: resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} @@ -1598,7 +1678,6 @@ packages: '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color - dev: false /@babel/helper-replace-supers@7.20.7: resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==} @@ -1764,7 +1843,6 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} @@ -1787,7 +1865,6 @@ packages: '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 '@babel/plugin-proposal-optional-chaining': 7.20.7(@babel/core@7.22.8) - dev: false /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} @@ -1816,32 +1893,32 @@ packages: '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.8) transitivePeerDependencies: - supports-color - dev: false /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} 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-properties instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.20.12(@babel/core@7.20.12) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-create-class-features-plugin': 7.22.6(@babel/core@7.20.12) + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.22.8): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} 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-properties instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.8 - '@babel/helper-create-class-features-plugin': 7.20.12(@babel/core@7.22.8) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-create-class-features-plugin': 7.22.6(@babel/core@7.22.8) + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color - dev: false /@babel/plugin-proposal-class-static-block@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==} @@ -1868,7 +1945,6 @@ packages: '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.8) transitivePeerDependencies: - supports-color - dev: false /@babel/plugin-proposal-decorators@7.20.13(@babel/core@7.22.8): resolution: {integrity: sha512-7T6BKHa9Cpd7lCueHBBzP0nkXNina+h5giOZw+a8ZpMfPFY19VjJAjIxyFHuWkhCWgL6QMqRiY/wB1fLXzm6Mw==} @@ -1905,7 +1981,6 @@ packages: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.8) - dev: false /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.20.12): resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} @@ -1926,7 +2001,6 @@ packages: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.8) - dev: false /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} @@ -1947,7 +2021,6 @@ packages: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.8) - dev: false /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} @@ -1968,7 +2041,6 @@ packages: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.8) - dev: false /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} @@ -1989,7 +2061,6 @@ packages: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.8) - dev: false /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} @@ -2010,7 +2081,21 @@ packages: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.8) - dev: false + + /@babel/plugin-proposal-object-rest-spread@7.18.9(@babel/core@7.22.8): + resolution: {integrity: sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==} + 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-object-rest-spread instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.6 + '@babel/core': 7.22.8 + '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.8) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.8) + '@babel/plugin-transform-parameters': 7.20.7(@babel/core@7.22.8) + dev: true /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} @@ -2037,7 +2122,6 @@ packages: '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.8) '@babel/plugin-transform-parameters': 7.20.7(@babel/core@7.22.8) - dev: false /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} @@ -2058,7 +2142,6 @@ packages: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.8) - dev: false /@babel/plugin-proposal-optional-chaining@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==} @@ -2081,7 +2164,6 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.8) - dev: false /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} @@ -2106,7 +2188,6 @@ packages: '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color - dev: false /@babel/plugin-proposal-private-property-in-object@7.20.5(@babel/core@7.20.12): resolution: {integrity: sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==} @@ -2135,7 +2216,6 @@ packages: '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.8) transitivePeerDependencies: - supports-color - dev: false /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} @@ -2156,7 +2236,6 @@ packages: '@babel/core': 7.22.8 '@babel/helper-create-regexp-features-plugin': 7.20.5(@babel/core@7.22.8) '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.20.12): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} @@ -2225,7 +2304,6 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-syntax-decorators@7.19.0(@babel/core@7.22.8): resolution: {integrity: sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==} @@ -2252,7 +2330,6 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.20.12): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} @@ -2269,7 +2346,6 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-syntax-flow@7.18.6(@babel/core@7.22.8): resolution: {integrity: sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==} @@ -2298,7 +2374,6 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.20.12): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} @@ -2456,7 +2531,6 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.20.12): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} @@ -2512,7 +2586,6 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} @@ -2539,7 +2612,6 @@ packages: '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.22.8) transitivePeerDependencies: - supports-color - dev: false /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} @@ -2558,7 +2630,6 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-transform-block-scoping@7.20.15(@babel/core@7.20.12): resolution: {integrity: sha512-Vv4DMZ6MiNOhu/LdaZsT/bsLRxgL94d269Mv4R/9sp6+Mp++X/JqypZYypJXLlM4mlL352/Egzbzr98iABH1CA==} @@ -2577,7 +2648,6 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-transform-classes@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==} @@ -2605,18 +2675,17 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.8 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.8) - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.8) + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: false /@babel/plugin-transform-computed-properties@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} @@ -2637,7 +2706,6 @@ packages: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 '@babel/template': 7.20.7 - dev: false /@babel/plugin-transform-destructuring@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==} @@ -2656,7 +2724,6 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} @@ -2677,7 +2744,6 @@ packages: '@babel/core': 7.22.8 '@babel/helper-create-regexp-features-plugin': 7.20.5(@babel/core@7.22.8) '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.20.12): resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} @@ -2696,7 +2762,6 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} @@ -2717,7 +2782,6 @@ packages: '@babel/core': 7.22.8 '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-transform-flow-strip-types@7.19.0(@babel/core@7.22.8): resolution: {integrity: sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==} @@ -2747,7 +2811,6 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.20.12): resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} @@ -2770,7 +2833,6 @@ packages: '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.8) '@babel/helper-function-name': 7.19.0 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-transform-literals@7.18.9(@babel/core@7.20.12): resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} @@ -2789,7 +2851,6 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} @@ -2808,7 +2869,6 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.20.12): resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} @@ -2833,7 +2893,6 @@ packages: '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color - dev: false /@babel/plugin-transform-modules-commonjs@7.20.11(@babel/core@7.20.12): resolution: {integrity: sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==} @@ -2860,7 +2919,6 @@ packages: '@babel/helper-simple-access': 7.20.2 transitivePeerDependencies: - supports-color - dev: false /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.22.8): resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} @@ -2874,7 +2932,6 @@ packages: '@babel/helper-simple-access': 7.22.5 transitivePeerDependencies: - supports-color - dev: false /@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.20.12): resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} @@ -2903,7 +2960,6 @@ packages: '@babel/helper-validator-identifier': 7.19.1 transitivePeerDependencies: - supports-color - dev: false /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} @@ -2928,7 +2984,6 @@ packages: '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color - dev: false /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.20.12): resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} @@ -2949,7 +3004,6 @@ packages: '@babel/core': 7.22.8 '@babel/helper-create-regexp-features-plugin': 7.20.5(@babel/core@7.22.8) '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} @@ -2968,7 +3022,6 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} @@ -2993,7 +3046,6 @@ packages: '@babel/helper-replace-supers': 7.20.7 transitivePeerDependencies: - supports-color - dev: false /@babel/plugin-transform-parameters@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==} @@ -3012,7 +3064,6 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} @@ -3031,7 +3082,6 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-transform-react-constant-elements@7.22.5(@babel/core@7.22.8): resolution: {integrity: sha512-BF5SXoO+nX3h5OhlN78XbbDrBOffv+AxPP2ENaJOVqjWCgBDeOY3WcaUcddutGSfoap+5NEQ/q/4I3WZIvgkXA==} @@ -3107,7 +3157,6 @@ packages: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 regenerator-transform: 0.15.1 - dev: false /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} @@ -3126,7 +3175,6 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-transform-runtime@7.19.6(@babel/core@7.22.8): resolution: {integrity: sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==} @@ -3143,7 +3191,6 @@ packages: semver: 6.3.0 transitivePeerDependencies: - supports-color - dev: false /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} @@ -3162,7 +3209,6 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-transform-spread@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} @@ -3183,7 +3229,6 @@ packages: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - dev: false /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} @@ -3202,7 +3247,6 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.20.12): resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} @@ -3221,7 +3265,6 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.20.12): resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} @@ -3240,7 +3283,6 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-transform-typescript@7.20.13(@babel/core@7.20.12): resolution: {integrity: sha512-O7I/THxarGcDZxkgWKMUrk7NK1/WbHAg3Xx86gqS6x9MTrNL6AwIluuZ96ms4xeDe6AVx6rjHbWHP7x26EPQBA==} @@ -3269,7 +3311,6 @@ packages: '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.8) transitivePeerDependencies: - supports-color - dev: false /@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.20.12): resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} @@ -3288,7 +3329,6 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} @@ -3309,7 +3349,6 @@ packages: '@babel/core': 7.22.8 '@babel/helper-create-regexp-features-plugin': 7.20.5(@babel/core@7.22.8) '@babel/helper-plugin-utils': 7.20.2 - dev: false /@babel/polyfill@7.12.1: resolution: {integrity: sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==} @@ -3488,7 +3527,6 @@ packages: semver: 6.3.0 transitivePeerDependencies: - supports-color - dev: false /@babel/preset-modules@0.1.5(@babel/core@7.20.12): resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} @@ -3513,7 +3551,6 @@ packages: '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.22.8) '@babel/types': 7.22.5 esutils: 2.0.3 - dev: false /@babel/preset-react@7.18.6(@babel/core@7.22.8): resolution: {integrity: sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==} @@ -3558,7 +3595,6 @@ packages: '@babel/plugin-transform-typescript': 7.22.5(@babel/core@7.22.8) transitivePeerDependencies: - supports-color - dev: false /@babel/regjsgen@0.8.0: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} @@ -3626,7 +3662,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.22.7 '@babel/types': 7.22.5 - debug: 4.3.4 + debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -5265,7 +5301,7 @@ packages: react-refresh: 0.14.0 schema-utils: 3.1.1 source-map: 0.7.4 - webpack: 5.88.1(webpack-cli@5.1.4) + webpack: 5.88.1 webpack-dev-server: 4.15.1(webpack@5.88.1) dev: false @@ -6266,6 +6302,10 @@ packages: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true + /@types/k6@0.39.1: + resolution: {integrity: sha512-hgqiGHQEK0JqyJ7u8s3mZhvHIQG3nNIAowGhSSzc7acusdAQHgRoVb5y/pP+Sstb68gw+3ubjOq21lqpnZ6cww==} + dev: true + /@types/leaflet@1.9.0: resolution: {integrity: sha512-7LeOSj7EloC5UcyOMo+1kc3S1UT3MjJxwqsMT1d2PTyvQz53w0Y0oSSk9nwZnOZubCmBvpSNGceucxiq+ZPEUw==} dependencies: @@ -6471,6 +6511,19 @@ packages: resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} dev: true + /@types/webpack@5.28.5(webpack-cli@4.10.0): + resolution: {integrity: sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw==} + dependencies: + '@types/node': 18.19.33 + tapable: 2.2.1 + webpack: 5.88.1(webpack-cli@4.10.0) + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + - webpack-cli + dev: true + /@types/whatwg-fetch@0.0.33: resolution: {integrity: sha512-XSWTlUwpjUyLiDu50HhtpUyhvt7QND1ANfyFfiw/TH63GC1ngZMl2rgxuH5SQKfPjMoKRXv94r7crWnJ3mg5tA==} deprecated: fetch types are now provided by '--lib dom' @@ -6507,6 +6560,14 @@ packages: '@types/yargs-parser': 21.0.0 dev: true + /@types/yauzl@2.10.3: + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + requiresBuild: true + dependencies: + '@types/node': 18.19.33 + dev: true + optional: true + /@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} engines: {node: ^18.18.0 || >=20.0.0} @@ -6881,6 +6942,16 @@ packages: '@webassemblyjs/ast': 1.11.6 '@xtuc/long': 4.2.2 + /@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0)(webpack@5.88.1): + resolution: {integrity: sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==} + peerDependencies: + webpack: 4.x.x || 5.x.x + webpack-cli: 4.x.x + dependencies: + webpack: 5.88.1(webpack-cli@4.10.0) + webpack-cli: 4.10.0(webpack@5.88.1) + dev: true + /@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.88.1): resolution: {integrity: sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==} engines: {node: '>=14.15.0'} @@ -6890,6 +6961,16 @@ packages: dependencies: webpack: 5.88.1(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack@5.88.1) + dev: true + + /@webpack-cli/info@1.5.0(webpack-cli@4.10.0): + resolution: {integrity: sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==} + peerDependencies: + webpack-cli: 4.x.x + dependencies: + envinfo: 7.8.1 + webpack-cli: 4.10.0(webpack@5.88.1) + dev: true /@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.88.1): resolution: {integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==} @@ -6900,6 +6981,19 @@ packages: dependencies: webpack: 5.88.1(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack@5.88.1) + dev: true + + /@webpack-cli/serve@1.7.0(webpack-cli@4.10.0): + resolution: {integrity: sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==} + peerDependencies: + webpack-cli: 4.x.x + webpack-dev-server: '*' + peerDependenciesMeta: + webpack-dev-server: + optional: true + dependencies: + webpack-cli: 4.10.0(webpack@5.88.1) + dev: true /@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.88.1): resolution: {integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==} @@ -6914,6 +7008,7 @@ packages: dependencies: webpack: 5.88.1(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack@5.88.1) + dev: true /@xtuc/ieee754@1.2.0: resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} @@ -7433,7 +7528,7 @@ packages: babel-plugin-istanbul: 6.1.1 babel-preset-jest: 29.5.0(@babel/core@7.22.8) chalk: 4.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color @@ -7451,9 +7546,24 @@ packages: loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.88.1(webpack-cli@5.1.4) + webpack: 5.88.1 dev: false + /babel-loader@8.3.0(@babel/core@7.22.8)(webpack@5.88.1): + resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} + engines: {node: '>= 8.9'} + peerDependencies: + '@babel/core': ^7.0.0 + webpack: '>=2' + dependencies: + '@babel/core': 7.22.8 + find-cache-dir: 3.3.2 + loader-utils: 2.0.4 + make-dir: 3.1.0 + schema-utils: 2.7.1 + webpack: 5.88.1(webpack-cli@4.10.0) + dev: true + /babel-loader@9.1.3(@babel/core@7.20.12)(webpack@5.88.1): resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} engines: {node: '>= 14.15.0'} @@ -7524,13 +7634,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.20.14 + '@babel/compat-data': 7.22.6 '@babel/core': 7.22.8 '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.22.8) semver: 6.3.0 transitivePeerDependencies: - supports-color - dev: false /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.20.12): resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} @@ -7553,7 +7662,6 @@ packages: core-js-compat: 3.27.2 transitivePeerDependencies: - supports-color - dev: false /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.20.12): resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} @@ -7574,7 +7682,6 @@ packages: '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.22.8) transitivePeerDependencies: - supports-color - dev: false /babel-plugin-transform-react-remove-prop-types@0.4.24: resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==} @@ -7677,6 +7784,10 @@ packages: resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} dev: true + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + /base@0.11.2: resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} engines: {node: '>=0.10.0'} @@ -7722,6 +7833,14 @@ packages: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} + /bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.0 + dev: true + /bluebird@1.0.8: resolution: {integrity: sha512-e8rlJcByuxPdMiiwU3lGtENflMtUncAblzSlN7rBAZ9ygb75D/rng3Xt5FbZpYqVCzK+sFHVIMht4G6fbfUfbA==} dev: true @@ -7835,9 +7954,28 @@ packages: node-int64: 0.4.0 dev: true + /buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + dev: true + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.8.2 + dev: true + /builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} @@ -8086,6 +8224,10 @@ packages: optionalDependencies: fsevents: 2.3.3 + /chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + dev: true + /chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} @@ -8147,6 +8289,16 @@ packages: engines: {node: '>=6'} dev: true + /clean-webpack-plugin@4.0.0(webpack@5.88.1): + resolution: {integrity: sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==} + engines: {node: '>=10.0.0'} + peerDependencies: + webpack: '>=4.0.0 <6.0.0' + dependencies: + del: 4.1.1 + webpack: 5.88.1(webpack-cli@4.10.0) + dev: true + /cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -8181,6 +8333,7 @@ packages: is-plain-object: 2.0.4 kind-of: 6.0.3 shallow-clone: 3.0.1 + dev: true /cls-hooked@4.2.2: resolution: {integrity: sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw==} @@ -8289,6 +8442,7 @@ packages: /commander@10.0.1: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} + dev: true /commander@11.0.0: resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} @@ -8306,7 +8460,6 @@ packages: /commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} - dev: false /commander@8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} @@ -8400,6 +8553,21 @@ packages: engines: {node: '>=0.10.0'} dev: true + /copy-webpack-plugin@11.0.0(webpack@5.88.1): + resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==} + engines: {node: '>= 14.15.0'} + peerDependencies: + webpack: ^5.1.0 + dependencies: + fast-glob: 3.3.0 + glob-parent: 6.0.2 + globby: 13.2.2 + normalize-path: 3.0.0 + schema-utils: 4.2.0 + serialize-javascript: 6.0.1 + webpack: 5.88.1(webpack-cli@4.10.0) + dev: true + /core-js-compat@3.27.2: resolution: {integrity: sha512-welaYuF7ZtbYKGrIy7y3eb40d37rG1FvzEOfe7hSLd2iD6duMDqUhRfSvCGyC46HhR6Y8JXXdZ2lnRUMkPBpvg==} dependencies: @@ -8477,7 +8645,6 @@ packages: hasBin: true dependencies: cross-spawn: 7.0.3 - dev: false /cross-fetch@3.1.5: resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} @@ -8485,7 +8652,6 @@ packages: node-fetch: 2.6.7 transitivePeerDependencies: - encoding - dev: false /cross-fetch@3.1.6: resolution: {integrity: sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==} @@ -8591,7 +8757,7 @@ packages: postcss-modules-values: 4.0.0(postcss@8.4.25) postcss-value-parser: 4.2.0 semver: 7.5.4 - webpack: 5.88.1(webpack-cli@5.1.4) + webpack: 5.88.1 /css-minimizer-webpack-plugin@3.4.1(webpack@5.88.1): resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==} @@ -8618,7 +8784,7 @@ packages: schema-utils: 4.2.0 serialize-javascript: 6.0.1 source-map: 0.6.1 - webpack: 5.88.1(webpack-cli@5.1.4) + webpack: 5.88.1 dev: false /css-prefers-color-scheme@6.0.3(postcss@8.4.21): @@ -9006,7 +9172,6 @@ packages: optional: true dependencies: ms: 2.1.3 - dev: true /decamelize-keys@1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} @@ -9148,6 +9313,19 @@ packages: resolution: {integrity: sha512-zpqiCT8bODLu3QSmLLic8xJnYWBFjOSu/fBCm189oAiTtPq/PSanNACKZDS7kgSyCJY7P+IcODzlIogBK/9RBg==} dev: true + /del@4.1.1: + resolution: {integrity: sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==} + engines: {node: '>=6'} + 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 + dev: true + /del@5.1.0: resolution: {integrity: sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==} engines: {node: '>=8'} @@ -9206,6 +9384,10 @@ packages: - supports-color dev: false + /devtools-protocol@0.0.1001819: + resolution: {integrity: sha512-G6OsIFnv/rDyxSqBa2lDLR6thp9oJioLsb2Gl+LbQlyoA9/OBAkrTU9jiCcQ8Pnh7z4d6slDiLaogR5hzgJLmQ==} + dev: true + /diagnostic-channel-publishers@1.0.6(diagnostic-channel@1.1.0): resolution: {integrity: sha512-RE5AP4JmEm/CV06gOyFdgWWm3gMNOoXulod2mq4ysiz9s77ZhHb1P1DGrfePHjNOmgvWglhegmj5q8DNtjRrEg==} peerDependencies: @@ -9395,6 +9577,15 @@ packages: resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} dev: false + /dotenv-json-complex@1.0.4: + resolution: {integrity: sha512-Up7nxudYj4X7XcACMzrVCse8gEORrZ782JyIXJS4PZmOa/VKGkcVkZOh/Y0eHeFQI/LRV5Lw1Wxk6iG53070Mg==} + dev: true + + /dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + dev: true + /dotenv@9.0.2: resolution: {integrity: sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==} engines: {node: '>=10'} @@ -9452,9 +9643,15 @@ packages: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} - /enhanced-resolve@5.12.0: - resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} - engines: {node: '>=10.13.0'} + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: true + + /enhanced-resolve@5.12.0: + resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} + engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.10 tapable: 2.2.1 @@ -9486,6 +9683,7 @@ packages: resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==} engines: {node: '>=4'} hasBin: true + dev: true /environment@1.1.0: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} @@ -9506,7 +9704,7 @@ packages: react-error-overlay: 6.0.9 sockjs-client: 1.6.1 url: 0.11.0 - webpack: 5.88.1(webpack-cli@5.1.4) + webpack: 5.88.1 transitivePeerDependencies: - eslint - supports-color @@ -9822,7 +10020,7 @@ packages: debug: 4.3.4 enhanced-resolve: 5.12.0 eslint: 8.57.0 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@7.18.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.57.0) + eslint-module-utils: 2.7.4(@typescript-eslint/parser@7.18.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.57.0) eslint-plugin-import: 2.27.5(@typescript-eslint/parser@7.18.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.57.0) get-tsconfig: 4.6.2 globby: 13.2.2 @@ -9896,6 +10094,35 @@ packages: - supports-color dev: true + /eslint-module-utils@2.7.4(@typescript-eslint/parser@7.18.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.57.0): + resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + debug: 3.2.7 + eslint: 8.57.0 + eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@7.18.0)(eslint-plugin-import@2.27.5)(eslint@8.57.0) + transitivePeerDependencies: + - supports-color + dev: true + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0): resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} @@ -10079,7 +10306,7 @@ packages: micromatch: 4.0.5 normalize-path: 3.0.0 schema-utils: 4.0.0 - webpack: 5.88.1(webpack-cli@5.1.4) + webpack: 5.88.1 dev: true /eslint@8.43.0: @@ -10425,6 +10652,20 @@ packages: - supports-color dev: true + /extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + dependencies: + debug: 4.3.7 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + dev: true + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -10470,6 +10711,7 @@ packages: /fastest-levenshtein@1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} + dev: true /fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} @@ -10494,6 +10736,12 @@ packages: bser: 2.1.1 dev: true + /fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + dependencies: + pend: 1.2.0 + dev: true + /fetch-cookie@2.1.0: resolution: {integrity: sha512-39+cZRbWfbibmj22R2Jy6dmTbAWC+oqun1f1FzQaNurkPDUP4C38jpeZbiXCR88RKRVDp8UcDrbFXkNhN+NjYg==} dependencies: @@ -10515,7 +10763,7 @@ packages: dependencies: loader-utils: 2.0.4 schema-utils: 3.1.1 - webpack: 5.88.1(webpack-cli@5.1.4) + webpack: 5.88.1 dev: false /filelist@1.0.4: @@ -10669,7 +10917,7 @@ packages: semver: 7.5.4 tapable: 1.1.3 typescript: 5.5.4 - webpack: 5.88.1(webpack-cli@5.1.4) + webpack: 5.88.1 dev: false /fork-ts-checker-webpack-plugin@8.0.0(typescript@5.5.4)(webpack@5.75.0): @@ -10732,6 +10980,10 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} + /fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + dev: true + /fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -10835,6 +11087,13 @@ packages: engines: {node: '>=8.0.0'} dev: true + /get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + dependencies: + pump: 3.0.2 + dev: true + /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -10894,6 +11153,17 @@ packages: /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + /glob@5.0.15: + resolution: {integrity: sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==} + deprecated: Glob versions prior to v9 are no longer supported + dependencies: + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + /glob@7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} dependencies: @@ -10988,6 +11258,17 @@ packages: slash: 4.0.0 dev: true + /globby@6.1.0: + resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==} + engines: {node: '>=0.10.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 + dev: true + /globby@8.0.2: resolution: {integrity: sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==} engines: {node: '>=4'} @@ -11262,7 +11543,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.88.1(webpack-cli@5.1.4) + webpack: 5.88.1 dev: false /htmlparser2@3.10.1: @@ -11429,6 +11710,10 @@ packages: dependencies: harmony-reflect: 1.6.2 + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true + /iframe-resizer-react@1.1.0(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-FrytSq91AIJaDgE+6uK/Vdd6IR8CrwLoZ6eGmL2qQMPTzF0xlSV2jaSzRRUh5V2fttD7vzl21jvBl97bV40eBw==} engines: {node: '>=8', npm: '>=5'} @@ -11516,6 +11801,7 @@ packages: dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 + dev: true /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} @@ -11576,9 +11862,15 @@ packages: engines: {node: '>= 0.10'} dev: true + /interpret@2.2.0: + resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==} + engines: {node: '>= 0.10'} + dev: true + /interpret@3.1.1: resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} engines: {node: '>=10.13.0'} + dev: true /intersection-observer@0.11.0: resolution: {integrity: sha512-KZArj2QVnmdud9zTpKf279m2bbGfG+4/kn16UU0NL3pTVl52ZHiJ9IRNSsnn6jaHrL9EGLFM5eWjTx2fz/+zoQ==} @@ -11862,6 +12154,20 @@ packages: engines: {node: '>=6'} dev: true + /is-path-in-cwd@2.1.0: + resolution: {integrity: sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==} + engines: {node: '>=6'} + dependencies: + is-path-inside: 2.1.0 + dev: true + + /is-path-inside@2.1.0: + resolution: {integrity: sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==} + engines: {node: '>=6'} + dependencies: + path-is-inside: 1.0.2 + dev: true + /is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} @@ -11885,6 +12191,7 @@ packages: engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 + dev: true /is-plain-object@5.0.0: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} @@ -12010,6 +12317,7 @@ packages: /isobject@3.0.1: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} + dev: true /istanbul-lib-coverage@3.2.0: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} @@ -12713,6 +13021,10 @@ packages: object.assign: 4.1.4 dev: true + /k6@0.0.0: + resolution: {integrity: sha512-GAQSWayS2+LjbH5bkRi+pMPYyP1JSp7o+4j58ANZ762N/RH/SdlAT3CHHztnn8s/xgg8kYNM24Gd2IPo9b5W+g==} + dev: true + /kind-of@3.2.2: resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} engines: {node: '>=0.10.0'} @@ -13419,7 +13731,7 @@ packages: webpack: ^5.0.0 dependencies: schema-utils: 4.2.0 - webpack: 5.88.1(webpack-cli@5.1.4) + webpack: 5.88.1 dev: false /minimalistic-assert@1.0.1: @@ -13505,6 +13817,10 @@ packages: is-extendable: 1.0.1 dev: true + /mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + dev: true + /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -13692,12 +14008,16 @@ packages: optional: true dependencies: whatwg-url: 5.0.0 - dev: false /node-forge@1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} + /node-gyp-build@4.8.2: + resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==} + hasBin: true + dev: true + /node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true @@ -14041,6 +14361,11 @@ packages: p-limit: 4.0.0 dev: true + /p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + dev: true + /p-map@3.0.0: resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} engines: {node: '>=8'} @@ -14159,6 +14484,10 @@ packages: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} + /path-is-inside@1.0.2: + resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} + dev: true + /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -14191,6 +14520,10 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + /pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + dev: true + /performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} dev: false @@ -14222,6 +14555,23 @@ packages: engines: {node: '>=4'} dev: true + /pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + dev: true + + /pinkie-promise@2.0.1: + resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} + engines: {node: '>=0.10.0'} + dependencies: + pinkie: 2.0.4 + dev: true + + /pinkie@2.0.4: + resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} + engines: {node: '>=0.10.0'} + dev: true + /pirates@4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} @@ -14623,7 +14973,7 @@ packages: klona: 2.0.6 postcss: 8.4.21 semver: 7.5.4 - webpack: 5.88.1(webpack-cli@5.1.4) + webpack: 5.88.1 dev: false /postcss-loader@7.3.3(postcss@8.4.25)(webpack@5.88.1): @@ -15434,6 +15784,11 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + /progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + dev: true + /promise-inflight@1.0.1: resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} peerDependencies: @@ -15486,11 +15841,17 @@ packages: /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: false /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + /pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + /punycode@1.3.2: resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} @@ -15498,6 +15859,31 @@ packages: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} + /puppeteer@14.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10): + resolution: {integrity: sha512-+H0Gm84aXUvSLdSiDROtLlOofftClgw2TdceMvvCU9UvMryappoeS3+eOLfKvoy4sm8B8MWnYmPhWxVFudAOFQ==} + engines: {node: '>=14.1.0'} + deprecated: < 22.8.2 is no longer supported + requiresBuild: true + dependencies: + cross-fetch: 3.1.5 + debug: 4.3.4 + devtools-protocol: 0.0.1001819 + extract-zip: 2.0.1 + https-proxy-agent: 5.0.1 + pkg-dir: 4.2.0 + progress: 2.0.3 + proxy-from-env: 1.1.0 + rimraf: 3.0.2 + tar-fs: 2.1.1 + unbzip2-stream: 1.4.3 + ws: 8.7.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + /pure-rand@6.0.2: resolution: {integrity: sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==} dev: true @@ -15633,7 +16019,7 @@ packages: strip-ansi: 6.0.1 text-table: 0.2.0 typescript: 5.5.4 - webpack: 5.88.1(webpack-cli@5.1.4) + webpack: 5.88.1 transitivePeerDependencies: - eslint - supports-color @@ -16091,11 +16477,19 @@ packages: resolve: 1.22.2 dev: true + /rechoir@0.7.1: + resolution: {integrity: sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==} + engines: {node: '>= 0.10'} + dependencies: + resolve: 1.22.2 + dev: true + /rechoir@0.8.0: resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} engines: {node: '>= 10.13.0'} dependencies: resolve: 1.22.2 + dev: true /recursive-readdir@2.2.3: resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} @@ -16264,7 +16658,7 @@ packages: resolution: {integrity: sha512-OScOjQjrrjhAdFpQmnkE/qbIBGCRFhQB/YaJhcC3CPOlmhe7llnW46Ac1J5+EjcNXOTnDdpF96Erw/yedsGksQ==} engines: {node: '>=8.6.0'} dependencies: - debug: 4.3.4 + debug: 4.3.7 module-details-from-path: 1.0.3 resolve: 1.22.2 transitivePeerDependencies: @@ -16279,6 +16673,7 @@ packages: engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 + dev: true /resolve-from@3.0.0: resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} @@ -16292,6 +16687,7 @@ packages: /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} + dev: true /resolve-pathname@3.0.0: resolution: {integrity: sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==} @@ -16378,6 +16774,14 @@ packages: resolution: {integrity: sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==} dev: true + /rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true @@ -16482,7 +16886,7 @@ packages: dependencies: neo-async: 2.6.2 sass: 1.32.13 - webpack: 5.88.1(webpack-cli@5.1.4) + webpack: 5.88.1 dev: false /sass@1.32.13: @@ -16684,6 +17088,7 @@ packages: engines: {node: '>=8'} dependencies: kind-of: 6.0.3 + dev: true /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -16858,7 +17263,7 @@ packages: abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.0.2 - webpack: 5.88.1(webpack-cli@5.1.4) + webpack: 5.88.1 dev: false /source-map-resolve@0.5.3: @@ -17209,7 +17614,7 @@ packages: peerDependencies: webpack: ^5.0.0 dependencies: - webpack: 5.88.1(webpack-cli@5.1.4) + webpack: 5.88.1 /style-search@0.1.0: resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==} @@ -17336,7 +17741,7 @@ packages: normalize-path: 3.0.0 schema-utils: 4.0.0 stylelint: 15.7.0 - webpack: 5.88.1(webpack-cli@5.1.4) + webpack: 5.88.1 dev: true /stylelint@15.10.2: @@ -17562,6 +17967,26 @@ packages: through: 2.3.8 dev: true + /tar-fs@2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.2 + tar-stream: 2.2.0 + dev: true + + /tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.0 + dev: true + /tar@6.1.13: resolution: {integrity: sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==} engines: {node: '>=10'} @@ -17654,7 +18079,7 @@ packages: schema-utils: 3.3.0 serialize-javascript: 6.0.1 terser: 5.18.2 - webpack: 5.88.1(webpack-cli@5.1.4) + webpack: 5.88.1 /terser@4.8.1: resolution: {integrity: sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==} @@ -17798,7 +18223,6 @@ packages: /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: false /tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} @@ -17984,6 +18408,12 @@ packages: for-each: 0.3.3 is-typed-array: 1.1.10 + /typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + /typescript@5.5.4: resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} @@ -17997,6 +18427,13 @@ packages: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 + /unbzip2-stream@1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + dependencies: + buffer: 5.7.1 + through: 2.3.8 + dev: true + /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} @@ -18256,6 +18693,14 @@ packages: engines: {node: '>=0.10.0'} dev: true + /utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.8.2 + dev: true + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -18394,7 +18839,6 @@ packages: /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: false /webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} @@ -18428,6 +18872,41 @@ packages: - utf-8-validate dev: false + /webpack-cli@4.10.0(webpack@5.88.1): + resolution: {integrity: sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + '@webpack-cli/generators': '*' + '@webpack-cli/migrate': '*' + webpack: 4.x.x || 5.x.x + webpack-bundle-analyzer: '*' + webpack-dev-server: '*' + peerDependenciesMeta: + '@webpack-cli/generators': + optional: true + '@webpack-cli/migrate': + optional: true + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + dependencies: + '@discoveryjs/json-ext': 0.5.7 + '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0)(webpack@5.88.1) + '@webpack-cli/info': 1.5.0(webpack-cli@4.10.0) + '@webpack-cli/serve': 1.7.0(webpack-cli@4.10.0) + colorette: 2.0.20 + commander: 7.2.0 + cross-spawn: 7.0.3 + fastest-levenshtein: 1.0.16 + import-local: 3.1.0 + interpret: 2.2.0 + rechoir: 0.7.1 + webpack: 5.88.1(webpack-cli@4.10.0) + webpack-merge: 5.8.0 + dev: true + /webpack-cli@5.1.4(webpack@5.88.1): resolution: {integrity: sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==} engines: {node: '>=14.15.0'} @@ -18459,6 +18938,7 @@ packages: rechoir: 0.8.0 webpack: 5.88.1(webpack-cli@5.1.4) webpack-merge: 5.8.0 + dev: true /webpack-dev-middleware@5.3.3(webpack@5.75.0): resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} @@ -18485,7 +18965,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.88.1(webpack-cli@5.1.4) + webpack: 5.88.1 dev: false /webpack-dev-server@4.11.1(webpack@5.75.0): @@ -18577,7 +19057,7 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.88.1(webpack-cli@5.1.4) + webpack: 5.88.1 webpack-dev-middleware: 5.3.3(webpack@5.88.1) ws: 8.13.0 transitivePeerDependencies: @@ -18587,6 +19067,12 @@ packages: - utf-8-validate dev: false + /webpack-glob-entries@1.0.1: + resolution: {integrity: sha512-ebis0/kd0CxxlZabcnCcKA2Dc5fZJvtadOR+72I8U4z3Umaq9iGQLF69n3p+nMBWK1tKvKkdfZ8Rm2+f6JUCww==} + dependencies: + glob: 5.0.15 + dev: true + /webpack-manifest-plugin@5.0.0(webpack@5.88.1): resolution: {integrity: sha512-8RQfMAdc5Uw3QbCQ/CBV/AXqOR8mt03B6GJmRbhWopE8GzRfEpn+k0ZuWywxW+5QZsffhmFDY1J6ohqJo+eMuw==} engines: {node: '>=12.22.0'} @@ -18594,7 +19080,7 @@ packages: webpack: ^5.47.0 dependencies: tapable: 2.2.1 - webpack: 5.88.1(webpack-cli@5.1.4) + webpack: 5.88.1 webpack-sources: 2.3.1 dev: false @@ -18604,6 +19090,7 @@ packages: dependencies: clone-deep: 4.0.1 wildcard: 2.0.0 + dev: true /webpack-sources@1.4.3: resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} @@ -18661,7 +19148,7 @@ packages: - esbuild - uglify-js - /webpack@5.88.1(webpack-cli@5.1.4): + /webpack@5.88.1: resolution: {integrity: sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==} engines: {node: '>=10.13.0'} hasBin: true @@ -18694,12 +19181,93 @@ packages: tapable: 2.2.1 terser-webpack-plugin: 5.3.9(webpack@5.88.1) watchpack: 2.4.0 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + /webpack@5.88.1(webpack-cli@4.10.0): + resolution: {integrity: sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.4 + '@types/estree': 1.0.0 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/wasm-edit': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + acorn: 8.10.0 + acorn-import-assertions: 1.9.0(acorn@8.10.0) + browserslist: 4.21.9 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.15.0 + es-module-lexer: 1.3.0 + 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.1 + terser-webpack-plugin: 5.3.9(webpack@5.88.1) + watchpack: 2.4.0 + webpack-cli: 4.10.0(webpack@5.88.1) + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: true + + /webpack@5.88.1(webpack-cli@5.1.4): + resolution: {integrity: sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.4 + '@types/estree': 1.0.0 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/wasm-edit': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + acorn: 8.10.0 + acorn-import-assertions: 1.9.0(acorn@8.10.0) + browserslist: 4.21.9 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.15.0 + es-module-lexer: 1.3.0 + 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.1 + terser-webpack-plugin: 5.3.9(webpack@5.88.1) + watchpack: 2.4.0 webpack-cli: 5.1.4(webpack@5.88.1) webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js + dev: true /websocket-driver@0.7.4: resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} @@ -18749,7 +19317,6 @@ packages: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: false /whatwg-url@7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} @@ -18803,6 +19370,7 @@ packages: /wildcard@2.0.0: resolution: {integrity: sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==} + dev: true /wmf@1.0.2: resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} @@ -18971,7 +19539,7 @@ packages: fast-json-stable-stringify: 2.1.0 pretty-bytes: 5.6.0 upath: 1.2.0 - webpack: 5.88.1(webpack-cli@5.1.4) + webpack: 5.88.1 webpack-sources: 1.4.3 workbox-build: 7.0.0 transitivePeerDependencies: @@ -19061,6 +19629,22 @@ packages: utf-8-validate: optional: true + /ws@8.7.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + resolution: {integrity: sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + dev: true + /xhr-mock@2.5.1: resolution: {integrity: sha512-UKOjItqjFgPUwQGPmRAzNBn8eTfIhcGjBVGvKYAWxUQPQsXNGD6KEckGTiHwyaAUp9C9igQlnN1Mp79KWCg7CQ==} dependencies: @@ -19144,6 +19728,13 @@ packages: yargs-parser: 21.1.1 dev: true + /yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + dev: true + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 684e6f0669e..6ed4680bfae 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,3 +3,4 @@ packages: - 'src/explore-education-statistics-ckeditor' - 'src/explore-education-statistics-common' - 'src/explore-education-statistics-frontend' + - 'tests/performance-tests' diff --git a/tests/performance-tests/.env.example.json b/tests/performance-tests/.env.example.json index ca49ac233df..af18df8d4f2 100644 --- a/tests/performance-tests/.env.example.json +++ b/tests/performance-tests/.env.example.json @@ -5,7 +5,7 @@ "publicUrl": "http://ees.local:3000", "contentApiUrl": "http://ees.local:5010/api", "dataApiUrl": "http://ees.local:5000/api", - "publicApiUrl": "http://ees.local:5051/api", + "publicApiUrl": "https://ees.local:5051/api", "users": [ { "name": "bau1", diff --git a/tests/performance-tests/Dockerfile-node-chromium b/tests/performance-tests/Dockerfile-node-chromium index 10fdd65c6e4..c98fefaa8ab 100644 --- a/tests/performance-tests/Dockerfile-node-chromium +++ b/tests/performance-tests/Dockerfile-node-chromium @@ -1,7 +1,7 @@ -FROM node:16 +FROM node:20.16.0 RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \ && echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list \ && apt-get update \ && apt-get -y install google-chrome-stable \ - && rm -rf /var/lib/apt/lists \ No newline at end of file + && rm -rf /var/lib/apt/lists diff --git a/tests/performance-tests/README.md b/tests/performance-tests/README.md index 69c2d762cfa..ee17e37e36d 100644 --- a/tests/performance-tests/README.md +++ b/tests/performance-tests/README.md @@ -3,6 +3,42 @@ The performance test suite is built using [k6](https://k6.io/) and visualised using [Grafana](https://grafana.com/) and [InfluxDB](https://www.influxdata.com/). +## Quick start + +1. Start your local EES environment. +2. Ensure you have `127.0.0.1 ees.local` in your `hosts` file. +3. If running in Ubuntu, refer to the [Ubuntu firewall steps](#ubuntu-firewall-steps). +4. Run: + ```bash + cd tests/performance-tests + + # Copy the default .env JSON file for a local environment. + cp .env.example.json .env.local.json + + # Start Grafana and InfluxDB. + pnpm start + + # Compile the tests and copy .env.local.json to dist/ folder. + pnpm webpack + + # Obtain access tokens for the "bau1" user. + pnpm --environment=local --users=bau1 auth + + # Run the import test. + pnpm --environment=local perftest dist/import.test.js + ``` +5. This example will run the import test against your local environment. + Navigate to the [EES Grafana Dashboard](http://localhost:3005/d/ees-dashboard/ees-dashboard?orgId=1&refresh=5s) and + expand the "Imports" panel to watch the results. +6. You can stop the test at any time and clean up the test data generated by running: + ```bash + # Clear down the performance test data. + pnpm --environment=local perftest dist/cleanUp.test.js + + # Stop Grafana and InfluxDb. + pnpm stop + ``` + ## How it works * We run InfluxDB (for collecting data) and Grafana (for visualising the collected data) using docker-compose. @@ -28,7 +64,7 @@ NOTE: All commands in this README are issued from the `tests/performance-tests` Run: ```bash -npm ci +pnpm i ``` ### Add ees.local to your hosts file @@ -47,11 +83,11 @@ generating load - the tests can run independently of these if we're just wanting some load, for example. ```bash -npm start +pnpm start ``` -To stop them later, run `npm stop`. Note that this will not destroy any data. To remove any data, -run `npm run stop-and-clear-data`. +To stop them later, run `pnpm stop`. Note that this will not destroy any data. To remove any data, +run `pnpm stop:clear`. ### Compile the tests @@ -59,8 +95,13 @@ The tests are written in Typescript so we need to transpile them to work in K6 ( Go-based, not Node JS-based). We use Webpack and Babel for this. ```bash -npm run webpack # use "npm run webpack watch" instead if wanting to continue running webpack - # repeatedly during test development +pnpm webpack +``` + +or for continual compilation during development: + +```bash +pnpm webpack watch ``` ### Run the tests @@ -77,6 +118,7 @@ be any value that we can load test against. As an example, if doing load testing development against a local environment, we would create a file called `tests/performance-tests/.env.local.json` and supply the local user credentials within the file. + #### Allow access to host ports from containers This step is only required if running performance tests locally against the host machine. @@ -103,7 +145,7 @@ This step is only required if running performance tests that require access to t It requires the above step of creating environment-specific .env..json files first. ```bash -npm run login --environment= --users= +pnpm --environment= --users= auth ``` This obtains an `access_token` and a `refresh_token` that can be used to access protected resources @@ -114,13 +156,13 @@ This will look in the `.env..json` file for a user with `"name": "< that user's credentials to log into Admin in order to obtain their auth tokens. Details of the environment and the users' access tokens can then be found in a generated file -named `dist/.login-tokens..json`. This file is then used by the tests +named `dist/.auth-tokens..json`. This file is then used by the tests themselves to run against the same environment. As a concrete example: ```bash -npm run login --environment=local --users=bau1 +pnpm --environment=local --users=bau1 auth ``` will store access and refresh tokens for the user `bau1` against the local environment. @@ -128,13 +170,13 @@ will store access and refresh tokens for the user `bau1` against the local envir #### Run individual tests ```bash -npm run test dist/some-test-script.test.js --environment= +pnpm --environment= perftest dist/some-test-script.test.js ``` An example of running an actual script would be: ```bash -npm run test dist/import.test.js --environment=local +pnpm --environment=local perftest dist/import.test.js ``` Each test script is runnable against any environment. They will find existing or set up new @@ -237,7 +279,7 @@ Full sets of options per test are available below as examples: * DATA_FILE - default value is "small-file.csv" which is in source control. See notes above on the use of large ZIP files. -`npm run test dist/import.test.js --environment=dev --users=bau1 -- +`pnpm --environment=dev --users=bau1 perftest dist/import.test.js -e PUBLICATION_TITLE="Import publication" -e DATA_FILE="big-file1.zip"` #### getReleasePage.test.js @@ -258,7 +300,7 @@ fine-tuned further using the common override parameters defined in * DATA_FILE - default value is "small-file.csv" which is in source control. See notes above on the use of large ZIP files. -`npm run test dist/publicTableBuilderQuery.test.js --environment=dev --users=bau1 -- +`pnpm --environment=dev --users=bau1 perftest dist/publicTableBuilderQuery.test.js -e PUBLICATION_TITLE="Public table builder query" -e DATA_FILE="big-file1.zip"` #### adminTableBuilderQuery.test.js @@ -267,7 +309,7 @@ fine-tuned further using the common override parameters defined in * DATA_FILE - default value is "small-file.csv" which is in source control. See notes above on the use of large ZIP files. -`npm run test dist/adminTableBuilderQuery.test.js --environment=dev --users=bau1 -- +`pnpm --environment=dev --users=bau1 perftest dist/adminTableBuilderQuery.test.js -e PUBLICATION_TITLE="Admin table builder query" -e DATA_FILE="big-file1.zip"` #### publicApiDataSetQuery.test.js @@ -324,7 +366,7 @@ To enable this in Node, we can supply the `-r source-map-support/register` optio problem script. For example: ```bash -node -r source-map-support/register dist/logAuthTokens.js local bau1 +node --enable-source-maps dist/logAuthTokens.js local bau1 ``` would result in stacktraces that point back to the original `src/auth/logAuthTokens.ts` Typescript @@ -341,8 +383,8 @@ Run the following to test that the environment under test supports refresh token in your `.env..json file). ```bash -npm run login --environment= --users=bau1) -npm run test dist/refreshTokens.test.js --environment=local +pnpm --environment= --users=bau1 auth +pnpm --environment=local perftest dist/refreshTokens.test.js ``` The output should look like: diff --git a/tests/performance-tests/package.json b/tests/performance-tests/package.json index 188217f5818..62944032563 100644 --- a/tests/performance-tests/package.json +++ b/tests/performance-tests/package.json @@ -6,9 +6,9 @@ "webpack": "webpack", "start": "docker-compose up -d influxdb grafana", "stop": "docker-compose down", - "stop-and-clear-data": "docker-compose down -v", - "login": "docker-compose run --rm --user \"$(id -u):$(id -g)\" node -r source-map-support/register dist/storeAuthTokens.js ${npm_config_environment} ${npm_config_users}", - "test": "cross-env TEST_ENVIRONMENT=${npm_config_environment} docker-compose run --rm k6 run", + "stop:clear": "docker-compose down -v", + "auth": "docker-compose run --rm --user \"$(id -u):$(id -g)\" node --enable-source-maps dist/storeAuthTokens.js ${npm_config_environment} ${npm_config_users}", + "perftest": "cross-env TEST_ENVIRONMENT=${npm_config_environment} docker-compose run --rm k6 run", "tsc": "tsc --noEmit" }, "dependencies": { diff --git a/tests/performance-tests/src/auth/storeAuthTokens.ts b/tests/performance-tests/src/auth/storeAuthTokens.ts index 83ead1d6579..f4213d859f3 100644 --- a/tests/performance-tests/src/auth/storeAuthTokens.ts +++ b/tests/performance-tests/src/auth/storeAuthTokens.ts @@ -47,7 +47,7 @@ const writeLoginCredentialsToFile = async ( }), ); - const loginCredentialsFilePath = `/home/node/app/dist/.login-tokens.${environmentName}.json`; + const loginCredentialsFilePath = `/home/node/app/dist/.auth-tokens.${environmentName}.json`; fs.writeFileSync(loginCredentialsFilePath, JSON.stringify(authTokens)); }; diff --git a/tests/performance-tests/src/utils/environmentAndUsers.ts b/tests/performance-tests/src/utils/environmentAndUsers.ts index 632355b1e53..d76bd6fefcd 100644 --- a/tests/performance-tests/src/utils/environmentAndUsers.ts +++ b/tests/performance-tests/src/utils/environmentAndUsers.ts @@ -14,7 +14,7 @@ export default function getEnvironmentAndUsersFromFile( const environment = JSON.parse(open(environmentFilePath)) .environment as Environment; - const loginCredentialsPath = `.login-tokens.${environmentName}.json`; + const loginCredentialsPath = `.auth-tokens.${environmentName}.json`; const loginCredentials = JSON.parse( open(loginCredentialsPath), ) as AuthDetails[]; From a448aed40ede7849830474bb2ac972c29124feef Mon Sep 17 00:00:00 2001 From: Duncan Watson Date: Wed, 23 Oct 2024 22:55:10 +0100 Subject: [PATCH 05/12] EES-4877 - separating performance tests from main PNPM workspace --- pnpm-lock.yaml | 837 +---- pnpm-workspace.yaml | 1 - tests/performance-tests/pnpm-lock.yaml | 3127 +++++++++++++++++++ tests/performance-tests/pnpm-workspace.yaml | 2 + 4 files changed, 3252 insertions(+), 715 deletions(-) create mode 100644 tests/performance-tests/pnpm-lock.yaml create mode 100644 tests/performance-tests/pnpm-workspace.yaml diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1d9e0f92320..041617ce83d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -376,7 +376,7 @@ importers: version: 0.9.0(immer@10.0.2)(react@18.2.0) webpack: specifier: ^5.88.1 - version: 5.88.1 + version: 5.88.1(webpack-cli@5.1.4) webpack-dev-server: specifier: ^4.15.1 version: 4.15.1(webpack@5.88.1) @@ -1059,91 +1059,6 @@ importers: specifier: ^4.3.1 version: 4.11.1(webpack@5.75.0) - tests/performance-tests: - dependencies: - buffer-from: - specifier: ^1.1.2 - version: 1.1.2 - lodash: - specifier: ^4.17.21 - version: 4.17.21 - source-map: - specifier: ^0.7.4 - version: 0.7.4 - source-map-support: - specifier: ^0.5.21 - version: 0.5.21 - devDependencies: - '@babel/core': - specifier: ^7.19.0 - version: 7.22.8 - '@babel/plugin-proposal-class-properties': - specifier: ^7.18.6 - version: 7.18.6(@babel/core@7.22.8) - '@babel/plugin-proposal-object-rest-spread': - specifier: 7.18.9 - version: 7.18.9(@babel/core@7.22.8) - '@babel/plugin-transform-runtime': - specifier: ^7.18.10 - version: 7.19.6(@babel/core@7.22.8) - '@babel/preset-env': - specifier: ^7.19.0 - version: 7.20.2(@babel/core@7.22.8) - '@babel/preset-typescript': - specifier: ^7.18.6 - version: 7.22.5(@babel/core@7.22.8) - '@types/k6': - specifier: ^0.39.1 - version: 0.39.1 - '@types/lodash': - specifier: ^4.14.191 - version: 4.14.195 - '@types/webpack': - specifier: ^5.28.0 - version: 5.28.5(webpack-cli@4.10.0) - babel-loader: - specifier: ^8.2.5 - version: 8.3.0(@babel/core@7.22.8)(webpack@5.88.1) - bufferutil: - specifier: ^4.0.6 - version: 4.0.8 - clean-webpack-plugin: - specifier: ^4.0.0 - version: 4.0.0(webpack@5.88.1) - copy-webpack-plugin: - specifier: ^11.0.0 - version: 11.0.0(webpack@5.88.1) - cross-env: - specifier: ^7.0.3 - version: 7.0.3 - dotenv: - specifier: ^16.0.2 - version: 16.4.5 - dotenv-json-complex: - specifier: ^1.0.4 - version: 1.0.4 - k6: - specifier: ^0.0.0 - version: 0.0.0 - puppeteer: - specifier: ^14.4.0 - version: 14.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) - typescript: - specifier: ^4.8.3 - version: 4.9.5 - utf-8-validate: - specifier: ^5.0.9 - version: 5.0.10 - webpack: - specifier: ^5.74.0 - version: 5.88.1(webpack-cli@4.10.0) - webpack-cli: - specifier: ^4.10.0 - version: 4.10.0(webpack@5.88.1) - webpack-glob-entries: - specifier: ^1.0.1 - version: 1.0.1 - packages: /@adobe/css-tools@4.3.3: @@ -1319,7 +1234,7 @@ packages: '@babel/types': 7.22.5 '@nicolo-ribaudo/semver-v6': 6.3.3 convert-source-map: 1.9.0 - debug: 4.3.7 + debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 transitivePeerDependencies: @@ -1386,6 +1301,7 @@ packages: browserslist: 4.21.9 lru-cache: 5.1.1 semver: 6.3.0 + dev: false /@babel/helper-compilation-targets@7.22.6(@babel/core@7.20.12): resolution: {integrity: sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==} @@ -1448,6 +1364,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 transitivePeerDependencies: - supports-color + dev: false /@babel/helper-create-class-features-plugin@7.22.6(@babel/core@7.20.12): resolution: {integrity: sha512-iwdzgtSiBxF6ni6mzVnZCF3xt5qE6cEA0J7nFt8QOAWZ0zjCFceEgpn3vtb2V7WFR6QzP2jmIFOHMTRo7eNJjQ==} @@ -1486,6 +1403,7 @@ packages: '@nicolo-ribaudo/semver-v6': 6.3.3 transitivePeerDependencies: - supports-color + dev: false /@babel/helper-create-regexp-features-plugin@7.20.5(@babel/core@7.20.12): resolution: {integrity: sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==} @@ -1506,6 +1424,7 @@ packages: '@babel/core': 7.22.8 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.0 + dev: false /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.20.12): resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} @@ -1530,12 +1449,13 @@ packages: '@babel/core': 7.22.8 '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.8) '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.7 + debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.2 semver: 6.3.0 transitivePeerDependencies: - supports-color + dev: false /@babel/helper-environment-visitor@7.18.9: resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} @@ -1678,6 +1598,7 @@ packages: '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color + dev: false /@babel/helper-replace-supers@7.20.7: resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==} @@ -1843,6 +1764,7 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} @@ -1865,6 +1787,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 '@babel/plugin-proposal-optional-chaining': 7.20.7(@babel/core@7.22.8) + dev: false /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} @@ -1893,32 +1816,32 @@ packages: '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.8) transitivePeerDependencies: - supports-color + dev: false /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} 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-properties instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.22.6(@babel/core@7.20.12) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.20.12(@babel/core@7.20.12) + '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.22.8): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} 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-properties instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.8 - '@babel/helper-create-class-features-plugin': 7.22.6(@babel/core@7.22.8) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.20.12(@babel/core@7.22.8) + '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color + dev: false /@babel/plugin-proposal-class-static-block@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==} @@ -1945,6 +1868,7 @@ packages: '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.8) transitivePeerDependencies: - supports-color + dev: false /@babel/plugin-proposal-decorators@7.20.13(@babel/core@7.22.8): resolution: {integrity: sha512-7T6BKHa9Cpd7lCueHBBzP0nkXNina+h5giOZw+a8ZpMfPFY19VjJAjIxyFHuWkhCWgL6QMqRiY/wB1fLXzm6Mw==} @@ -1981,6 +1905,7 @@ packages: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.8) + dev: false /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.20.12): resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} @@ -2001,6 +1926,7 @@ packages: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.8) + dev: false /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} @@ -2021,6 +1947,7 @@ packages: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.8) + dev: false /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} @@ -2041,6 +1968,7 @@ packages: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.8) + dev: false /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} @@ -2061,6 +1989,7 @@ packages: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.8) + dev: false /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} @@ -2081,21 +2010,7 @@ packages: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.8) - - /@babel/plugin-proposal-object-rest-spread@7.18.9(@babel/core@7.22.8): - resolution: {integrity: sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==} - 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-object-rest-spread instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.22.6 - '@babel/core': 7.22.8 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.8) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.8) - '@babel/plugin-transform-parameters': 7.20.7(@babel/core@7.22.8) - dev: true + dev: false /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} @@ -2122,6 +2037,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.8) '@babel/plugin-transform-parameters': 7.20.7(@babel/core@7.22.8) + dev: false /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} @@ -2142,6 +2058,7 @@ packages: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.8) + dev: false /@babel/plugin-proposal-optional-chaining@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==} @@ -2164,6 +2081,7 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.8) + dev: false /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} @@ -2188,6 +2106,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color + dev: false /@babel/plugin-proposal-private-property-in-object@7.20.5(@babel/core@7.20.12): resolution: {integrity: sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==} @@ -2216,6 +2135,7 @@ packages: '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.8) transitivePeerDependencies: - supports-color + dev: false /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} @@ -2236,6 +2156,7 @@ packages: '@babel/core': 7.22.8 '@babel/helper-create-regexp-features-plugin': 7.20.5(@babel/core@7.22.8) '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.20.12): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} @@ -2304,6 +2225,7 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-syntax-decorators@7.19.0(@babel/core@7.22.8): resolution: {integrity: sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==} @@ -2330,6 +2252,7 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.20.12): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} @@ -2346,6 +2269,7 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-syntax-flow@7.18.6(@babel/core@7.22.8): resolution: {integrity: sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==} @@ -2374,6 +2298,7 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.20.12): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} @@ -2531,6 +2456,7 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.20.12): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} @@ -2586,6 +2512,7 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} @@ -2612,6 +2539,7 @@ packages: '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.22.8) transitivePeerDependencies: - supports-color + dev: false /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} @@ -2630,6 +2558,7 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-transform-block-scoping@7.20.15(@babel/core@7.20.12): resolution: {integrity: sha512-Vv4DMZ6MiNOhu/LdaZsT/bsLRxgL94d269Mv4R/9sp6+Mp++X/JqypZYypJXLlM4mlL352/Egzbzr98iABH1CA==} @@ -2648,6 +2577,7 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-transform-classes@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==} @@ -2675,17 +2605,18 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.8 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.8) - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.8) + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.19.0 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-replace-supers': 7.20.7 + '@babel/helper-split-export-declaration': 7.18.6 globals: 11.12.0 transitivePeerDependencies: - supports-color + dev: false /@babel/plugin-transform-computed-properties@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} @@ -2706,6 +2637,7 @@ packages: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 '@babel/template': 7.20.7 + dev: false /@babel/plugin-transform-destructuring@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==} @@ -2724,6 +2656,7 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} @@ -2744,6 +2677,7 @@ packages: '@babel/core': 7.22.8 '@babel/helper-create-regexp-features-plugin': 7.20.5(@babel/core@7.22.8) '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.20.12): resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} @@ -2762,6 +2696,7 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} @@ -2782,6 +2717,7 @@ packages: '@babel/core': 7.22.8 '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-transform-flow-strip-types@7.19.0(@babel/core@7.22.8): resolution: {integrity: sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==} @@ -2811,6 +2747,7 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.20.12): resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} @@ -2833,6 +2770,7 @@ packages: '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.8) '@babel/helper-function-name': 7.19.0 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-transform-literals@7.18.9(@babel/core@7.20.12): resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} @@ -2851,6 +2789,7 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} @@ -2869,6 +2808,7 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.20.12): resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} @@ -2893,6 +2833,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color + dev: false /@babel/plugin-transform-modules-commonjs@7.20.11(@babel/core@7.20.12): resolution: {integrity: sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==} @@ -2919,6 +2860,7 @@ packages: '@babel/helper-simple-access': 7.20.2 transitivePeerDependencies: - supports-color + dev: false /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.22.8): resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} @@ -2932,6 +2874,7 @@ packages: '@babel/helper-simple-access': 7.22.5 transitivePeerDependencies: - supports-color + dev: false /@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.20.12): resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} @@ -2960,6 +2903,7 @@ packages: '@babel/helper-validator-identifier': 7.19.1 transitivePeerDependencies: - supports-color + dev: false /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} @@ -2984,6 +2928,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color + dev: false /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.20.12): resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} @@ -3004,6 +2949,7 @@ packages: '@babel/core': 7.22.8 '@babel/helper-create-regexp-features-plugin': 7.20.5(@babel/core@7.22.8) '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} @@ -3022,6 +2968,7 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} @@ -3046,6 +2993,7 @@ packages: '@babel/helper-replace-supers': 7.20.7 transitivePeerDependencies: - supports-color + dev: false /@babel/plugin-transform-parameters@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==} @@ -3064,6 +3012,7 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} @@ -3082,6 +3031,7 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-transform-react-constant-elements@7.22.5(@babel/core@7.22.8): resolution: {integrity: sha512-BF5SXoO+nX3h5OhlN78XbbDrBOffv+AxPP2ENaJOVqjWCgBDeOY3WcaUcddutGSfoap+5NEQ/q/4I3WZIvgkXA==} @@ -3157,6 +3107,7 @@ packages: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 regenerator-transform: 0.15.1 + dev: false /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} @@ -3175,6 +3126,7 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-transform-runtime@7.19.6(@babel/core@7.22.8): resolution: {integrity: sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==} @@ -3191,6 +3143,7 @@ packages: semver: 6.3.0 transitivePeerDependencies: - supports-color + dev: false /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} @@ -3209,6 +3162,7 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-transform-spread@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} @@ -3229,6 +3183,7 @@ packages: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + dev: false /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} @@ -3247,6 +3202,7 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.20.12): resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} @@ -3265,6 +3221,7 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.20.12): resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} @@ -3283,6 +3240,7 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-transform-typescript@7.20.13(@babel/core@7.20.12): resolution: {integrity: sha512-O7I/THxarGcDZxkgWKMUrk7NK1/WbHAg3Xx86gqS6x9MTrNL6AwIluuZ96ms4xeDe6AVx6rjHbWHP7x26EPQBA==} @@ -3311,6 +3269,7 @@ packages: '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.8) transitivePeerDependencies: - supports-color + dev: false /@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.20.12): resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} @@ -3329,6 +3288,7 @@ packages: dependencies: '@babel/core': 7.22.8 '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} @@ -3349,6 +3309,7 @@ packages: '@babel/core': 7.22.8 '@babel/helper-create-regexp-features-plugin': 7.20.5(@babel/core@7.22.8) '@babel/helper-plugin-utils': 7.20.2 + dev: false /@babel/polyfill@7.12.1: resolution: {integrity: sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==} @@ -3527,6 +3488,7 @@ packages: semver: 6.3.0 transitivePeerDependencies: - supports-color + dev: false /@babel/preset-modules@0.1.5(@babel/core@7.20.12): resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} @@ -3551,6 +3513,7 @@ packages: '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.22.8) '@babel/types': 7.22.5 esutils: 2.0.3 + dev: false /@babel/preset-react@7.18.6(@babel/core@7.22.8): resolution: {integrity: sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==} @@ -3595,6 +3558,7 @@ packages: '@babel/plugin-transform-typescript': 7.22.5(@babel/core@7.22.8) transitivePeerDependencies: - supports-color + dev: false /@babel/regjsgen@0.8.0: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} @@ -3662,7 +3626,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.22.7 '@babel/types': 7.22.5 - debug: 4.3.7 + debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -5301,7 +5265,7 @@ packages: react-refresh: 0.14.0 schema-utils: 3.1.1 source-map: 0.7.4 - webpack: 5.88.1 + webpack: 5.88.1(webpack-cli@5.1.4) webpack-dev-server: 4.15.1(webpack@5.88.1) dev: false @@ -6302,10 +6266,6 @@ packages: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true - /@types/k6@0.39.1: - resolution: {integrity: sha512-hgqiGHQEK0JqyJ7u8s3mZhvHIQG3nNIAowGhSSzc7acusdAQHgRoVb5y/pP+Sstb68gw+3ubjOq21lqpnZ6cww==} - dev: true - /@types/leaflet@1.9.0: resolution: {integrity: sha512-7LeOSj7EloC5UcyOMo+1kc3S1UT3MjJxwqsMT1d2PTyvQz53w0Y0oSSk9nwZnOZubCmBvpSNGceucxiq+ZPEUw==} dependencies: @@ -6511,19 +6471,6 @@ packages: resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} dev: true - /@types/webpack@5.28.5(webpack-cli@4.10.0): - resolution: {integrity: sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw==} - dependencies: - '@types/node': 18.19.33 - tapable: 2.2.1 - webpack: 5.88.1(webpack-cli@4.10.0) - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - - webpack-cli - dev: true - /@types/whatwg-fetch@0.0.33: resolution: {integrity: sha512-XSWTlUwpjUyLiDu50HhtpUyhvt7QND1ANfyFfiw/TH63GC1ngZMl2rgxuH5SQKfPjMoKRXv94r7crWnJ3mg5tA==} deprecated: fetch types are now provided by '--lib dom' @@ -6560,14 +6507,6 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@types/yauzl@2.10.3: - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - requiresBuild: true - dependencies: - '@types/node': 18.19.33 - dev: true - optional: true - /@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} engines: {node: ^18.18.0 || >=20.0.0} @@ -6942,16 +6881,6 @@ packages: '@webassemblyjs/ast': 1.11.6 '@xtuc/long': 4.2.2 - /@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0)(webpack@5.88.1): - resolution: {integrity: sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==} - peerDependencies: - webpack: 4.x.x || 5.x.x - webpack-cli: 4.x.x - dependencies: - webpack: 5.88.1(webpack-cli@4.10.0) - webpack-cli: 4.10.0(webpack@5.88.1) - dev: true - /@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.88.1): resolution: {integrity: sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==} engines: {node: '>=14.15.0'} @@ -6961,16 +6890,6 @@ packages: dependencies: webpack: 5.88.1(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack@5.88.1) - dev: true - - /@webpack-cli/info@1.5.0(webpack-cli@4.10.0): - resolution: {integrity: sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==} - peerDependencies: - webpack-cli: 4.x.x - dependencies: - envinfo: 7.8.1 - webpack-cli: 4.10.0(webpack@5.88.1) - dev: true /@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.88.1): resolution: {integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==} @@ -6981,19 +6900,6 @@ packages: dependencies: webpack: 5.88.1(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack@5.88.1) - dev: true - - /@webpack-cli/serve@1.7.0(webpack-cli@4.10.0): - resolution: {integrity: sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==} - peerDependencies: - webpack-cli: 4.x.x - webpack-dev-server: '*' - peerDependenciesMeta: - webpack-dev-server: - optional: true - dependencies: - webpack-cli: 4.10.0(webpack@5.88.1) - dev: true /@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.88.1): resolution: {integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==} @@ -7008,7 +6914,6 @@ packages: dependencies: webpack: 5.88.1(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack@5.88.1) - dev: true /@xtuc/ieee754@1.2.0: resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} @@ -7528,7 +7433,7 @@ packages: babel-plugin-istanbul: 6.1.1 babel-preset-jest: 29.5.0(@babel/core@7.22.8) chalk: 4.1.2 - graceful-fs: 4.2.11 + graceful-fs: 4.2.10 slash: 3.0.0 transitivePeerDependencies: - supports-color @@ -7546,24 +7451,9 @@ packages: loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.88.1 + webpack: 5.88.1(webpack-cli@5.1.4) dev: false - /babel-loader@8.3.0(@babel/core@7.22.8)(webpack@5.88.1): - resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} - engines: {node: '>= 8.9'} - peerDependencies: - '@babel/core': ^7.0.0 - webpack: '>=2' - dependencies: - '@babel/core': 7.22.8 - find-cache-dir: 3.3.2 - loader-utils: 2.0.4 - make-dir: 3.1.0 - schema-utils: 2.7.1 - webpack: 5.88.1(webpack-cli@4.10.0) - dev: true - /babel-loader@9.1.3(@babel/core@7.20.12)(webpack@5.88.1): resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} engines: {node: '>= 14.15.0'} @@ -7634,12 +7524,13 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.22.6 + '@babel/compat-data': 7.20.14 '@babel/core': 7.22.8 '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.22.8) semver: 6.3.0 transitivePeerDependencies: - supports-color + dev: false /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.20.12): resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} @@ -7662,6 +7553,7 @@ packages: core-js-compat: 3.27.2 transitivePeerDependencies: - supports-color + dev: false /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.20.12): resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} @@ -7682,6 +7574,7 @@ packages: '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.22.8) transitivePeerDependencies: - supports-color + dev: false /babel-plugin-transform-react-remove-prop-types@0.4.24: resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==} @@ -7784,10 +7677,6 @@ packages: resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} dev: true - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true - /base@0.11.2: resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} engines: {node: '>=0.10.0'} @@ -7833,14 +7722,6 @@ packages: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} - /bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.0 - dev: true - /bluebird@1.0.8: resolution: {integrity: sha512-e8rlJcByuxPdMiiwU3lGtENflMtUncAblzSlN7rBAZ9ygb75D/rng3Xt5FbZpYqVCzK+sFHVIMht4G6fbfUfbA==} dev: true @@ -7954,28 +7835,9 @@ packages: node-int64: 0.4.0 dev: true - /buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - dev: true - /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - dev: true - - /bufferutil@4.0.8: - resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} - engines: {node: '>=6.14.2'} - requiresBuild: true - dependencies: - node-gyp-build: 4.8.2 - dev: true - /builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} @@ -8224,10 +8086,6 @@ packages: optionalDependencies: fsevents: 2.3.3 - /chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - dev: true - /chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} @@ -8289,16 +8147,6 @@ packages: engines: {node: '>=6'} dev: true - /clean-webpack-plugin@4.0.0(webpack@5.88.1): - resolution: {integrity: sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==} - engines: {node: '>=10.0.0'} - peerDependencies: - webpack: '>=4.0.0 <6.0.0' - dependencies: - del: 4.1.1 - webpack: 5.88.1(webpack-cli@4.10.0) - dev: true - /cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -8333,7 +8181,6 @@ packages: is-plain-object: 2.0.4 kind-of: 6.0.3 shallow-clone: 3.0.1 - dev: true /cls-hooked@4.2.2: resolution: {integrity: sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw==} @@ -8442,7 +8289,6 @@ packages: /commander@10.0.1: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} - dev: true /commander@11.0.0: resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} @@ -8460,6 +8306,7 @@ packages: /commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} + dev: false /commander@8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} @@ -8553,21 +8400,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /copy-webpack-plugin@11.0.0(webpack@5.88.1): - resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==} - engines: {node: '>= 14.15.0'} - peerDependencies: - webpack: ^5.1.0 - dependencies: - fast-glob: 3.3.0 - glob-parent: 6.0.2 - globby: 13.2.2 - normalize-path: 3.0.0 - schema-utils: 4.2.0 - serialize-javascript: 6.0.1 - webpack: 5.88.1(webpack-cli@4.10.0) - dev: true - /core-js-compat@3.27.2: resolution: {integrity: sha512-welaYuF7ZtbYKGrIy7y3eb40d37rG1FvzEOfe7hSLd2iD6duMDqUhRfSvCGyC46HhR6Y8JXXdZ2lnRUMkPBpvg==} dependencies: @@ -8645,6 +8477,7 @@ packages: hasBin: true dependencies: cross-spawn: 7.0.3 + dev: false /cross-fetch@3.1.5: resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} @@ -8652,6 +8485,7 @@ packages: node-fetch: 2.6.7 transitivePeerDependencies: - encoding + dev: false /cross-fetch@3.1.6: resolution: {integrity: sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==} @@ -8757,7 +8591,7 @@ packages: postcss-modules-values: 4.0.0(postcss@8.4.25) postcss-value-parser: 4.2.0 semver: 7.5.4 - webpack: 5.88.1 + webpack: 5.88.1(webpack-cli@5.1.4) /css-minimizer-webpack-plugin@3.4.1(webpack@5.88.1): resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==} @@ -8784,7 +8618,7 @@ packages: schema-utils: 4.2.0 serialize-javascript: 6.0.1 source-map: 0.6.1 - webpack: 5.88.1 + webpack: 5.88.1(webpack-cli@5.1.4) dev: false /css-prefers-color-scheme@6.0.3(postcss@8.4.21): @@ -9172,6 +9006,7 @@ packages: optional: true dependencies: ms: 2.1.3 + dev: true /decamelize-keys@1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} @@ -9313,19 +9148,6 @@ packages: resolution: {integrity: sha512-zpqiCT8bODLu3QSmLLic8xJnYWBFjOSu/fBCm189oAiTtPq/PSanNACKZDS7kgSyCJY7P+IcODzlIogBK/9RBg==} dev: true - /del@4.1.1: - resolution: {integrity: sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==} - engines: {node: '>=6'} - 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 - dev: true - /del@5.1.0: resolution: {integrity: sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==} engines: {node: '>=8'} @@ -9384,10 +9206,6 @@ packages: - supports-color dev: false - /devtools-protocol@0.0.1001819: - resolution: {integrity: sha512-G6OsIFnv/rDyxSqBa2lDLR6thp9oJioLsb2Gl+LbQlyoA9/OBAkrTU9jiCcQ8Pnh7z4d6slDiLaogR5hzgJLmQ==} - dev: true - /diagnostic-channel-publishers@1.0.6(diagnostic-channel@1.1.0): resolution: {integrity: sha512-RE5AP4JmEm/CV06gOyFdgWWm3gMNOoXulod2mq4ysiz9s77ZhHb1P1DGrfePHjNOmgvWglhegmj5q8DNtjRrEg==} peerDependencies: @@ -9577,15 +9395,6 @@ packages: resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} dev: false - /dotenv-json-complex@1.0.4: - resolution: {integrity: sha512-Up7nxudYj4X7XcACMzrVCse8gEORrZ782JyIXJS4PZmOa/VKGkcVkZOh/Y0eHeFQI/LRV5Lw1Wxk6iG53070Mg==} - dev: true - - /dotenv@16.4.5: - resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} - engines: {node: '>=12'} - dev: true - /dotenv@9.0.2: resolution: {integrity: sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==} engines: {node: '>=10'} @@ -9643,15 +9452,9 @@ packages: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} - /end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - dependencies: - once: 1.4.0 - dev: true - - /enhanced-resolve@5.12.0: - resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} - engines: {node: '>=10.13.0'} + /enhanced-resolve@5.12.0: + resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} + engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.10 tapable: 2.2.1 @@ -9683,7 +9486,6 @@ packages: resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==} engines: {node: '>=4'} hasBin: true - dev: true /environment@1.1.0: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} @@ -9704,7 +9506,7 @@ packages: react-error-overlay: 6.0.9 sockjs-client: 1.6.1 url: 0.11.0 - webpack: 5.88.1 + webpack: 5.88.1(webpack-cli@5.1.4) transitivePeerDependencies: - eslint - supports-color @@ -10020,7 +9822,7 @@ packages: debug: 4.3.4 enhanced-resolve: 5.12.0 eslint: 8.57.0 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@7.18.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.57.0) + eslint-module-utils: 2.7.4(@typescript-eslint/parser@7.18.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.57.0) eslint-plugin-import: 2.27.5(@typescript-eslint/parser@7.18.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.57.0) get-tsconfig: 4.6.2 globby: 13.2.2 @@ -10094,35 +9896,6 @@ packages: - supports-color dev: true - /eslint-module-utils@2.7.4(@typescript-eslint/parser@7.18.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.57.0): - resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4) - debug: 3.2.7 - eslint: 8.57.0 - eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@7.18.0)(eslint-plugin-import@2.27.5)(eslint@8.57.0) - transitivePeerDependencies: - - supports-color - dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0): resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} @@ -10306,7 +10079,7 @@ packages: micromatch: 4.0.5 normalize-path: 3.0.0 schema-utils: 4.0.0 - webpack: 5.88.1 + webpack: 5.88.1(webpack-cli@5.1.4) dev: true /eslint@8.43.0: @@ -10652,20 +10425,6 @@ packages: - supports-color dev: true - /extract-zip@2.0.1: - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true - dependencies: - debug: 4.3.7 - get-stream: 5.2.0 - yauzl: 2.10.0 - optionalDependencies: - '@types/yauzl': 2.10.3 - transitivePeerDependencies: - - supports-color - dev: true - /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -10711,7 +10470,6 @@ packages: /fastest-levenshtein@1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} - dev: true /fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} @@ -10736,12 +10494,6 @@ packages: bser: 2.1.1 dev: true - /fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - dependencies: - pend: 1.2.0 - dev: true - /fetch-cookie@2.1.0: resolution: {integrity: sha512-39+cZRbWfbibmj22R2Jy6dmTbAWC+oqun1f1FzQaNurkPDUP4C38jpeZbiXCR88RKRVDp8UcDrbFXkNhN+NjYg==} dependencies: @@ -10763,7 +10515,7 @@ packages: dependencies: loader-utils: 2.0.4 schema-utils: 3.1.1 - webpack: 5.88.1 + webpack: 5.88.1(webpack-cli@5.1.4) dev: false /filelist@1.0.4: @@ -10917,7 +10669,7 @@ packages: semver: 7.5.4 tapable: 1.1.3 typescript: 5.5.4 - webpack: 5.88.1 + webpack: 5.88.1(webpack-cli@5.1.4) dev: false /fork-ts-checker-webpack-plugin@8.0.0(typescript@5.5.4)(webpack@5.75.0): @@ -10980,10 +10732,6 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} - /fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - dev: true - /fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -11087,13 +10835,6 @@ packages: engines: {node: '>=8.0.0'} dev: true - /get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - dependencies: - pump: 3.0.2 - dev: true - /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -11153,17 +10894,6 @@ packages: /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - /glob@5.0.15: - resolution: {integrity: sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==} - deprecated: Glob versions prior to v9 are no longer supported - dependencies: - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - /glob@7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} dependencies: @@ -11258,17 +10988,6 @@ packages: slash: 4.0.0 dev: true - /globby@6.1.0: - resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==} - engines: {node: '>=0.10.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 - dev: true - /globby@8.0.2: resolution: {integrity: sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==} engines: {node: '>=4'} @@ -11543,7 +11262,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.88.1 + webpack: 5.88.1(webpack-cli@5.1.4) dev: false /htmlparser2@3.10.1: @@ -11710,10 +11429,6 @@ packages: dependencies: harmony-reflect: 1.6.2 - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true - /iframe-resizer-react@1.1.0(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-FrytSq91AIJaDgE+6uK/Vdd6IR8CrwLoZ6eGmL2qQMPTzF0xlSV2jaSzRRUh5V2fttD7vzl21jvBl97bV40eBw==} engines: {node: '>=8', npm: '>=5'} @@ -11801,7 +11516,6 @@ packages: dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 - dev: true /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} @@ -11862,15 +11576,9 @@ packages: engines: {node: '>= 0.10'} dev: true - /interpret@2.2.0: - resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==} - engines: {node: '>= 0.10'} - dev: true - /interpret@3.1.1: resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} engines: {node: '>=10.13.0'} - dev: true /intersection-observer@0.11.0: resolution: {integrity: sha512-KZArj2QVnmdud9zTpKf279m2bbGfG+4/kn16UU0NL3pTVl52ZHiJ9IRNSsnn6jaHrL9EGLFM5eWjTx2fz/+zoQ==} @@ -12154,20 +11862,6 @@ packages: engines: {node: '>=6'} dev: true - /is-path-in-cwd@2.1.0: - resolution: {integrity: sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==} - engines: {node: '>=6'} - dependencies: - is-path-inside: 2.1.0 - dev: true - - /is-path-inside@2.1.0: - resolution: {integrity: sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==} - engines: {node: '>=6'} - dependencies: - path-is-inside: 1.0.2 - dev: true - /is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} @@ -12191,7 +11885,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 - dev: true /is-plain-object@5.0.0: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} @@ -12317,7 +12010,6 @@ packages: /isobject@3.0.1: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} - dev: true /istanbul-lib-coverage@3.2.0: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} @@ -13021,10 +12713,6 @@ packages: object.assign: 4.1.4 dev: true - /k6@0.0.0: - resolution: {integrity: sha512-GAQSWayS2+LjbH5bkRi+pMPYyP1JSp7o+4j58ANZ762N/RH/SdlAT3CHHztnn8s/xgg8kYNM24Gd2IPo9b5W+g==} - dev: true - /kind-of@3.2.2: resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} engines: {node: '>=0.10.0'} @@ -13731,7 +13419,7 @@ packages: webpack: ^5.0.0 dependencies: schema-utils: 4.2.0 - webpack: 5.88.1 + webpack: 5.88.1(webpack-cli@5.1.4) dev: false /minimalistic-assert@1.0.1: @@ -13817,10 +13505,6 @@ packages: is-extendable: 1.0.1 dev: true - /mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - dev: true - /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -14008,16 +13692,12 @@ packages: optional: true dependencies: whatwg-url: 5.0.0 + dev: false /node-forge@1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} - /node-gyp-build@4.8.2: - resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==} - hasBin: true - dev: true - /node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true @@ -14361,11 +14041,6 @@ packages: p-limit: 4.0.0 dev: true - /p-map@2.1.0: - resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} - engines: {node: '>=6'} - dev: true - /p-map@3.0.0: resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} engines: {node: '>=8'} @@ -14484,10 +14159,6 @@ packages: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - /path-is-inside@1.0.2: - resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} - dev: true - /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -14520,10 +14191,6 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - /pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - dev: true - /performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} dev: false @@ -14555,23 +14222,6 @@ packages: engines: {node: '>=4'} dev: true - /pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - dev: true - - /pinkie-promise@2.0.1: - resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} - engines: {node: '>=0.10.0'} - dependencies: - pinkie: 2.0.4 - dev: true - - /pinkie@2.0.4: - resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} - engines: {node: '>=0.10.0'} - dev: true - /pirates@4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} @@ -14973,7 +14623,7 @@ packages: klona: 2.0.6 postcss: 8.4.21 semver: 7.5.4 - webpack: 5.88.1 + webpack: 5.88.1(webpack-cli@5.1.4) dev: false /postcss-loader@7.3.3(postcss@8.4.25)(webpack@5.88.1): @@ -15784,11 +15434,6 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} - /progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - dev: true - /promise-inflight@1.0.1: resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} peerDependencies: @@ -15841,17 +15486,11 @@ packages: /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: false /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - /pump@3.0.2: - resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - dev: true - /punycode@1.3.2: resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} @@ -15859,31 +15498,6 @@ packages: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} - /puppeteer@14.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10): - resolution: {integrity: sha512-+H0Gm84aXUvSLdSiDROtLlOofftClgw2TdceMvvCU9UvMryappoeS3+eOLfKvoy4sm8B8MWnYmPhWxVFudAOFQ==} - engines: {node: '>=14.1.0'} - deprecated: < 22.8.2 is no longer supported - requiresBuild: true - dependencies: - cross-fetch: 3.1.5 - debug: 4.3.4 - devtools-protocol: 0.0.1001819 - extract-zip: 2.0.1 - https-proxy-agent: 5.0.1 - pkg-dir: 4.2.0 - progress: 2.0.3 - proxy-from-env: 1.1.0 - rimraf: 3.0.2 - tar-fs: 2.1.1 - unbzip2-stream: 1.4.3 - ws: 8.7.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - dev: true - /pure-rand@6.0.2: resolution: {integrity: sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==} dev: true @@ -16019,7 +15633,7 @@ packages: strip-ansi: 6.0.1 text-table: 0.2.0 typescript: 5.5.4 - webpack: 5.88.1 + webpack: 5.88.1(webpack-cli@5.1.4) transitivePeerDependencies: - eslint - supports-color @@ -16477,19 +16091,11 @@ packages: resolve: 1.22.2 dev: true - /rechoir@0.7.1: - resolution: {integrity: sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==} - engines: {node: '>= 0.10'} - dependencies: - resolve: 1.22.2 - dev: true - /rechoir@0.8.0: resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} engines: {node: '>= 10.13.0'} dependencies: resolve: 1.22.2 - dev: true /recursive-readdir@2.2.3: resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} @@ -16658,7 +16264,7 @@ packages: resolution: {integrity: sha512-OScOjQjrrjhAdFpQmnkE/qbIBGCRFhQB/YaJhcC3CPOlmhe7llnW46Ac1J5+EjcNXOTnDdpF96Erw/yedsGksQ==} engines: {node: '>=8.6.0'} dependencies: - debug: 4.3.7 + debug: 4.3.4 module-details-from-path: 1.0.3 resolve: 1.22.2 transitivePeerDependencies: @@ -16673,7 +16279,6 @@ packages: engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 - dev: true /resolve-from@3.0.0: resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} @@ -16687,7 +16292,6 @@ packages: /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - dev: true /resolve-pathname@3.0.0: resolution: {integrity: sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==} @@ -16774,14 +16378,6 @@ packages: resolution: {integrity: sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==} dev: true - /rimraf@2.7.1: - resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - dependencies: - glob: 7.2.3 - dev: true - /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true @@ -16886,7 +16482,7 @@ packages: dependencies: neo-async: 2.6.2 sass: 1.32.13 - webpack: 5.88.1 + webpack: 5.88.1(webpack-cli@5.1.4) dev: false /sass@1.32.13: @@ -17088,7 +16684,6 @@ packages: engines: {node: '>=8'} dependencies: kind-of: 6.0.3 - dev: true /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -17263,7 +16858,7 @@ packages: abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.0.2 - webpack: 5.88.1 + webpack: 5.88.1(webpack-cli@5.1.4) dev: false /source-map-resolve@0.5.3: @@ -17614,7 +17209,7 @@ packages: peerDependencies: webpack: ^5.0.0 dependencies: - webpack: 5.88.1 + webpack: 5.88.1(webpack-cli@5.1.4) /style-search@0.1.0: resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==} @@ -17741,7 +17336,7 @@ packages: normalize-path: 3.0.0 schema-utils: 4.0.0 stylelint: 15.7.0 - webpack: 5.88.1 + webpack: 5.88.1(webpack-cli@5.1.4) dev: true /stylelint@15.10.2: @@ -17967,26 +17562,6 @@ packages: through: 2.3.8 dev: true - /tar-fs@2.1.1: - resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} - dependencies: - chownr: 1.1.4 - mkdirp-classic: 0.5.3 - pump: 3.0.2 - tar-stream: 2.2.0 - dev: true - - /tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} - dependencies: - bl: 4.1.0 - end-of-stream: 1.4.4 - fs-constants: 1.0.0 - inherits: 2.0.4 - readable-stream: 3.6.0 - dev: true - /tar@6.1.13: resolution: {integrity: sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==} engines: {node: '>=10'} @@ -18079,7 +17654,7 @@ packages: schema-utils: 3.3.0 serialize-javascript: 6.0.1 terser: 5.18.2 - webpack: 5.88.1 + webpack: 5.88.1(webpack-cli@5.1.4) /terser@4.8.1: resolution: {integrity: sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==} @@ -18223,6 +17798,7 @@ packages: /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: false /tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} @@ -18408,12 +17984,6 @@ packages: for-each: 0.3.3 is-typed-array: 1.1.10 - /typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: true - /typescript@5.5.4: resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} @@ -18427,13 +17997,6 @@ packages: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - /unbzip2-stream@1.4.3: - resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} - dependencies: - buffer: 5.7.1 - through: 2.3.8 - dev: true - /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} @@ -18693,14 +18256,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /utf-8-validate@5.0.10: - resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} - engines: {node: '>=6.14.2'} - requiresBuild: true - dependencies: - node-gyp-build: 4.8.2 - dev: true - /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -18839,6 +18394,7 @@ packages: /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: false /webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} @@ -18872,41 +18428,6 @@ packages: - utf-8-validate dev: false - /webpack-cli@4.10.0(webpack@5.88.1): - resolution: {integrity: sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - '@webpack-cli/generators': '*' - '@webpack-cli/migrate': '*' - webpack: 4.x.x || 5.x.x - webpack-bundle-analyzer: '*' - webpack-dev-server: '*' - peerDependenciesMeta: - '@webpack-cli/generators': - optional: true - '@webpack-cli/migrate': - optional: true - webpack-bundle-analyzer: - optional: true - webpack-dev-server: - optional: true - dependencies: - '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0)(webpack@5.88.1) - '@webpack-cli/info': 1.5.0(webpack-cli@4.10.0) - '@webpack-cli/serve': 1.7.0(webpack-cli@4.10.0) - colorette: 2.0.20 - commander: 7.2.0 - cross-spawn: 7.0.3 - fastest-levenshtein: 1.0.16 - import-local: 3.1.0 - interpret: 2.2.0 - rechoir: 0.7.1 - webpack: 5.88.1(webpack-cli@4.10.0) - webpack-merge: 5.8.0 - dev: true - /webpack-cli@5.1.4(webpack@5.88.1): resolution: {integrity: sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==} engines: {node: '>=14.15.0'} @@ -18938,7 +18459,6 @@ packages: rechoir: 0.8.0 webpack: 5.88.1(webpack-cli@5.1.4) webpack-merge: 5.8.0 - dev: true /webpack-dev-middleware@5.3.3(webpack@5.75.0): resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} @@ -18965,7 +18485,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.88.1 + webpack: 5.88.1(webpack-cli@5.1.4) dev: false /webpack-dev-server@4.11.1(webpack@5.75.0): @@ -19057,7 +18577,7 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.88.1 + webpack: 5.88.1(webpack-cli@5.1.4) webpack-dev-middleware: 5.3.3(webpack@5.88.1) ws: 8.13.0 transitivePeerDependencies: @@ -19067,12 +18587,6 @@ packages: - utf-8-validate dev: false - /webpack-glob-entries@1.0.1: - resolution: {integrity: sha512-ebis0/kd0CxxlZabcnCcKA2Dc5fZJvtadOR+72I8U4z3Umaq9iGQLF69n3p+nMBWK1tKvKkdfZ8Rm2+f6JUCww==} - dependencies: - glob: 5.0.15 - dev: true - /webpack-manifest-plugin@5.0.0(webpack@5.88.1): resolution: {integrity: sha512-8RQfMAdc5Uw3QbCQ/CBV/AXqOR8mt03B6GJmRbhWopE8GzRfEpn+k0ZuWywxW+5QZsffhmFDY1J6ohqJo+eMuw==} engines: {node: '>=12.22.0'} @@ -19080,7 +18594,7 @@ packages: webpack: ^5.47.0 dependencies: tapable: 2.2.1 - webpack: 5.88.1 + webpack: 5.88.1(webpack-cli@5.1.4) webpack-sources: 2.3.1 dev: false @@ -19090,7 +18604,6 @@ packages: dependencies: clone-deep: 4.0.1 wildcard: 2.0.0 - dev: true /webpack-sources@1.4.3: resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} @@ -19148,86 +18661,6 @@ packages: - esbuild - uglify-js - /webpack@5.88.1: - resolution: {integrity: sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - dependencies: - '@types/eslint-scope': 3.7.4 - '@types/estree': 1.0.0 - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/wasm-edit': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - acorn: 8.10.0 - acorn-import-assertions: 1.9.0(acorn@8.10.0) - browserslist: 4.21.9 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.15.0 - es-module-lexer: 1.3.0 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.10 - 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.1 - terser-webpack-plugin: 5.3.9(webpack@5.88.1) - watchpack: 2.4.0 - webpack-sources: 3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - - /webpack@5.88.1(webpack-cli@4.10.0): - resolution: {integrity: sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - dependencies: - '@types/eslint-scope': 3.7.4 - '@types/estree': 1.0.0 - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/wasm-edit': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - acorn: 8.10.0 - acorn-import-assertions: 1.9.0(acorn@8.10.0) - browserslist: 4.21.9 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.15.0 - es-module-lexer: 1.3.0 - 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.1 - terser-webpack-plugin: 5.3.9(webpack@5.88.1) - watchpack: 2.4.0 - webpack-cli: 4.10.0(webpack@5.88.1) - webpack-sources: 3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - dev: true - /webpack@5.88.1(webpack-cli@5.1.4): resolution: {integrity: sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==} engines: {node: '>=10.13.0'} @@ -19252,7 +18685,7 @@ packages: eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 + graceful-fs: 4.2.10 json-parse-even-better-errors: 2.3.1 loader-runner: 4.3.0 mime-types: 2.1.35 @@ -19267,7 +18700,6 @@ packages: - '@swc/core' - esbuild - uglify-js - dev: true /websocket-driver@0.7.4: resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} @@ -19317,6 +18749,7 @@ packages: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 + dev: false /whatwg-url@7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} @@ -19370,7 +18803,6 @@ packages: /wildcard@2.0.0: resolution: {integrity: sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==} - dev: true /wmf@1.0.2: resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} @@ -19539,7 +18971,7 @@ packages: fast-json-stable-stringify: 2.1.0 pretty-bytes: 5.6.0 upath: 1.2.0 - webpack: 5.88.1 + webpack: 5.88.1(webpack-cli@5.1.4) webpack-sources: 1.4.3 workbox-build: 7.0.0 transitivePeerDependencies: @@ -19629,22 +19061,6 @@ packages: utf-8-validate: optional: true - /ws@8.7.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): - resolution: {integrity: sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dependencies: - bufferutil: 4.0.8 - utf-8-validate: 5.0.10 - dev: true - /xhr-mock@2.5.1: resolution: {integrity: sha512-UKOjItqjFgPUwQGPmRAzNBn8eTfIhcGjBVGvKYAWxUQPQsXNGD6KEckGTiHwyaAUp9C9igQlnN1Mp79KWCg7CQ==} dependencies: @@ -19728,13 +19144,6 @@ packages: yargs-parser: 21.1.1 dev: true - /yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - dependencies: - buffer-crc32: 0.2.13 - fd-slicer: 1.1.0 - dev: true - /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 6ed4680bfae..684e6f0669e 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,4 +3,3 @@ packages: - 'src/explore-education-statistics-ckeditor' - 'src/explore-education-statistics-common' - 'src/explore-education-statistics-frontend' - - 'tests/performance-tests' diff --git a/tests/performance-tests/pnpm-lock.yaml b/tests/performance-tests/pnpm-lock.yaml new file mode 100644 index 00000000000..ee46f72e20e --- /dev/null +++ b/tests/performance-tests/pnpm-lock.yaml @@ -0,0 +1,3127 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + lodash: + specifier: ^4.17.21 + version: 4.17.21 + source-map-support: + specifier: ^0.5.21 + version: 0.5.21 + devDependencies: + '@babel/core': + specifier: ^7.19.0 + version: 7.25.9 + '@babel/plugin-proposal-class-properties': + specifier: ^7.18.6 + version: 7.18.6(@babel/core@7.25.9) + '@babel/plugin-proposal-object-rest-spread': + specifier: 7.18.9 + version: 7.18.9(@babel/core@7.25.9) + '@babel/plugin-transform-runtime': + specifier: ^7.18.10 + version: 7.25.9(@babel/core@7.25.9) + '@babel/preset-env': + specifier: ^7.19.0 + version: 7.25.9(@babel/core@7.25.9) + '@babel/preset-typescript': + specifier: ^7.18.6 + version: 7.25.9(@babel/core@7.25.9) + '@types/k6': + specifier: ^0.39.1 + version: 0.39.1 + '@types/lodash': + specifier: ^4.14.191 + version: 4.17.12 + '@types/webpack': + specifier: ^5.28.0 + version: 5.28.5(webpack-cli@4.10.0) + babel-loader: + specifier: ^8.2.5 + version: 8.4.1(@babel/core@7.25.9)(webpack@5.95.0) + bufferutil: + specifier: ^4.0.6 + version: 4.0.8 + clean-webpack-plugin: + specifier: ^4.0.0 + version: 4.0.0(webpack@5.95.0) + copy-webpack-plugin: + specifier: ^11.0.0 + version: 11.0.0(webpack@5.95.0) + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + dotenv: + specifier: ^16.0.2 + version: 16.4.5 + dotenv-json-complex: + specifier: ^1.0.4 + version: 1.0.4 + k6: + specifier: ^0.0.0 + version: 0.0.0 + puppeteer: + specifier: ^14.4.0 + version: 14.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + typescript: + specifier: ^4.8.3 + version: 4.9.5 + utf-8-validate: + specifier: ^5.0.9 + version: 5.0.10 + webpack: + specifier: ^5.74.0 + version: 5.95.0(webpack-cli@4.10.0) + webpack-cli: + specifier: ^4.10.0 + version: 4.10.0(webpack@5.95.0) + webpack-glob-entries: + specifier: ^1.0.1 + version: 1.0.1 + +packages: + + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + dev: true + + /@babel/code-frame@7.25.9: + resolution: {integrity: sha512-z88xeGxnzehn2sqZ8UdGQEvYErF1odv2CftxInpSYJt6uHuPe9YjahKZITGs3l5LeI9d2ROG+obuDAoSlqbNfQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.25.9 + picocolors: 1.1.1 + dev: true + + /@babel/compat-data@7.25.9: + resolution: {integrity: sha512-yD+hEuJ/+wAJ4Ox2/rpNv5HIuPG82x3ZlQvYVn8iYCprdxzE7P1udpGF1jyjQVBU4dgznN+k2h103vxZ7NdPyw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core@7.25.9: + resolution: {integrity: sha512-WYvQviPw+Qyib0v92AwNIrdLISTp7RfDkM7bPqBvpbnhY4wq8HvHBZREVdYDXk98C8BkOIVnHAY3yvj7AVISxQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.25.9 + '@babel/generator': 7.25.9 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.25.9(@babel/core@7.25.9) + '@babel/helpers': 7.25.9 + '@babel/parser': 7.25.9 + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.25.9 + convert-source-map: 2.0.0 + debug: 4.3.7 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/generator@7.25.9: + resolution: {integrity: sha512-omlUGkr5EaoIJrhLf9CJ0TvjBRpd9+AXRG//0GEQ9THSo8wPiTlbpy1/Ow8ZTrbXpjd9FHXfbFQx32I04ht0FA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.25.9 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.0.2 + dev: true + + /@babel/helper-annotate-as-pure@7.25.9: + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.25.9 + dev: true + + /@babel/helper-builder-binary-assignment-operator-visitor@7.25.9: + resolution: {integrity: sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-compilation-targets@7.25.9: + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.25.9 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.2 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true + + /@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.25.9) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.25.9 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-create-regexp-features-plugin@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-annotate-as-pure': 7.25.9 + regexpu-core: 6.1.1 + semver: 6.3.1 + dev: true + + /@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.25.9): + resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + debug: 4.3.7 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-member-expression-to-functions@7.25.9: + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-module-imports@7.25.9: + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-module-transforms@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-TvLZY/F3+GvdRYFZFyxMvnsKi+4oJdgZzU3BoGN9Uc2d9C6zfNwJcKKhjqLAhK8i46mv93jsO74fDh3ih6rpHA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-simple-access': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-optimise-call-expression@7.25.9: + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.25.9 + dev: true + + /@babel/helper-plugin-utils@7.25.9: + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-wrap-function': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-replace-supers@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-simple-access@7.25.9: + resolution: {integrity: sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-skip-transparent-expression-wrappers@7.25.9: + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-string-parser@7.25.9: + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier@7.25.9: + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-option@7.25.9: + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-wrap-function@7.25.9: + resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helpers@7.25.9: + resolution: {integrity: sha512-oKWp3+usOJSzDZOucZUAMayhPz/xVjzymyDzUN8dk0Wd3RWMlGLXi07UCQ/CgQVb8LvXx3XBajJH4XGgkt7H7g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.25.9 + dev: true + + /@babel/highlight@7.25.9: + resolution: {integrity: sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.1 + dev: true + + /@babel/parser@7.25.9: + resolution: {integrity: sha512-aI3jjAAO1fh7vY/pBGsn1i9LDbRP43+asrRlkPuTXW5yHXtd1NgTEMudbBoDDxrf1daEEfPJqR+JBMakzrR4Dg==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.25.9 + dev: true + + /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.25.9) + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.25.9): + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + 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-properties instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.9) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-object-rest-spread@7.18.9(@babel/core@7.25.9): + resolution: {integrity: sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==} + 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-object-rest-spread instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.25.9 + '@babel/core': 7.25.9 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.9) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.25.9) + dev: true + + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.9): + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + dev: true + + /@babel/plugin-syntax-import-assertions@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-4GHX5uzr5QMOOuzV0an9MFju4hKlm0OyePl/lHhcsTVae5t/IKVHnb8W67Vr6FuLlk5lPqLB7n7O+K5R46emYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-syntax-import-attributes@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-u3EN9ub8LyYvgTnrgp8gboElouayiwPdnM7x5tcnW3iSt09/lQYPwMNK40I9IUxo7QOZhAsPHCmmuO7EPdruqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.9): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.9): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.9) + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.25.9) + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.25.9) + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-block-scoped-functions@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.9) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-class-static-block@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-UIf+72C7YJ+PJ685/PpATbCz00XqiFEzHX5iysRwfvNT0Ko+FaXSvRgLytFSp8xUItrG9pFM/KoBBZDrY/cYyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.9) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-classes@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.25.9) + '@babel/traverse': 7.25.9 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/template': 7.25.9 + dev: true + + /@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.9) + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.9) + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-exponentiation-operator@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-for-of@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-function-name@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-literals@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-module-transforms': 7.25.9(@babel/core@7.25.9) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-commonjs@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-module-transforms': 7.25.9(@babel/core@7.25.9) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-simple-access': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-module-transforms': 7.25.9(@babel/core@7.25.9) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-module-transforms': 7.25.9(@babel/core@7.25.9) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.9) + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-new-target@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.25.9) + dev: true + + /@babel/plugin-transform-object-super@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.25.9) + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-parameters@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.9) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.9) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + regenerator-transform: 0.15.2 + dev: true + + /@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-runtime@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.9) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.9) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.9) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-spread@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-typescript@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.9) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.25.9) + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.9) + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.9) + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.9) + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/preset-env@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-XqDEt+hfsQukahSX9JOBDHhpUHDhj2zGSxoqWQFCMajOSBnbhBdgON/bU/5PkBA1yX5tqW6tTzuIPVsZTQ7h5Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.25.9 + '@babel/core': 7.25.9 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.9) + '@babel/plugin-syntax-import-assertions': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-syntax-import-attributes': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.9) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-block-scoped-functions': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-class-static-block': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-exponentiation-operator': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-nullish-coalescing-operator': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-typeof-symbol': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.25.9) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.9) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.9) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.9) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.9) + core-js-compat: 3.38.1 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.9): + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/types': 7.25.9 + esutils: 2.0.3 + dev: true + + /@babel/preset-typescript@7.25.9(@babel/core@7.25.9): + resolution: {integrity: sha512-XWxw1AcKk36kgxf4C//fl0ikjLeqGUWn062/Fd8GtpTfDJOX6Ud95FK+4JlDA36BX4bNGndXi3a6Vr4Jo5/61A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.25.9) + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/runtime@7.25.9: + resolution: {integrity: sha512-4zpTHZ9Cm6L9L+uIqghQX8ZXg8HKFcjYO3qHoO8zTmRm6HQUJ8SSJ+KRvbMBZn0EGVlT4DRYeQ/6hjlyXBh+Kg==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + dev: true + + /@babel/template@7.25.9: + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.25.9 + '@babel/parser': 7.25.9 + '@babel/types': 7.25.9 + dev: true + + /@babel/traverse@7.25.9: + resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.25.9 + '@babel/generator': 7.25.9 + '@babel/parser': 7.25.9 + '@babel/template': 7.25.9 + '@babel/types': 7.25.9 + debug: 4.3.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types@7.25.9: + resolution: {integrity: sha512-OwS2CM5KocvQ/k7dFJa8i5bNGJP0hXWfVCfDkqRFP1IreH1JDC7wG6eCYCi0+McbfT8OR/kNqsI0UU0xP9H6PQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + dev: true + + /@discoveryjs/json-ext@0.5.7: + resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} + engines: {node: '>=10.0.0'} + dev: true + + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + dev: true + + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/source-map@0.3.6: + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + dev: true + + /@jridgewell/sourcemap-codec@1.5.0: + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + dev: true + + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + dev: true + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + dev: true + + /@types/estree@1.0.6: + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + dev: true + + /@types/glob@7.2.0: + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 22.7.9 + dev: true + + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + dev: true + + /@types/k6@0.39.1: + resolution: {integrity: sha512-hgqiGHQEK0JqyJ7u8s3mZhvHIQG3nNIAowGhSSzc7acusdAQHgRoVb5y/pP+Sstb68gw+3ubjOq21lqpnZ6cww==} + dev: true + + /@types/lodash@4.17.12: + resolution: {integrity: sha512-sviUmCE8AYdaF/KIHLDJBQgeYzPBI0vf/17NaYehBJfYD1j6/L95Slh07NlyK2iNyBNaEkb3En2jRt+a8y3xZQ==} + dev: true + + /@types/minimatch@5.1.2: + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + dev: true + + /@types/node@22.7.9: + resolution: {integrity: sha512-jrTfRC7FM6nChvU7X2KqcrgquofrWLFDeYC1hKfwNWomVvrn7JIksqf344WN2X/y8xrgqBd2dJATZV4GbatBfg==} + dependencies: + undici-types: 6.19.8 + dev: true + + /@types/webpack@5.28.5(webpack-cli@4.10.0): + resolution: {integrity: sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw==} + dependencies: + '@types/node': 22.7.9 + tapable: 2.2.1 + webpack: 5.95.0(webpack-cli@4.10.0) + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + - webpack-cli + dev: true + + /@types/yauzl@2.10.3: + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + requiresBuild: true + dependencies: + '@types/node': 22.7.9 + dev: true + optional: true + + /@webassemblyjs/ast@1.12.1: + resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} + dependencies: + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + dev: true + + /@webassemblyjs/floating-point-hex-parser@1.11.6: + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + dev: true + + /@webassemblyjs/helper-api-error@1.11.6: + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + dev: true + + /@webassemblyjs/helper-buffer@1.12.1: + resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} + dev: true + + /@webassemblyjs/helper-numbers@1.11.6: + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/helper-wasm-bytecode@1.11.6: + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + dev: true + + /@webassemblyjs/helper-wasm-section@1.12.1: + resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/wasm-gen': 1.12.1 + dev: true + + /@webassemblyjs/ieee754@1.11.6: + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + dependencies: + '@xtuc/ieee754': 1.2.0 + dev: true + + /@webassemblyjs/leb128@1.11.6: + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + dependencies: + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/utf8@1.11.6: + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + dev: true + + /@webassemblyjs/wasm-edit@1.12.1: + resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-opt': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + '@webassemblyjs/wast-printer': 1.12.1 + dev: true + + /@webassemblyjs/wasm-gen@1.12.1: + resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + dev: true + + /@webassemblyjs/wasm-opt@1.12.1: + resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + dev: true + + /@webassemblyjs/wasm-parser@1.12.1: + resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + dev: true + + /@webassemblyjs/wast-printer@1.12.1: + resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@xtuc/long': 4.2.2 + dev: true + + /@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0)(webpack@5.95.0): + resolution: {integrity: sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==} + peerDependencies: + webpack: 4.x.x || 5.x.x + webpack-cli: 4.x.x + dependencies: + webpack: 5.95.0(webpack-cli@4.10.0) + webpack-cli: 4.10.0(webpack@5.95.0) + dev: true + + /@webpack-cli/info@1.5.0(webpack-cli@4.10.0): + resolution: {integrity: sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==} + peerDependencies: + webpack-cli: 4.x.x + dependencies: + envinfo: 7.14.0 + webpack-cli: 4.10.0(webpack@5.95.0) + dev: true + + /@webpack-cli/serve@1.7.0(webpack-cli@4.10.0): + resolution: {integrity: sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==} + peerDependencies: + webpack-cli: 4.x.x + webpack-dev-server: '*' + peerDependenciesMeta: + webpack-dev-server: + optional: true + dependencies: + webpack-cli: 4.10.0(webpack@5.95.0) + dev: true + + /@xtuc/ieee754@1.2.0: + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + dev: true + + /@xtuc/long@4.2.2: + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + dev: true + + /acorn-import-attributes@1.9.5(acorn@8.13.0): + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.13.0 + dev: true + + /acorn@8.13.0: + resolution: {integrity: sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /ajv-formats@2.1.1(ajv@8.17.1): + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.17.1 + dev: true + + /ajv-keywords@3.5.2(ajv@6.12.6): + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + dependencies: + ajv: 6.12.6 + dev: true + + /ajv-keywords@5.1.0(ajv@8.17.1): + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + dependencies: + ajv: 8.17.1 + fast-deep-equal: 3.1.3 + dev: true + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + dev: true + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + + /array-union@1.0.2: + resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} + engines: {node: '>=0.10.0'} + dependencies: + array-uniq: 1.0.3 + dev: true + + /array-uniq@1.0.3: + resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} + engines: {node: '>=0.10.0'} + dev: true + + /babel-loader@8.4.1(@babel/core@7.25.9)(webpack@5.95.0): + resolution: {integrity: sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==} + engines: {node: '>= 8.9'} + peerDependencies: + '@babel/core': ^7.0.0 + webpack: '>=2' + dependencies: + '@babel/core': 7.25.9 + find-cache-dir: 3.3.2 + loader-utils: 2.0.4 + make-dir: 3.1.0 + schema-utils: 2.7.1 + webpack: 5.95.0(webpack-cli@4.10.0) + dev: true + + /babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.25.9): + resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/compat-data': 7.25.9 + '@babel/core': 7.25.9 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.9) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.9): + resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.9) + core-js-compat: 3.38.1 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.25.9): + resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.9) + transitivePeerDependencies: + - supports-color + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + + /big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + dev: true + + /bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.1.1 + dev: true + + /browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001669 + electron-to-chromium: 1.5.43 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.2) + dev: true + + /buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + dev: true + + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.8.2 + dev: true + + /caniuse-lite@1.0.30001669: + resolution: {integrity: sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==} + dev: true + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + dev: true + + /chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + dev: true + + /clean-webpack-plugin@4.0.0(webpack@5.95.0): + resolution: {integrity: sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==} + engines: {node: '>=10.0.0'} + peerDependencies: + webpack: '>=4.0.0 <6.0.0' + dependencies: + del: 4.1.1 + webpack: 5.95.0(webpack-cli@4.10.0) + dev: true + + /clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + dependencies: + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 + dev: true + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true + + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true + + /colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + dev: true + + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true + + /commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + dev: true + + /commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true + + /copy-webpack-plugin@11.0.0(webpack@5.95.0): + resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==} + engines: {node: '>= 14.15.0'} + peerDependencies: + webpack: ^5.1.0 + dependencies: + fast-glob: 3.3.2 + glob-parent: 6.0.2 + globby: 13.2.2 + normalize-path: 3.0.0 + schema-utils: 4.2.0 + serialize-javascript: 6.0.2 + webpack: 5.95.0(webpack-cli@4.10.0) + dev: true + + /core-js-compat@3.38.1: + resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==} + dependencies: + browserslist: 4.24.2 + dev: true + + /cross-env@7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true + dependencies: + cross-spawn: 7.0.3 + dev: true + + /cross-fetch@3.1.5: + resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} + dependencies: + node-fetch: 2.6.7 + transitivePeerDependencies: + - encoding + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + + /del@4.1.1: + resolution: {integrity: sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==} + engines: {node: '>=6'} + 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 + dev: true + + /devtools-protocol@0.0.1001819: + resolution: {integrity: sha512-G6OsIFnv/rDyxSqBa2lDLR6thp9oJioLsb2Gl+LbQlyoA9/OBAkrTU9jiCcQ8Pnh7z4d6slDiLaogR5hzgJLmQ==} + dev: true + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /dotenv-json-complex@1.0.4: + resolution: {integrity: sha512-Up7nxudYj4X7XcACMzrVCse8gEORrZ782JyIXJS4PZmOa/VKGkcVkZOh/Y0eHeFQI/LRV5Lw1Wxk6iG53070Mg==} + dev: true + + /dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + dev: true + + /electron-to-chromium@1.5.43: + resolution: {integrity: sha512-NxnmFBHDl5Sachd2P46O7UJiMaMHMLSofoIWVJq3mj8NJgG0umiSeljAVP9lGzjI0UDLJJ5jjoGjcrB8RSbjLQ==} + dev: true + + /emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + dev: true + + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: true + + /enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + dev: true + + /envinfo@7.14.0: + resolution: {integrity: sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + dev: true + + /escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + + /eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: true + + /extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + dependencies: + debug: 4.3.4 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + dev: true + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + dev: true + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-uri@3.0.3: + resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} + dev: true + + /fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + dev: true + + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + dependencies: + reusify: 1.0.4 + dev: true + + /fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + dependencies: + pend: 1.2.0 + dev: true + + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + dev: true + + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + + /flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + dev: true + + /fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true + + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + + /get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + dependencies: + pump: 3.0.2 + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + dev: true + + /glob@5.0.15: + resolution: {integrity: sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==} + deprecated: Glob versions prior to v9 are no longer supported + dependencies: + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 4.0.0 + dev: true + + /globby@6.1.0: + resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==} + engines: {node: '>=0.10.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 + dev: true + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + + /https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true + + /ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + dev: true + + /import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + dev: true + + /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. + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /interpret@2.2.0: + resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==} + engines: {node: '>= 0.10'} + dev: true + + /is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + dependencies: + hasown: 2.0.2 + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-path-cwd@2.2.0: + resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} + engines: {node: '>=6'} + dev: true + + /is-path-in-cwd@2.1.0: + resolution: {integrity: sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==} + engines: {node: '>=6'} + dependencies: + is-path-inside: 2.1.0 + dev: true + + /is-path-inside@2.1.0: + resolution: {integrity: sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==} + engines: {node: '>=6'} + dependencies: + path-is-inside: 1.0.2 + dev: true + + /is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + dev: true + + /jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 22.7.9 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: true + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: true + + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /k6@0.0.0: + resolution: {integrity: sha512-GAQSWayS2+LjbH5bkRi+pMPYyP1JSp7o+4j58ANZ762N/RH/SdlAT3CHHztnn8s/xgg8kYNM24Gd2IPo9b5W+g==} + dev: true + + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: true + + /loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + dev: true + + /loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.3 + dev: true + + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true + + /lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + dev: true + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: false + + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: true + + /make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.1 + dev: true + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + dev: true + + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: true + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true + + /neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: true + + /node-fetch@2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: true + + /node-gyp-build@4.8.2: + resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==} + hasBin: true + dev: true + + /node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: true + + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + dev: true + + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-is-inside@1.0.2: + resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} + dev: true + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + dev: true + + /picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + dev: true + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: true + + /pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + dev: true + + /pinkie-promise@2.0.1: + resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} + engines: {node: '>=0.10.0'} + dependencies: + pinkie: 2.0.4 + dev: true + + /pinkie@2.0.4: + resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} + engines: {node: '>=0.10.0'} + dev: true + + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: true + + /progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + dev: true + + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: true + + /pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: true + + /puppeteer@14.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10): + resolution: {integrity: sha512-+H0Gm84aXUvSLdSiDROtLlOofftClgw2TdceMvvCU9UvMryappoeS3+eOLfKvoy4sm8B8MWnYmPhWxVFudAOFQ==} + engines: {node: '>=14.1.0'} + deprecated: < 22.8.2 is no longer supported + requiresBuild: true + dependencies: + cross-fetch: 3.1.5 + debug: 4.3.4 + devtools-protocol: 0.0.1001819 + extract-zip: 2.0.1 + https-proxy-agent: 5.0.1 + pkg-dir: 4.2.0 + progress: 2.0.3 + proxy-from-env: 1.1.0 + rimraf: 3.0.2 + tar-fs: 2.1.1 + unbzip2-stream: 1.4.3 + ws: 8.7.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + + /rechoir@0.7.1: + resolution: {integrity: sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==} + engines: {node: '>= 0.10'} + dependencies: + resolve: 1.22.8 + dev: true + + /regenerate-unicode-properties@10.2.0: + resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + dev: true + + /regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + dev: true + + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + dev: true + + /regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + dependencies: + '@babel/runtime': 7.25.9 + dev: true + + /regexpu-core@6.1.1: + resolution: {integrity: sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.0 + regjsgen: 0.8.0 + regjsparser: 0.11.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.0 + dev: true + + /regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + dev: true + + /regjsparser@0.11.1: + resolution: {integrity: sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==} + hasBin: true + dependencies: + jsesc: 3.0.2 + dev: true + + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: true + + /resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 + dev: true + + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.15.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true + + /schema-utils@2.7.1: + resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} + engines: {node: '>= 8.9.0'} + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: true + + /schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: true + + /schema-utils@4.2.0: + resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} + engines: {node: '>= 12.13.0'} + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) + dev: true + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true + + /serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + dependencies: + randombytes: 2.1.0 + dev: true + + /shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + dependencies: + kind-of: 6.0.3 + dev: true + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + dev: true + + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: true + + /tar-fs@2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.2 + tar-stream: 2.2.0 + dev: true + + /tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + + /terser-webpack-plugin@5.3.10(webpack@5.95.0): + resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.2 + terser: 5.36.0 + webpack: 5.95.0(webpack-cli@4.10.0) + dev: true + + /terser@5.36.0: + resolution: {integrity: sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.13.0 + commander: 2.20.3 + source-map-support: 0.5.21 + dev: true + + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: true + + /typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /unbzip2-stream@1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + dependencies: + buffer: 5.7.1 + through: 2.3.8 + dev: true + + /undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + dev: true + + /unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} + dev: true + + /unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-property-aliases-ecmascript: 2.1.0 + dev: true + + /unicode-match-property-value-ecmascript@2.2.0: + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + engines: {node: '>=4'} + dev: true + + /unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + dev: true + + /update-browserslist-db@1.1.1(browserslist@4.24.2): + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.24.2 + escalade: 3.2.0 + picocolors: 1.1.1 + dev: true + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 + dev: true + + /utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.8.2 + dev: true + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + + /watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} + engines: {node: '>=10.13.0'} + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + dev: true + + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: true + + /webpack-cli@4.10.0(webpack@5.95.0): + resolution: {integrity: sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + '@webpack-cli/generators': '*' + '@webpack-cli/migrate': '*' + webpack: 4.x.x || 5.x.x + webpack-bundle-analyzer: '*' + webpack-dev-server: '*' + peerDependenciesMeta: + '@webpack-cli/generators': + optional: true + '@webpack-cli/migrate': + optional: true + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + dependencies: + '@discoveryjs/json-ext': 0.5.7 + '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0)(webpack@5.95.0) + '@webpack-cli/info': 1.5.0(webpack-cli@4.10.0) + '@webpack-cli/serve': 1.7.0(webpack-cli@4.10.0) + colorette: 2.0.20 + commander: 7.2.0 + cross-spawn: 7.0.3 + fastest-levenshtein: 1.0.16 + import-local: 3.2.0 + interpret: 2.2.0 + rechoir: 0.7.1 + webpack: 5.95.0(webpack-cli@4.10.0) + webpack-merge: 5.10.0 + dev: true + + /webpack-glob-entries@1.0.1: + resolution: {integrity: sha512-ebis0/kd0CxxlZabcnCcKA2Dc5fZJvtadOR+72I8U4z3Umaq9iGQLF69n3p+nMBWK1tKvKkdfZ8Rm2+f6JUCww==} + dependencies: + glob: 5.0.15 + dev: true + + /webpack-merge@5.10.0: + resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==} + engines: {node: '>=10.0.0'} + dependencies: + clone-deep: 4.0.1 + flat: 5.0.2 + wildcard: 2.0.1 + dev: true + + /webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + dev: true + + /webpack@5.95.0(webpack-cli@4.10.0): + resolution: {integrity: sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/estree': 1.0.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + acorn: 8.13.0 + acorn-import-attributes: 1.9.5(acorn@8.13.0) + browserslist: 4.24.2 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.17.1 + es-module-lexer: 1.5.4 + 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.1 + terser-webpack-plugin: 5.3.10(webpack@5.95.0) + watchpack: 2.4.2 + webpack-cli: 4.10.0(webpack@5.95.0) + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: true + + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /wildcard@2.0.1: + resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /ws@8.7.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + resolution: {integrity: sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + dev: true + + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true + + /yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + dev: true diff --git a/tests/performance-tests/pnpm-workspace.yaml b/tests/performance-tests/pnpm-workspace.yaml new file mode 100644 index 00000000000..4de91a383ab --- /dev/null +++ b/tests/performance-tests/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +packages: + - '.' From 5ddceba1aa09c12f7c0a7815b328332ede343f9d Mon Sep 17 00:00:00 2001 From: Duncan Watson Date: Wed, 23 Oct 2024 23:19:15 +0100 Subject: [PATCH 06/12] EES-4877 - corrected totalResults count in test output to match new meta summary structure. Corrected average trend for total query results graph in Grafana dashboard. --- .../dashboards/ees-dashboard.json | 23 +++++++------------ .../sequentialRequestsProfile.ts | 1 + .../publicApiDataSetQuery.test.ts | 3 ++- .../src/utils/publicApiService.ts | 15 +++++++----- 4 files changed, 20 insertions(+), 22 deletions(-) diff --git a/tests/performance-tests/dashboards/ees-dashboard.json b/tests/performance-tests/dashboards/ees-dashboard.json index 96b2fcc18f5..be6a33a525b 100644 --- a/tests/performance-tests/dashboards/ees-dashboard.json +++ b/tests/performance-tests/dashboards/ees-dashboard.json @@ -2870,7 +2870,7 @@ "type": "influxdb", "uid": "P76A45B24F43298D1" }, - "query": "SELECT max(\"value\") FROM \"ees_public_api_individual_query_response_rows\" WHERE $timeFilter GROUP BY time(10s) fill(null)", + "query": "SELECT mean(\"value\") FROM \"ees_public_api_individual_query_response_rows\" WHERE $timeFilter GROUP BY time(10s) fill(null)", "rawQuery": true, "refId": "A", "resultFormat": "time_series" @@ -3080,8 +3080,7 @@ "mode": "absolute", "steps": [ { - "color": "light-red", - "value": null + "color": "light-red" }, { "color": "red", @@ -3173,8 +3172,7 @@ "mode": "absolute", "steps": [ { - "color": "light-red", - "value": null + "color": "light-red" }, { "color": "red", @@ -3235,8 +3233,7 @@ "mode": "absolute", "steps": [ { - "color": "light-red", - "value": null + "color": "light-red" }, { "color": "red", @@ -3331,8 +3328,7 @@ "mode": "absolute", "steps": [ { - "color": "light-red", - "value": null + "color": "light-red" }, { "color": "red", @@ -3393,8 +3389,7 @@ "mode": "absolute", "steps": [ { - "color": "light-red", - "value": null + "color": "light-red" }, { "color": "red", @@ -3458,8 +3453,7 @@ "mode": "absolute", "steps": [ { - "color": "light-red", - "value": null + "color": "light-red" }, { "color": "red", @@ -3523,8 +3517,7 @@ "mode": "absolute", "steps": [ { - "color": "light-red", - "value": null + "color": "light-red" }, { "color": "red", diff --git a/tests/performance-tests/src/configuration/sequentialRequestsProfile.ts b/tests/performance-tests/src/configuration/sequentialRequestsProfile.ts index 572b4293202..6250d0fb266 100644 --- a/tests/performance-tests/src/configuration/sequentialRequestsProfile.ts +++ b/tests/performance-tests/src/configuration/sequentialRequestsProfile.ts @@ -21,6 +21,7 @@ export default function sequentialRequestProfile( return { duration: `${mainStageDurationMinutes}m`, vus: 1, + noConnectionReuse: true, insecureSkipTLSVerify: true, }; } diff --git a/tests/performance-tests/src/tests/public-api/data-set-query/publicApiDataSetQuery.test.ts b/tests/performance-tests/src/tests/public-api/data-set-query/publicApiDataSetQuery.test.ts index 889d8dece00..f227de511f8 100644 --- a/tests/performance-tests/src/tests/public-api/data-set-query/publicApiDataSetQuery.test.ts +++ b/tests/performance-tests/src/tests/public-api/data-set-query/publicApiDataSetQuery.test.ts @@ -95,11 +95,12 @@ export function setup(): SetupData { ); const dataSetMeta = dataSetsFilteredByName.map(dataSet => { - const { meta } = publicApiService.getDataSetsMeta(dataSet.id); + const { meta } = publicApiService.getDataSetMeta(dataSet.id); return { ...meta, id: dataSet.id, name: dataSet.title, + totalResults: dataSet.latestVersion.totalResults, }; }); diff --git a/tests/performance-tests/src/utils/publicApiService.ts b/tests/performance-tests/src/utils/publicApiService.ts index 67b28725367..6e36a2ab784 100644 --- a/tests/performance-tests/src/utils/publicApiService.ts +++ b/tests/performance-tests/src/utils/publicApiService.ts @@ -35,12 +35,15 @@ export interface Publication { interface DataSet { id: string; title: string; - description: string; - timePeriods: { - start: string; - end: string; + summary: string; + latestVersion: { + totalResults: number; + timePeriods: { + start: string; + end: string; + }; + geographicLevels: string[]; }; - geographicLevels: string[]; } export interface Paged { @@ -200,7 +203,7 @@ class PublicApiService { }; } - getDataSetsMeta(dataSetId: string) { + getDataSetMeta(dataSetId: string) { const { response, json } = this.client.get( `/v1/data-sets/${dataSetId}/meta`, ); From 79c28d537b3fd7b236d689c4eece0e147107f85d Mon Sep 17 00:00:00 2001 From: Duncan Watson Date: Thu, 24 Oct 2024 09:57:38 +0100 Subject: [PATCH 07/12] EES-4877 - updated Puppeteer to allow correct login via Entra ID, which was craching the browser previously --- tests/performance-tests/package.json | 26 +- tests/performance-tests/pnpm-lock.yaml | 684 ++++++++++++++---- .../{getAuthDetails.ts => getAuthTokens.ts} | 100 ++- .../src/auth/refreshAuthTokens.ts | 2 +- .../src/auth/storeAuthTokens.ts | 6 +- .../src/utils/environmentAndUsers.ts | 2 +- .../src/utils/getOrRefreshAccessTokens.ts | 2 +- 7 files changed, 600 insertions(+), 222 deletions(-) rename tests/performance-tests/src/auth/{getAuthDetails.ts => getAuthTokens.ts} (67%) diff --git a/tests/performance-tests/package.json b/tests/performance-tests/package.json index 62944032563..f8e4ba5ebfe 100644 --- a/tests/performance-tests/package.json +++ b/tests/performance-tests/package.json @@ -16,27 +16,27 @@ "source-map-support": "^0.5.21" }, "devDependencies": { - "@babel/core": "^7.19.0", + "@babel/core": "^7.25.9", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-object-rest-spread": "7.18.9", - "@babel/plugin-transform-runtime": "^7.18.10", - "@babel/preset-env": "^7.19.0", - "@babel/preset-typescript": "^7.18.6", + "@babel/plugin-transform-runtime": "^7.25.9", + "@babel/preset-env": "^7.25.9", + "@babel/preset-typescript": "^7.25.9", "@types/k6": "^0.39.1", - "@types/lodash": "^4.14.191", - "@types/webpack": "^5.28.0", - "babel-loader": "^8.2.5", - "bufferutil": "^4.0.6", + "@types/lodash": "^4.17.12", + "@types/webpack": "^5.28.5", + "babel-loader": "^8.4.1", + "bufferutil": "^4.0.8", "clean-webpack-plugin": "^4.0.0", "copy-webpack-plugin": "^11.0.0", "cross-env": "^7.0.3", - "dotenv": "^16.0.2", + "dotenv": "^16.4.5", "dotenv-json-complex": "^1.0.4", "k6": "^0.0.0", - "puppeteer": "^14.4.0", - "typescript": "^4.8.3", - "utf-8-validate": "^5.0.9", - "webpack": "^5.74.0", + "puppeteer": "^23.6.0", + "typescript": "^4.9.5", + "utf-8-validate": "^5.0.10", + "webpack": "^5.95.0", "webpack-cli": "^4.10.0", "webpack-glob-entries": "^1.0.1" } diff --git a/tests/performance-tests/pnpm-lock.yaml b/tests/performance-tests/pnpm-lock.yaml index ee46f72e20e..87f9edfa417 100644 --- a/tests/performance-tests/pnpm-lock.yaml +++ b/tests/performance-tests/pnpm-lock.yaml @@ -16,7 +16,7 @@ importers: version: 0.5.21 devDependencies: '@babel/core': - specifier: ^7.19.0 + specifier: ^7.25.9 version: 7.25.9 '@babel/plugin-proposal-class-properties': specifier: ^7.18.6 @@ -25,28 +25,28 @@ importers: specifier: 7.18.9 version: 7.18.9(@babel/core@7.25.9) '@babel/plugin-transform-runtime': - specifier: ^7.18.10 + specifier: ^7.25.9 version: 7.25.9(@babel/core@7.25.9) '@babel/preset-env': - specifier: ^7.19.0 + specifier: ^7.25.9 version: 7.25.9(@babel/core@7.25.9) '@babel/preset-typescript': - specifier: ^7.18.6 + specifier: ^7.25.9 version: 7.25.9(@babel/core@7.25.9) '@types/k6': specifier: ^0.39.1 version: 0.39.1 '@types/lodash': - specifier: ^4.14.191 + specifier: ^4.17.12 version: 4.17.12 '@types/webpack': - specifier: ^5.28.0 + specifier: ^5.28.5 version: 5.28.5(webpack-cli@4.10.0) babel-loader: - specifier: ^8.2.5 + specifier: ^8.4.1 version: 8.4.1(@babel/core@7.25.9)(webpack@5.95.0) bufferutil: - specifier: ^4.0.6 + specifier: ^4.0.8 version: 4.0.8 clean-webpack-plugin: specifier: ^4.0.0 @@ -58,7 +58,7 @@ importers: specifier: ^7.0.3 version: 7.0.3 dotenv: - specifier: ^16.0.2 + specifier: ^16.4.5 version: 16.4.5 dotenv-json-complex: specifier: ^1.0.4 @@ -67,16 +67,16 @@ importers: specifier: ^0.0.0 version: 0.0.0 puppeteer: - specifier: ^14.4.0 - version: 14.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + specifier: ^23.6.0 + version: 23.6.0(bufferutil@4.0.8)(typescript@4.9.5)(utf-8-validate@5.0.10) typescript: - specifier: ^4.8.3 + specifier: ^4.9.5 version: 4.9.5 utf-8-validate: - specifier: ^5.0.9 + specifier: ^5.0.10 version: 5.0.10 webpack: - specifier: ^5.74.0 + specifier: ^5.95.0 version: 5.95.0(webpack-cli@4.10.0) webpack-cli: specifier: ^4.10.0 @@ -1322,6 +1322,27 @@ packages: fastq: 1.17.1 dev: true + /@puppeteer/browsers@2.4.0: + resolution: {integrity: sha512-x8J1csfIygOwf6D6qUAZ0ASk3z63zPb7wkNeHRerCMh82qWKUrOgkuP005AJC8lDL6/evtXETGEJVcwykKT4/g==} + engines: {node: '>=18'} + hasBin: true + dependencies: + debug: 4.3.7 + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.4.0 + semver: 7.6.3 + tar-fs: 3.0.6 + unbzip2-stream: 1.4.3 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@tootallnate/quickjs-emscripten@0.23.0: + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + dev: true + /@types/estree@1.0.6: resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} dev: true @@ -1535,11 +1556,11 @@ packages: hasBin: true dev: true - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} + /agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + engines: {node: '>= 14'} dependencies: - debug: 4.3.4 + debug: 4.3.7 transitivePeerDependencies: - supports-color dev: true @@ -1590,6 +1611,11 @@ packages: require-from-string: 2.0.2 dev: true + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -1597,6 +1623,17 @@ packages: color-convert: 1.9.3 dev: true + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + /array-union@1.0.2: resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} engines: {node: '>=0.10.0'} @@ -1609,6 +1646,17 @@ packages: engines: {node: '>=0.10.0'} dev: true + /ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + dependencies: + tslib: 2.8.0 + dev: true + + /b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + dev: true + /babel-loader@8.4.1(@babel/core@7.25.9)(webpack@5.95.0): resolution: {integrity: sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==} engines: {node: '>= 8.9'} @@ -1664,20 +1712,55 @@ packages: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true + /bare-events@2.5.0: + resolution: {integrity: sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==} + requiresBuild: true + dev: true + optional: true + + /bare-fs@2.3.5: + resolution: {integrity: sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==} + requiresBuild: true + dependencies: + bare-events: 2.5.0 + bare-path: 2.1.3 + bare-stream: 2.3.2 + dev: true + optional: true + + /bare-os@2.4.4: + resolution: {integrity: sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==} + requiresBuild: true + dev: true + optional: true + + /bare-path@2.1.3: + resolution: {integrity: sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==} + requiresBuild: true + dependencies: + bare-os: 2.4.4 + dev: true + optional: true + + /bare-stream@2.3.2: + resolution: {integrity: sha512-EFZHSIBkDgSHIwj2l2QZfP4U5OcD4xFAOwhSb/vlr9PIqyGJGvB/nfClJbcnh3EY4jtPE4zsb5ztae96bVF79A==} + requiresBuild: true + dependencies: + streamx: 2.20.1 + dev: true + optional: true + /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: true - /big.js@5.2.2: - resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + /basic-ftp@5.0.5: + resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} + engines: {node: '>=10.0.0'} dev: true - /bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 + /big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} dev: true /brace-expansion@1.1.11: @@ -1700,7 +1783,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001669 - electron-to-chromium: 1.5.43 + electron-to-chromium: 1.5.45 node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) dev: true @@ -1727,6 +1810,11 @@ packages: node-gyp-build: 4.8.2 dev: true + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + /caniuse-lite@1.0.30001669: resolution: {integrity: sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==} dev: true @@ -1740,15 +1828,22 @@ packages: supports-color: 5.5.0 dev: true - /chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - dev: true - /chrome-trace-event@1.0.4: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} dev: true + /chromium-bidi@0.8.0(devtools-protocol@0.0.1354347): + resolution: {integrity: sha512-uJydbGdTw0DEUjhoogGveneJVWX/9YuqkWePzMmkBYwtdAqo5d3J/ovNKFr+/2hWXYmYCr6it8mSSTIj6SS6Ug==} + peerDependencies: + devtools-protocol: '*' + dependencies: + devtools-protocol: 0.0.1354347 + mitt: 3.0.1 + urlpattern-polyfill: 10.0.0 + zod: 3.23.8 + dev: true + /clean-webpack-plugin@4.0.0(webpack@5.95.0): resolution: {integrity: sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==} engines: {node: '>=10.0.0'} @@ -1759,6 +1854,15 @@ packages: webpack: 5.95.0(webpack-cli@4.10.0) dev: true + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + /clone-deep@4.0.1: resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} engines: {node: '>=6'} @@ -1774,10 +1878,21 @@ packages: color-name: 1.1.3 dev: true + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} dev: true + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + /colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} dev: true @@ -1824,6 +1939,22 @@ packages: browserslist: 4.24.2 dev: true + /cosmiconfig@9.0.0(typescript@4.9.5): + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + typescript: 4.9.5 + dev: true + /cross-env@7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} @@ -1832,14 +1963,6 @@ packages: cross-spawn: 7.0.3 dev: true - /cross-fetch@3.1.5: - resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} - dependencies: - node-fetch: 2.6.7 - transitivePeerDependencies: - - encoding - dev: true - /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -1849,16 +1972,9 @@ packages: which: 2.0.2 dev: true - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 + /data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} dev: true /debug@4.3.7: @@ -1873,6 +1989,15 @@ packages: ms: 2.1.3 dev: true + /degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + dev: true + /del@4.1.1: resolution: {integrity: sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==} engines: {node: '>=6'} @@ -1886,8 +2011,8 @@ packages: rimraf: 2.7.1 dev: true - /devtools-protocol@0.0.1001819: - resolution: {integrity: sha512-G6OsIFnv/rDyxSqBa2lDLR6thp9oJioLsb2Gl+LbQlyoA9/OBAkrTU9jiCcQ8Pnh7z4d6slDiLaogR5hzgJLmQ==} + /devtools-protocol@0.0.1354347: + resolution: {integrity: sha512-BlmkSqV0V84E2WnEnoPnwyix57rQxAM5SKJjf4TbYOCGLAWtz8CDH8RIaGOjPgPCXo2Mce3kxSY497OySidY3Q==} dev: true /dir-glob@3.0.1: @@ -1906,8 +2031,12 @@ packages: engines: {node: '>=12'} dev: true - /electron-to-chromium@1.5.43: - resolution: {integrity: sha512-NxnmFBHDl5Sachd2P46O7UJiMaMHMLSofoIWVJq3mj8NJgG0umiSeljAVP9lGzjI0UDLJJ5jjoGjcrB8RSbjLQ==} + /electron-to-chromium@1.5.45: + resolution: {integrity: sha512-vOzZS6uZwhhbkZbcRyiy99Wg+pYFV5hk+5YaECvx0+Z31NR3Tt5zS6dze2OepT6PCTzVzT0dIJItti+uAW5zmw==} + dev: true + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true /emojis-list@3.0.0: @@ -1929,12 +2058,23 @@ packages: tapable: 2.2.1 dev: true + /env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + dev: true + /envinfo@7.14.0: resolution: {integrity: sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==} engines: {node: '>=4'} hasBin: true dev: true + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: true + /es-module-lexer@1.5.4: resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} dev: true @@ -1949,6 +2089,18 @@ packages: engines: {node: '>=0.8.0'} dev: true + /escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + dev: true + /eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} @@ -1957,6 +2109,12 @@ packages: estraverse: 4.3.0 dev: true + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: true + /esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} @@ -1989,7 +2147,7 @@ packages: engines: {node: '>= 10.17.0'} hasBin: true dependencies: - debug: 4.3.4 + debug: 4.3.7 get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -2002,6 +2160,10 @@ packages: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true + /fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + dev: true + /fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} @@ -2067,8 +2229,13 @@ packages: hasBin: true dev: true - /fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + /fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 dev: true /fs.realpath@1.0.0: @@ -2084,6 +2251,11 @@ packages: engines: {node: '>=6.9.0'} dev: true + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + /get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -2091,6 +2263,18 @@ packages: pump: 3.0.2 dev: true + /get-uri@6.0.3: + resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} + engines: {node: '>= 14'} + dependencies: + basic-ftp: 5.0.5 + data-uri-to-buffer: 6.0.2 + debug: 4.3.7 + fs-extra: 11.2.0 + transitivePeerDependencies: + - supports-color + dev: true + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -2180,12 +2364,22 @@ packages: function-bind: 1.1.2 dev: true - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} + /http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.1 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + dev: true + + /https-proxy-agent@7.0.5: + resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} + engines: {node: '>= 14'} dependencies: - agent-base: 6.0.2 - debug: 4.3.4 + agent-base: 7.1.1 + debug: 4.3.7 transitivePeerDependencies: - supports-color dev: true @@ -2199,6 +2393,14 @@ packages: engines: {node: '>= 4'} dev: true + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + /import-local@3.2.0: resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} engines: {node: '>=8'} @@ -2225,6 +2427,18 @@ packages: engines: {node: '>= 0.10'} dev: true + /ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + dev: true + + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true + /is-core-module@2.15.1: resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} engines: {node: '>= 0.4'} @@ -2237,6 +2451,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -2297,6 +2516,17 @@ packages: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + dev: true + /jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} @@ -2321,6 +2551,14 @@ packages: hasBin: true dev: true + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + /k6@0.0.0: resolution: {integrity: sha512-GAQSWayS2+LjbH5bkRi+pMPYyP1JSp7o+4j58ANZ762N/RH/SdlAT3CHHztnn8s/xgg8kYNM24Gd2IPo9b5W+g==} dev: true @@ -2330,6 +2568,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + /loader-runner@4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} @@ -2365,6 +2607,11 @@ packages: yallist: 3.1.1 dev: true + /lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + dev: true + /make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} @@ -2407,12 +2654,8 @@ packages: brace-expansion: 1.1.11 dev: true - /mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - dev: true - - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + /mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} dev: true /ms@2.1.3: @@ -2423,16 +2666,9 @@ packages: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true - /node-fetch@2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - dependencies: - whatwg-url: 5.0.0 + /netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} dev: true /node-gyp-build@4.8.2: @@ -2484,6 +2720,47 @@ packages: engines: {node: '>=6'} dev: true + /pac-proxy-agent@7.0.2: + resolution: {integrity: sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==} + engines: {node: '>= 14'} + dependencies: + '@tootallnate/quickjs-emscripten': 0.23.0 + agent-base: 7.1.1 + debug: 4.3.7 + get-uri: 6.0.3 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + /pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} + dependencies: + degenerator: 5.0.1 + netmask: 2.0.2 + dev: true + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.25.9 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -2559,6 +2836,22 @@ packages: engines: {node: '>=0.4.0'} dev: true + /proxy-agent@6.4.0: + resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.1 + debug: 4.3.7 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + lru-cache: 7.18.3 + pac-proxy-agent: 7.0.2 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.4 + transitivePeerDependencies: + - supports-color + dev: true + /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: true @@ -2575,28 +2868,38 @@ packages: engines: {node: '>=6'} dev: true - /puppeteer@14.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10): - resolution: {integrity: sha512-+H0Gm84aXUvSLdSiDROtLlOofftClgw2TdceMvvCU9UvMryappoeS3+eOLfKvoy4sm8B8MWnYmPhWxVFudAOFQ==} - engines: {node: '>=14.1.0'} - deprecated: < 22.8.2 is no longer supported + /puppeteer-core@23.6.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + resolution: {integrity: sha512-se1bhgUpR9C529SgHGr/eyT92mYyQPAhA2S9pGtGrVG2xob9qE6Pbp7TlqiSPlnnY1lINqhn6/67EwkdzOmKqQ==} + engines: {node: '>=18'} + dependencies: + '@puppeteer/browsers': 2.4.0 + chromium-bidi: 0.8.0(devtools-protocol@0.0.1354347) + debug: 4.3.7 + devtools-protocol: 0.0.1354347 + typed-query-selector: 2.12.0 + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /puppeteer@23.6.0(bufferutil@4.0.8)(typescript@4.9.5)(utf-8-validate@5.0.10): + resolution: {integrity: sha512-l+Fgo8SVFSd51STtq2crz8t1Y3VXowsuR4zfR64qDOn6oggz7YIZauWiNR4IJjczQ6nvFs3S4cgng55/nesxTQ==} + engines: {node: '>=18'} + hasBin: true requiresBuild: true dependencies: - cross-fetch: 3.1.5 - debug: 4.3.4 - devtools-protocol: 0.0.1001819 - extract-zip: 2.0.1 - https-proxy-agent: 5.0.1 - pkg-dir: 4.2.0 - progress: 2.0.3 - proxy-from-env: 1.1.0 - rimraf: 3.0.2 - tar-fs: 2.1.1 - unbzip2-stream: 1.4.3 - ws: 8.7.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@puppeteer/browsers': 2.4.0 + chromium-bidi: 0.8.0(devtools-protocol@0.0.1354347) + cosmiconfig: 9.0.0(typescript@4.9.5) + devtools-protocol: 0.0.1354347 + puppeteer-core: 23.6.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + typed-query-selector: 2.12.0 transitivePeerDependencies: - bufferutil - - encoding - supports-color + - typescript - utf-8-validate dev: true @@ -2604,21 +2907,16 @@ packages: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true + /queue-tick@1.0.1: + resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} + dev: true + /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 dev: true - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - dev: true - /rechoir@0.7.1: resolution: {integrity: sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==} engines: {node: '>= 0.10'} @@ -2670,6 +2968,11 @@ packages: jsesc: 3.0.2 dev: true + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + /require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} @@ -2682,6 +2985,11 @@ packages: resolve-from: 5.0.0 dev: true + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -2709,14 +3017,6 @@ packages: glob: 7.2.3 dev: true - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - dependencies: - glob: 7.2.3 - dev: true - /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -2760,6 +3060,12 @@ packages: hasBin: true dev: true + /semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + dev: true + /serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} dependencies: @@ -2790,6 +3096,30 @@ packages: engines: {node: '>=12'} dev: true + /smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + dev: true + + /socks-proxy-agent@8.0.4: + resolution: {integrity: sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.1 + debug: 4.3.7 + socks: 2.8.3 + transitivePeerDependencies: + - supports-color + dev: true + + /socks@2.8.3: + resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + dev: true + /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: @@ -2800,10 +3130,34 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + /sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + dev: true + + /streamx@2.20.1: + resolution: {integrity: sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==} dependencies: - safe-buffer: 5.2.1 + fast-fifo: 1.3.2 + queue-tick: 1.0.1 + text-decoder: 1.2.1 + optionalDependencies: + bare-events: 2.5.0 + dev: true + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 dev: true /supports-color@5.5.0: @@ -2830,24 +3184,22 @@ packages: engines: {node: '>=6'} dev: true - /tar-fs@2.1.1: - resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + /tar-fs@3.0.6: + resolution: {integrity: sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==} dependencies: - chownr: 1.1.4 - mkdirp-classic: 0.5.3 pump: 3.0.2 - tar-stream: 2.2.0 + tar-stream: 3.1.7 + optionalDependencies: + bare-fs: 2.3.5 + bare-path: 2.1.3 dev: true - /tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} + /tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} dependencies: - bl: 4.1.0 - end-of-stream: 1.4.4 - fs-constants: 1.0.0 - inherits: 2.0.4 - readable-stream: 3.6.2 + b4a: 1.6.7 + fast-fifo: 1.3.2 + streamx: 2.20.1 dev: true /terser-webpack-plugin@5.3.10(webpack@5.95.0): @@ -2885,6 +3237,10 @@ packages: source-map-support: 0.5.21 dev: true + /text-decoder@1.2.1: + resolution: {integrity: sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ==} + dev: true + /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true @@ -2896,8 +3252,12 @@ packages: is-number: 7.0.0 dev: true - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + /tslib@2.8.0: + resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==} + dev: true + + /typed-query-selector@2.12.0: + resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} dev: true /typescript@4.9.5: @@ -2940,6 +3300,11 @@ packages: engines: {node: '>=4'} dev: true + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + dev: true + /update-browserslist-db@1.1.1(browserslist@4.24.2): resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} hasBin: true @@ -2957,6 +3322,10 @@ packages: punycode: 2.3.1 dev: true + /urlpattern-polyfill@10.0.0: + resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==} + dev: true + /utf-8-validate@5.0.10: resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} engines: {node: '>=6.14.2'} @@ -2965,10 +3334,6 @@ packages: node-gyp-build: 4.8.2 dev: true - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true - /watchpack@2.4.2: resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} engines: {node: '>=10.13.0'} @@ -2977,10 +3342,6 @@ packages: graceful-fs: 4.2.11 dev: true - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: true - /webpack-cli@4.10.0(webpack@5.95.0): resolution: {integrity: sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==} engines: {node: '>=10.13.0'} @@ -3076,13 +3437,6 @@ packages: - uglify-js dev: true - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - dev: true - /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -3095,16 +3449,25 @@ packages: resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} dev: true + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /ws@8.7.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): - resolution: {integrity: sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==} + /ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 + utf-8-validate: '>=5.0.2' peerDependenciesMeta: bufferutil: optional: true @@ -3115,13 +3478,40 @@ packages: utf-8-validate: 5.0.10 dev: true + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: true + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + 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 + dev: true + /yauzl@2.10.0: resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} dependencies: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 dev: true + + /zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + dev: true diff --git a/tests/performance-tests/src/auth/getAuthDetails.ts b/tests/performance-tests/src/auth/getAuthTokens.ts similarity index 67% rename from tests/performance-tests/src/auth/getAuthDetails.ts rename to tests/performance-tests/src/auth/getAuthTokens.ts index 4ad915a7674..182b8039974 100644 --- a/tests/performance-tests/src/auth/getAuthDetails.ts +++ b/tests/performance-tests/src/auth/getAuthTokens.ts @@ -17,32 +17,27 @@ export interface AuthDetails { export type IdpOption = 'azure' | 'keycloak'; -export const getAuthTokens = async ( +const getAuthTokens = async ( + userName: string, email: string, password: string, adminUrl: string, idp: IdpOption, -): Promise<{ - id_token: string; - access_token: string; - refresh_token: string; - expires_at: Date; -}> => { +): Promise => { console.log(`Getting authentication details for user ${email}`); const browser = await puppeteer.launch({ headless: true, - ignoreHTTPSErrors: true, - product: 'chrome', + acceptInsecureCerts: true, + browser: 'chrome', executablePath: getChromePath(), args: ['--no-sandbox', '--disable-setuid-sandbox'], }); const page = await browser.newPage(); - await page.goto(adminUrl); - await page.waitForXPath('//*[.="Sign in"]', { + await page.waitForSelector('xpath///*[.="Sign in"]', { timeout: 10000, }); @@ -60,7 +55,7 @@ export const getAuthTokens = async ( throw new Error(`No login strategy for IDP ${idp}`); } - return await page.evaluate(() => { + const authTokens = await page.evaluate(() => { let idToken = ''; let accessToken = ''; let refreshToken = ''; @@ -91,6 +86,15 @@ export const getAuthTokens = async ( expires_at: new Date(expiry * 1000), }; }); + + return { + userName, + authTokens: { + accessToken: authTokens.access_token, + refreshToken: authTokens.refresh_token, + expiryDate: authTokens.expires_at, + }, + }; } finally { await browser.close(); } @@ -101,20 +105,19 @@ const getAuthTokensAzure = async ( email: string, password: string, ) => { - await page.waitForXPath("//*[.='Sign in']", { + await page.waitForSelector("xpath///*[.='Sign in']", { visible: true, timeout: 10000, }); - const emailInput = await page.$x("//*[@name='loginfmt']"); - await emailInput[0].type(email); - - const btn = await page.$x("//*[@type='submit']"); + const emailInput = await page.$("xpath///*[@name='loginfmt']"); + await emailInput!.type(email); - await btn[0].click(); + const btn = await page.$("xpath///*[@type='submit']"); + await btn!.click(); try { - await page.waitForXPath("//*[.='Enter password']", { + await page.waitForSelector("xpath///*[.='Enter password']", { visible: true, timeout: 10000, }); @@ -130,16 +133,17 @@ const getAuthTokensAzure = async ( `User with email ${email} not recognized - received message 'This username may be incorrect'`, ); } + throw e; } - const pwdInput = await page.$x("//*[@name='passwd']"); - await pwdInput[0].type(password); + const pwdInput = await page.$("xpath///*[@name='passwd']"); + await pwdInput!.type(password); - const signInBtn = await page.$x("//*[@type='submit']"); - await signInBtn[0].click(); + const signInBtn = await page.$("xpath///*[@type='submit']"); + await signInBtn!.click(); try { - await page.waitForXPath("//*[.='Stay signed in?']", { + await page.waitForSelector("xpath///*[.='Stay signed in?']", { visible: true, timeout: 10000, }); @@ -159,7 +163,7 @@ const getAuthTokensAzure = async ( await page.click('#idBtn_Back'); - await page.waitForXPath("//*[.='Dashboard']", { + await page.waitForSelector("xpath///*[.='Dashboard']", { visible: true, timeout: 10000, }); @@ -170,43 +174,27 @@ const getAuthTokensKeycloak = async ( email: string, password: string, ) => { - await page.waitForXPath("//*[contains(text(), 'Sign in to your account')]", { - visible: true, - timeout: 10000, - }); + await page.waitForSelector( + "xpath///*[contains(text(), 'Sign in to your account')]", + { + visible: true, + timeout: 10000, + }, + ); - const emailInput = await page.$x("//*[@id='username']"); - await emailInput[0].type(email); + const emailInput = await page.$("xpath///*[@id='username']"); + await emailInput!.type(email); - const pwdInput = await page.$x("//*[@name='password']"); - await pwdInput[0].type(password); + const pwdInput = await page.$("xpath///*[@name='password']"); + await pwdInput!.type(password); - const signInBtn = await page.$x("//*[@type='submit']"); - await signInBtn[0].click(); + const signInBtn = await page.$("xpath///*[@type='submit']"); + await signInBtn!.click(); - await page.waitForXPath("//*[.='Dashboard']", { + await page.waitForSelector("xpath///*[.='Dashboard']", { visible: true, timeout: 10000, }); }; -const getAuthDetails = async ( - userName: string, - email: string, - password: string, - adminUrl: string, - idp: IdpOption, -): Promise => { - const authTokens = await getAuthTokens(email, password, adminUrl, idp); - - return { - userName, - authTokens: { - accessToken: authTokens.access_token, - refreshToken: authTokens.refresh_token, - expiryDate: authTokens.expires_at, - }, - }; -}; - -export default getAuthDetails; +export default getAuthTokens; diff --git a/tests/performance-tests/src/auth/refreshAuthTokens.ts b/tests/performance-tests/src/auth/refreshAuthTokens.ts index b620ccb3497..78caebf3d40 100644 --- a/tests/performance-tests/src/auth/refreshAuthTokens.ts +++ b/tests/performance-tests/src/auth/refreshAuthTokens.ts @@ -1,7 +1,7 @@ /* eslint-disable no-console */ /* eslint-disable camelcase */ import http from 'k6/http'; -import { AuthDetails } from './getAuthDetails'; +import { AuthDetails } from './getAuthTokens'; import getEnvironmentAndUsersFromFile from '../utils/environmentAndUsers'; const environmentAndUsers = getEnvironmentAndUsersFromFile( diff --git a/tests/performance-tests/src/auth/storeAuthTokens.ts b/tests/performance-tests/src/auth/storeAuthTokens.ts index f4213d859f3..8022689bc26 100644 --- a/tests/performance-tests/src/auth/storeAuthTokens.ts +++ b/tests/performance-tests/src/auth/storeAuthTokens.ts @@ -1,7 +1,7 @@ #!/usr/bin/env node import fs from 'fs'; import dotenvJson from 'dotenv-json-complex'; -import getAuthDetails, { IdpOption } from './getAuthDetails'; +import getAuthTokens, { IdpOption } from './getAuthTokens'; export interface User { name: string; @@ -37,7 +37,7 @@ const writeLoginCredentialsToFile = async ( const authTokens = await Promise.all( users.map(async ({ name, email, password }) => { - return getAuthDetails( + return getAuthTokens( name, email, password, @@ -47,7 +47,7 @@ const writeLoginCredentialsToFile = async ( }), ); - const loginCredentialsFilePath = `/home/node/app/dist/.auth-tokens.${environmentName}.json`; + const loginCredentialsFilePath = `dist/.auth-tokens.${environmentName}.json`; fs.writeFileSync(loginCredentialsFilePath, JSON.stringify(authTokens)); }; diff --git a/tests/performance-tests/src/utils/environmentAndUsers.ts b/tests/performance-tests/src/utils/environmentAndUsers.ts index d76bd6fefcd..dcab351f437 100644 --- a/tests/performance-tests/src/utils/environmentAndUsers.ts +++ b/tests/performance-tests/src/utils/environmentAndUsers.ts @@ -1,5 +1,5 @@ /* eslint-disable no-restricted-globals */ -import { AuthDetails } from '../auth/getAuthDetails'; +import { AuthDetails } from '../auth/getAuthTokens'; import { Environment } from '../auth/storeAuthTokens'; export interface EnvironmentAndUsers { diff --git a/tests/performance-tests/src/utils/getOrRefreshAccessTokens.ts b/tests/performance-tests/src/utils/getOrRefreshAccessTokens.ts index e19c5e2a39f..4b9e0c58baa 100644 --- a/tests/performance-tests/src/utils/getOrRefreshAccessTokens.ts +++ b/tests/performance-tests/src/utils/getOrRefreshAccessTokens.ts @@ -1,5 +1,5 @@ import refreshAuthTokens from '../auth/refreshAuthTokens'; -import { AuthTokens } from '../auth/getAuthDetails'; +import { AuthTokens } from '../auth/getAuthTokens'; // Note that this would be best invoked from within httpClient.ts prior to any HTTP requests going out. Currently // it is invoked directly from the tests themselves. From a8cf15057c4ce81dfafab46b73358c37930eabd3 Mon Sep 17 00:00:00 2001 From: Duncan Watson Date: Thu, 24 Oct 2024 10:18:55 +0100 Subject: [PATCH 08/12] EES-4877 - taking empty filters into account in query generation. Added debug console logs for 400 responses to Public API queries. --- .../data-set-query/publicApiDataSetQuery.test.ts | 12 ++++++++++++ .../public-api/data-set-query/queryGenerators.ts | 11 +++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/tests/performance-tests/src/tests/public-api/data-set-query/publicApiDataSetQuery.test.ts b/tests/performance-tests/src/tests/public-api/data-set-query/publicApiDataSetQuery.test.ts index f227de511f8..146171d633d 100644 --- a/tests/performance-tests/src/tests/public-api/data-set-query/publicApiDataSetQuery.test.ts +++ b/tests/performance-tests/src/tests/public-api/data-set-query/publicApiDataSetQuery.test.ts @@ -156,6 +156,8 @@ const performTest = ({ publications }: SetupData) => { const requestTime = Date.now() - startTime; + console.log(`Query completed in ${requestTime} ms`); + individualQuerySpeedTrend.add(requestTime); individualQueryCompleteCount.add(1); individualQueryResponseRowsTrend.add(results.results.length); @@ -191,6 +193,16 @@ const performTest = ({ publications }: SetupData) => { http2StreamErrorRate.add(1); } + if (error.status === 400 || error.status === 500) { + console.log('Error from query endpoint.\n'); + console.log('Metadata was:\n'); + console.log(JSON.stringify(dataSetMeta, null, 2)); + console.log('Query was:\n'); + console.log(JSON.stringify(query, null, 2)); + console.log('Error was:\n'); + console.log(JSON.stringify(error, null, 2)); + } + queryFailureCount.add(1); errorRate.add(1); diff --git a/tests/performance-tests/src/tests/public-api/data-set-query/queryGenerators.ts b/tests/performance-tests/src/tests/public-api/data-set-query/queryGenerators.ts index 5cef757b8b1..48d79a1402f 100644 --- a/tests/performance-tests/src/tests/public-api/data-set-query/queryGenerators.ts +++ b/tests/performance-tests/src/tests/public-api/data-set-query/queryGenerators.ts @@ -193,10 +193,13 @@ class DataSetQueryGenerator { const availableGeographicLevels = Object.keys(dataSetMeta.locations); - const filterItems = this.generateIdListClause( - flatFilterItems.map(fi => fi.id), - filterItemRange, - ); + const filterItems = + flatFilterItems.length > 0 + ? this.generateIdListClause( + flatFilterItems.map(fi => fi.id), + filterItemRange, + ) + : undefined; const locations = this.generateIdListClause(flatLocations, locationsRange); From 42da6160897ac6c290405ba96bea7f35e50097c1 Mon Sep 17 00:00:00 2001 From: Duncan Watson Date: Thu, 24 Oct 2024 10:42:37 +0100 Subject: [PATCH 09/12] EES-4877 - made having user credentials optional --- .../src/utils/environmentAndUsers.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/tests/performance-tests/src/utils/environmentAndUsers.ts b/tests/performance-tests/src/utils/environmentAndUsers.ts index dcab351f437..9638ea17a72 100644 --- a/tests/performance-tests/src/utils/environmentAndUsers.ts +++ b/tests/performance-tests/src/utils/environmentAndUsers.ts @@ -14,10 +14,14 @@ export default function getEnvironmentAndUsersFromFile( const environment = JSON.parse(open(environmentFilePath)) .environment as Environment; - const loginCredentialsPath = `.auth-tokens.${environmentName}.json`; - const loginCredentials = JSON.parse( - open(loginCredentialsPath), - ) as AuthDetails[]; + let loginCredentials: AuthDetails[]; + + try { + const loginCredentialsPath = `.auth-tokens.${environmentName}.json`; + loginCredentials = JSON.parse(open(loginCredentialsPath)) as AuthDetails[]; + } catch { + loginCredentials = []; + } return { environment, From 1f0c447d6bc6b1f4d83b6abf86ce437abb388a6a Mon Sep 17 00:00:00 2001 From: Duncan Watson Date: Thu, 24 Oct 2024 12:15:58 +0100 Subject: [PATCH 10/12] EES-4877 - updated quick start --- tests/performance-tests/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/performance-tests/README.md b/tests/performance-tests/README.md index ee17e37e36d..10275b9be30 100644 --- a/tests/performance-tests/README.md +++ b/tests/performance-tests/README.md @@ -12,6 +12,9 @@ The performance test suite is built using [k6](https://k6.io/) and visualised us ```bash cd tests/performance-tests + # Install Node dependencies. + pnpm i + # Copy the default .env JSON file for a local environment. cp .env.example.json .env.local.json From f1d9fa44f344caf885659293bc01035f6712671e Mon Sep 17 00:00:00 2001 From: Duncan Watson Date: Thu, 24 Oct 2024 13:03:58 +0100 Subject: [PATCH 11/12] EES-4877 - adding origin header to refresh access token request --- tests/performance-tests/src/auth/refreshAuthTokens.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tests/performance-tests/src/auth/refreshAuthTokens.ts b/tests/performance-tests/src/auth/refreshAuthTokens.ts index 78caebf3d40..7c71899f435 100644 --- a/tests/performance-tests/src/auth/refreshAuthTokens.ts +++ b/tests/performance-tests/src/auth/refreshAuthTokens.ts @@ -17,7 +17,7 @@ export default function refreshAuthTokens({ userName, refreshToken, }: RefreshTokenParams): AuthDetails | undefined { - const { openIdConnect } = environmentAndUsers.environment; + const { openIdConnect, adminUrl } = environmentAndUsers.environment; const { refreshTokenUrl, clientId } = openIdConnect; const requestBody = { @@ -26,7 +26,13 @@ export default function refreshAuthTokens({ refresh_token: refreshToken, }; - const response = http.post(refreshTokenUrl, requestBody); + const params = { + headers: { + Origin: adminUrl, + }, + }; + + const response = http.post(refreshTokenUrl, requestBody, params); if (response.status !== 200) { console.log( From 9e7179233da4de0d030353f8b0a1bc606a63b18f Mon Sep 17 00:00:00 2001 From: Duncan Watson Date: Fri, 8 Nov 2024 10:31:22 +0000 Subject: [PATCH 12/12] EES-4877 - added ability to exclude by data set title --- tests/performance-tests/README.md | 15 +++++++- .../tests/public-api/data-set-query/config.ts | 9 +++-- .../publicApiDataSetQuery.test.ts | 37 ++++++++++++++----- 3 files changed, 48 insertions(+), 13 deletions(-) diff --git a/tests/performance-tests/README.md b/tests/performance-tests/README.md index 10275b9be30..bf3235bca38 100644 --- a/tests/performance-tests/README.md +++ b/tests/performance-tests/README.md @@ -340,11 +340,24 @@ queries that can be generated: This test by default targets any data sets that are discoverable via the Public API. The data sets used by the tests can be filtered down however using the following parameters: -* DATA_SET_TITLES - a comma-separated list of data set titles, which will cause the test to only use those +* DATA_SET_TITLES_TO_INCLUDE - a comma-separated list of data set titles, which will cause the test to only use those data sets during the run. The default value is undefined, which does not filter data sets by title. + + `pnpm --environment=dev --users=bau1 perftest dist/publicApiDataSetQuery.test.js + -e DATA_SET_TITLES_TO_INCLUDE="Data Set 1"` + +* DATA_SET_TITLES_TO_EXCLUDE - a comma-separated list of data set titles, which will cause the test to avoid using those + data sets during the run. The default value is undefined, which does not filter out any data sets by title. + + `pnpm --environment=dev --users=bau1 perftest dist/publicApiDataSetQuery.test.js + -e DATA_SET_TITLES_TO_EXCLUDE="Data Set 1"` + * DATA_SET_MAX_ROWS - the maximum number of rows for data sets to be used in this run. The default value is undefined, which does not filter data sets by their size. + `pnpm --environment=dev --users=bau1 perftest dist/publicApiDataSetQuery.test.js + -e DATA_SET_MAX_ROWS=1000000 + ## Transpiling and Bundling The tests are written in Typescript so we need to transpile them to work in K6 (which as an aside is diff --git a/tests/performance-tests/src/tests/public-api/data-set-query/config.ts b/tests/performance-tests/src/tests/public-api/data-set-query/config.ts index f3fecad420a..b27f057af69 100644 --- a/tests/performance-tests/src/tests/public-api/data-set-query/config.ts +++ b/tests/performance-tests/src/tests/public-api/data-set-query/config.ts @@ -18,7 +18,8 @@ const profile = (__ENV.PROFILE ?? 'sequential') as const queries = (__ENV.QUERIES ?? 'simple') as 'simple' | 'complex'; -const limitToDataSetTitles = __ENV.DATA_SET_TITLES?.split(','); +const dataSetTitlesToInclude = __ENV.DATA_SET_TITLES_TO_INCLUDE?.split(','); +const dataSetTitlesToExclude = __ENV.DATA_SET_TITLES_TO_EXCLUDE?.split(','); const maxDataSetRows = parseIntOptional(__ENV.DATA_SET_MAX_ROWS); function getOptions(): Options { @@ -80,7 +81,8 @@ function getQueryConfig(): QueryGeneratorConfig { } export interface DataSetConfig { - limitToTitles?: string[]; + includeTitles?: string[]; + excludeTitles?: string[]; maxRows?: number; } @@ -94,7 +96,8 @@ const config: Config = { options: getOptions(), queryConfig: getQueryConfig(), dataSetConfig: { - limitToTitles: limitToDataSetTitles, + includeTitles: dataSetTitlesToInclude, + excludeTitles: dataSetTitlesToExclude, maxRows: maxDataSetRows, }, }; diff --git a/tests/performance-tests/src/tests/public-api/data-set-query/publicApiDataSetQuery.test.ts b/tests/performance-tests/src/tests/public-api/data-set-query/publicApiDataSetQuery.test.ts index 146171d633d..af29d198354 100644 --- a/tests/performance-tests/src/tests/public-api/data-set-query/publicApiDataSetQuery.test.ts +++ b/tests/performance-tests/src/tests/public-api/data-set-query/publicApiDataSetQuery.test.ts @@ -88,11 +88,24 @@ export function setup(): SetupData { publication => { const { dataSets } = publicApiService.listDataSets(publication.id); - const dataSetsFilteredByName = dataSets.filter( - dataSet => - !dataSetConfig.limitToTitles || - dataSetConfig.limitToTitles.includes(dataSet.title), - ); + const dataSetsFilteredByName = dataSets.filter(dataSet => { + if (dataSetConfig.excludeTitles?.includes(dataSet.title)) { + console.log(`Excluding data set "${dataSet.title}" based on title.`); + return false; + } + + if (!dataSetConfig.includeTitles) { + console.log(`Including data set "${dataSet.title}".`); + return true; + } + + if (dataSetConfig.includeTitles.includes(dataSet.title)) { + console.log(`Including data set "${dataSet.title}" based on title.`); + return true; + } + + return false; + }); const dataSetMeta = dataSetsFilteredByName.map(dataSet => { const { meta } = publicApiService.getDataSetMeta(dataSet.id); @@ -104,10 +117,16 @@ export function setup(): SetupData { }; }); - const dataSetsFilteredBySize = dataSetMeta.filter( - meta => - !dataSetConfig.maxRows || meta.totalResults <= dataSetConfig.maxRows, - ); + const dataSetsFilteredBySize = dataSetMeta.filter(meta => { + if ( + dataSetConfig.maxRows && + meta.totalResults <= dataSetConfig.maxRows + ) { + console.log(`Excluding data set "${meta.name}" based on max rows.`); + return false; + } + return true; + }); return { ...publication,