diff --git a/.changeset/config.json b/.changeset/config.json
index aa33a3c477..e0bcad21d4 100644
--- a/.changeset/config.json
+++ b/.changeset/config.json
@@ -9,5 +9,5 @@
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
- "ignore": ["@kadena/bootstrap-lib", "@kadena/tools"]
+ "ignore": ["@kadena/bootstrap-lib", "@kadena/tools", "@kadena-dev/e2e-tests", "@kadena/docs"]
}
diff --git a/.changeset/modern-bottles-change.md b/.changeset/modern-bottles-change.md
new file mode 100644
index 0000000000..a845151cc8
--- /dev/null
+++ b/.changeset/modern-bottles-change.md
@@ -0,0 +1,2 @@
+---
+---
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 439634efd9..989b25825b 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -11,6 +11,7 @@ on:
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
+ CI: true
jobs:
build:
@@ -80,12 +81,12 @@ jobs:
run: pnpm run test:integration --filter ${{ matrix.package }}
end-to-end-tests:
- name: E2E - ${{ matrix.package }}
+ name: E2E - ${{ matrix.app }}
needs: build
runs-on: ubuntu-latest
strategy:
matrix:
- package: ['@kadena/tools']
+ app: ['tools', 'docs']
steps:
- uses: actions/checkout@v4
@@ -111,17 +112,12 @@ jobs:
# Disable remote caching for this step, otherwise env variables will not be used.
- name: build dApp
- run: pnpm --filter ${{ matrix.package }}... build
- env:
- # Dummy values for faucet transactions.
- FAUCET_PUBLIC_KEY: 782127638ab9cc8fa8598ff0120464ceef6f367ddcd616b47afffbdb175dcc5e
- FAUCET_PRIVATE_KEY: 93fd78bd1e79a3b593d4732b76050b418aeefa5e4e6ea80f351b4c3a5b0dd19f
+ run: pnpm turbo build --filter @kadena/${{ matrix.app }}
- name: Run end-to-end tests
- run: pnpm run test:e2e -- --project=${{ matrix.package }}
+ run: pnpm run test:e2e -- -c playwright.${{ matrix.app }}.config.ts
env:
- CI: true
- TESTOBJECT: ${{ matrix.package }}
+ TESTOBJECT: ${{ matrix.app }}
- uses: actions/upload-artifact@v3
if: always()
diff --git a/packages.json b/packages.json
index 4b838717ff..fc1d568c96 100644
--- a/packages.json
+++ b/packages.json
@@ -55,14 +55,20 @@
},
{
"name": "@kadena/docs",
- "version": "0.6.3",
+ "version": "0.8.0",
"private": true,
"path": "packages/apps/docs"
},
{
- "name": "@kadena/graph",
- "version": "1.0.7",
+ "name": "@kadena/docs-tools",
+ "version": "0.1.0",
"private": true,
+ "path": "packages/tools/docs-tools"
+ },
+ {
+ "name": "@kadena/graph",
+ "version": "1.0.6",
+ "private": false,
"path": "packages/apps/graph"
},
{
@@ -73,7 +79,7 @@
},
{
"name": "@kadena/hd-wallet",
- "version": "0.0.1",
+ "version": "0.2.0",
"private": true,
"path": "packages/libs/hd-wallet"
},
@@ -109,7 +115,7 @@
},
{
"name": "@kadena/proof-of-us",
- "version": "0.1.0",
+ "version": "0.2.0",
"private": true,
"path": "packages/apps/proof-of-us"
},
diff --git a/packages/apps/docs/.eslintrc.cjs b/packages/apps/docs/.eslintrc.cjs
index db48a2f109..5ee0ade01d 100644
--- a/packages/apps/docs/.eslintrc.cjs
+++ b/packages/apps/docs/.eslintrc.cjs
@@ -4,6 +4,7 @@ require('@rushstack/eslint-config/patch/modern-module-resolution');
module.exports = {
extends: ['@kadena-dev/eslint-config/profile/next'],
parserOptions: { tsconfigRootDir: __dirname },
+ ignorePatterns: ['playwright.config.ts'],
rules: {
'@typescript-eslint/strict-boolean-expressions': 'off',
'@kadena-dev/typedef-var': 'off',
diff --git a/packages/apps/docs/cypress.config.js b/packages/apps/docs/cypress.config.js
deleted file mode 100644
index 7bd177cbea..0000000000
--- a/packages/apps/docs/cypress.config.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import { defineConfig } from 'cypress';
-
-export default defineConfig({
- e2e: {
- baseUrl: 'http://localhost:3000',
- retries: {
- runMode: 3,
- },
- viewportHeight: 1080,
- viewportWidth: 1920,
- video: false,
- screenshotOnRunFailure: false,
- },
-});
diff --git a/packages/apps/docs/cypress/e2e/consent.cy.ts b/packages/apps/docs/cypress/e2e/consent.cy.ts
deleted file mode 100644
index fc5b222853..0000000000
--- a/packages/apps/docs/cypress/e2e/consent.cy.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-const COOKIECONSENTNAME = 'cookie_consent';
-describe('Consent box', () => {
- beforeEach(() => {
- cy.visit('/docs/__tests/pact/atom-sdk');
- });
-
- afterEach(() => {
- window.localStorage.clear();
- });
-
- it('checks that consent modal is visible', () => {
- cy.get('[data-cy="modal-background"]').should('exist');
- cy.get('[data-cy="modal"]').should('be.visible').contains('Cookie consent');
- cy.get('[data-cy="modal"]').find('button').should('have.length', 3);
- });
-
- describe('no consent set', () => {
- beforeEach(() => {
- window.localStorage.clear();
- });
- it('checks that the consent cookie is not set on start', () => {
- const cookieValue = window.localStorage.getItem(COOKIECONSENTNAME);
- cy.expect(cookieValue).to.equal(null);
- cy.get('[data-cy="modal"]').should('be.visible');
- });
-
- describe('no consent shown', () => {
- beforeEach(() => {
- window.localStorage.setItem(COOKIECONSENTNAME, 'true');
- });
- it('checks that modal is not shown, if COOKIECONSENTNAME is already set', () => {
- cy.wait(500);
- cy.get('[data-cy="modal"]').should('not.exist');
- });
- });
- });
-});
-
-export {};
diff --git a/packages/apps/docs/cypress/e2e/layoutfull.cy.ts b/packages/apps/docs/cypress/e2e/layoutfull.cy.ts
deleted file mode 100644
index 71344ae1d2..0000000000
--- a/packages/apps/docs/cypress/e2e/layoutfull.cy.ts
+++ /dev/null
@@ -1,137 +0,0 @@
-import { closeConsentModal } from '../utils';
-
-describe('full layout', () => {
- const aside = () => cy.get('[data-cy="aside"]');
- const menu = () => cy.get('[data-cy="menu"]');
- const breadcrumbs = () => cy.get('[data-cy="breadcrumbs"]');
-
- beforeEach(() => {
- cy.visit('/docs/__tests/pact/atom-sdk');
- closeConsentModal();
- });
- describe('desktop', () => {
- it('shows the breadcrumbs with icon', () => {
- breadcrumbs().find('li').should('have.length', 3);
- breadcrumbs().find('svg').should('exist');
- });
- it('shows the left sidemenu', () => {
- cy.percySnapshot('test');
- menu().should('be.visible');
- cy.get('[data-cy="hamburgermenu"]').should('not.be.visible');
- });
-
- it('shows the aside menu', () => {
- aside().should('be.visible');
- aside().find('ul:first').children('li').should('have.length', 3);
-
- // first li child ("section 1") will not have children
- aside()
- .find('ul:first')
- .children('li')
- .first()
- .children('ul')
- .should('not.exist');
-
- // second li child ("section 2") will have 2 children
- aside()
- .find('ul:first > li:nth-child(2)')
- .children('ul')
- .should('exist')
- .children('li')
- .should('have.length', 2);
-
- // second li child ("section 2.2") will have 1 children
- aside()
- .find('ul:first > li:nth-child(2) > ul > li:nth-child(2)')
- .children('ul')
- .should('exist')
- .children('li')
- .should('have.length', 1);
- });
-
- it('deeplink on the page when an option of the aside menu is clicked', () => {
- cy.location().should((loc) => {
- expect(loc.hash).to.eq('');
- });
- aside().find('ul:first > li:nth-child(3) ').click(10, 10);
- cy.location().should((loc) => {
- expect(loc.hash).to.eq('#section-3');
- });
- });
- });
-
- describe('mobile', () => {
- const hamburgerMenu = () => cy.get('[data-cy="hamburgermenu"]');
- const secondMenu = () => menu().get('[data-cy="sidemenu-submenu"]');
- const mainMenu = () => menu().get('[data-cy="sidemenu-main"]');
- const openMenu = () => {
- hamburgerMenu().click();
- };
- beforeEach(() => {
- cy.viewport(640, 720);
- });
-
- describe('test the functionality of the sidemenu', () => {
- const ListMenu = () => secondMenu().find('ul > li:nth-child(2)');
- it('shows the left menu', () => {
- openMenu();
-
- const Atom = () => ListMenu().find('ul > li:nth-child(4)');
- const QuickStart = () => Atom().find(' > ul > li > a[data-active]');
-
- // check if everything is there
- menu().find('h5').contains('Test');
- secondMenu().find('ul:first-child > li').should('have.length', 4);
- Atom().find(' > button').contains('Atom SDK');
-
- QuickStart().contains('Quickstart');
-
- Atom()
- .find(' > ul')
- .should('be.visible')
- .children('li')
- .should('have.length', 2);
- });
-
- it('opens and closes the basics menu when clicked', () => {
- openMenu();
- const basics = () => ListMenu().find('li:nth-child(3)');
- basics().contains('Basics');
- basics().find('ul').should('not.be.visible');
- basics().click();
- basics().find('ul').should('be.visible');
- basics()
- .children('ul')
- .children('li > [data-active="true"]')
- .should('have.length', 0);
- basics().children('ul').children('li').should('have.length', 2);
- basics().children('ul').children('li').eq(1).click();
- basics()
- .children('ul')
- .find('> li > [data-active="true"]')
- .should('have.length', 1)
- .first()
- .contains('Build-in Functions');
- });
-
- it('shows the main menu when "Pact" backbutton is clicked', () => {
- openMenu();
- menu().find('h5').contains('Test').click();
- menu().find('h5').contains('Kadena Docs');
-
- mainMenu().find('ul > li:last-child').contains('Test').click();
-
- menu().find('h5').contains('Test');
- });
- it('opens a new page when Chainweb is clicked in the main menu', () => {
- openMenu();
- menu().find('h5').contains('Test').click();
- mainMenu().find('ul').children('li:nth-child(3)').click();
- cy.wait(1000);
- cy.percySnapshot('test');
- });
- });
- });
-});
-
-export {};
diff --git a/packages/apps/docs/cypress/e2e/layoutlanding.cy.ts b/packages/apps/docs/cypress/e2e/layoutlanding.cy.ts
deleted file mode 100644
index 1bd63b3d51..0000000000
--- a/packages/apps/docs/cypress/e2e/layoutlanding.cy.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-import { closeConsentModal } from '../utils';
-
-describe('landing page layout', () => {
- const menu = () => cy.get('[data-cy="menu"]');
- const header = () => cy.get('[data-cy="titleheader"]');
- beforeEach(() => {
- cy.visit('/docs/__tests/chainweb');
- closeConsentModal();
- });
-
- describe('desktop', () => {
- it('does not have an asidemenu', () => {
- cy.percySnapshot('test');
- cy.get('[data-cy="aside"]').should('not.exist');
- });
-
- it('shows the sidemenu', () => {
- menu().should('exist');
- menu()
- .get('[data-cy="sidemenu-submenu"]')
- .find('ul:first')
- .children()
- .should('have.length', 4);
- });
-
- it('shows the sidemenu with its own children', () => {
- menu().should('exist');
- });
-
- it('shows the title header', () => {
- menu().should('be.visible');
- header().should('be.visible');
- header().find('h1').contains('Chainweb');
- header()
- .find('h5')
- .contains(
- 'The safest, most user-friendly language for smart contracts',
- );
-
- header().find('svg').should('exist');
-
- cy.get('header').first().find('nav > ul > li:last-child').click();
- header().find('h1').contains('Pact');
- });
- });
-});
diff --git a/packages/apps/docs/cypress/e2e/subscribe.cy.ts b/packages/apps/docs/cypress/e2e/subscribe.cy.ts
deleted file mode 100644
index 870ad72930..0000000000
--- a/packages/apps/docs/cypress/e2e/subscribe.cy.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-import { IResponse } from '../../src/pages/api/subscribe';
-import { closeConsentModal } from '../utils';
-
-describe('Subscribe to mailList', () => {
- const subscribe = () => cy.get('[data-cy="subscribe"]');
- const getData = (data: IResponse<{}>) => {
- cy.intercept(
- {
- method: 'POST', // Route all GET requests
- url: '/api/subscribe',
- },
- data, // and force the response to be: []
- ).as('postSubcribe'); // and assign an alias
- };
-
- beforeEach(() => {
- cy.visit('/docs/__tests/pact/atom-sdk');
- closeConsentModal();
- });
-
- it('submit a correct email, happy path', () => {
- getData({
- status: 200,
- message: 'Thank you for subscribing',
- });
-
- cy.percySnapshot('test');
- subscribe().should('be.visible');
-
- subscribe()
- .find('input[type="email"]')
- .type('he-man@masteroftheuniverse.com{enter}', { delay: 10 });
-
- subscribe().find('input[type="email"]').should('not.exist');
-
- subscribe().contains('Thank you for subscribing');
- });
-
- it('submit a correct email, breaks because of something wrong in BE', () => {
- getData({
- status: 500,
- message: 'Something went wrong',
- });
-
- subscribe()
- .find('input[type="email"]')
- .type('he-man@masteroftheuniverse.com{enter}', { delay: 10 });
-
- subscribe().find('input[type="email"]').should('exist');
- subscribe().contains('Something went wrong');
- });
-
- it('type a invalid email and the submit button should be disabled. and not submit', () => {
- getData({
- status: 200,
- message: 'Thank you for subscribing',
- });
-
- subscribe()
- .find('input[type="email"]')
- .type('!!skeletor@thundercars.com', { delay: 10 });
- subscribe()
- .find('button[type="submit"]')
- .should('have.attr', 'disabled', 'disabled');
- });
-});
-
-export {};
diff --git a/packages/apps/docs/cypress/support/commands.ts b/packages/apps/docs/cypress/support/commands.ts
deleted file mode 100644
index d341135372..0000000000
--- a/packages/apps/docs/cypress/support/commands.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-///
-// ***********************************************
-// This example commands.ts shows you how to
-// create various custom commands and overwrite
-// existing commands.
-//
-// For more comprehensive examples of custom
-// commands please read more here:
-// https://on.cypress.io/custom-commands
-// ***********************************************
-//
-//
-// -- This is a parent command --
-// Cypress.Commands.add('login', (email, password) => { ... })
-//
-//
-// -- This is a child command --
-// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
-//
-//
-// -- This is a dual command --
-// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
-//
-//
-// -- This will overwrite an existing command --
-// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
-//
-// declare global {
-// namespace Cypress {
-// interface Chainable {
-// login(email: string, password: string): Chainable
-// drag(subject: string, options?: Partial): Chainable
-// dismiss(subject: string, options?: Partial): Chainable
-// visit(originalFn: CommandOriginalFn, url: string, options: Partial): Chainable
-// }
-// }
-// }
-import '@percy/cypress';
-
-export {};
diff --git a/packages/apps/docs/cypress/support/e2e.ts b/packages/apps/docs/cypress/support/e2e.ts
deleted file mode 100644
index 598ab5f0d7..0000000000
--- a/packages/apps/docs/cypress/support/e2e.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-// ***********************************************************
-// This example support/e2e.ts is processed and
-// loaded automatically before your test files.
-//
-// This is a great place to put global configuration and
-// behavior that modifies Cypress.
-//
-// You can change the location of this file or turn off
-// automatically serving support files with the
-// 'supportFile' configuration option.
-//
-// You can read more here:
-// https://on.cypress.io/configuration
-// ***********************************************************
-
-// Import commands.js using ES2015 syntax:
-import './commands';
-
-// Alternatively you can use CommonJS syntax:
-// require('./commands')
diff --git a/packages/apps/docs/cypress/tsconfig.json b/packages/apps/docs/cypress/tsconfig.json
deleted file mode 100644
index 6005415f4f..0000000000
--- a/packages/apps/docs/cypress/tsconfig.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "extends": "../tsconfig.json",
- "compilerOptions": {
- "baseUrl": "./",
- "sourceMap": false,
- "inlineSourceMap": true,
- "types": ["cypress", "node", "./support"]
- }
-}
diff --git a/packages/apps/docs/cypress/utils.ts b/packages/apps/docs/cypress/utils.ts
deleted file mode 100644
index 2f682b465e..0000000000
--- a/packages/apps/docs/cypress/utils.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-export const closeConsentModal = () => {
- cy.get('[data-cy="modal-background"]', { timeout: 10000 }).click({
- x: 10,
- y: 10,
- force: true,
- });
-};
diff --git a/packages/apps/docs/package.json b/packages/apps/docs/package.json
index 25fcae0360..74e5e81b29 100644
--- a/packages/apps/docs/package.json
+++ b/packages/apps/docs/package.json
@@ -16,10 +16,6 @@
"build:scripts": "tsx ./src/scripts/build.ts",
"build:storybook": "pnpm run build:scripts && storybook build",
"chromatic": "chromatic -b build:storybook",
- "cypress:ci": "NEXT_PUBLIC_APP_DEV=test start-server-and-test dev http://localhost:3000 cypress:run",
- "cypress:cilocal": "NEXT_PUBLIC_APP_DEV=test start-server-and-test dev http://localhost:3000 cypress:open",
- "cypress:open": "percy exec -- cypress open",
- "cypress:run": "percy exec -- cypress run",
"dev": "pnpm run build:scripts && next dev",
"format": "pnpm run --sequential /^format:.*/",
"format:lint": "pnpm run lint:src --fix",
@@ -74,7 +70,6 @@
"@kadena-dev/lint-package": "workspace:*",
"@kadena-dev/shared-config": "workspace:*",
"@percy/cli": "~1.24.0",
- "@percy/cypress": "~3.1.2",
"@rushstack/eslint-config": "~3.3.0",
"@storybook/addon-a11y": "^7.4.0",
"@storybook/addon-actions": "^7.4.0",
@@ -98,7 +93,6 @@
"@vanilla-extract/webpack-plugin": "2.3.1",
"chalk": "^5.2.0",
"chromatic": "6.20.0",
- "cypress": "~12.12.0",
"dotenv": "~16.0.3",
"eslint": "^8.45.0",
"log-update": "^5.0.1",
diff --git a/packages/apps/docs/src/components/Layout/components/TreeMenu/Item.tsx b/packages/apps/docs/src/components/Layout/components/TreeMenu/Item.tsx
index 4720e95ffb..2c06bd6c05 100644
--- a/packages/apps/docs/src/components/Layout/components/TreeMenu/Item.tsx
+++ b/packages/apps/docs/src/components/Layout/components/TreeMenu/Item.tsx
@@ -25,7 +25,10 @@ export const Item: FC = ({ item, level }) => {
);
return (
-
+
{item.label}
diff --git a/packages/apps/docs/src/components/Layout/components/TreeMenu/MainTreeItem.tsx b/packages/apps/docs/src/components/Layout/components/TreeMenu/MainTreeItem.tsx
index 78f99501dc..02bfe51d5b 100644
--- a/packages/apps/docs/src/components/Layout/components/TreeMenu/MainTreeItem.tsx
+++ b/packages/apps/docs/src/components/Layout/components/TreeMenu/MainTreeItem.tsx
@@ -10,6 +10,7 @@ interface IProps {
menuOpen?: boolean;
root?: boolean;
level?: LevelType;
+ testId?: string;
}
export const MainTreeItem: FC = ({ item, root = false, level = 1 }) => {
@@ -65,7 +66,7 @@ export const MainTreeItem: FC = ({ item, root = false, level = 1 }) => {
>
)}
{!root && hasSubmenu ? (
-
+
setMenuOpen((v) => !v)}
level={`l${level}`}
diff --git a/packages/apps/docs/tsconfig.json b/packages/apps/docs/tsconfig.json
index 68f87f1a6e..2bab7f8842 100644
--- a/packages/apps/docs/tsconfig.json
+++ b/packages/apps/docs/tsconfig.json
@@ -14,5 +14,5 @@
"isolatedModules": true,
"jsx": "preserve"
},
- "exclude": ["node_modules", "./cypress"]
+ "exclude": ["node_modules"]
}
diff --git a/packages/tools/e2e-tests/.eslintrc.js b/packages/tools/e2e-tests/.eslintrc.js
index 528f11d5c8..7a01b78038 100644
--- a/packages/tools/e2e-tests/.eslintrc.js
+++ b/packages/tools/e2e-tests/.eslintrc.js
@@ -6,7 +6,6 @@ module.exports = {
'plugin:playwright/recommended',
],
parserOptions: { tsconfigRootDir: __dirname },
- ignorePatterns: ['playwright.config.ts', '*.mocks.ts'],
rules: {
'@kadena-dev/typedef-var': 'off',
'@rushstack/typedef-var': 'off',
diff --git a/packages/tools/e2e-tests/README.MD b/packages/tools/e2e-tests/README.MD
index 58444ebc89..f9067db687 100644
--- a/packages/tools/e2e-tests/README.MD
+++ b/packages/tools/e2e-tests/README.MD
@@ -20,18 +20,30 @@ This package contains the e2e tests and source code all Kadena dApps
## Installation & Usage
-To run the tests locally, it is assumed that the dApp is served on
-[http://localhost:3000][3]. For more information on how to achieve this, consult
-the readme for the respective dApp. Running the tests locally can be achieved by
-executing the commands below.
+### dApp
+
+In order to run the tests, the dApp needs to be running on
+[http://localhost:3000][3]. The tests will assume you deployed the dApp yourself
+if a webserver is found on [http://localhost:3000][3]. if it is unable to find
+one, the test framework will attempt to start the dApp for you. it is
+recommended that you first execute a build of the monorepo to ensure performance
+of the dev server.
+
+### Devnet
+
+In order to run these integrated tests, a version of devnet is also required.
+`docker run -it --rm -p 127.0.0.1:8080:8080`
+
+Once these two components have been started, either by you or the
Note: the following commands have been written to be executable from the root of
the monorepository.
-1. Install dependencies:
+1. Install dependencies, build the monorepo:
```sh
pnpm install
+pnpn turbo build
```
2. Install browsers required by Playwright
@@ -40,14 +52,13 @@ pnpm install
pnpm --filter @kadena-dev/e2e-tests run install:chromium
```
-3. Run test suite, substitute `tools-app` for any of the available projects
- described in the [playwright.config.ts][4]
+3. Run test suite, substitute `tools` for any of the available Apps. Each App
+ has it's own config file.
```sh
- pnpm --filter @kadena-dev/e2e-tests run test:e2e --project=@kadena/tools
+pnpm run test:e2e -- -c playwright.tools.config.ts
```
[1]: #table-of-contents
[2]: #installation-#-usage
[3]: http://localhost:3000
-[4]: ./playwright.config.ts
diff --git a/packages/tools/e2e-tests/package.json b/packages/tools/e2e-tests/package.json
index 70f4bb6b60..f3497436af 100644
--- a/packages/tools/e2e-tests/package.json
+++ b/packages/tools/e2e-tests/package.json
@@ -12,18 +12,22 @@
"lint:fmt": "prettier . --cache --check",
"lint:pkg": "lint-package",
"lint:src": "eslint src --ext .js,.ts",
- "test:e2e": "playwright test"
+ "test:e2e": "playwright test",
+ "test:e2e:docs": "playwright test -c playwright.docs.config.ts",
+ "test:e2e:tools": "playwright test -c playwright.tools.config.ts"
},
"devDependencies": {
"@kadena-dev/eslint-config": "workspace:*",
"@kadena-dev/lint-package": "workspace:*",
"@kadena-dev/markdown": "workspace:*",
"@kadena-dev/shared-config": "workspace:*",
- "@playwright/test": "^1.39.0",
+ "@playwright/test": "^1.40.1",
"@rushstack/eslint-config": "~3.3.0",
"@types/node": "^18.17.14",
+ "directory-tree": "3.5.1",
"eslint": "^8.45.0",
"eslint-plugin-playwright": "0.16.0",
+ "parse-md": "2.0.5",
"prettier": "~3.0.3"
}
}
diff --git a/packages/tools/e2e-tests/playwright.base.config.ts b/packages/tools/e2e-tests/playwright.base.config.ts
new file mode 100644
index 0000000000..dad4547fd4
--- /dev/null
+++ b/packages/tools/e2e-tests/playwright.base.config.ts
@@ -0,0 +1,27 @@
+import type { PlaywrightTestConfig } from '@playwright/test';
+import { join } from 'path';
+
+/**
+ * See https://playwright.dev/docs/test-configuration.
+ */
+export const baseConfig: PlaywrightTestConfig = {
+ testDir: join(__dirname, 'src/tests'),
+ fullyParallel: true,
+ forbidOnly: process.env.CI !== undefined,
+ retries: process.env.CI !== undefined ? 1 : 0,
+ workers: 1,
+ reporter:
+ process.env.CI !== undefined
+ ? [['github'], ['dot'], ['html', { open: 'never' }]]
+ : [['list'], ['html', { open: 'never' }]],
+ use: {
+ headless: process.env.CI !== undefined,
+ baseURL: 'http://localhost:3000/',
+ channel: 'chromium',
+ trace: 'retain-on-failure',
+ },
+ timeout: 10 * 10000,
+ expect: {
+ timeout: 1 * 30000,
+ },
+};
diff --git a/packages/tools/e2e-tests/playwright.config.ts b/packages/tools/e2e-tests/playwright.config.ts
deleted file mode 100644
index edb4ae36b6..0000000000
--- a/packages/tools/e2e-tests/playwright.config.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import { defineConfig } from '@playwright/test';
-
-/**
- * See https://playwright.dev/docs/test-configuration.
- */
-export default defineConfig({
- testDir: 'src/tests/*',
- fullyParallel: true,
- forbidOnly: !!process.env.CI,
- retries: process.env.CI ? 1 : 0,
- workers: process.env.CI ? 4 : 1,
- reporter: [['github'], ['list'], ['html', { open: 'never' }]],
- use: {
- headless: !!process.env.CI,
- baseURL: process.env.PLAYWRIGHT_BASE_URL
- ? process.env.PLAYWRIGHT_BASE_URL
- : 'http://127.0.0.1:3000',
- channel: 'chromium',
- trace: 'retain-on-failure',
- },
- expect: {
- timeout: 10 * 1000,
- },
- webServer: {
- command: `pnpm --filter ${process.env.TESTOBJECT} run start`,
- url: 'http://127.0.0.1:3000',
- reuseExistingServer: process.env.CI === undefined,
- },
-
- projects: [
- {
- name: '@kadena/tools',
- testDir: 'src/tests/tools-app',
- },
- ],
-});
diff --git a/packages/tools/e2e-tests/playwright.docs.config.ts b/packages/tools/e2e-tests/playwright.docs.config.ts
new file mode 100644
index 0000000000..2d2daf2b0d
--- /dev/null
+++ b/packages/tools/e2e-tests/playwright.docs.config.ts
@@ -0,0 +1,20 @@
+import type { PlaywrightTestConfig } from '@playwright/test';
+import { baseConfig } from './playwright.base.config';
+
+const config: PlaywrightTestConfig = {
+ ...baseConfig,
+ webServer: {
+ // we explicitly use the start command here because docs dev is seriously slow.
+ command: `pnpm --filter @kadena/docs start`,
+ url: 'http://localhost:3000',
+ reuseExistingServer: process.env.CI === undefined,
+ },
+ projects: [
+ {
+ name: 'docs',
+ testDir: 'src/tests/docs-app/',
+ },
+ ],
+};
+
+export default config;
diff --git a/packages/tools/e2e-tests/playwright.tools.config.ts b/packages/tools/e2e-tests/playwright.tools.config.ts
new file mode 100644
index 0000000000..3539d3852b
--- /dev/null
+++ b/packages/tools/e2e-tests/playwright.tools.config.ts
@@ -0,0 +1,25 @@
+import type { PlaywrightTestConfig } from '@playwright/test';
+import { baseConfig } from './playwright.base.config';
+
+const config: PlaywrightTestConfig = {
+ ...baseConfig,
+ webServer: {
+ command: `pnpm --filter @kadena/tools dev`,
+ url: 'http://localhost:3000',
+ reuseExistingServer: process.env.CI === undefined,
+ env: {
+ FAUCET_PUBLIC_KEY:
+ '782127638ab9cc8fa8598ff0120464ceef6f367ddcd616b47afffbdb175dcc5e',
+ FAUCET_PRIVATE_KEY:
+ '93fd78bd1e79a3b593d4732b76050b418aeefa5e4e6ea80f351b4c3a5b0dd19f',
+ },
+ },
+ projects: [
+ {
+ name: 'tools',
+ testDir: 'src/tests/tools-app/',
+ },
+ ],
+};
+
+export default config;
diff --git a/packages/tools/e2e-tests/src/helpers/cookie.helper.ts b/packages/tools/e2e-tests/src/helpers/cookie.helper.ts
new file mode 100644
index 0000000000..5bd16c16a3
--- /dev/null
+++ b/packages/tools/e2e-tests/src/helpers/cookie.helper.ts
@@ -0,0 +1,21 @@
+import type { Locator, Page } from '@playwright/test';
+
+export default class CookieHelper {
+ private readonly _page: Page;
+ private _consentBar: Locator;
+ private _acceptButton: Locator;
+
+ public constructor(page: Page) {
+ this._page = page;
+ this._consentBar = this._page.getByRole('region', {
+ name: 'Cookie Consent',
+ });
+ this._acceptButton = this._consentBar.getByRole('button', {
+ name: 'Accept',
+ });
+ }
+
+ public async acceptCookies(): Promise {
+ await this._acceptButton.click();
+ }
+}
diff --git a/packages/tools/e2e-tests/src/helpers/markdown.helper.ts b/packages/tools/e2e-tests/src/helpers/markdown.helper.ts
new file mode 100644
index 0000000000..bc9c33b5a4
--- /dev/null
+++ b/packages/tools/e2e-tests/src/helpers/markdown.helper.ts
@@ -0,0 +1,36 @@
+const parseMD = require('parse-md').default;
+import fs from 'fs';
+
+export async function extractMetadataFromMarkdown(
+ parentPath: string,
+ childPath?: string,
+ grandChildPath?: string,
+): Promise {
+ const metadata: IMetadata[] = [];
+
+ const parentFile = fs.readFileSync(parentPath, 'utf8');
+ const parent = parseMD(parentFile);
+ metadata.push(parent.metadata);
+
+ if (childPath !== undefined) {
+ const childFile = fs.readFileSync(childPath, 'utf8');
+ const child = parseMD(childFile);
+ metadata.push(child.metadata);
+ }
+
+ if (grandChildPath !== undefined) {
+ const grandChildFile = fs.readFileSync(grandChildPath, 'utf8');
+ const grandChild = parseMD(grandChildFile);
+ metadata.push(grandChild.metadata);
+ }
+ return metadata;
+}
+
+export interface IMetadata {
+ title: string;
+ description: string;
+ menu: string;
+ label: string;
+ order: number;
+ layout: 'full';
+}
diff --git a/packages/tools/e2e-tests/src/helpers/menu.helper.ts b/packages/tools/e2e-tests/src/helpers/menu.helper.ts
new file mode 100644
index 0000000000..0b04ef1de8
--- /dev/null
+++ b/packages/tools/e2e-tests/src/helpers/menu.helper.ts
@@ -0,0 +1,33 @@
+import type { Locator, Page } from '@playwright/test';
+import { expect } from '@playwright/test';
+
+export default class MenuHelper {
+ private readonly _page: Page;
+ private _levelTwo: Locator;
+ private _levelOne: Locator;
+
+ public constructor(page: Page) {
+ this._page = page;
+ this._levelOne = this._page.locator(
+ '[data-cy="sidemenu-submenu"] [data-testid="menuItem-1"] > button',
+ );
+ this._levelTwo = this._page.locator(
+ '[data-cy="sidemenu-submenu"] [data-testid="menuItem-2"] > button',
+ );
+ }
+
+ public async openCollapsedItems(): Promise {
+ const collapsedFirstLevelElements = await this._levelOne.all();
+
+ for (const collapsedElement of collapsedFirstLevelElements) {
+ await collapsedElement.click();
+ await this._page.waitForTimeout(1000);
+ await expect(collapsedElement).toHaveAttribute('data-active', 'true');
+ }
+ const collapsedSecondLevelElements = await this._levelTwo.all();
+ for (const collapsedElement of collapsedSecondLevelElements) {
+ await collapsedElement.click();
+ await expect(collapsedElement).toHaveAttribute('data-active', 'true');
+ }
+ }
+}
diff --git a/packages/tools/e2e-tests/src/helpers/tree.helper.ts b/packages/tools/e2e-tests/src/helpers/tree.helper.ts
new file mode 100644
index 0000000000..160e21f975
--- /dev/null
+++ b/packages/tools/e2e-tests/src/helpers/tree.helper.ts
@@ -0,0 +1,143 @@
+import type { Page } from '@playwright/test';
+import { expect } from '@playwright/test';
+import dirTree from 'directory-tree';
+import { extractMetadataFromMarkdown } from './markdown.helper';
+
+export default class TreeHelper {
+ private readonly _page: Page;
+
+ public constructor(page: Page) {
+ this._page = page;
+ }
+
+ /**
+ This function reads the provided directory (based on a page) and validates if all markdown files are present in the menu.
+ @param {string} pageToCheck page to check, e.g. 'Kadena'
+ */
+ public async validateTree(pageToCheck: string): Promise {
+ const directory = `../../apps/docs/src/pages/${pageToCheck}`;
+ const expectedTree = await dirTree(directory, {
+ extensions: /\.md/,
+ exclude: [/index.md/, /api/],
+ });
+ const menuItems = expectedTree.children;
+
+ if (expectedTree.children) {
+ for (const menuItem of menuItems!) {
+ // Validate top level menu items, without children
+ if (!menuItem.children) {
+ const metaData = await extractMetadataFromMarkdown(menuItem.path);
+ await this.validateParent(metaData[0].label);
+ } else {
+ // validate presence of first level children, this implicitly validates presence of top level menu items with children as well as the children.
+ for (const child of menuItem.children) {
+ if (!child.children) {
+ const metaData = await extractMetadataFromMarkdown(
+ `${menuItem.path}/index.md`,
+ child.path,
+ );
+ await this.validateChild(metaData[0].menu, metaData[1].label);
+ } else {
+ // validate presence of first level children, this implicitly validates presence of top level menu items with children as well as the children.
+ for (const grandChild of child.children) {
+ const metaData = await extractMetadataFromMarkdown(
+ `${menuItem.path}/index.md`,
+ `${child.path}/index.md`,
+ grandChild.path,
+ );
+ await this.validateGrandChild(
+ metaData[0].menu,
+ metaData[1].menu,
+ metaData[2].label,
+ );
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ This function validates presence of parent items in the menu.
+ @param {string} label of the menu item to validate
+ */
+ public async validateParent(label: string): Promise {
+ await expect(
+ this._page.locator(
+ `[data-cy="sidemenu-submenu"] [data-testid="menuItem-1"] > a:text-is("${label}")`,
+ ),
+ `Expected ${label} to be visible on level 1 in the menu.`,
+ ).toBeVisible();
+ }
+
+ /**
+ This function validates presence of a child item in the menu.
+ @param {string} parentLabel of the parent menu item
+ @param {string} childLabel of the menu item to validate
+ */
+ public async validateChild(
+ parentMenu: string,
+ childLabel: string,
+ ): Promise {
+ // open parent menu first
+ await this._page
+ .locator(
+ `[data-cy="sidemenu-submenu"] [data-testid="menuItem-1"] > button:text-is("${parentMenu}")`,
+ )
+ .click();
+ await expect(
+ this._page.locator(
+ `[data-cy="sidemenu-submenu"] [data-testid="menuItem-1"] > button:text-is("${parentMenu}") + ul [data-testid="menuItem-2"] > a:text-is("${childLabel}")`,
+ ),
+ `Expected ${childLabel} to be visible on level 2 in the menu.`,
+ ).toBeVisible();
+ // then close parent menu again
+ await this._page
+ .locator(
+ `[data-cy="sidemenu-submenu"] [data-testid="menuItem-1"] > button:text-is("${parentMenu}")`,
+ )
+ .click();
+ }
+
+ /**
+ This function validates presence of a grandchild item in the menu.
+ @param {string} parentMenu of the parent menu item
+ @param {string} childMenu of the child menu item
+ @param {string} grandChildLabel of the menu item to validate
+ */
+ public async validateGrandChild(
+ parentMenu: string,
+ childMenu: string,
+ grandChildLabel: string,
+ ): Promise {
+ // open parent and child menu first
+ await this._page
+ .locator(
+ `[data-cy="sidemenu-submenu"] [data-testid="menuItem-1"] > button:text-is("${parentMenu}")`,
+ )
+ .click();
+ await this._page
+ .locator(
+ `[data-cy="sidemenu-submenu"] [data-testid="menuItem-1"] > button:text-is("${parentMenu}") + ul [data-testid="menuItem-2"] > button:text-is("${childMenu}")`,
+ )
+ .click();
+ await expect(
+ this._page.locator(
+ `[data-cy="sidemenu-submenu"] [data-testid="menuItem-1"] > button:text-is("${parentMenu}") + ul [data-testid="menuItem-2"] > button:text-is("${childMenu}") + ul [data-testid="menuItem-3"] > a:text-is("${grandChildLabel}")`,
+ ),
+ `Expected ${grandChildLabel} to be visible on level 3 in the menu.`,
+ ).toBeVisible();
+ // Close parent and child menu
+ await this._page
+ .locator(
+ `[data-cy="sidemenu-submenu"] [data-testid="menuItem-1"] > button:text-is("${parentMenu}")`,
+ )
+ .click();
+ await this._page
+ .locator(
+ `[data-cy="sidemenu-submenu"] [data-testid="menuItem-1"] > button:text-is("${parentMenu}") + ul [data-testid="menuItem-2"] > button:text-is("${childMenu}")`,
+ )
+ .click();
+ }
+}
diff --git a/packages/tools/e2e-tests/src/page-objects/tools-app/components/aside.component.ts b/packages/tools/e2e-tests/src/page-objects/tools-app/components/aside.component.ts
index cbf18367e1..e5ede3aea9 100644
--- a/packages/tools/e2e-tests/src/page-objects/tools-app/components/aside.component.ts
+++ b/packages/tools/e2e-tests/src/page-objects/tools-app/components/aside.component.ts
@@ -8,6 +8,6 @@ export class AsideComponent {
}
public async navigateTo(ariaLabel: string): Promise {
- await this._page.getByRole('button', { name: ariaLabel }).click();
+ await this._page.getByRole('link', { name: ariaLabel }).click();
}
}
diff --git a/packages/tools/e2e-tests/src/page-objects/tools-app/pages/faucet.page.ts b/packages/tools/e2e-tests/src/page-objects/tools-app/pages/faucet.page.ts
index df13e560f5..053c4627e4 100644
--- a/packages/tools/e2e-tests/src/page-objects/tools-app/pages/faucet.page.ts
+++ b/packages/tools/e2e-tests/src/page-objects/tools-app/pages/faucet.page.ts
@@ -1,23 +1,24 @@
import type { Page } from '@playwright/test';
import { CardComponent } from '../../react-ui/card.component';
import { NotificationContainerComponent } from '../../react-ui/notificationContainer.component';
-
+import { AsideComponent } from '../components/aside.component';
export class FaucetPage {
private readonly _page: Page;
private _card: CardComponent;
public notification: NotificationContainerComponent;
+ public asidePanel: AsideComponent;
public constructor(page: Page) {
this._page = page;
this._card = new CardComponent(this._page);
this.notification = new NotificationContainerComponent(this._page);
+ this.asidePanel = new AsideComponent(this._page);
}
public async fundExistingAccount(
account: string,
chainId: string,
): Promise {
- await this._page.getByRole('link', { name: ' this page' }).click();
await this._card.setValueForTextbox(
'The account name to fund coins to',
account,
diff --git a/packages/tools/e2e-tests/src/tests/docs-app/page-crawler.spec.ts b/packages/tools/e2e-tests/src/tests/docs-app/page-crawler.spec.ts
new file mode 100644
index 0000000000..b0e8d6f0f4
--- /dev/null
+++ b/packages/tools/e2e-tests/src/tests/docs-app/page-crawler.spec.ts
@@ -0,0 +1,28 @@
+/* eslint-disable @kadena-dev/no-eslint-disable */
+/* eslint-disable playwright/expect-expect */
+// The expect is performed by validateTree(), so the test does not need one.
+import { test } from '@playwright/test';
+import CookieHelper from '../../helpers/cookie.helper';
+import TreeHelper from '../../helpers/tree.helper';
+
+const pages = [
+ 'kadena',
+ 'build',
+ 'pact',
+ 'chainweb',
+ 'marmalade',
+ 'contribute',
+];
+
+for (const pageToCheck of pages) {
+ test(`Page: ${pageToCheck} - All Markdown files should be present in the menu`, async ({
+ page,
+ }) => {
+ const treeHelper = new TreeHelper(page);
+ const cookieHelper = new CookieHelper(page);
+
+ await page.goto(pageToCheck);
+ await cookieHelper.acceptCookies();
+ await treeHelper.validateTree(pageToCheck);
+ });
+}
diff --git a/packages/tools/e2e-tests/src/tests/tools-app/faucet.spec.ts b/packages/tools/e2e-tests/src/tests/tools-app/faucet.spec.ts
index 3d68427713..cf9dfb5a85 100644
--- a/packages/tools/e2e-tests/src/tests/tools-app/faucet.spec.ts
+++ b/packages/tools/e2e-tests/src/tests/tools-app/faucet.spec.ts
@@ -13,6 +13,7 @@ test('Fund existing account @mocks', async ({ page, toolsApp, mockHelper }) => {
await test.step('Fund account on chain 0.', async () => {
await mockHelper.mockResponse('**/send', sendMocks);
+ await toolsApp.faucetPage.asidePanel.navigateTo('Fund Existing Account');
await toolsApp.faucetPage.fundExistingAccount(accountsData.publicKey, '0');
await mockHelper.mockResponse('**/poll', pollInProgress);
diff --git a/packages/tools/e2e-tests/tsconfig.json b/packages/tools/e2e-tests/tsconfig.json
index 54d287b65c..9f4c7c2b4c 100644
--- a/packages/tools/e2e-tests/tsconfig.json
+++ b/packages/tools/e2e-tests/tsconfig.json
@@ -1,17 +1,8 @@
{
"extends": "./node_modules/@kadena-dev/shared-config/tsconfig-base.json",
"compilerOptions": {
- "types": ["node"],
- "target": "ES2020",
- "skipLibCheck": true,
- "noEmit": true,
- "incremental": true,
- "moduleResolution": "node",
- "resolveJsonModule": true,
- "isolatedModules": true,
- "declaration": false, // fixes pnpm issue: https://github.com/microsoft/TypeScript/issues/42873
- "declarationMap": false,
- "jsx": "preserve",
- "allowJs": true
- }
+ "rootDir": ".",
+ "types": ["node"]
+ },
+ "include": ["**/*.ts", "/**/*.tsx"]
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 438fd6341f..7eaed42426 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -159,9 +159,6 @@ importers:
'@percy/cli':
specifier: ~1.24.0
version: 1.24.2
- '@percy/cypress':
- specifier: ~3.1.2
- version: 3.1.2(cypress@12.12.0)
'@rushstack/eslint-config':
specifier: ~3.3.0
version: 3.3.0(eslint@8.45.0)(typescript@5.2.2)
@@ -231,9 +228,6 @@ importers:
chromatic:
specifier: 6.20.0
version: 6.20.0
- cypress:
- specifier: ~12.12.0
- version: 12.12.0
dotenv:
specifier: ~16.0.3
version: 16.0.3
@@ -1929,20 +1923,26 @@ importers:
specifier: workspace:*
version: link:../shared-config
'@playwright/test':
- specifier: ^1.39.0
- version: 1.39.0
+ specifier: ^1.40.1
+ version: 1.40.1
'@rushstack/eslint-config':
specifier: ~3.3.0
version: 3.3.0(eslint@8.45.0)(typescript@5.2.2)
'@types/node':
specifier: ^18.17.14
version: 18.17.14
+ directory-tree:
+ specifier: 3.5.1
+ version: 3.5.1
eslint:
specifier: ^8.45.0
version: 8.45.0
eslint-plugin-playwright:
specifier: 0.16.0
version: 0.16.0(eslint@8.45.0)
+ parse-md:
+ specifier: 2.0.5
+ version: 2.0.5
prettier:
specifier: ~3.0.3
version: 3.0.3
@@ -4163,39 +4163,6 @@ packages:
'@jridgewell/trace-mapping': 0.3.9
dev: true
- /@cypress/request@2.88.12:
- resolution: {integrity: sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA==}
- engines: {node: '>= 6'}
- dependencies:
- aws-sign2: 0.7.0
- aws4: 1.12.0
- caseless: 0.12.0
- combined-stream: 1.0.8
- extend: 3.0.2
- forever-agent: 0.6.1
- form-data: 2.3.3
- http-signature: 1.3.6
- is-typedarray: 1.0.0
- isstream: 0.1.2
- json-stringify-safe: 5.0.1
- mime-types: 2.1.35
- performance-now: 2.1.0
- qs: 6.10.4
- safe-buffer: 5.2.1
- tough-cookie: 4.1.3
- tunnel-agent: 0.6.0
- uuid: 8.3.2
- dev: true
-
- /@cypress/xvfb@1.2.4(supports-color@8.1.1):
- resolution: {integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==}
- dependencies:
- debug: 3.2.7(supports-color@8.1.1)
- lodash.once: 4.1.1
- transitivePeerDependencies:
- - supports-color
- dev: true
-
/@design-sync/cli@0.11.1(prettier@3.0.3):
resolution: {integrity: sha512-e5SzZL+qI61zT1xN/bbsdqv6h5quZtr6y9Yel5QgRY+ayJolAZBU1Gxoe4qRQc5tKpnCl/frrPmCCpM1fKQx7A==}
hasBin: true
@@ -6608,15 +6575,6 @@ packages:
- utf-8-validate
dev: true
- /@percy/cypress@3.1.2(cypress@12.12.0):
- resolution: {integrity: sha512-JXrGDZbqwkzQd2h5T5D7PvqoucNaiMh4ChPp8cLQiEtRuLHta9nf1lEuXH+jnatGL2j+3jJFIHJ0L7XrgVnvQA==}
- peerDependencies:
- cypress: '>=3'
- dependencies:
- '@percy/sdk-utils': 1.27.4
- cypress: 12.12.0
- dev: true
-
/@percy/dom@1.24.2:
resolution: {integrity: sha512-C5nRMpHNGKS8xPflmYJCO2x6870wiR7TagMx+KOiIHfMEx/4LZhwPP4dkVS4WGeCfcKHOhi8BkJnhuSbL7WWDw==}
dev: true
@@ -6631,11 +6589,6 @@ packages:
engines: {node: '>=14'}
dev: true
- /@percy/sdk-utils@1.27.4:
- resolution: {integrity: sha512-vhPcdtmJlvTYJ5VOqiVzo02ujdtBFNw1/Bj+2ybiZgn7PkCDPFcITfXoWWPea319EIibGC4ZHjWHctRBgtW/tQ==}
- engines: {node: '>=14'}
- dev: true
-
/@pkgjs/parseargs@0.11.0:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
@@ -6652,12 +6605,12 @@ packages:
picocolors: 1.0.0
tslib: 2.6.2
- /@playwright/test@1.39.0:
- resolution: {integrity: sha512-3u1iFqgzl7zr004bGPYiN/5EZpRUSFddQBra8Rqll5N0/vfpqlP9I9EXqAoGacuAbX6c9Ulg/Cjqglp5VkK6UQ==}
+ /@playwright/test@1.40.1:
+ resolution: {integrity: sha512-EaaawMTOeEItCRvfmkI9v6rBkF1svM8wjl/YPRrg2N2Wmp+4qJYkWtJsbew1szfKKDm6fPLy4YAanBhIlf9dWw==}
engines: {node: '>=16'}
hasBin: true
dependencies:
- playwright: 1.39.0
+ playwright: 1.40.1
dev: true
/@pmmmwh/react-refresh-webpack-plugin@0.5.11(react-refresh@0.11.0)(webpack@5.88.2):
@@ -11368,6 +11321,7 @@ packages:
/@types/node@14.18.63:
resolution: {integrity: sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==}
+ dev: false
/@types/node@16.18.48:
resolution: {integrity: sha512-mlaecDKQ7rIZrYD7iiKNdzFb6e/qD5I9U1rAhq+Fd+DWvYVs+G2kv74UFHmSOlg5+i/vF3XxuR522V4u8BqO+Q==}
@@ -11482,14 +11436,6 @@ packages:
'@types/node': 18.17.14
dev: true
- /@types/sinonjs__fake-timers@8.1.1:
- resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==}
- dev: true
-
- /@types/sizzle@2.3.8:
- resolution: {integrity: sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==}
- dev: true
-
/@types/statuses@2.0.3:
resolution: {integrity: sha512-NwCYScf83RIwCyi5/9cXocrJB//xrqMh5PMw3mYTSFGaI3DuVjBLfO/PCk7QVAC3Da8b9NjxNmTO9Aj9T3rl/Q==}
dev: true
@@ -13346,6 +13292,16 @@ packages:
resolution: {integrity: sha512-fExL2kFDC1Q2DUOx3whE/9KoN66IzkY4b4zUHUBFM1ojEYjZZYDcUW3bek/ufGionX9giIKDC5redH2IlGqcQQ==}
dev: true
+ /array-back@3.1.0:
+ resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /array-back@4.0.2:
+ resolution: {integrity: sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==}
+ engines: {node: '>=8'}
+ dev: true
+
/array-buffer-byte-length@1.0.0:
resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==}
dependencies:
@@ -13458,12 +13414,6 @@ packages:
/asap@2.0.6:
resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
- /asn1@0.2.6:
- resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==}
- dependencies:
- safer-buffer: 2.1.2
- dev: true
-
/asn1js@3.0.5:
resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==}
engines: {node: '>=12.0.0'}
@@ -13473,11 +13423,6 @@ packages:
tslib: 2.6.2
dev: true
- /assert-plus@1.0.0:
- resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==}
- engines: {node: '>=0.8'}
- dev: true
-
/assert@2.0.0:
resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==}
dependencies:
@@ -13534,11 +13479,6 @@ packages:
/asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
- /at-least-node@1.0.0:
- resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
- engines: {node: '>= 4.0.0'}
- dev: true
-
/atomic-sleep@1.0.0:
resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
engines: {node: '>=8.0.0'}
@@ -13614,14 +13554,6 @@ packages:
resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
engines: {node: '>= 0.4'}
- /aws-sign2@0.7.0:
- resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==}
- dev: true
-
- /aws4@1.12.0:
- resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==}
- dev: true
-
/axe-core@4.7.2:
resolution: {integrity: sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==}
engines: {node: '>=4'}
@@ -13813,12 +13745,6 @@ packages:
engines: {node: '>=6.0.0'}
dev: false
- /bcrypt-pbkdf@1.0.2:
- resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==}
- dependencies:
- tweetnacl: 0.14.5
- dev: true
-
/before-after-hook@2.2.3:
resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==}
dev: true
@@ -13873,10 +13799,6 @@ packages:
resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==}
dev: false
- /blob-util@2.0.2:
- resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==}
- dev: true
-
/bluebird@3.7.2:
resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
@@ -14085,11 +14007,6 @@ packages:
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
engines: {node: '>=8'}
- /cachedir@2.4.0:
- resolution: {integrity: sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==}
- engines: {node: '>=6'}
- dev: true
-
/call-bind@1.0.5:
resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==}
dependencies:
@@ -14184,10 +14101,6 @@ packages:
engines: {node: '>=4'}
dev: true
- /caseless@0.12.0:
- resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
- dev: true
-
/catharsis@0.9.0:
resolution: {integrity: sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==}
engines: {node: '>= 10'}
@@ -14617,6 +14530,26 @@ packages:
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
dev: false
+ /command-line-args@5.2.1:
+ resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==}
+ engines: {node: '>=4.0.0'}
+ dependencies:
+ array-back: 3.1.0
+ find-replace: 3.0.0
+ lodash.camelcase: 4.3.0
+ typical: 4.0.0
+ dev: true
+
+ /command-line-usage@6.1.3:
+ resolution: {integrity: sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==}
+ engines: {node: '>=8.0.0'}
+ dependencies:
+ array-back: 4.0.2
+ chalk: 2.4.2
+ table-layout: 1.0.2
+ typical: 5.2.0
+ dev: true
+
/commander@11.0.0:
resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==}
engines: {node: '>=16'}
@@ -14859,10 +14792,6 @@ packages:
resolution: {integrity: sha512-lo0kOocUlLKmm6kv/FswQL8zbkH7mVsLJ/FULClOhv8WRVmKLVcs6XPNQAzstfeJTCHMyButEwG+z1kHxHoDZw==}
requiresBuild: true
- /core-util-is@1.0.2:
- resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
- dev: true
-
/core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
@@ -15089,56 +15018,6 @@ packages:
array-find-index: 1.0.2
dev: false
- /cypress@12.12.0:
- resolution: {integrity: sha512-UU5wFQ7SMVCR/hyKok/KmzG6fpZgBHHfrXcHzDmPHWrT+UUetxFzQgt7cxCszlwfozckzwkd22dxMwl/vNkWRw==}
- engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0}
- hasBin: true
- requiresBuild: true
- dependencies:
- '@cypress/request': 2.88.12
- '@cypress/xvfb': 1.2.4(supports-color@8.1.1)
- '@types/node': 14.18.63
- '@types/sinonjs__fake-timers': 8.1.1
- '@types/sizzle': 2.3.8
- arch: 2.2.0
- blob-util: 2.0.2
- bluebird: 3.7.2
- buffer: 5.7.1
- cachedir: 2.4.0
- chalk: 4.1.2
- check-more-types: 2.24.0
- cli-cursor: 3.1.0
- cli-table3: 0.6.3
- commander: 6.2.1
- common-tags: 1.8.2
- dayjs: 1.11.10
- debug: 4.3.4(supports-color@8.1.1)
- enquirer: 2.4.1
- eventemitter2: 6.4.7
- execa: 4.1.0
- executable: 4.1.1
- extract-zip: 2.0.1(supports-color@8.1.1)
- figures: 3.2.0
- fs-extra: 9.1.0
- getos: 3.2.1
- is-ci: 3.0.1
- is-installed-globally: 0.4.0
- lazy-ass: 1.6.0
- listr2: 3.14.0(enquirer@2.4.1)
- lodash: 4.17.21
- log-symbols: 4.1.0
- minimist: 1.2.8
- ospath: 1.2.2
- pretty-bytes: 5.6.0
- proxy-from-env: 1.0.0
- request-progress: 3.0.0
- semver: 7.5.4
- supports-color: 8.1.1
- tmp: 0.2.1
- untildify: 4.0.0
- yauzl: 2.10.0
- dev: true
-
/d@1.0.1:
resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==}
dependencies:
@@ -15149,13 +15028,6 @@ packages:
/damerau-levenshtein@1.0.8:
resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
- /dashdash@1.14.1:
- resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==}
- engines: {node: '>=0.10'}
- dependencies:
- assert-plus: 1.0.0
- dev: true
-
/data-uri-to-buffer@3.0.1:
resolution: {integrity: sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==}
engines: {node: '>= 6'}
@@ -15191,10 +15063,6 @@ packages:
time-zone: 1.0.0
dev: false
- /dayjs@1.11.10:
- resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==}
- dev: true
-
/debounce@1.2.1:
resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==}
dev: true
@@ -15210,7 +15078,7 @@ packages:
ms: 2.0.0
dev: true
- /debug@3.2.7(supports-color@8.1.1):
+ /debug@3.2.7:
resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
peerDependencies:
supports-color: '*'
@@ -15219,7 +15087,6 @@ packages:
optional: true
dependencies:
ms: 2.1.3
- supports-color: 8.1.1
/debug@4.3.4(supports-color@5.5.0):
resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
@@ -15233,19 +15100,6 @@ packages:
ms: 2.1.2
supports-color: 5.5.0
- /debug@4.3.4(supports-color@8.1.1):
- resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
- engines: {node: '>=6.0'}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
- dependencies:
- ms: 2.1.2
- supports-color: 8.1.1
- dev: true
-
/decamelize-keys@1.1.1:
resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==}
engines: {node: '>=0.10.0'}
@@ -15528,6 +15382,15 @@ packages:
dependencies:
path-type: 4.0.0
+ /directory-tree@3.5.1:
+ resolution: {integrity: sha512-HqjZ49fDzUnKYUhHxVw9eKBqbQ+lL0v4kSBInlDlaktmLtGoV9tC54a6A0ZfYeIrkMHWTE6MwwmUXP477+UEKQ==}
+ engines: {node: '>=10.0'}
+ hasBin: true
+ dependencies:
+ command-line-args: 5.2.1
+ command-line-usage: 6.1.3
+ dev: true
+
/discontinuous-range@1.0.0:
resolution: {integrity: sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==}
dev: false
@@ -15689,13 +15552,6 @@ packages:
wcwidth: 1.0.1
dev: true
- /ecc-jsbn@0.1.2:
- resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==}
- dependencies:
- jsbn: 0.1.1
- safer-buffer: 2.1.2
- dev: true
-
/ecdsa-sig-formatter@1.0.11:
resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==}
dependencies:
@@ -16101,7 +15957,7 @@ packages:
/eslint-import-resolver-node@0.3.7:
resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==}
dependencies:
- debug: 3.2.7(supports-color@8.1.1)
+ debug: 3.2.7
is-core-module: 2.13.0
resolve: 1.22.4
transitivePeerDependencies:
@@ -16222,7 +16078,7 @@ packages:
optional: true
dependencies:
'@typescript-eslint/parser': 5.23.0(eslint@8.45.0)(typescript@5.2.2)
- debug: 3.2.7(supports-color@8.1.1)
+ debug: 3.2.7
eslint: 8.45.0
eslint-import-resolver-node: 0.3.7
eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.23.0)(eslint-plugin-import@2.27.5)(eslint@8.45.0)
@@ -16251,7 +16107,7 @@ packages:
optional: true
dependencies:
'@typescript-eslint/parser': 5.59.11(eslint@8.45.0)(typescript@5.2.2)
- debug: 3.2.7(supports-color@8.1.1)
+ debug: 3.2.7
eslint: 8.45.0
eslint-import-resolver-node: 0.3.7
eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.11)(eslint-plugin-import@2.27.5)(eslint@8.45.0)
@@ -16281,7 +16137,7 @@ packages:
optional: true
dependencies:
'@typescript-eslint/parser': 5.62.0(eslint@8.45.0)(typescript@5.2.2)
- debug: 3.2.7(supports-color@8.1.1)
+ debug: 3.2.7
eslint: 8.45.0
eslint-import-resolver-node: 0.3.7
eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.62.0)(eslint-plugin-import@2.27.5)(eslint@8.45.0)
@@ -16302,7 +16158,7 @@ packages:
array-includes: 3.1.6
array.prototype.flat: 1.3.1
array.prototype.flatmap: 1.3.1
- debug: 3.2.7(supports-color@8.1.1)
+ debug: 3.2.7
doctrine: 2.1.0
eslint: 8.45.0
eslint-import-resolver-node: 0.3.7
@@ -16334,7 +16190,7 @@ packages:
array-includes: 3.1.6
array.prototype.flat: 1.3.1
array.prototype.flatmap: 1.3.1
- debug: 3.2.7(supports-color@8.1.1)
+ debug: 3.2.7
doctrine: 2.1.0
eslint: 8.45.0
eslint-import-resolver-node: 0.3.7
@@ -16367,7 +16223,7 @@ packages:
array-includes: 3.1.6
array.prototype.flat: 1.3.1
array.prototype.flatmap: 1.3.1
- debug: 3.2.7(supports-color@8.1.1)
+ debug: 3.2.7
doctrine: 2.1.0
eslint: 8.45.0
eslint-import-resolver-node: 0.3.7
@@ -16906,10 +16762,6 @@ packages:
engines: {node: '>=6'}
dev: false
- /eventemitter2@6.4.7:
- resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==}
- dev: true
-
/eventemitter2@6.4.9:
resolution: {integrity: sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==}
dev: false
@@ -16940,21 +16792,6 @@ packages:
strip-eof: 1.0.0
dev: true
- /execa@4.1.0:
- resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==}
- engines: {node: '>=10'}
- dependencies:
- cross-spawn: 7.0.3
- get-stream: 5.2.0
- human-signals: 1.1.1
- is-stream: 2.0.1
- merge-stream: 2.0.0
- npm-run-path: 4.0.1
- onetime: 5.1.2
- signal-exit: 3.0.7
- strip-final-newline: 2.0.0
- dev: true
-
/execa@5.1.1:
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
engines: {node: '>=10'}
@@ -16998,13 +16835,6 @@ packages:
strip-final-newline: 3.0.0
dev: true
- /executable@4.1.1:
- resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==}
- engines: {node: '>=4'}
- dependencies:
- pify: 2.3.0
- dev: true
-
/express@4.18.2:
resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==}
engines: {node: '>= 0.10.0'}
@@ -17096,25 +16926,6 @@ packages:
- supports-color
dev: true
- /extract-zip@2.0.1(supports-color@8.1.1):
- resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==}
- engines: {node: '>= 10.17.0'}
- hasBin: true
- dependencies:
- debug: 4.3.4(supports-color@8.1.1)
- get-stream: 5.2.0
- yauzl: 2.10.0
- optionalDependencies:
- '@types/yauzl': 2.10.3
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /extsprintf@1.3.0:
- resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==}
- engines: {'0': node >=0.6.0}
- dev: true
-
/fast-check@3.12.1:
resolution: {integrity: sha512-aRN6WrO+q3TZV8CjXnpebx9bTHrpYIOVi6v3ttxciZiWqS739yy8b1oVx+qNEyV1b8RdVjlp/+miTY6yAp90HA==}
engines: {node: '>=8.0.0'}
@@ -17376,6 +17187,13 @@ packages:
pkg-dir: 7.0.0
dev: true
+ /find-replace@3.0.0:
+ resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==}
+ engines: {node: '>=4.0.0'}
+ dependencies:
+ array-back: 3.1.0
+ dev: true
+
/find-up@3.0.0:
resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
engines: {node: '>=6'}
@@ -17488,10 +17306,6 @@ packages:
cross-spawn: 7.0.3
signal-exit: 4.1.0
- /forever-agent@0.6.1:
- resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==}
- dev: true
-
/fork-ts-checker-webpack-plugin@8.0.0(typescript@5.2.2)(webpack@5.88.2):
resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==}
engines: {node: '>=12.13.0', yarn: '>=1.0.0'}
@@ -17515,15 +17329,6 @@ packages:
webpack: 5.88.2(@swc/core@1.3.80)(esbuild@0.18.20)
dev: true
- /form-data@2.3.3:
- resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==}
- engines: {node: '>= 0.12'}
- dependencies:
- asynckit: 0.4.0
- combined-stream: 1.0.8
- mime-types: 2.1.35
- dev: true
-
/form-data@2.5.1:
resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==}
engines: {node: '>= 0.12'}
@@ -17637,16 +17442,6 @@ packages:
universalify: 0.1.2
dev: true
- /fs-extra@9.1.0:
- resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
- engines: {node: '>=10'}
- dependencies:
- at-least-node: 1.0.0
- graceful-fs: 4.2.11
- jsonfile: 6.1.0
- universalify: 2.0.0
- dev: true
-
/fs-minipass@2.1.0:
resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
engines: {node: '>= 8'}
@@ -17828,18 +17623,6 @@ packages:
resolve-pkg-maps: 1.0.0
dev: true
- /getos@3.2.1:
- resolution: {integrity: sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==}
- dependencies:
- async: 3.2.4
- dev: true
-
- /getpass@0.1.7:
- resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==}
- dependencies:
- assert-plus: 1.0.0
- dev: true
-
/giget@1.1.3:
resolution: {integrity: sha512-zHuCeqtfgqgDwvXlR84UNgnJDuUHQcNI5OqWqFxxuk2BshuKbYhJWdxBsEo4PvKqoGh23lUAIvBNpChMLv7/9Q==}
hasBin: true
@@ -17947,13 +17730,6 @@ packages:
minimatch: 5.1.6
once: 1.4.0
- /global-dirs@3.0.1:
- resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==}
- engines: {node: '>=10'}
- dependencies:
- ini: 2.0.0
- dev: true
-
/global@4.4.0:
resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==}
dependencies:
@@ -18516,15 +18292,6 @@ packages:
- supports-color
dev: true
- /http-signature@1.3.6:
- resolution: {integrity: sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==}
- engines: {node: '>=0.10'}
- dependencies:
- assert-plus: 1.0.0
- jsprim: 2.0.2
- sshpk: 1.18.0
- dev: true
-
/http2-client@1.3.5:
resolution: {integrity: sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==}
dev: false
@@ -18562,11 +18329,6 @@ packages:
resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==}
dev: true
- /human-signals@1.1.1:
- resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==}
- engines: {node: '>=8.12.0'}
- dev: true
-
/human-signals@2.1.0:
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
engines: {node: '>=10.17.0'}
@@ -18702,11 +18464,6 @@ packages:
resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
dev: true
- /ini@2.0.0:
- resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==}
- engines: {node: '>=10'}
- dev: true
-
/ini@4.1.1:
resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
@@ -18996,14 +18753,6 @@ packages:
dependencies:
is-docker: 3.0.0
- /is-installed-globally@0.4.0:
- resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==}
- engines: {node: '>=10'}
- dependencies:
- global-dirs: 3.0.1
- is-path-inside: 3.0.3
- dev: true
-
/is-interactive@1.0.0:
resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
engines: {node: '>=8'}
@@ -19269,10 +19018,6 @@ packages:
ws: 8.15.1
dev: true
- /isstream@0.1.2:
- resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==}
- dev: true
-
/istanbul-lib-coverage@3.2.0:
resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==}
engines: {node: '>=8'}
@@ -19476,10 +19221,6 @@ packages:
xmlcreate: 2.0.4
dev: false
- /jsbn@0.1.1:
- resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==}
- dev: true
-
/jscodeshift@0.14.0(@babel/preset-env@7.22.9):
resolution: {integrity: sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==}
hasBin: true
@@ -19612,10 +19353,6 @@ packages:
/json-schema-traverse@1.0.0:
resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
- /json-schema@0.4.0:
- resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
- dev: true
-
/json-stable-stringify-without-jsonify@1.0.1:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
@@ -19678,16 +19415,6 @@ packages:
engines: {node: '>=10.0'}
dev: true
- /jsprim@2.0.2:
- resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==}
- engines: {'0': node >=0.6.0}
- dependencies:
- assert-plus: 1.0.0
- extsprintf: 1.3.0
- json-schema: 0.4.0
- verror: 1.10.0
- dev: true
-
/jsx-ast-utils@3.3.5:
resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
engines: {node: '>=4.0'}
@@ -19851,26 +19578,6 @@ packages:
uc.micro: 1.0.6
dev: false
- /listr2@3.14.0(enquirer@2.4.1):
- resolution: {integrity: sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==}
- engines: {node: '>=10.0.0'}
- peerDependencies:
- enquirer: '>= 2.3.0 < 3'
- peerDependenciesMeta:
- enquirer:
- optional: true
- dependencies:
- cli-truncate: 2.1.0
- colorette: 2.0.20
- enquirer: 2.4.1
- log-update: 4.0.0
- p-map: 4.0.0
- rfdc: 1.3.0
- rxjs: 7.8.1
- through: 2.3.8
- wrap-ansi: 7.0.0
- dev: true
-
/listr2@4.0.5:
resolution: {integrity: sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==}
engines: {node: '>=12'}
@@ -19993,7 +19700,6 @@ packages:
/lodash.camelcase@4.3.0:
resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
- dev: false
/lodash.curry@4.1.1:
resolution: {integrity: sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==}
@@ -20024,10 +19730,6 @@ packages:
resolution: {integrity: sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==}
dev: false
- /lodash.once@4.1.1:
- resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==}
- dev: true
-
/lodash.startcase@4.4.0:
resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
dev: true
@@ -22344,10 +22046,6 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
- /ospath@1.2.2:
- resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==}
- dev: true
-
/outdent@0.5.0:
resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==}
dev: true
@@ -22536,6 +22234,12 @@ packages:
type-fest: 3.13.1
dev: false
+ /parse-md@2.0.5:
+ resolution: {integrity: sha512-7ZhRqwFRTAXyr/PcXSafJpx3g7ZUs5vPvoYww4H4YJuDFDK5LLvHGhP13Kp5d0tAHHxIBITERToBS90YWN0/VQ==}
+ dependencies:
+ js-yaml: 3.14.1
+ dev: true
+
/parse-ms@3.0.0:
resolution: {integrity: sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==}
engines: {node: '>=12'}
@@ -22717,10 +22421,6 @@ packages:
resolution: {integrity: sha512-dzalfutyP3e/FOpdlhVryN4AJ5XDVauVWxybSkLZmakFE2sS3y3pc4JnSprw8tGmHvkaG5Edr5T7LBTZ+WWU2g==}
dev: false
- /performance-now@2.1.0:
- resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==}
- dev: true
-
/periscopic@3.1.0:
resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==}
dependencies:
@@ -22852,18 +22552,18 @@ packages:
find-up: 3.0.0
dev: true
- /playwright-core@1.39.0:
- resolution: {integrity: sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw==}
+ /playwright-core@1.40.1:
+ resolution: {integrity: sha512-+hkOycxPiV534c4HhpfX6yrlawqVUzITRKwHAmYfmsVreltEl6fAZJ3DPfLMOODw0H3s1Itd6MDCWmP1fl/QvQ==}
engines: {node: '>=16'}
hasBin: true
dev: true
- /playwright@1.39.0:
- resolution: {integrity: sha512-naE5QT11uC/Oiq0BwZ50gDmy8c8WLPRTEWuSSFVG2egBka/1qMoSqYQcROMT9zLwJ86oPofcTH2jBY/5wWOgIw==}
+ /playwright@1.40.1:
+ resolution: {integrity: sha512-2eHI7IioIpQ0bS1Ovg/HszsN/XKNwEG1kbzSDDmADpclKc7CyqkHw7Mg2JCz/bbCxg25QUPcjksoMW7JcIFQmw==}
engines: {node: '>=16'}
hasBin: true
dependencies:
- playwright-core: 1.39.0
+ playwright-core: 1.40.1
optionalDependencies:
fsevents: 2.3.2
dev: true
@@ -23088,11 +22788,6 @@ packages:
engines: {node: '>=14'}
hasBin: true
- /pretty-bytes@5.6.0:
- resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==}
- engines: {node: '>=6'}
- dev: true
-
/pretty-error@4.0.0:
resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==}
dependencies:
@@ -23268,10 +22963,6 @@ packages:
resolution: {integrity: sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA==}
dev: false
- /proxy-from-env@1.0.0:
- resolution: {integrity: sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==}
- dev: true
-
/proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
dev: true
@@ -23371,13 +23062,6 @@ packages:
yargs: 15.4.1
dev: false
- /qs@6.10.4:
- resolution: {integrity: sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==}
- engines: {node: '>=0.6'}
- dependencies:
- side-channel: 1.0.4
- dev: true
-
/qs@6.11.0:
resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
engines: {node: '>=0.6'}
@@ -24048,6 +23732,11 @@ packages:
- webpack
dev: false
+ /reduce-flatten@2.0.0:
+ resolution: {integrity: sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==}
+ engines: {node: '>=6'}
+ dev: true
+
/reftools@1.1.9:
resolution: {integrity: sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==}
dev: false
@@ -24355,12 +24044,6 @@ packages:
strip-ansi: 6.0.1
dev: true
- /request-progress@3.0.0:
- resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==}
- dependencies:
- throttleit: 1.0.1
- dev: true
-
/require-directory@2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'}
@@ -25133,22 +24816,6 @@ packages:
/sprintf-js@1.0.3:
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
- /sshpk@1.18.0:
- resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==}
- engines: {node: '>=0.10.0'}
- hasBin: true
- dependencies:
- asn1: 0.2.6
- assert-plus: 1.0.0
- bcrypt-pbkdf: 1.0.2
- dashdash: 1.14.1
- ecc-jsbn: 0.1.2
- getpass: 0.1.7
- jsbn: 0.1.1
- safer-buffer: 2.1.2
- tweetnacl: 0.14.5
- dev: true
-
/ssri@10.0.5:
resolution: {integrity: sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
@@ -25582,7 +25249,7 @@ packages:
dependencies:
component-emitter: 1.3.1
cookiejar: 2.1.4
- debug: 3.2.7(supports-color@8.1.1)
+ debug: 3.2.7
extend: 3.0.2
form-data: 2.5.1
formidable: 1.2.6
@@ -25767,6 +25434,16 @@ packages:
resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
dev: false
+ /table-layout@1.0.2:
+ resolution: {integrity: sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==}
+ engines: {node: '>=8.0.0'}
+ dependencies:
+ array-back: 4.0.2
+ deep-extend: 0.6.0
+ typical: 5.2.0
+ wordwrapjs: 4.0.1
+ dev: true
+
/table@6.8.1:
resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==}
engines: {node: '>=10.0.0'}
@@ -25951,10 +25628,6 @@ packages:
engines: {node: '>=10'}
dev: false
- /throttleit@1.0.1:
- resolution: {integrity: sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==}
- dev: true
-
/through2@2.0.5:
resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
dependencies:
@@ -26019,6 +25692,7 @@ packages:
engines: {node: '>=8.17.0'}
dependencies:
rimraf: 3.0.2
+ dev: false
/tmpl@1.0.5:
resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
@@ -26278,12 +25952,6 @@ packages:
yargs: 17.7.2
dev: true
- /tunnel-agent@0.6.0:
- resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
- dependencies:
- safe-buffer: 5.2.1
- dev: true
-
/turbo-darwin-64@1.10.16:
resolution: {integrity: sha512-+Jk91FNcp9e9NCLYlvDDlp2HwEDp14F9N42IoW3dmHI5ZkGSXzalbhVcrx3DOox3QfiNUHxzWg4d7CnVNCuuMg==}
cpu: [x64]
@@ -26344,10 +26012,6 @@ packages:
turbo-windows-arm64: 1.10.16
dev: true
- /tweetnacl@0.14.5:
- resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==}
- dev: true
-
/tweetnacl@1.0.3:
resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==}
dev: false
@@ -26503,6 +26167,16 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
+ /typical@4.0.0:
+ resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /typical@5.2.0:
+ resolution: {integrity: sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==}
+ engines: {node: '>=8'}
+ dev: true
+
/ua-parser-js@1.0.37:
resolution: {integrity: sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==}
dev: true
@@ -26969,11 +26643,6 @@ packages:
engines: {node: '>= 0.4.0'}
dev: true
- /uuid@8.3.2:
- resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
- hasBin: true
- dev: true
-
/uuid@9.0.0:
resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==}
hasBin: true
@@ -27054,15 +26723,6 @@ packages:
engines: {node: '>= 0.8'}
dev: true
- /verror@1.10.0:
- resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==}
- engines: {'0': node >=0.6.0}
- dependencies:
- assert-plus: 1.0.0
- core-util-is: 1.0.2
- extsprintf: 1.3.0
- dev: true
-
/version-selector-type@3.0.0:
resolution: {integrity: sha512-PSvMIZS7C1MuVNBXl/CDG2pZq8EXy/NW2dHIdm3bVP5N0PC8utDK8ttXLXj44Gn3J0lQE3U7Mpm1estAOd+eiA==}
engines: {node: '>=10.13'}
@@ -27849,6 +27509,14 @@ packages:
resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
dev: true
+ /wordwrapjs@4.0.1:
+ resolution: {integrity: sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==}
+ engines: {node: '>=8.0.0'}
+ dependencies:
+ reduce-flatten: 2.0.0
+ typical: 5.2.0
+ dev: true
+
/wrap-ansi@6.2.0:
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
engines: {node: '>=8'}